@mysten/dapp-kit 0.13.2 → 0.14.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 +16 -0
- package/README.md +5 -4
- package/dist/cjs/components/AccountDropdownMenu.js +13 -8
- package/dist/cjs/components/AccountDropdownMenu.js.map +2 -2
- package/dist/cjs/components/ConnectButton.js +19 -9
- package/dist/cjs/components/ConnectButton.js.map +2 -2
- package/dist/cjs/components/SuiClientProvider.d.ts +1 -1
- package/dist/cjs/components/SuiClientProvider.js +1 -1
- package/dist/cjs/components/SuiClientProvider.js.map +1 -1
- package/dist/cjs/components/WalletProvider.d.ts +3 -3
- package/dist/cjs/components/WalletProvider.js +104 -33
- package/dist/cjs/components/WalletProvider.js.map +2 -2
- package/dist/cjs/components/connect-modal/ConnectModal.js +10 -4
- package/dist/cjs/components/connect-modal/ConnectModal.js.map +2 -2
- package/dist/cjs/components/connect-modal/wallet-list/WalletList.js.map +2 -2
- package/dist/cjs/constants/walletDefaults.d.ts +1 -1
- package/dist/cjs/constants/walletDefaults.js +4 -2
- package/dist/cjs/constants/walletDefaults.js.map +2 -2
- package/dist/cjs/constants/walletMutationKeys.d.ts +3 -2
- package/dist/cjs/constants/walletMutationKeys.js +4 -3
- package/dist/cjs/constants/walletMutationKeys.js.map +2 -2
- package/dist/cjs/hooks/networkConfig.d.ts +1 -1
- package/dist/cjs/hooks/networkConfig.js +1 -1
- package/dist/cjs/hooks/networkConfig.js.map +1 -1
- package/dist/cjs/hooks/useResolveSuiNSNames.d.ts +1 -1
- package/dist/cjs/hooks/useResolveSuiNSNames.js +1 -1
- package/dist/cjs/hooks/useResolveSuiNSNames.js.map +1 -1
- package/dist/cjs/hooks/useSuiClient.d.ts +1 -1
- package/dist/cjs/hooks/useSuiClient.js +1 -1
- package/dist/cjs/hooks/useSuiClient.js.map +1 -1
- package/dist/cjs/hooks/useSuiClientInfiniteQuery.d.ts +1 -1
- package/dist/cjs/hooks/useSuiClientInfiniteQuery.js +1 -1
- package/dist/cjs/hooks/useSuiClientInfiniteQuery.js.map +1 -1
- package/dist/cjs/hooks/useSuiClientMutation.js +1 -1
- package/dist/cjs/hooks/useSuiClientMutation.js.map +1 -1
- package/dist/cjs/hooks/useSuiClientQueries.js +1 -1
- package/dist/cjs/hooks/useSuiClientQueries.js.map +1 -1
- package/dist/cjs/hooks/useSuiClientQuery.d.ts +1 -1
- package/dist/cjs/hooks/useSuiClientQuery.js +1 -1
- package/dist/cjs/hooks/useSuiClientQuery.js.map +1 -1
- package/dist/cjs/hooks/wallet/useAutoConnectWallet.js +17 -7
- package/dist/cjs/hooks/wallet/useAutoConnectWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useConnectWallet.js +10 -4
- package/dist/cjs/hooks/wallet/useConnectWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useCurrentWallet.d.ts +3 -0
- package/dist/cjs/hooks/wallet/useCurrentWallet.js +7 -3
- package/dist/cjs/hooks/wallet/useCurrentWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useDisconnectWallet.js +11 -6
- package/dist/cjs/hooks/wallet/useDisconnectWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useReportTransactionEffects.d.ts +15 -0
- package/dist/cjs/hooks/wallet/{useSignTransactionBlock.js → useReportTransactionEffects.js} +37 -37
- package/dist/cjs/hooks/wallet/useReportTransactionEffects.js.map +7 -0
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransaction.d.ts +29 -0
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransaction.js +248 -0
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransaction.js.map +7 -0
- package/dist/cjs/hooks/wallet/useSignPersonalMessage.js +11 -6
- package/dist/cjs/hooks/wallet/useSignPersonalMessage.js.map +2 -2
- package/dist/cjs/hooks/wallet/useSignTransaction.d.ts +18 -0
- package/dist/cjs/hooks/wallet/{useSignAndExecuteTransactionBlock.js → useSignTransaction.js} +83 -47
- package/dist/cjs/hooks/wallet/useSignTransaction.js.map +7 -0
- package/dist/cjs/hooks/wallet/useStashedWallet.js +17 -7
- package/dist/cjs/hooks/wallet/useStashedWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useSwitchAccount.js +11 -6
- package/dist/cjs/hooks/wallet/useSwitchAccount.js.map +2 -2
- package/dist/cjs/hooks/wallet/useUnsafeBurnerWallet.js +64 -9
- package/dist/cjs/hooks/wallet/useUnsafeBurnerWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useWalletPropertiesChanged.js +7 -3
- package/dist/cjs/hooks/wallet/useWalletPropertiesChanged.js.map +2 -2
- package/dist/cjs/hooks/wallet/useWalletsChanged.d.ts +1 -1
- package/dist/cjs/hooks/wallet/useWalletsChanged.js +7 -7
- package/dist/cjs/hooks/wallet/useWalletsChanged.js.map +2 -2
- package/dist/cjs/index.d.ts +3 -2
- package/dist/cjs/index.js +231 -86
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/types.d.ts +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/walletUtils.d.ts +2 -2
- package/dist/cjs/utils/walletUtils.js +2 -2
- package/dist/cjs/utils/walletUtils.js.map +2 -2
- package/dist/cjs/walletStore.d.ts +2 -1
- package/dist/cjs/walletStore.js +8 -4
- package/dist/cjs/walletStore.js.map +2 -2
- package/dist/esm/components/AccountDropdownMenu.js +13 -8
- package/dist/esm/components/AccountDropdownMenu.js.map +2 -2
- package/dist/esm/components/ConnectButton.js +19 -9
- package/dist/esm/components/ConnectButton.js.map +2 -2
- package/dist/esm/components/SuiClientProvider.d.ts +1 -1
- package/dist/esm/components/SuiClientProvider.js +1 -1
- package/dist/esm/components/SuiClientProvider.js.map +1 -1
- package/dist/esm/components/WalletProvider.d.ts +3 -3
- package/dist/esm/components/WalletProvider.js +104 -33
- package/dist/esm/components/WalletProvider.js.map +2 -2
- package/dist/esm/components/connect-modal/ConnectModal.js +10 -4
- package/dist/esm/components/connect-modal/ConnectModal.js.map +2 -2
- package/dist/esm/components/connect-modal/wallet-list/WalletList.js.map +2 -2
- package/dist/esm/constants/walletDefaults.d.ts +1 -1
- package/dist/esm/constants/walletDefaults.js +4 -2
- package/dist/esm/constants/walletDefaults.js.map +2 -2
- package/dist/esm/constants/walletMutationKeys.d.ts +3 -2
- package/dist/esm/constants/walletMutationKeys.js +4 -3
- package/dist/esm/constants/walletMutationKeys.js.map +2 -2
- package/dist/esm/hooks/networkConfig.d.ts +1 -1
- package/dist/esm/hooks/networkConfig.js +1 -1
- package/dist/esm/hooks/networkConfig.js.map +1 -1
- package/dist/esm/hooks/useResolveSuiNSNames.d.ts +1 -1
- package/dist/esm/hooks/useResolveSuiNSNames.js +1 -1
- package/dist/esm/hooks/useResolveSuiNSNames.js.map +1 -1
- package/dist/esm/hooks/useSuiClient.d.ts +1 -1
- package/dist/esm/hooks/useSuiClient.js +1 -1
- package/dist/esm/hooks/useSuiClient.js.map +1 -1
- package/dist/esm/hooks/useSuiClientInfiniteQuery.d.ts +1 -1
- package/dist/esm/hooks/useSuiClientInfiniteQuery.js +1 -1
- package/dist/esm/hooks/useSuiClientInfiniteQuery.js.map +1 -1
- package/dist/esm/hooks/useSuiClientMutation.js +1 -1
- package/dist/esm/hooks/useSuiClientMutation.js.map +1 -1
- package/dist/esm/hooks/useSuiClientQueries.js +1 -1
- package/dist/esm/hooks/useSuiClientQueries.js.map +1 -1
- package/dist/esm/hooks/useSuiClientQuery.d.ts +1 -1
- package/dist/esm/hooks/useSuiClientQuery.js +1 -1
- package/dist/esm/hooks/useSuiClientQuery.js.map +1 -1
- package/dist/esm/hooks/wallet/useAutoConnectWallet.js +17 -7
- package/dist/esm/hooks/wallet/useAutoConnectWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useConnectWallet.js +10 -4
- package/dist/esm/hooks/wallet/useConnectWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useCurrentWallet.d.ts +3 -0
- package/dist/esm/hooks/wallet/useCurrentWallet.js +7 -3
- package/dist/esm/hooks/wallet/useCurrentWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useDisconnectWallet.js +11 -6
- package/dist/esm/hooks/wallet/useDisconnectWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useReportTransactionEffects.d.ts +15 -0
- package/dist/esm/hooks/wallet/{useSignTransactionBlock.js → useReportTransactionEffects.js} +34 -34
- package/dist/esm/hooks/wallet/useReportTransactionEffects.js.map +7 -0
- package/dist/esm/hooks/wallet/useSignAndExecuteTransaction.d.ts +29 -0
- package/dist/esm/hooks/wallet/useSignAndExecuteTransaction.js +227 -0
- package/dist/esm/hooks/wallet/useSignAndExecuteTransaction.js.map +7 -0
- package/dist/esm/hooks/wallet/useSignPersonalMessage.js +11 -6
- package/dist/esm/hooks/wallet/useSignPersonalMessage.js.map +2 -2
- package/dist/esm/hooks/wallet/useSignTransaction.d.ts +18 -0
- package/dist/esm/hooks/wallet/{useSignAndExecuteTransactionBlock.js → useSignTransaction.js} +80 -44
- package/dist/esm/hooks/wallet/useSignTransaction.js.map +7 -0
- package/dist/esm/hooks/wallet/useStashedWallet.js +17 -7
- package/dist/esm/hooks/wallet/useStashedWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useSwitchAccount.js +11 -6
- package/dist/esm/hooks/wallet/useSwitchAccount.js.map +2 -2
- package/dist/esm/hooks/wallet/useUnsafeBurnerWallet.js +64 -9
- package/dist/esm/hooks/wallet/useUnsafeBurnerWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useWalletPropertiesChanged.js +7 -3
- package/dist/esm/hooks/wallet/useWalletPropertiesChanged.js.map +2 -2
- package/dist/esm/hooks/wallet/useWalletsChanged.d.ts +1 -1
- package/dist/esm/hooks/wallet/useWalletsChanged.js +7 -7
- package/dist/esm/hooks/wallet/useWalletsChanged.js.map +2 -2
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.js +231 -86
- package/dist/esm/index.js.map +4 -4
- package/dist/esm/types.d.ts +1 -1
- package/dist/esm/utils/walletUtils.d.ts +2 -2
- package/dist/esm/utils/walletUtils.js +2 -2
- package/dist/esm/utils/walletUtils.js.map +2 -2
- package/dist/esm/walletStore.d.ts +2 -1
- package/dist/esm/walletStore.js +8 -4
- package/dist/esm/walletStore.js.map +2 -2
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/src/components/AccountDropdownMenu.tsx +1 -1
- package/src/components/SuiClientProvider.tsx +2 -2
- package/src/components/WalletProvider.tsx +9 -9
- package/src/constants/walletDefaults.ts +7 -3
- package/src/constants/walletMutationKeys.ts +3 -2
- package/src/hooks/networkConfig.ts +1 -1
- package/src/hooks/useResolveSuiNSNames.ts +1 -1
- package/src/hooks/useSuiClient.ts +1 -1
- package/src/hooks/useSuiClientInfiniteQuery.ts +1 -1
- package/src/hooks/useSuiClientQuery.ts +1 -1
- package/src/hooks/wallet/useConnectWallet.ts +6 -1
- package/src/hooks/wallet/useCurrentWallet.ts +4 -0
- package/src/hooks/wallet/useReportTransactionEffects.ts +82 -0
- package/src/hooks/wallet/useSignAndExecuteTransaction.ts +167 -0
- package/src/hooks/wallet/useSignTransaction.ts +119 -0
- package/src/hooks/wallet/useUnsafeBurnerWallet.ts +69 -6
- package/src/hooks/wallet/useWalletsChanged.ts +5 -5
- package/src/index.ts +3 -2
- package/src/types.ts +1 -1
- package/src/utils/walletUtils.ts +3 -2
- package/src/walletStore.ts +7 -1
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.d.ts +0 -15
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.js.map +0 -7
- package/dist/cjs/hooks/wallet/useSignTransactionBlock.d.ts +0 -13
- package/dist/cjs/hooks/wallet/useSignTransactionBlock.js.map +0 -7
- package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.d.ts +0 -15
- package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.js.map +0 -7
- package/dist/esm/hooks/wallet/useSignTransactionBlock.d.ts +0 -13
- package/dist/esm/hooks/wallet/useSignTransactionBlock.js.map +0 -7
- package/src/hooks/wallet/useSignAndExecuteTransactionBlock.ts +0 -116
- package/src/hooks/wallet/useSignTransactionBlock.ts +0 -84
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// Copyright (c) Mysten Labs, Inc.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import type { SuiClient } from '@mysten/sui
|
|
5
|
-
import { Ed25519Keypair } from '@mysten/sui
|
|
4
|
+
import type { SuiClient } from '@mysten/sui/client';
|
|
5
|
+
import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
|
|
6
|
+
import { Transaction } from '@mysten/sui/transactions';
|
|
7
|
+
import { toB64 } from '@mysten/sui/utils';
|
|
6
8
|
import type {
|
|
7
9
|
StandardConnectFeature,
|
|
8
10
|
StandardConnectMethod,
|
|
@@ -10,8 +12,10 @@ import type {
|
|
|
10
12
|
StandardEventsOnMethod,
|
|
11
13
|
SuiFeatures,
|
|
12
14
|
SuiSignAndExecuteTransactionBlockMethod,
|
|
15
|
+
SuiSignAndExecuteTransactionMethod,
|
|
13
16
|
SuiSignPersonalMessageMethod,
|
|
14
17
|
SuiSignTransactionBlockMethod,
|
|
18
|
+
SuiSignTransactionMethod,
|
|
15
19
|
Wallet,
|
|
16
20
|
} from '@mysten/wallet-standard';
|
|
17
21
|
import { getWallets, ReadonlyWalletAccount, SUI_CHAINS } from '@mysten/wallet-standard';
|
|
@@ -53,7 +57,12 @@ function registerUnsafeBurnerWallet(suiClient: SuiClient) {
|
|
|
53
57
|
address: keypair.getPublicKey().toSuiAddress(),
|
|
54
58
|
publicKey: keypair.getPublicKey().toSuiBytes(),
|
|
55
59
|
chains: ['sui:unknown'],
|
|
56
|
-
features: [
|
|
60
|
+
features: [
|
|
61
|
+
'sui:signAndExecuteTransactionBlock',
|
|
62
|
+
'sui:signTransactionBlock',
|
|
63
|
+
'sui:signTransaction',
|
|
64
|
+
'sui:signAndExecuteTransaction',
|
|
65
|
+
],
|
|
57
66
|
});
|
|
58
67
|
|
|
59
68
|
class UnsafeBurnerWallet implements Wallet {
|
|
@@ -100,6 +109,14 @@ function registerUnsafeBurnerWallet(suiClient: SuiClient) {
|
|
|
100
109
|
version: '1.0.0',
|
|
101
110
|
signAndExecuteTransactionBlock: this.#signAndExecuteTransactionBlock,
|
|
102
111
|
},
|
|
112
|
+
'sui:signTransaction': {
|
|
113
|
+
version: '2.0.0',
|
|
114
|
+
signTransaction: this.#signTransaction,
|
|
115
|
+
},
|
|
116
|
+
'sui:signAndExecuteTransaction': {
|
|
117
|
+
version: '2.0.0',
|
|
118
|
+
signAndExecuteTransaction: this.#signAndExecuteTransaction,
|
|
119
|
+
},
|
|
103
120
|
};
|
|
104
121
|
}
|
|
105
122
|
|
|
@@ -128,16 +145,62 @@ function registerUnsafeBurnerWallet(suiClient: SuiClient) {
|
|
|
128
145
|
};
|
|
129
146
|
};
|
|
130
147
|
|
|
148
|
+
#signTransaction: SuiSignTransactionMethod = async (transactionInput) => {
|
|
149
|
+
const { bytes, signature } = await Transaction.from(
|
|
150
|
+
await transactionInput.transaction.toJSON(),
|
|
151
|
+
).sign({
|
|
152
|
+
client: suiClient,
|
|
153
|
+
signer: keypair,
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
transactionInput.signal?.throwIfAborted();
|
|
157
|
+
|
|
158
|
+
return {
|
|
159
|
+
bytes,
|
|
160
|
+
signature: signature,
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
|
|
131
164
|
#signAndExecuteTransactionBlock: SuiSignAndExecuteTransactionBlockMethod = async (
|
|
132
165
|
transactionInput,
|
|
133
166
|
) => {
|
|
134
|
-
|
|
167
|
+
const { bytes, signature } = await transactionInput.transactionBlock.sign({
|
|
168
|
+
client: suiClient,
|
|
135
169
|
signer: keypair,
|
|
136
|
-
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
return suiClient.executeTransactionBlock({
|
|
173
|
+
signature,
|
|
174
|
+
transactionBlock: bytes,
|
|
137
175
|
options: transactionInput.options,
|
|
138
|
-
requestType: transactionInput.requestType,
|
|
139
176
|
});
|
|
140
177
|
};
|
|
178
|
+
|
|
179
|
+
#signAndExecuteTransaction: SuiSignAndExecuteTransactionMethod = async (transactionInput) => {
|
|
180
|
+
const { bytes, signature } = await Transaction.from(
|
|
181
|
+
await transactionInput.transaction.toJSON(),
|
|
182
|
+
).sign({
|
|
183
|
+
client: suiClient,
|
|
184
|
+
signer: keypair,
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
transactionInput.signal?.throwIfAborted();
|
|
188
|
+
|
|
189
|
+
const { rawEffects, digest } = await suiClient.executeTransactionBlock({
|
|
190
|
+
signature,
|
|
191
|
+
transactionBlock: bytes,
|
|
192
|
+
options: {
|
|
193
|
+
showRawEffects: true,
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
return {
|
|
198
|
+
bytes,
|
|
199
|
+
signature,
|
|
200
|
+
digest,
|
|
201
|
+
effects: toB64(new Uint8Array(rawEffects!)),
|
|
202
|
+
};
|
|
203
|
+
};
|
|
141
204
|
}
|
|
142
205
|
|
|
143
206
|
return walletsApi.register(new UnsafeBurnerWallet());
|
|
@@ -13,22 +13,22 @@ import { useWalletStore } from './useWalletStore.js';
|
|
|
13
13
|
*/
|
|
14
14
|
export function useWalletsChanged(
|
|
15
15
|
preferredWallets: string[],
|
|
16
|
-
|
|
16
|
+
walletFilter?: (wallet: WalletWithRequiredFeatures) => boolean,
|
|
17
17
|
) {
|
|
18
18
|
const setWalletRegistered = useWalletStore((state) => state.setWalletRegistered);
|
|
19
19
|
const setWalletUnregistered = useWalletStore((state) => state.setWalletUnregistered);
|
|
20
20
|
|
|
21
21
|
useEffect(() => {
|
|
22
22
|
const walletsApi = getWallets();
|
|
23
|
-
setWalletRegistered(getRegisteredWallets(preferredWallets,
|
|
23
|
+
setWalletRegistered(getRegisteredWallets(preferredWallets, walletFilter));
|
|
24
24
|
|
|
25
25
|
const unsubscribeFromRegister = walletsApi.on('register', () => {
|
|
26
|
-
setWalletRegistered(getRegisteredWallets(preferredWallets,
|
|
26
|
+
setWalletRegistered(getRegisteredWallets(preferredWallets, walletFilter));
|
|
27
27
|
});
|
|
28
28
|
|
|
29
29
|
const unsubscribeFromUnregister = walletsApi.on('unregister', (unregisteredWallet) => {
|
|
30
30
|
setWalletUnregistered(
|
|
31
|
-
getRegisteredWallets(preferredWallets,
|
|
31
|
+
getRegisteredWallets(preferredWallets, walletFilter),
|
|
32
32
|
unregisteredWallet,
|
|
33
33
|
);
|
|
34
34
|
});
|
|
@@ -37,5 +37,5 @@ export function useWalletsChanged(
|
|
|
37
37
|
unsubscribeFromRegister();
|
|
38
38
|
unsubscribeFromUnregister();
|
|
39
39
|
};
|
|
40
|
-
}, [preferredWallets,
|
|
40
|
+
}, [preferredWallets, walletFilter, setWalletRegistered, setWalletUnregistered]);
|
|
41
41
|
}
|
package/src/index.ts
CHANGED
|
@@ -18,9 +18,10 @@ export * from './hooks/wallet/useConnectWallet.js';
|
|
|
18
18
|
export * from './hooks/wallet/useCurrentAccount.js';
|
|
19
19
|
export * from './hooks/wallet/useCurrentWallet.js';
|
|
20
20
|
export * from './hooks/wallet/useDisconnectWallet.js';
|
|
21
|
-
export * from './hooks/wallet/
|
|
21
|
+
export * from './hooks/wallet/useSignAndExecuteTransaction.js';
|
|
22
22
|
export * from './hooks/wallet/useSignPersonalMessage.js';
|
|
23
|
-
export * from './hooks/wallet/
|
|
23
|
+
export * from './hooks/wallet/useSignTransaction.js';
|
|
24
|
+
export * from './hooks/wallet/useReportTransactionEffects.js';
|
|
24
25
|
export * from './hooks/wallet/useSwitchAccount.js';
|
|
25
26
|
export * from './hooks/wallet/useWallets.js';
|
|
26
27
|
export * from './themes/lightTheme.js';
|
package/src/types.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Copyright (c) Mysten Labs, Inc.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
export type { SignedPersonalMessage,
|
|
4
|
+
export type { SignedPersonalMessage, SignedTransaction } from '@mysten/wallet-standard';
|
|
5
5
|
export type { ThemeVars } from './themes/themeContract.js';
|
package/src/utils/walletUtils.ts
CHANGED
|
@@ -5,19 +5,20 @@ import type {
|
|
|
5
5
|
MinimallyRequiredFeatures,
|
|
6
6
|
Wallet,
|
|
7
7
|
WalletWithFeatures,
|
|
8
|
+
WalletWithRequiredFeatures,
|
|
8
9
|
} from '@mysten/wallet-standard';
|
|
9
10
|
import { getWallets, isWalletWithRequiredFeatureSet } from '@mysten/wallet-standard';
|
|
10
11
|
|
|
11
12
|
export function getRegisteredWallets<AdditionalFeatures extends Wallet['features']>(
|
|
12
13
|
preferredWallets: string[],
|
|
13
|
-
|
|
14
|
+
walletFilter?: (wallet: WalletWithRequiredFeatures) => boolean,
|
|
14
15
|
) {
|
|
15
16
|
const walletsApi = getWallets();
|
|
16
17
|
const wallets = walletsApi.get();
|
|
17
18
|
|
|
18
19
|
const suiWallets = wallets.filter(
|
|
19
20
|
(wallet): wallet is WalletWithFeatures<MinimallyRequiredFeatures & AdditionalFeatures> =>
|
|
20
|
-
isWalletWithRequiredFeatureSet(wallet
|
|
21
|
+
isWalletWithRequiredFeatureSet(wallet) && (!walletFilter || walletFilter(wallet)),
|
|
21
22
|
);
|
|
22
23
|
|
|
23
24
|
return [
|
package/src/walletStore.ts
CHANGED
|
@@ -17,6 +17,7 @@ export type WalletActions = {
|
|
|
17
17
|
wallet: WalletWithRequiredFeatures,
|
|
18
18
|
connectedAccounts: readonly WalletAccount[],
|
|
19
19
|
selectedAccount: WalletAccount | null,
|
|
20
|
+
supportedIntents?: string[],
|
|
20
21
|
) => void;
|
|
21
22
|
updateWalletAccounts: (accounts: readonly WalletAccount[]) => void;
|
|
22
23
|
setWalletDisconnected: () => void;
|
|
@@ -38,6 +39,7 @@ export type StoreState = {
|
|
|
38
39
|
lastConnectedAccountAddress: string | null;
|
|
39
40
|
lastConnectedWalletName: string | null;
|
|
40
41
|
connectionStatus: WalletConnectionStatus;
|
|
42
|
+
supportedIntents: string[];
|
|
41
43
|
} & WalletActions;
|
|
42
44
|
|
|
43
45
|
type WalletConfiguration = {
|
|
@@ -64,12 +66,13 @@ export function createWalletStore({
|
|
|
64
66
|
lastConnectedAccountAddress: null,
|
|
65
67
|
lastConnectedWalletName: null,
|
|
66
68
|
connectionStatus: 'disconnected',
|
|
69
|
+
supportedIntents: [],
|
|
67
70
|
setConnectionStatus(connectionStatus) {
|
|
68
71
|
set(() => ({
|
|
69
72
|
connectionStatus,
|
|
70
73
|
}));
|
|
71
74
|
},
|
|
72
|
-
setWalletConnected(wallet, connectedAccounts, selectedAccount) {
|
|
75
|
+
setWalletConnected(wallet, connectedAccounts, selectedAccount, supportedIntents = []) {
|
|
73
76
|
set(() => ({
|
|
74
77
|
accounts: connectedAccounts,
|
|
75
78
|
currentWallet: wallet,
|
|
@@ -77,6 +80,7 @@ export function createWalletStore({
|
|
|
77
80
|
lastConnectedWalletName: getWalletUniqueIdentifier(wallet),
|
|
78
81
|
lastConnectedAccountAddress: selectedAccount?.address,
|
|
79
82
|
connectionStatus: 'connected',
|
|
83
|
+
supportedIntents,
|
|
80
84
|
}));
|
|
81
85
|
},
|
|
82
86
|
setWalletDisconnected() {
|
|
@@ -87,6 +91,7 @@ export function createWalletStore({
|
|
|
87
91
|
lastConnectedWalletName: null,
|
|
88
92
|
lastConnectedAccountAddress: null,
|
|
89
93
|
connectionStatus: 'disconnected',
|
|
94
|
+
supportedIntents: [],
|
|
90
95
|
}));
|
|
91
96
|
},
|
|
92
97
|
setAccountSwitched(selectedAccount) {
|
|
@@ -108,6 +113,7 @@ export function createWalletStore({
|
|
|
108
113
|
lastConnectedWalletName: null,
|
|
109
114
|
lastConnectedAccountAddress: null,
|
|
110
115
|
connectionStatus: 'disconnected',
|
|
116
|
+
supportedIntents: [],
|
|
111
117
|
}));
|
|
112
118
|
} else {
|
|
113
119
|
set(() => ({ wallets: updatedWallets }));
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { SuiSignAndExecuteTransactionBlockInput, SuiSignAndExecuteTransactionBlockOutput } from '@mysten/wallet-standard';
|
|
2
|
-
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
3
|
-
import { WalletFeatureNotSupportedError, WalletNoAccountSelectedError, WalletNotConnectedError } from '../../errors/walletErrors.js';
|
|
4
|
-
import type { PartialBy } from '../../types/utilityTypes.js';
|
|
5
|
-
type UseSignAndExecuteTransactionBlockArgs = PartialBy<SuiSignAndExecuteTransactionBlockInput, 'account' | 'chain'>;
|
|
6
|
-
type UseSignAndExecuteTransactionBlockResult = SuiSignAndExecuteTransactionBlockOutput;
|
|
7
|
-
type UseSignAndExecuteTransactionBlockError = WalletFeatureNotSupportedError | WalletNoAccountSelectedError | WalletNotConnectedError | Error;
|
|
8
|
-
type UseSignAndExecuteTransactionBlockMutationOptions = Omit<UseMutationOptions<UseSignAndExecuteTransactionBlockResult, UseSignAndExecuteTransactionBlockError, UseSignAndExecuteTransactionBlockArgs, unknown>, 'mutationFn'> & {
|
|
9
|
-
executeFromWallet?: boolean;
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Mutation hook for prompting the user to sign and execute a transaction block.
|
|
13
|
-
*/
|
|
14
|
-
export declare function useSignAndExecuteTransactionBlock({ mutationKey, executeFromWallet, ...mutationOptions }?: UseSignAndExecuteTransactionBlockMutationOptions): UseMutationResult<UseSignAndExecuteTransactionBlockResult, UseSignAndExecuteTransactionBlockError, UseSignAndExecuteTransactionBlockArgs>;
|
|
15
|
-
export {};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/hooks/wallet/useSignAndExecuteTransactionBlock.ts", "../../../../src/constants/walletMutationKeys.ts", "../../../../src/errors/walletErrors.ts", "../../../../src/hooks/useSuiClient.ts", "../../../../src/components/SuiClientProvider.tsx", "../../../../src/hooks/wallet/useWalletStore.ts", "../../../../src/contexts/walletContext.ts", "../../../../src/hooks/wallet/useCurrentAccount.ts", "../../../../src/hooks/wallet/useCurrentWallet.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n\tSuiSignAndExecuteTransactionBlockInput,\n\tSuiSignAndExecuteTransactionBlockOutput,\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 {\n\tWalletFeatureNotSupportedError,\n\tWalletNoAccountSelectedError,\n\tWalletNotConnectedError,\n} from '../../errors/walletErrors.js';\nimport type { PartialBy } from '../../types/utilityTypes.js';\nimport { useSuiClient } from '../useSuiClient.js';\nimport { useCurrentAccount } from './useCurrentAccount.js';\nimport { useCurrentWallet } from './useCurrentWallet.js';\n\ntype UseSignAndExecuteTransactionBlockArgs = PartialBy<\n\tSuiSignAndExecuteTransactionBlockInput,\n\t'account' | 'chain'\n>;\n\ntype UseSignAndExecuteTransactionBlockResult = SuiSignAndExecuteTransactionBlockOutput;\n\ntype UseSignAndExecuteTransactionBlockError =\n\t| WalletFeatureNotSupportedError\n\t| WalletNoAccountSelectedError\n\t| WalletNotConnectedError\n\t| Error;\n\ntype UseSignAndExecuteTransactionBlockMutationOptions = Omit<\n\tUseMutationOptions<\n\t\tUseSignAndExecuteTransactionBlockResult,\n\t\tUseSignAndExecuteTransactionBlockError,\n\t\tUseSignAndExecuteTransactionBlockArgs,\n\t\tunknown\n\t>,\n\t'mutationFn'\n> & {\n\texecuteFromWallet?: boolean;\n};\n\n/**\n * Mutation hook for prompting the user to sign and execute a transaction block.\n */\nexport function useSignAndExecuteTransactionBlock({\n\tmutationKey,\n\texecuteFromWallet,\n\t...mutationOptions\n}: UseSignAndExecuteTransactionBlockMutationOptions = {}): UseMutationResult<\n\tUseSignAndExecuteTransactionBlockResult,\n\tUseSignAndExecuteTransactionBlockError,\n\tUseSignAndExecuteTransactionBlockArgs\n> {\n\tconst { currentWallet } = useCurrentWallet();\n\tconst currentAccount = useCurrentAccount();\n\tconst client = useSuiClient();\n\n\treturn useMutation({\n\t\tmutationKey: walletMutationKeys.signAndExecuteTransactionBlock(mutationKey),\n\t\tmutationFn: async ({ requestType, options, ...signTransactionBlockArgs }) => {\n\t\t\tif (!currentWallet) {\n\t\t\t\tthrow new WalletNotConnectedError('No wallet is connected.');\n\t\t\t}\n\n\t\t\tconst signerAccount = signTransactionBlockArgs.account ?? currentAccount;\n\t\t\tif (!signerAccount) {\n\t\t\t\tthrow new WalletNoAccountSelectedError(\n\t\t\t\t\t'No wallet account is selected to sign and execute the transaction block with.',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (executeFromWallet) {\n\t\t\t\tconst walletFeature = currentWallet.features['sui:signAndExecuteTransactionBlock'];\n\t\t\t\tif (!walletFeature) {\n\t\t\t\t\tthrow new WalletFeatureNotSupportedError(\n\t\t\t\t\t\t\"This wallet doesn't support the `signAndExecuteTransactionBlock` feature.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn walletFeature.signAndExecuteTransactionBlock({\n\t\t\t\t\t...signTransactionBlockArgs,\n\t\t\t\t\taccount: signerAccount,\n\t\t\t\t\tchain: signTransactionBlockArgs.chain ?? signerAccount.chains[0],\n\t\t\t\t\trequestType,\n\t\t\t\t\toptions,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst walletFeature = currentWallet.features['sui:signTransactionBlock'];\n\t\t\tif (!walletFeature) {\n\t\t\t\tthrow new WalletFeatureNotSupportedError(\n\t\t\t\t\t\"This wallet doesn't support the `signTransactionBlock` feature.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst { signature, transactionBlockBytes } = await walletFeature.signTransactionBlock({\n\t\t\t\t...signTransactionBlockArgs,\n\t\t\t\taccount: signerAccount,\n\t\t\t\tchain: signTransactionBlockArgs.chain ?? signerAccount.chains[0],\n\t\t\t});\n\n\t\t\treturn client.executeTransactionBlock({\n\t\t\t\ttransactionBlock: transactionBlockBytes,\n\t\t\t\tsignature,\n\t\t\t\trequestType,\n\t\t\t\toptions,\n\t\t\t});\n\t\t},\n\t\t...mutationOptions,\n\t});\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\n/**\n * An error that is instantiated when someone attempts to perform an action that requires an active wallet connection.\n */\nexport class WalletNotConnectedError extends Error {}\n\n/**\n * An error that is instantiated when someone attempts to perform an action that requires a selected wallet account.\n * This is more of an edge case stemming from the fact that wallets don't technically require you to authorize any\n * accounts when connecting a wallet.\n */\nexport class WalletNoAccountSelectedError extends Error {}\n\n/**\n * An error that is instantiated when someone attempts to perform an action that isn't supported by a wallet.\n */\nexport class WalletFeatureNotSupportedError extends Error {}\n\n/**\n * An error that is instantiated when a wallet account can't be found for a specific wallet.\n */\nexport class WalletAccountNotFoundError extends Error {}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { SuiClient } from '@mysten/sui.js/client';\nimport { useContext } from 'react';\n\nimport { SuiClientContext } from '../components/SuiClientProvider.js';\n\nexport function useSuiClientContext() {\n\tconst suiClient = useContext(SuiClientContext);\n\n\tif (!suiClient) {\n\t\tthrow new Error(\n\t\t\t'Could not find SuiClientContext. Ensure that you have set up the SuiClientProvider',\n\t\t);\n\t}\n\n\treturn suiClient;\n}\n\nexport function useSuiClient(): SuiClient {\n\treturn useSuiClientContext().client;\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { getFullnodeUrl, isSuiClient, SuiClient } from '@mysten/sui.js/client';\nimport type { SuiClientOptions } from '@mysten/sui.js/client';\nimport { createContext, useMemo, useState } from 'react';\n\nimport type { NetworkConfig } from '../hooks/networkConfig.js';\n\ntype NetworkConfigs<T extends NetworkConfig | SuiClient = NetworkConfig | SuiClient> = Record<\n\tstring,\n\tT\n>;\n\nexport interface SuiClientProviderContext {\n\tclient: SuiClient;\n\tnetworks: NetworkConfigs;\n\tnetwork: string;\n\tconfig: NetworkConfig | null;\n\tselectNetwork: (network: string) => void;\n}\n\nexport const SuiClientContext = createContext<SuiClientProviderContext | null>(null);\n\nexport type SuiClientProviderProps<T extends NetworkConfigs> = {\n\tcreateClient?: (name: keyof T, config: T[keyof T]) => SuiClient;\n\tchildren: React.ReactNode;\n\tnetworks?: T;\n\tonNetworkChange?: (network: keyof T & string) => void;\n} & (\n\t| {\n\t\t\tdefaultNetwork?: keyof T & string;\n\t\t\tnetwork?: never;\n\t }\n\t| {\n\t\t\tdefaultNetwork?: never;\n\t\t\tnetwork?: keyof T & string;\n\t }\n);\n\nconst DEFAULT_NETWORKS = {\n\tlocalnet: { url: getFullnodeUrl('localnet') },\n};\n\nconst DEFAULT_CREATE_CLIENT = function createClient(\n\t_name: string,\n\tconfig: NetworkConfig | SuiClient,\n) {\n\tif (isSuiClient(config)) {\n\t\treturn config;\n\t}\n\n\treturn new SuiClient(config);\n};\n\nexport function SuiClientProvider<T extends NetworkConfigs>(props: SuiClientProviderProps<T>) {\n\tconst { onNetworkChange, network, children } = props;\n\tconst networks = (props.networks ?? DEFAULT_NETWORKS) as T;\n\tconst createClient =\n\t\t(props.createClient as typeof DEFAULT_CREATE_CLIENT) ?? DEFAULT_CREATE_CLIENT;\n\n\tconst [selectedNetwork, setSelectedNetwork] = useState<keyof T & string>(\n\t\tprops.network ?? props.defaultNetwork ?? (Object.keys(networks)[0] as keyof T & string),\n\t);\n\n\tconst currentNetwork = props.network ?? selectedNetwork;\n\n\tconst client = useMemo(() => {\n\t\treturn createClient(currentNetwork, networks[currentNetwork]);\n\t}, [createClient, currentNetwork, networks]);\n\n\tconst ctx = useMemo((): SuiClientProviderContext => {\n\t\treturn {\n\t\t\tclient,\n\t\t\tnetworks,\n\t\t\tnetwork: currentNetwork,\n\t\t\tconfig:\n\t\t\t\tnetworks[currentNetwork] instanceof SuiClient\n\t\t\t\t\t? null\n\t\t\t\t\t: (networks[currentNetwork] as SuiClientOptions),\n\t\t\tselectNetwork: (newNetwork) => {\n\t\t\t\tif (currentNetwork === newNetwork) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!network && newNetwork !== selectedNetwork) {\n\t\t\t\t\tsetSelectedNetwork(newNetwork);\n\t\t\t\t}\n\n\t\t\t\tonNetworkChange?.(newNetwork);\n\t\t\t},\n\t\t};\n\t}, [client, networks, selectedNetwork, currentNetwork, network, onNetworkChange]);\n\n\treturn <SuiClientContext.Provider value={ctx}>{children}</SuiClientContext.Provider>;\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 type { WalletAccount } from '@mysten/wallet-standard';\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves the wallet account that is currently selected, if one exists.\n */\nexport function useCurrentAccount(): WalletAccount | null {\n\treturn useWalletStore((state) => state.currentAccount);\n}\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"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,yBAA4B;;;ACHrB,IAAM,qBAAqB;AAAA,EACjC,KAAK,EAAE,WAAW,SAAS;AAAA,EAC3B,eAAe,kBAAkB,gBAAgB;AAAA,EACjD,mBAAmB,kBAAkB,oBAAoB;AAAA,EACzD,kBAAkB,kBAAkB,mBAAmB;AAAA,EACvD,qBAAqB,kBAAkB,uBAAuB;AAAA,EAC9D,sBAAsB,kBAAkB,wBAAwB;AAAA,EAChE,gCAAgC,kBAAkB,oCAAoC;AAAA,EACtF,eAAe,kBAAkB,gBAAgB;AAClD;AAEA,SAAS,kBAAkB,YAAoB;AAC9C,SAAO,SAAS,cAAc,iBAA8B,CAAC,GAAG;AAC/D,WAAO,CAAC,EAAE,GAAG,mBAAmB,KAAK,WAAW,GAAG,GAAG,cAAc;AAAA,EACrE;AACD;;;ACdO,IAAM,0BAAN,cAAsC,MAAM;AAAC;AAO7C,IAAM,+BAAN,cAA2C,MAAM;AAAC;AAKlD,IAAM,iCAAN,cAA6C,MAAM;AAAC;;;ACd3D,IAAAA,gBAA2B;;;ACD3B,oBAAuD;AAEvD,mBAAiD;AAyFzC;AAxED,IAAM,uBAAmB,4BAA+C,IAAI;AAkBnF,IAAM,mBAAmB;AAAA,EACxB,UAAU,EAAE,SAAK,8BAAe,UAAU,EAAE;AAC7C;;;ADlCO,SAAS,sBAAsB;AACrC,QAAM,gBAAY,0BAAW,gBAAgB;AAE7C,MAAI,CAAC,WAAW;AACf,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEO,SAAS,eAA0B;AACzC,SAAO,oBAAoB,EAAE;AAC9B;;;AEnBA,IAAAC,gBAA2B;AAC3B,qBAAyB;;;ACDzB,IAAAC,gBAA8B;AAIvB,IAAM,oBAAgB,6BAAkC,IAAI;;;ADE5D,SAAS,eAAkB,UAAuC;AACxE,QAAM,YAAQ,0BAAW,aAAa;AACtC,MAAI,CAAC,OAAO;AACX,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AACA,aAAO,yBAAS,OAAO,QAAQ;AAChC;;;AEPO,SAAS,oBAA0C;AACzD,SAAO,eAAe,CAAC,UAAU,MAAM,cAAc;AACtD;;;ACJO,SAAS,mBAAmB;AAClC,QAAM,gBAAgB,eAAe,CAAC,UAAU,MAAM,aAAa;AACnE,QAAM,mBAAmB,eAAe,CAAC,UAAU,MAAM,gBAAgB;AAEzE,UAAQ,kBAAkB;AAAA,IACzB,KAAK;AACJ,aAAO;AAAA,QACN;AAAA,QACA,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN;AAAA,QACA,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd;AAAA,IACD,KAAK,aAAa;AACjB,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd;AAAA,IACD;AAAA,EACD;AACD;;;ARUO,SAAS,kCAAkC;AAAA,EACjD;AAAA,EACA;AAAA,EACA,GAAG;AACJ,IAAsD,CAAC,GAIrD;AACD,QAAM,EAAE,cAAc,IAAI,iBAAiB;AAC3C,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,SAAS,aAAa;AAE5B,aAAO,gCAAY;AAAA,IAClB,aAAa,mBAAmB,+BAA+B,WAAW;AAAA,IAC1E,YAAY,OAAO,EAAE,aAAa,SAAS,GAAG,yBAAyB,MAAM;AAC5E,UAAI,CAAC,eAAe;AACnB,cAAM,IAAI,wBAAwB,yBAAyB;AAAA,MAC5D;AAEA,YAAM,gBAAgB,yBAAyB,WAAW;AAC1D,UAAI,CAAC,eAAe;AACnB,cAAM,IAAI;AAAA,UACT;AAAA,QACD;AAAA,MACD;AAEA,UAAI,mBAAmB;AACtB,cAAMC,iBAAgB,cAAc,SAAS,oCAAoC;AACjF,YAAI,CAACA,gBAAe;AACnB,gBAAM,IAAI;AAAA,YACT;AAAA,UACD;AAAA,QACD;AAEA,eAAOA,eAAc,+BAA+B;AAAA,UACnD,GAAG;AAAA,UACH,SAAS;AAAA,UACT,OAAO,yBAAyB,SAAS,cAAc,OAAO,CAAC;AAAA,UAC/D;AAAA,UACA;AAAA,QACD,CAAC;AAAA,MACF;AAEA,YAAM,gBAAgB,cAAc,SAAS,0BAA0B;AACvE,UAAI,CAAC,eAAe;AACnB,cAAM,IAAI;AAAA,UACT;AAAA,QACD;AAAA,MACD;AAEA,YAAM,EAAE,WAAW,sBAAsB,IAAI,MAAM,cAAc,qBAAqB;AAAA,QACrF,GAAG;AAAA,QACH,SAAS;AAAA,QACT,OAAO,yBAAyB,SAAS,cAAc,OAAO,CAAC;AAAA,MAChE,CAAC;AAED,aAAO,OAAO,wBAAwB;AAAA,QACrC,kBAAkB;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,MACD,CAAC;AAAA,IACF;AAAA,IACA,GAAG;AAAA,EACJ,CAAC;AACF;",
|
|
6
|
-
"names": ["import_react", "import_react", "import_react", "walletFeature"]
|
|
7
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { SuiSignTransactionBlockInput, SuiSignTransactionBlockOutput } from '@mysten/wallet-standard';
|
|
2
|
-
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
3
|
-
import { WalletFeatureNotSupportedError, WalletNoAccountSelectedError, WalletNotConnectedError } from '../..//errors/walletErrors.js';
|
|
4
|
-
import type { PartialBy } from '../../types/utilityTypes.js';
|
|
5
|
-
type UseSignTransactionBlockArgs = PartialBy<SuiSignTransactionBlockInput, 'account' | 'chain'>;
|
|
6
|
-
type UseSignTransactionBlockResult = SuiSignTransactionBlockOutput;
|
|
7
|
-
type UseSignTransactionBlockError = WalletFeatureNotSupportedError | WalletNoAccountSelectedError | WalletNotConnectedError | Error;
|
|
8
|
-
type UseSignTransactionBlockMutationOptions = Omit<UseMutationOptions<UseSignTransactionBlockResult, UseSignTransactionBlockError, UseSignTransactionBlockArgs, unknown>, 'mutationFn'>;
|
|
9
|
-
/**
|
|
10
|
-
* Mutation hook for prompting the user to sign a transaction block.
|
|
11
|
-
*/
|
|
12
|
-
export declare function useSignTransactionBlock({ mutationKey, ...mutationOptions }?: UseSignTransactionBlockMutationOptions): UseMutationResult<UseSignTransactionBlockResult, UseSignTransactionBlockError, UseSignTransactionBlockArgs>;
|
|
13
|
-
export {};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/hooks/wallet/useSignTransactionBlock.ts", "../../../../src/errors/walletErrors.ts", "../../../../src/constants/walletMutationKeys.ts", "../../../../src/hooks/wallet/useWalletStore.ts", "../../../../src/contexts/walletContext.ts", "../../../../src/hooks/wallet/useCurrentAccount.ts", "../../../../src/hooks/wallet/useCurrentWallet.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n\tSuiSignTransactionBlockInput,\n\tSuiSignTransactionBlockOutput,\n} from '@mysten/wallet-standard';\nimport type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';\nimport { useMutation } from '@tanstack/react-query';\n\nimport {\n\tWalletFeatureNotSupportedError,\n\tWalletNoAccountSelectedError,\n\tWalletNotConnectedError,\n} from '../..//errors/walletErrors.js';\nimport { walletMutationKeys } from '../../constants/walletMutationKeys.js';\nimport type { PartialBy } from '../../types/utilityTypes.js';\nimport { useCurrentAccount } from './useCurrentAccount.js';\nimport { useCurrentWallet } from './useCurrentWallet.js';\n\ntype UseSignTransactionBlockArgs = PartialBy<SuiSignTransactionBlockInput, 'account' | 'chain'>;\n\ntype UseSignTransactionBlockResult = SuiSignTransactionBlockOutput;\n\ntype UseSignTransactionBlockError =\n\t| WalletFeatureNotSupportedError\n\t| WalletNoAccountSelectedError\n\t| WalletNotConnectedError\n\t| Error;\n\ntype UseSignTransactionBlockMutationOptions = Omit<\n\tUseMutationOptions<\n\t\tUseSignTransactionBlockResult,\n\t\tUseSignTransactionBlockError,\n\t\tUseSignTransactionBlockArgs,\n\t\tunknown\n\t>,\n\t'mutationFn'\n>;\n\n/**\n * Mutation hook for prompting the user to sign a transaction block.\n */\nexport function useSignTransactionBlock({\n\tmutationKey,\n\t...mutationOptions\n}: UseSignTransactionBlockMutationOptions = {}): UseMutationResult<\n\tUseSignTransactionBlockResult,\n\tUseSignTransactionBlockError,\n\tUseSignTransactionBlockArgs\n> {\n\tconst { currentWallet } = useCurrentWallet();\n\tconst currentAccount = useCurrentAccount();\n\n\treturn useMutation({\n\t\tmutationKey: walletMutationKeys.signTransactionBlock(mutationKey),\n\t\tmutationFn: async (signTransactionBlockArgs) => {\n\t\t\tif (!currentWallet) {\n\t\t\t\tthrow new WalletNotConnectedError('No wallet is connected.');\n\t\t\t}\n\n\t\t\tconst signerAccount = signTransactionBlockArgs.account ?? currentAccount;\n\t\t\tif (!signerAccount) {\n\t\t\t\tthrow new WalletNoAccountSelectedError(\n\t\t\t\t\t'No wallet account is selected to sign the transaction block with.',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst walletFeature = currentWallet.features['sui:signTransactionBlock'];\n\t\t\tif (!walletFeature) {\n\t\t\t\tthrow new WalletFeatureNotSupportedError(\n\t\t\t\t\t\"This wallet doesn't support the `SignTransactionBlock` feature.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn await walletFeature.signTransactionBlock({\n\t\t\t\t...signTransactionBlockArgs,\n\t\t\t\taccount: signerAccount,\n\t\t\t\tchain: signTransactionBlockArgs.chain ?? signerAccount.chains[0],\n\t\t\t});\n\t\t},\n\t\t...mutationOptions,\n\t});\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * An error that is instantiated when someone attempts to perform an action that requires an active wallet connection.\n */\nexport class WalletNotConnectedError extends Error {}\n\n/**\n * An error that is instantiated when someone attempts to perform an action that requires a selected wallet account.\n * This is more of an edge case stemming from the fact that wallets don't technically require you to authorize any\n * accounts when connecting a wallet.\n */\nexport class WalletNoAccountSelectedError extends Error {}\n\n/**\n * An error that is instantiated when someone attempts to perform an action that isn't supported by a wallet.\n */\nexport class WalletFeatureNotSupportedError extends Error {}\n\n/**\n * An error that is instantiated when a wallet account can't be found for a specific wallet.\n */\nexport class WalletAccountNotFoundError extends Error {}\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 type { WalletAccount } from '@mysten/wallet-standard';\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves the wallet account that is currently selected, if one exists.\n */\nexport function useCurrentAccount(): WalletAccount | null {\n\treturn useWalletStore((state) => state.currentAccount);\n}\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"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,yBAA4B;;;ACFrB,IAAM,0BAAN,cAAsC,MAAM;AAAC;AAO7C,IAAM,+BAAN,cAA2C,MAAM;AAAC;AAKlD,IAAM,iCAAN,cAA6C,MAAM;AAAC;;;ACbpD,IAAM,qBAAqB;AAAA,EACjC,KAAK,EAAE,WAAW,SAAS;AAAA,EAC3B,eAAe,kBAAkB,gBAAgB;AAAA,EACjD,mBAAmB,kBAAkB,oBAAoB;AAAA,EACzD,kBAAkB,kBAAkB,mBAAmB;AAAA,EACvD,qBAAqB,kBAAkB,uBAAuB;AAAA,EAC9D,sBAAsB,kBAAkB,wBAAwB;AAAA,EAChE,gCAAgC,kBAAkB,oCAAoC;AAAA,EACtF,eAAe,kBAAkB,gBAAgB;AAClD;AAEA,SAAS,kBAAkB,YAAoB;AAC9C,SAAO,SAAS,cAAc,iBAA8B,CAAC,GAAG;AAC/D,WAAO,CAAC,EAAE,GAAG,mBAAmB,KAAK,WAAW,GAAG,GAAG,cAAc;AAAA,EACrE;AACD;;;ACjBA,IAAAA,gBAA2B;AAC3B,qBAAyB;;;ACDzB,mBAA8B;AAIvB,IAAM,oBAAgB,4BAAkC,IAAI;;;ADE5D,SAAS,eAAkB,UAAuC;AACxE,QAAM,YAAQ,0BAAW,aAAa;AACtC,MAAI,CAAC,OAAO;AACX,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AACA,aAAO,yBAAS,OAAO,QAAQ;AAChC;;;AEPO,SAAS,oBAA0C;AACzD,SAAO,eAAe,CAAC,UAAU,MAAM,cAAc;AACtD;;;ACJO,SAAS,mBAAmB;AAClC,QAAM,gBAAgB,eAAe,CAAC,UAAU,MAAM,aAAa;AACnE,QAAM,mBAAmB,eAAe,CAAC,UAAU,MAAM,gBAAgB;AAEzE,UAAQ,kBAAkB;AAAA,IACzB,KAAK;AACJ,aAAO;AAAA,QACN;AAAA,QACA,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN;AAAA,QACA,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd;AAAA,IACD,KAAK,aAAa;AACjB,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd;AAAA,IACD;AAAA,EACD;AACD;;;ANIO,SAAS,wBAAwB;AAAA,EACvC;AAAA,EACA,GAAG;AACJ,IAA4C,CAAC,GAI3C;AACD,QAAM,EAAE,cAAc,IAAI,iBAAiB;AAC3C,QAAM,iBAAiB,kBAAkB;AAEzC,aAAO,gCAAY;AAAA,IAClB,aAAa,mBAAmB,qBAAqB,WAAW;AAAA,IAChE,YAAY,OAAO,6BAA6B;AAC/C,UAAI,CAAC,eAAe;AACnB,cAAM,IAAI,wBAAwB,yBAAyB;AAAA,MAC5D;AAEA,YAAM,gBAAgB,yBAAyB,WAAW;AAC1D,UAAI,CAAC,eAAe;AACnB,cAAM,IAAI;AAAA,UACT;AAAA,QACD;AAAA,MACD;AAEA,YAAM,gBAAgB,cAAc,SAAS,0BAA0B;AACvE,UAAI,CAAC,eAAe;AACnB,cAAM,IAAI;AAAA,UACT;AAAA,QACD;AAAA,MACD;AAEA,aAAO,MAAM,cAAc,qBAAqB;AAAA,QAC/C,GAAG;AAAA,QACH,SAAS;AAAA,QACT,OAAO,yBAAyB,SAAS,cAAc,OAAO,CAAC;AAAA,MAChE,CAAC;AAAA,IACF;AAAA,IACA,GAAG;AAAA,EACJ,CAAC;AACF;",
|
|
6
|
-
"names": ["import_react"]
|
|
7
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { SuiSignAndExecuteTransactionBlockInput, SuiSignAndExecuteTransactionBlockOutput } from '@mysten/wallet-standard';
|
|
2
|
-
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
3
|
-
import { WalletFeatureNotSupportedError, WalletNoAccountSelectedError, WalletNotConnectedError } from '../../errors/walletErrors.js';
|
|
4
|
-
import type { PartialBy } from '../../types/utilityTypes.js';
|
|
5
|
-
type UseSignAndExecuteTransactionBlockArgs = PartialBy<SuiSignAndExecuteTransactionBlockInput, 'account' | 'chain'>;
|
|
6
|
-
type UseSignAndExecuteTransactionBlockResult = SuiSignAndExecuteTransactionBlockOutput;
|
|
7
|
-
type UseSignAndExecuteTransactionBlockError = WalletFeatureNotSupportedError | WalletNoAccountSelectedError | WalletNotConnectedError | Error;
|
|
8
|
-
type UseSignAndExecuteTransactionBlockMutationOptions = Omit<UseMutationOptions<UseSignAndExecuteTransactionBlockResult, UseSignAndExecuteTransactionBlockError, UseSignAndExecuteTransactionBlockArgs, unknown>, 'mutationFn'> & {
|
|
9
|
-
executeFromWallet?: boolean;
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Mutation hook for prompting the user to sign and execute a transaction block.
|
|
13
|
-
*/
|
|
14
|
-
export declare function useSignAndExecuteTransactionBlock({ mutationKey, executeFromWallet, ...mutationOptions }?: UseSignAndExecuteTransactionBlockMutationOptions): UseMutationResult<UseSignAndExecuteTransactionBlockResult, UseSignAndExecuteTransactionBlockError, UseSignAndExecuteTransactionBlockArgs>;
|
|
15
|
-
export {};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/hooks/wallet/useSignAndExecuteTransactionBlock.ts", "../../../../src/constants/walletMutationKeys.ts", "../../../../src/errors/walletErrors.ts", "../../../../src/hooks/useSuiClient.ts", "../../../../src/components/SuiClientProvider.tsx", "../../../../src/hooks/wallet/useWalletStore.ts", "../../../../src/contexts/walletContext.ts", "../../../../src/hooks/wallet/useCurrentAccount.ts", "../../../../src/hooks/wallet/useCurrentWallet.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n\tSuiSignAndExecuteTransactionBlockInput,\n\tSuiSignAndExecuteTransactionBlockOutput,\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 {\n\tWalletFeatureNotSupportedError,\n\tWalletNoAccountSelectedError,\n\tWalletNotConnectedError,\n} from '../../errors/walletErrors.js';\nimport type { PartialBy } from '../../types/utilityTypes.js';\nimport { useSuiClient } from '../useSuiClient.js';\nimport { useCurrentAccount } from './useCurrentAccount.js';\nimport { useCurrentWallet } from './useCurrentWallet.js';\n\ntype UseSignAndExecuteTransactionBlockArgs = PartialBy<\n\tSuiSignAndExecuteTransactionBlockInput,\n\t'account' | 'chain'\n>;\n\ntype UseSignAndExecuteTransactionBlockResult = SuiSignAndExecuteTransactionBlockOutput;\n\ntype UseSignAndExecuteTransactionBlockError =\n\t| WalletFeatureNotSupportedError\n\t| WalletNoAccountSelectedError\n\t| WalletNotConnectedError\n\t| Error;\n\ntype UseSignAndExecuteTransactionBlockMutationOptions = Omit<\n\tUseMutationOptions<\n\t\tUseSignAndExecuteTransactionBlockResult,\n\t\tUseSignAndExecuteTransactionBlockError,\n\t\tUseSignAndExecuteTransactionBlockArgs,\n\t\tunknown\n\t>,\n\t'mutationFn'\n> & {\n\texecuteFromWallet?: boolean;\n};\n\n/**\n * Mutation hook for prompting the user to sign and execute a transaction block.\n */\nexport function useSignAndExecuteTransactionBlock({\n\tmutationKey,\n\texecuteFromWallet,\n\t...mutationOptions\n}: UseSignAndExecuteTransactionBlockMutationOptions = {}): UseMutationResult<\n\tUseSignAndExecuteTransactionBlockResult,\n\tUseSignAndExecuteTransactionBlockError,\n\tUseSignAndExecuteTransactionBlockArgs\n> {\n\tconst { currentWallet } = useCurrentWallet();\n\tconst currentAccount = useCurrentAccount();\n\tconst client = useSuiClient();\n\n\treturn useMutation({\n\t\tmutationKey: walletMutationKeys.signAndExecuteTransactionBlock(mutationKey),\n\t\tmutationFn: async ({ requestType, options, ...signTransactionBlockArgs }) => {\n\t\t\tif (!currentWallet) {\n\t\t\t\tthrow new WalletNotConnectedError('No wallet is connected.');\n\t\t\t}\n\n\t\t\tconst signerAccount = signTransactionBlockArgs.account ?? currentAccount;\n\t\t\tif (!signerAccount) {\n\t\t\t\tthrow new WalletNoAccountSelectedError(\n\t\t\t\t\t'No wallet account is selected to sign and execute the transaction block with.',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (executeFromWallet) {\n\t\t\t\tconst walletFeature = currentWallet.features['sui:signAndExecuteTransactionBlock'];\n\t\t\t\tif (!walletFeature) {\n\t\t\t\t\tthrow new WalletFeatureNotSupportedError(\n\t\t\t\t\t\t\"This wallet doesn't support the `signAndExecuteTransactionBlock` feature.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn walletFeature.signAndExecuteTransactionBlock({\n\t\t\t\t\t...signTransactionBlockArgs,\n\t\t\t\t\taccount: signerAccount,\n\t\t\t\t\tchain: signTransactionBlockArgs.chain ?? signerAccount.chains[0],\n\t\t\t\t\trequestType,\n\t\t\t\t\toptions,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst walletFeature = currentWallet.features['sui:signTransactionBlock'];\n\t\t\tif (!walletFeature) {\n\t\t\t\tthrow new WalletFeatureNotSupportedError(\n\t\t\t\t\t\"This wallet doesn't support the `signTransactionBlock` feature.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst { signature, transactionBlockBytes } = await walletFeature.signTransactionBlock({\n\t\t\t\t...signTransactionBlockArgs,\n\t\t\t\taccount: signerAccount,\n\t\t\t\tchain: signTransactionBlockArgs.chain ?? signerAccount.chains[0],\n\t\t\t});\n\n\t\t\treturn client.executeTransactionBlock({\n\t\t\t\ttransactionBlock: transactionBlockBytes,\n\t\t\t\tsignature,\n\t\t\t\trequestType,\n\t\t\t\toptions,\n\t\t\t});\n\t\t},\n\t\t...mutationOptions,\n\t});\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\n/**\n * An error that is instantiated when someone attempts to perform an action that requires an active wallet connection.\n */\nexport class WalletNotConnectedError extends Error {}\n\n/**\n * An error that is instantiated when someone attempts to perform an action that requires a selected wallet account.\n * This is more of an edge case stemming from the fact that wallets don't technically require you to authorize any\n * accounts when connecting a wallet.\n */\nexport class WalletNoAccountSelectedError extends Error {}\n\n/**\n * An error that is instantiated when someone attempts to perform an action that isn't supported by a wallet.\n */\nexport class WalletFeatureNotSupportedError extends Error {}\n\n/**\n * An error that is instantiated when a wallet account can't be found for a specific wallet.\n */\nexport class WalletAccountNotFoundError extends Error {}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { SuiClient } from '@mysten/sui.js/client';\nimport { useContext } from 'react';\n\nimport { SuiClientContext } from '../components/SuiClientProvider.js';\n\nexport function useSuiClientContext() {\n\tconst suiClient = useContext(SuiClientContext);\n\n\tif (!suiClient) {\n\t\tthrow new Error(\n\t\t\t'Could not find SuiClientContext. Ensure that you have set up the SuiClientProvider',\n\t\t);\n\t}\n\n\treturn suiClient;\n}\n\nexport function useSuiClient(): SuiClient {\n\treturn useSuiClientContext().client;\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { getFullnodeUrl, isSuiClient, SuiClient } from '@mysten/sui.js/client';\nimport type { SuiClientOptions } from '@mysten/sui.js/client';\nimport { createContext, useMemo, useState } from 'react';\n\nimport type { NetworkConfig } from '../hooks/networkConfig.js';\n\ntype NetworkConfigs<T extends NetworkConfig | SuiClient = NetworkConfig | SuiClient> = Record<\n\tstring,\n\tT\n>;\n\nexport interface SuiClientProviderContext {\n\tclient: SuiClient;\n\tnetworks: NetworkConfigs;\n\tnetwork: string;\n\tconfig: NetworkConfig | null;\n\tselectNetwork: (network: string) => void;\n}\n\nexport const SuiClientContext = createContext<SuiClientProviderContext | null>(null);\n\nexport type SuiClientProviderProps<T extends NetworkConfigs> = {\n\tcreateClient?: (name: keyof T, config: T[keyof T]) => SuiClient;\n\tchildren: React.ReactNode;\n\tnetworks?: T;\n\tonNetworkChange?: (network: keyof T & string) => void;\n} & (\n\t| {\n\t\t\tdefaultNetwork?: keyof T & string;\n\t\t\tnetwork?: never;\n\t }\n\t| {\n\t\t\tdefaultNetwork?: never;\n\t\t\tnetwork?: keyof T & string;\n\t }\n);\n\nconst DEFAULT_NETWORKS = {\n\tlocalnet: { url: getFullnodeUrl('localnet') },\n};\n\nconst DEFAULT_CREATE_CLIENT = function createClient(\n\t_name: string,\n\tconfig: NetworkConfig | SuiClient,\n) {\n\tif (isSuiClient(config)) {\n\t\treturn config;\n\t}\n\n\treturn new SuiClient(config);\n};\n\nexport function SuiClientProvider<T extends NetworkConfigs>(props: SuiClientProviderProps<T>) {\n\tconst { onNetworkChange, network, children } = props;\n\tconst networks = (props.networks ?? DEFAULT_NETWORKS) as T;\n\tconst createClient =\n\t\t(props.createClient as typeof DEFAULT_CREATE_CLIENT) ?? DEFAULT_CREATE_CLIENT;\n\n\tconst [selectedNetwork, setSelectedNetwork] = useState<keyof T & string>(\n\t\tprops.network ?? props.defaultNetwork ?? (Object.keys(networks)[0] as keyof T & string),\n\t);\n\n\tconst currentNetwork = props.network ?? selectedNetwork;\n\n\tconst client = useMemo(() => {\n\t\treturn createClient(currentNetwork, networks[currentNetwork]);\n\t}, [createClient, currentNetwork, networks]);\n\n\tconst ctx = useMemo((): SuiClientProviderContext => {\n\t\treturn {\n\t\t\tclient,\n\t\t\tnetworks,\n\t\t\tnetwork: currentNetwork,\n\t\t\tconfig:\n\t\t\t\tnetworks[currentNetwork] instanceof SuiClient\n\t\t\t\t\t? null\n\t\t\t\t\t: (networks[currentNetwork] as SuiClientOptions),\n\t\t\tselectNetwork: (newNetwork) => {\n\t\t\t\tif (currentNetwork === newNetwork) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!network && newNetwork !== selectedNetwork) {\n\t\t\t\t\tsetSelectedNetwork(newNetwork);\n\t\t\t\t}\n\n\t\t\t\tonNetworkChange?.(newNetwork);\n\t\t\t},\n\t\t};\n\t}, [client, networks, selectedNetwork, currentNetwork, network, onNetworkChange]);\n\n\treturn <SuiClientContext.Provider value={ctx}>{children}</SuiClientContext.Provider>;\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 type { WalletAccount } from '@mysten/wallet-standard';\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves the wallet account that is currently selected, if one exists.\n */\nexport function useCurrentAccount(): WalletAccount | null {\n\treturn useWalletStore((state) => state.currentAccount);\n}\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"],
|
|
5
|
-
"mappings": ";AAQA,SAAS,mBAAmB;;;ACHrB,IAAM,qBAAqB;AAAA,EACjC,KAAK,EAAE,WAAW,SAAS;AAAA,EAC3B,eAAe,kBAAkB,gBAAgB;AAAA,EACjD,mBAAmB,kBAAkB,oBAAoB;AAAA,EACzD,kBAAkB,kBAAkB,mBAAmB;AAAA,EACvD,qBAAqB,kBAAkB,uBAAuB;AAAA,EAC9D,sBAAsB,kBAAkB,wBAAwB;AAAA,EAChE,gCAAgC,kBAAkB,oCAAoC;AAAA,EACtF,eAAe,kBAAkB,gBAAgB;AAClD;AAEA,SAAS,kBAAkB,YAAoB;AAC9C,SAAO,SAAS,cAAc,iBAA8B,CAAC,GAAG;AAC/D,WAAO,CAAC,EAAE,GAAG,mBAAmB,KAAK,WAAW,GAAG,GAAG,cAAc;AAAA,EACrE;AACD;;;ACdO,IAAM,0BAAN,cAAsC,MAAM;AAAC;AAO7C,IAAM,+BAAN,cAA2C,MAAM;AAAC;AAKlD,IAAM,iCAAN,cAA6C,MAAM;AAAC;;;ACd3D,SAAS,kBAAkB;;;ACD3B,SAAS,gBAAgB,aAAa,iBAAiB;AAEvD,SAAS,eAAe,SAAS,gBAAgB;AAyFzC;AAxED,IAAM,mBAAmB,cAA+C,IAAI;AAkBnF,IAAM,mBAAmB;AAAA,EACxB,UAAU,EAAE,KAAK,eAAe,UAAU,EAAE;AAC7C;;;ADlCO,SAAS,sBAAsB;AACrC,QAAM,YAAY,WAAW,gBAAgB;AAE7C,MAAI,CAAC,WAAW;AACf,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEO,SAAS,eAA0B;AACzC,SAAO,oBAAoB,EAAE;AAC9B;;;AEnBA,SAAS,cAAAA,mBAAkB;AAC3B,SAAS,gBAAgB;;;ACDzB,SAAS,iBAAAC,sBAAqB;AAIvB,IAAM,gBAAgBA,eAAkC,IAAI;;;ADE5D,SAAS,eAAkB,UAAuC;AACxE,QAAM,QAAQC,YAAW,aAAa;AACtC,MAAI,CAAC,OAAO;AACX,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AACA,SAAO,SAAS,OAAO,QAAQ;AAChC;;;AEPO,SAAS,oBAA0C;AACzD,SAAO,eAAe,CAAC,UAAU,MAAM,cAAc;AACtD;;;ACJO,SAAS,mBAAmB;AAClC,QAAM,gBAAgB,eAAe,CAAC,UAAU,MAAM,aAAa;AACnE,QAAM,mBAAmB,eAAe,CAAC,UAAU,MAAM,gBAAgB;AAEzE,UAAQ,kBAAkB;AAAA,IACzB,KAAK;AACJ,aAAO;AAAA,QACN;AAAA,QACA,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN;AAAA,QACA,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd;AAAA,IACD,KAAK,aAAa;AACjB,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd;AAAA,IACD;AAAA,EACD;AACD;;;ARUO,SAAS,kCAAkC;AAAA,EACjD;AAAA,EACA;AAAA,EACA,GAAG;AACJ,IAAsD,CAAC,GAIrD;AACD,QAAM,EAAE,cAAc,IAAI,iBAAiB;AAC3C,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,SAAS,aAAa;AAE5B,SAAO,YAAY;AAAA,IAClB,aAAa,mBAAmB,+BAA+B,WAAW;AAAA,IAC1E,YAAY,OAAO,EAAE,aAAa,SAAS,GAAG,yBAAyB,MAAM;AAC5E,UAAI,CAAC,eAAe;AACnB,cAAM,IAAI,wBAAwB,yBAAyB;AAAA,MAC5D;AAEA,YAAM,gBAAgB,yBAAyB,WAAW;AAC1D,UAAI,CAAC,eAAe;AACnB,cAAM,IAAI;AAAA,UACT;AAAA,QACD;AAAA,MACD;AAEA,UAAI,mBAAmB;AACtB,cAAMC,iBAAgB,cAAc,SAAS,oCAAoC;AACjF,YAAI,CAACA,gBAAe;AACnB,gBAAM,IAAI;AAAA,YACT;AAAA,UACD;AAAA,QACD;AAEA,eAAOA,eAAc,+BAA+B;AAAA,UACnD,GAAG;AAAA,UACH,SAAS;AAAA,UACT,OAAO,yBAAyB,SAAS,cAAc,OAAO,CAAC;AAAA,UAC/D;AAAA,UACA;AAAA,QACD,CAAC;AAAA,MACF;AAEA,YAAM,gBAAgB,cAAc,SAAS,0BAA0B;AACvE,UAAI,CAAC,eAAe;AACnB,cAAM,IAAI;AAAA,UACT;AAAA,QACD;AAAA,MACD;AAEA,YAAM,EAAE,WAAW,sBAAsB,IAAI,MAAM,cAAc,qBAAqB;AAAA,QACrF,GAAG;AAAA,QACH,SAAS;AAAA,QACT,OAAO,yBAAyB,SAAS,cAAc,OAAO,CAAC;AAAA,MAChE,CAAC;AAED,aAAO,OAAO,wBAAwB;AAAA,QACrC,kBAAkB;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,MACD,CAAC;AAAA,IACF;AAAA,IACA,GAAG;AAAA,EACJ,CAAC;AACF;",
|
|
6
|
-
"names": ["useContext", "createContext", "useContext", "walletFeature"]
|
|
7
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { SuiSignTransactionBlockInput, SuiSignTransactionBlockOutput } from '@mysten/wallet-standard';
|
|
2
|
-
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
3
|
-
import { WalletFeatureNotSupportedError, WalletNoAccountSelectedError, WalletNotConnectedError } from '../..//errors/walletErrors.js';
|
|
4
|
-
import type { PartialBy } from '../../types/utilityTypes.js';
|
|
5
|
-
type UseSignTransactionBlockArgs = PartialBy<SuiSignTransactionBlockInput, 'account' | 'chain'>;
|
|
6
|
-
type UseSignTransactionBlockResult = SuiSignTransactionBlockOutput;
|
|
7
|
-
type UseSignTransactionBlockError = WalletFeatureNotSupportedError | WalletNoAccountSelectedError | WalletNotConnectedError | Error;
|
|
8
|
-
type UseSignTransactionBlockMutationOptions = Omit<UseMutationOptions<UseSignTransactionBlockResult, UseSignTransactionBlockError, UseSignTransactionBlockArgs, unknown>, 'mutationFn'>;
|
|
9
|
-
/**
|
|
10
|
-
* Mutation hook for prompting the user to sign a transaction block.
|
|
11
|
-
*/
|
|
12
|
-
export declare function useSignTransactionBlock({ mutationKey, ...mutationOptions }?: UseSignTransactionBlockMutationOptions): UseMutationResult<UseSignTransactionBlockResult, UseSignTransactionBlockError, UseSignTransactionBlockArgs>;
|
|
13
|
-
export {};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/hooks/wallet/useSignTransactionBlock.ts", "../../../../src/errors/walletErrors.ts", "../../../../src/constants/walletMutationKeys.ts", "../../../../src/hooks/wallet/useWalletStore.ts", "../../../../src/contexts/walletContext.ts", "../../../../src/hooks/wallet/useCurrentAccount.ts", "../../../../src/hooks/wallet/useCurrentWallet.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n\tSuiSignTransactionBlockInput,\n\tSuiSignTransactionBlockOutput,\n} from '@mysten/wallet-standard';\nimport type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';\nimport { useMutation } from '@tanstack/react-query';\n\nimport {\n\tWalletFeatureNotSupportedError,\n\tWalletNoAccountSelectedError,\n\tWalletNotConnectedError,\n} from '../..//errors/walletErrors.js';\nimport { walletMutationKeys } from '../../constants/walletMutationKeys.js';\nimport type { PartialBy } from '../../types/utilityTypes.js';\nimport { useCurrentAccount } from './useCurrentAccount.js';\nimport { useCurrentWallet } from './useCurrentWallet.js';\n\ntype UseSignTransactionBlockArgs = PartialBy<SuiSignTransactionBlockInput, 'account' | 'chain'>;\n\ntype UseSignTransactionBlockResult = SuiSignTransactionBlockOutput;\n\ntype UseSignTransactionBlockError =\n\t| WalletFeatureNotSupportedError\n\t| WalletNoAccountSelectedError\n\t| WalletNotConnectedError\n\t| Error;\n\ntype UseSignTransactionBlockMutationOptions = Omit<\n\tUseMutationOptions<\n\t\tUseSignTransactionBlockResult,\n\t\tUseSignTransactionBlockError,\n\t\tUseSignTransactionBlockArgs,\n\t\tunknown\n\t>,\n\t'mutationFn'\n>;\n\n/**\n * Mutation hook for prompting the user to sign a transaction block.\n */\nexport function useSignTransactionBlock({\n\tmutationKey,\n\t...mutationOptions\n}: UseSignTransactionBlockMutationOptions = {}): UseMutationResult<\n\tUseSignTransactionBlockResult,\n\tUseSignTransactionBlockError,\n\tUseSignTransactionBlockArgs\n> {\n\tconst { currentWallet } = useCurrentWallet();\n\tconst currentAccount = useCurrentAccount();\n\n\treturn useMutation({\n\t\tmutationKey: walletMutationKeys.signTransactionBlock(mutationKey),\n\t\tmutationFn: async (signTransactionBlockArgs) => {\n\t\t\tif (!currentWallet) {\n\t\t\t\tthrow new WalletNotConnectedError('No wallet is connected.');\n\t\t\t}\n\n\t\t\tconst signerAccount = signTransactionBlockArgs.account ?? currentAccount;\n\t\t\tif (!signerAccount) {\n\t\t\t\tthrow new WalletNoAccountSelectedError(\n\t\t\t\t\t'No wallet account is selected to sign the transaction block with.',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst walletFeature = currentWallet.features['sui:signTransactionBlock'];\n\t\t\tif (!walletFeature) {\n\t\t\t\tthrow new WalletFeatureNotSupportedError(\n\t\t\t\t\t\"This wallet doesn't support the `SignTransactionBlock` feature.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn await walletFeature.signTransactionBlock({\n\t\t\t\t...signTransactionBlockArgs,\n\t\t\t\taccount: signerAccount,\n\t\t\t\tchain: signTransactionBlockArgs.chain ?? signerAccount.chains[0],\n\t\t\t});\n\t\t},\n\t\t...mutationOptions,\n\t});\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * An error that is instantiated when someone attempts to perform an action that requires an active wallet connection.\n */\nexport class WalletNotConnectedError extends Error {}\n\n/**\n * An error that is instantiated when someone attempts to perform an action that requires a selected wallet account.\n * This is more of an edge case stemming from the fact that wallets don't technically require you to authorize any\n * accounts when connecting a wallet.\n */\nexport class WalletNoAccountSelectedError extends Error {}\n\n/**\n * An error that is instantiated when someone attempts to perform an action that isn't supported by a wallet.\n */\nexport class WalletFeatureNotSupportedError extends Error {}\n\n/**\n * An error that is instantiated when a wallet account can't be found for a specific wallet.\n */\nexport class WalletAccountNotFoundError extends Error {}\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 type { WalletAccount } from '@mysten/wallet-standard';\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves the wallet account that is currently selected, if one exists.\n */\nexport function useCurrentAccount(): WalletAccount | null {\n\treturn useWalletStore((state) => state.currentAccount);\n}\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"],
|
|
5
|
-
"mappings": ";AAQA,SAAS,mBAAmB;;;ACFrB,IAAM,0BAAN,cAAsC,MAAM;AAAC;AAO7C,IAAM,+BAAN,cAA2C,MAAM;AAAC;AAKlD,IAAM,iCAAN,cAA6C,MAAM;AAAC;;;ACbpD,IAAM,qBAAqB;AAAA,EACjC,KAAK,EAAE,WAAW,SAAS;AAAA,EAC3B,eAAe,kBAAkB,gBAAgB;AAAA,EACjD,mBAAmB,kBAAkB,oBAAoB;AAAA,EACzD,kBAAkB,kBAAkB,mBAAmB;AAAA,EACvD,qBAAqB,kBAAkB,uBAAuB;AAAA,EAC9D,sBAAsB,kBAAkB,wBAAwB;AAAA,EAChE,gCAAgC,kBAAkB,oCAAoC;AAAA,EACtF,eAAe,kBAAkB,gBAAgB;AAClD;AAEA,SAAS,kBAAkB,YAAoB;AAC9C,SAAO,SAAS,cAAc,iBAA8B,CAAC,GAAG;AAC/D,WAAO,CAAC,EAAE,GAAG,mBAAmB,KAAK,WAAW,GAAG,GAAG,cAAc;AAAA,EACrE;AACD;;;ACjBA,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;;;ACDzB,SAAS,qBAAqB;AAIvB,IAAM,gBAAgB,cAAkC,IAAI;;;ADE5D,SAAS,eAAkB,UAAuC;AACxE,QAAM,QAAQ,WAAW,aAAa;AACtC,MAAI,CAAC,OAAO;AACX,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AACA,SAAO,SAAS,OAAO,QAAQ;AAChC;;;AEPO,SAAS,oBAA0C;AACzD,SAAO,eAAe,CAAC,UAAU,MAAM,cAAc;AACtD;;;ACJO,SAAS,mBAAmB;AAClC,QAAM,gBAAgB,eAAe,CAAC,UAAU,MAAM,aAAa;AACnE,QAAM,mBAAmB,eAAe,CAAC,UAAU,MAAM,gBAAgB;AAEzE,UAAQ,kBAAkB;AAAA,IACzB,KAAK;AACJ,aAAO;AAAA,QACN;AAAA,QACA,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN;AAAA,QACA,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd;AAAA,IACD,KAAK,aAAa;AACjB,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd;AAAA,IACD;AAAA,EACD;AACD;;;ANIO,SAAS,wBAAwB;AAAA,EACvC;AAAA,EACA,GAAG;AACJ,IAA4C,CAAC,GAI3C;AACD,QAAM,EAAE,cAAc,IAAI,iBAAiB;AAC3C,QAAM,iBAAiB,kBAAkB;AAEzC,SAAO,YAAY;AAAA,IAClB,aAAa,mBAAmB,qBAAqB,WAAW;AAAA,IAChE,YAAY,OAAO,6BAA6B;AAC/C,UAAI,CAAC,eAAe;AACnB,cAAM,IAAI,wBAAwB,yBAAyB;AAAA,MAC5D;AAEA,YAAM,gBAAgB,yBAAyB,WAAW;AAC1D,UAAI,CAAC,eAAe;AACnB,cAAM,IAAI;AAAA,UACT;AAAA,QACD;AAAA,MACD;AAEA,YAAM,gBAAgB,cAAc,SAAS,0BAA0B;AACvE,UAAI,CAAC,eAAe;AACnB,cAAM,IAAI;AAAA,UACT;AAAA,QACD;AAAA,MACD;AAEA,aAAO,MAAM,cAAc,qBAAqB;AAAA,QAC/C,GAAG;AAAA,QACH,SAAS;AAAA,QACT,OAAO,yBAAyB,SAAS,cAAc,OAAO,CAAC;AAAA,MAChE,CAAC;AAAA,IACF;AAAA,IACA,GAAG;AAAA,EACJ,CAAC;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Mysten Labs, Inc.
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
|
|
4
|
-
import type {
|
|
5
|
-
SuiSignAndExecuteTransactionBlockInput,
|
|
6
|
-
SuiSignAndExecuteTransactionBlockOutput,
|
|
7
|
-
} from '@mysten/wallet-standard';
|
|
8
|
-
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
9
|
-
import { useMutation } from '@tanstack/react-query';
|
|
10
|
-
|
|
11
|
-
import { walletMutationKeys } from '../../constants/walletMutationKeys.js';
|
|
12
|
-
import {
|
|
13
|
-
WalletFeatureNotSupportedError,
|
|
14
|
-
WalletNoAccountSelectedError,
|
|
15
|
-
WalletNotConnectedError,
|
|
16
|
-
} from '../../errors/walletErrors.js';
|
|
17
|
-
import type { PartialBy } from '../../types/utilityTypes.js';
|
|
18
|
-
import { useSuiClient } from '../useSuiClient.js';
|
|
19
|
-
import { useCurrentAccount } from './useCurrentAccount.js';
|
|
20
|
-
import { useCurrentWallet } from './useCurrentWallet.js';
|
|
21
|
-
|
|
22
|
-
type UseSignAndExecuteTransactionBlockArgs = PartialBy<
|
|
23
|
-
SuiSignAndExecuteTransactionBlockInput,
|
|
24
|
-
'account' | 'chain'
|
|
25
|
-
>;
|
|
26
|
-
|
|
27
|
-
type UseSignAndExecuteTransactionBlockResult = SuiSignAndExecuteTransactionBlockOutput;
|
|
28
|
-
|
|
29
|
-
type UseSignAndExecuteTransactionBlockError =
|
|
30
|
-
| WalletFeatureNotSupportedError
|
|
31
|
-
| WalletNoAccountSelectedError
|
|
32
|
-
| WalletNotConnectedError
|
|
33
|
-
| Error;
|
|
34
|
-
|
|
35
|
-
type UseSignAndExecuteTransactionBlockMutationOptions = Omit<
|
|
36
|
-
UseMutationOptions<
|
|
37
|
-
UseSignAndExecuteTransactionBlockResult,
|
|
38
|
-
UseSignAndExecuteTransactionBlockError,
|
|
39
|
-
UseSignAndExecuteTransactionBlockArgs,
|
|
40
|
-
unknown
|
|
41
|
-
>,
|
|
42
|
-
'mutationFn'
|
|
43
|
-
> & {
|
|
44
|
-
executeFromWallet?: boolean;
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Mutation hook for prompting the user to sign and execute a transaction block.
|
|
49
|
-
*/
|
|
50
|
-
export function useSignAndExecuteTransactionBlock({
|
|
51
|
-
mutationKey,
|
|
52
|
-
executeFromWallet,
|
|
53
|
-
...mutationOptions
|
|
54
|
-
}: UseSignAndExecuteTransactionBlockMutationOptions = {}): UseMutationResult<
|
|
55
|
-
UseSignAndExecuteTransactionBlockResult,
|
|
56
|
-
UseSignAndExecuteTransactionBlockError,
|
|
57
|
-
UseSignAndExecuteTransactionBlockArgs
|
|
58
|
-
> {
|
|
59
|
-
const { currentWallet } = useCurrentWallet();
|
|
60
|
-
const currentAccount = useCurrentAccount();
|
|
61
|
-
const client = useSuiClient();
|
|
62
|
-
|
|
63
|
-
return useMutation({
|
|
64
|
-
mutationKey: walletMutationKeys.signAndExecuteTransactionBlock(mutationKey),
|
|
65
|
-
mutationFn: async ({ requestType, options, ...signTransactionBlockArgs }) => {
|
|
66
|
-
if (!currentWallet) {
|
|
67
|
-
throw new WalletNotConnectedError('No wallet is connected.');
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const signerAccount = signTransactionBlockArgs.account ?? currentAccount;
|
|
71
|
-
if (!signerAccount) {
|
|
72
|
-
throw new WalletNoAccountSelectedError(
|
|
73
|
-
'No wallet account is selected to sign and execute the transaction block with.',
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (executeFromWallet) {
|
|
78
|
-
const walletFeature = currentWallet.features['sui:signAndExecuteTransactionBlock'];
|
|
79
|
-
if (!walletFeature) {
|
|
80
|
-
throw new WalletFeatureNotSupportedError(
|
|
81
|
-
"This wallet doesn't support the `signAndExecuteTransactionBlock` feature.",
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return walletFeature.signAndExecuteTransactionBlock({
|
|
86
|
-
...signTransactionBlockArgs,
|
|
87
|
-
account: signerAccount,
|
|
88
|
-
chain: signTransactionBlockArgs.chain ?? signerAccount.chains[0],
|
|
89
|
-
requestType,
|
|
90
|
-
options,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const walletFeature = currentWallet.features['sui:signTransactionBlock'];
|
|
95
|
-
if (!walletFeature) {
|
|
96
|
-
throw new WalletFeatureNotSupportedError(
|
|
97
|
-
"This wallet doesn't support the `signTransactionBlock` feature.",
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const { signature, transactionBlockBytes } = await walletFeature.signTransactionBlock({
|
|
102
|
-
...signTransactionBlockArgs,
|
|
103
|
-
account: signerAccount,
|
|
104
|
-
chain: signTransactionBlockArgs.chain ?? signerAccount.chains[0],
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
return client.executeTransactionBlock({
|
|
108
|
-
transactionBlock: transactionBlockBytes,
|
|
109
|
-
signature,
|
|
110
|
-
requestType,
|
|
111
|
-
options,
|
|
112
|
-
});
|
|
113
|
-
},
|
|
114
|
-
...mutationOptions,
|
|
115
|
-
});
|
|
116
|
-
}
|