@mysten/dapp-kit 0.5.0 → 0.7.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 +35 -0
- package/README.md +4 -4
- package/dist/cjs/components/AccountDropdownMenu.js +34 -6
- package/dist/cjs/components/AccountDropdownMenu.js.map +2 -2
- package/dist/cjs/components/ConnectButton.js +56 -16
- package/dist/cjs/components/ConnectButton.js.map +3 -3
- package/dist/cjs/components/WalletProvider.js +91 -28
- package/dist/cjs/components/WalletProvider.js.map +3 -3
- package/dist/cjs/components/connect-modal/ConnectModal.js +16 -9
- package/dist/cjs/components/connect-modal/ConnectModal.js.map +2 -2
- package/dist/cjs/hooks/useResolveSuiNSNames.d.ts +2 -106
- package/dist/cjs/hooks/useResolveSuiNSNames.js +3 -3
- package/dist/cjs/hooks/useResolveSuiNSNames.js.map +2 -2
- package/dist/cjs/hooks/useSuiClientInfiniteQuery.d.ts +7 -8
- package/dist/cjs/hooks/useSuiClientInfiniteQuery.js +11 -7
- package/dist/cjs/hooks/useSuiClientInfiniteQuery.js.map +2 -2
- package/dist/cjs/hooks/useSuiClientMutation.d.ts +2 -2
- package/dist/cjs/hooks/useSuiClientMutation.js.map +2 -2
- package/dist/cjs/hooks/useSuiClientQuery.d.ts +4 -3
- package/dist/cjs/hooks/useSuiClientQuery.js.map +2 -2
- package/dist/cjs/hooks/wallet/useAccounts.d.ts +2 -1
- package/dist/cjs/hooks/wallet/useAccounts.js.map +2 -2
- package/dist/cjs/hooks/wallet/useAutoConnectWallet.js +65 -15
- package/dist/cjs/hooks/wallet/useAutoConnectWallet.js.map +3 -3
- package/dist/cjs/hooks/wallet/useAutoConnectionStatus.d.ts +4 -0
- package/dist/cjs/hooks/wallet/useAutoConnectionStatus.js +50 -0
- package/dist/cjs/hooks/wallet/useAutoConnectionStatus.js.map +7 -0
- package/dist/cjs/hooks/wallet/useConnectWallet.d.ts +3 -5
- package/dist/cjs/hooks/wallet/useConnectWallet.js +15 -8
- package/dist/cjs/hooks/wallet/useConnectWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useCurrentAccount.d.ts +2 -1
- package/dist/cjs/hooks/wallet/useCurrentAccount.js.map +2 -2
- package/dist/cjs/hooks/wallet/useCurrentWallet.d.ts +19 -1
- package/dist/cjs/hooks/wallet/useCurrentWallet.js +29 -1
- package/dist/cjs/hooks/wallet/useCurrentWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useDisconnectWallet.d.ts +2 -2
- package/dist/cjs/hooks/wallet/useDisconnectWallet.js +30 -2
- package/dist/cjs/hooks/wallet/useDisconnectWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.d.ts +2 -2
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.js +30 -2
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.js.map +2 -2
- package/dist/cjs/hooks/wallet/useSignPersonalMessage.d.ts +2 -2
- package/dist/cjs/hooks/wallet/useSignPersonalMessage.js +30 -2
- package/dist/cjs/hooks/wallet/useSignPersonalMessage.js.map +2 -2
- package/dist/cjs/hooks/wallet/useSignTransactionBlock.d.ts +2 -2
- package/dist/cjs/hooks/wallet/useSignTransactionBlock.js +30 -2
- package/dist/cjs/hooks/wallet/useSignTransactionBlock.js.map +2 -2
- package/dist/cjs/hooks/wallet/useSwitchAccount.d.ts +2 -2
- package/dist/cjs/hooks/wallet/useSwitchAccount.js +30 -2
- package/dist/cjs/hooks/wallet/useSwitchAccount.js.map +2 -2
- package/dist/cjs/hooks/wallet/useWalletPropertiesChanged.js +30 -2
- package/dist/cjs/hooks/wallet/useWalletPropertiesChanged.js.map +2 -2
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +119 -39
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/walletStore.d.ts +10 -2
- package/dist/cjs/walletStore.js +23 -4
- package/dist/cjs/walletStore.js.map +2 -2
- package/dist/esm/components/AccountDropdownMenu.d.ts +2 -2
- package/dist/esm/components/AccountDropdownMenu.js +34 -6
- package/dist/esm/components/AccountDropdownMenu.js.map +2 -2
- package/dist/esm/components/ConnectButton.d.ts +1 -1
- package/dist/esm/components/ConnectButton.js +56 -16
- package/dist/esm/components/ConnectButton.js.map +3 -3
- package/dist/esm/components/SuiClientProvider.d.ts +1 -1
- package/dist/esm/components/WalletProvider.d.ts +1 -1
- package/dist/esm/components/WalletProvider.js +91 -28
- package/dist/esm/components/WalletProvider.js.map +3 -3
- package/dist/esm/components/connect-modal/ConnectModal.d.ts +1 -1
- package/dist/esm/components/connect-modal/ConnectModal.js +16 -9
- package/dist/esm/components/connect-modal/ConnectModal.js.map +2 -2
- package/dist/esm/components/connect-modal/InfoSection.d.ts +1 -1
- package/dist/esm/components/connect-modal/views/ConnectionStatus.d.ts +1 -1
- package/dist/esm/components/connect-modal/views/GettingStarted.d.ts +1 -1
- package/dist/esm/components/connect-modal/views/WhatIsAWallet.d.ts +1 -1
- package/dist/esm/components/connect-modal/wallet-list/WalletList.d.ts +1 -1
- package/dist/esm/components/connect-modal/wallet-list/WalletListItem.d.ts +1 -1
- package/dist/esm/components/styling/InjectedThemeStyles.d.ts +1 -1
- package/dist/esm/contexts/walletContext.d.ts +2 -2
- package/dist/esm/hooks/useResolveSuiNSNames.d.ts +2 -106
- package/dist/esm/hooks/useResolveSuiNSNames.js +3 -3
- package/dist/esm/hooks/useResolveSuiNSNames.js.map +2 -2
- package/dist/esm/hooks/useSuiClientInfiniteQuery.d.ts +7 -8
- package/dist/esm/hooks/useSuiClientInfiniteQuery.js +11 -7
- package/dist/esm/hooks/useSuiClientInfiniteQuery.js.map +2 -2
- package/dist/esm/hooks/useSuiClientMutation.d.ts +2 -2
- package/dist/esm/hooks/useSuiClientMutation.js.map +2 -2
- package/dist/esm/hooks/useSuiClientQuery.d.ts +4 -3
- package/dist/esm/hooks/useSuiClientQuery.js.map +2 -2
- package/dist/esm/hooks/wallet/useAccounts.d.ts +2 -1
- package/dist/esm/hooks/wallet/useAccounts.js.map +2 -2
- package/dist/esm/hooks/wallet/useAutoConnectWallet.js +65 -15
- package/dist/esm/hooks/wallet/useAutoConnectWallet.js.map +3 -3
- package/dist/esm/hooks/wallet/useAutoConnectionStatus.d.ts +4 -0
- package/dist/esm/hooks/wallet/useAutoConnectionStatus.js +27 -0
- package/dist/esm/hooks/wallet/useAutoConnectionStatus.js.map +7 -0
- package/dist/esm/hooks/wallet/useConnectWallet.d.ts +3 -5
- package/dist/esm/hooks/wallet/useConnectWallet.js +15 -8
- package/dist/esm/hooks/wallet/useConnectWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useCurrentAccount.d.ts +2 -1
- package/dist/esm/hooks/wallet/useCurrentAccount.js.map +2 -2
- package/dist/esm/hooks/wallet/useCurrentWallet.d.ts +19 -1
- package/dist/esm/hooks/wallet/useCurrentWallet.js +29 -1
- package/dist/esm/hooks/wallet/useCurrentWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useDisconnectWallet.d.ts +2 -2
- package/dist/esm/hooks/wallet/useDisconnectWallet.js +30 -2
- package/dist/esm/hooks/wallet/useDisconnectWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.d.ts +2 -2
- package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.js +30 -2
- package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.js.map +2 -2
- package/dist/esm/hooks/wallet/useSignPersonalMessage.d.ts +2 -2
- package/dist/esm/hooks/wallet/useSignPersonalMessage.js +30 -2
- package/dist/esm/hooks/wallet/useSignPersonalMessage.js.map +2 -2
- package/dist/esm/hooks/wallet/useSignTransactionBlock.d.ts +2 -2
- package/dist/esm/hooks/wallet/useSignTransactionBlock.js +30 -2
- package/dist/esm/hooks/wallet/useSignTransactionBlock.js.map +2 -2
- package/dist/esm/hooks/wallet/useSwitchAccount.d.ts +2 -2
- package/dist/esm/hooks/wallet/useSwitchAccount.js +30 -2
- package/dist/esm/hooks/wallet/useSwitchAccount.js.map +2 -2
- package/dist/esm/hooks/wallet/useWalletPropertiesChanged.js +30 -2
- package/dist/esm/hooks/wallet/useWalletPropertiesChanged.js.map +2 -2
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +119 -39
- package/dist/esm/index.js.map +4 -4
- package/dist/esm/walletStore.d.ts +10 -2
- package/dist/esm/walletStore.js +23 -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 +5 -5
- package/src/components/ConnectButton.tsx +8 -1
- package/src/components/WalletProvider.tsx +1 -0
- package/src/components/connect-modal/ConnectModal.tsx +1 -3
- package/src/hooks/useResolveSuiNSNames.ts +7 -8
- package/src/hooks/useSuiClientInfiniteQuery.ts +43 -25
- package/src/hooks/useSuiClientMutation.ts +2 -2
- package/src/hooks/useSuiClientQuery.ts +13 -9
- package/src/hooks/wallet/useAccounts.ts +3 -1
- package/src/hooks/wallet/useAutoConnectWallet.ts +24 -7
- package/src/hooks/wallet/useAutoConnectionStatus.ts +12 -0
- package/src/hooks/wallet/useConnectWallet.ts +24 -10
- package/src/hooks/wallet/useCurrentAccount.ts +3 -1
- package/src/hooks/wallet/useCurrentWallet.ts +30 -1
- package/src/hooks/wallet/useDisconnectWallet.ts +7 -3
- package/src/hooks/wallet/useSignAndExecuteTransactionBlock.ts +7 -3
- package/src/hooks/wallet/useSignPersonalMessage.ts +7 -3
- package/src/hooks/wallet/useSignTransactionBlock.ts +7 -3
- package/src/hooks/wallet/useSwitchAccount.ts +7 -3
- package/src/hooks/wallet/useWalletPropertiesChanged.ts +1 -1
- package/src/index.ts +1 -0
- package/src/walletStore.ts +30 -2
|
@@ -2,9 +2,14 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import type { SuiClient } from '@mysten/sui.js/client';
|
|
5
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
InfiniteData,
|
|
7
|
+
UseInfiniteQueryOptions,
|
|
8
|
+
UseInfiniteQueryResult,
|
|
9
|
+
} from '@tanstack/react-query';
|
|
6
10
|
import { useInfiniteQuery } from '@tanstack/react-query';
|
|
7
11
|
|
|
12
|
+
import type { PartialBy } from '../types/utilityTypes.js';
|
|
8
13
|
import { useSuiClientContext } from './useSuiClient.js';
|
|
9
14
|
|
|
10
15
|
interface PaginatedResult {
|
|
@@ -12,52 +17,65 @@ interface PaginatedResult {
|
|
|
12
17
|
nextCursor?: unknown;
|
|
13
18
|
hasNextPage: boolean;
|
|
14
19
|
}
|
|
20
|
+
|
|
15
21
|
export type SuiRpcPaginatedMethodName = {
|
|
16
22
|
[K in keyof SuiClient]: SuiClient[K] extends (input: any) => Promise<PaginatedResult> ? K : never;
|
|
17
23
|
}[keyof SuiClient];
|
|
18
24
|
|
|
19
25
|
export type SuiRpcPaginatedMethods = {
|
|
20
|
-
[K in SuiRpcPaginatedMethodName]: SuiClient[K] extends (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
hasNextPage: boolean;
|
|
24
|
-
}>
|
|
26
|
+
[K in SuiRpcPaginatedMethodName]: SuiClient[K] extends (
|
|
27
|
+
input: infer Params,
|
|
28
|
+
) => Promise<infer Result extends { nextCursor?: infer Cursor | null }>
|
|
25
29
|
? {
|
|
26
30
|
name: K;
|
|
27
|
-
result:
|
|
28
|
-
params:
|
|
31
|
+
result: Result;
|
|
32
|
+
params: Params;
|
|
29
33
|
cursor: Cursor;
|
|
30
34
|
}
|
|
31
35
|
: never;
|
|
32
36
|
};
|
|
33
37
|
|
|
34
|
-
export type UseSuiClientInfiniteQueryOptions<
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
export type UseSuiClientInfiniteQueryOptions<
|
|
39
|
+
T extends keyof SuiRpcPaginatedMethods,
|
|
40
|
+
TData,
|
|
41
|
+
> = PartialBy<
|
|
42
|
+
Omit<
|
|
43
|
+
UseInfiniteQueryOptions<
|
|
44
|
+
SuiRpcPaginatedMethods[T]['result'],
|
|
45
|
+
Error,
|
|
46
|
+
TData,
|
|
47
|
+
SuiRpcPaginatedMethods[T]['result'],
|
|
48
|
+
unknown[]
|
|
49
|
+
>,
|
|
50
|
+
'queryFn' | 'initialPageParam' | 'getNextPageParam'
|
|
41
51
|
>,
|
|
42
|
-
'
|
|
52
|
+
'queryKey'
|
|
43
53
|
>;
|
|
44
54
|
|
|
45
|
-
export function useSuiClientInfiniteQuery<
|
|
55
|
+
export function useSuiClientInfiniteQuery<
|
|
56
|
+
T extends keyof SuiRpcPaginatedMethods,
|
|
57
|
+
TData = InfiniteData<SuiRpcPaginatedMethods[T]['result']>,
|
|
58
|
+
>(
|
|
46
59
|
method: T,
|
|
47
60
|
params: SuiRpcPaginatedMethods[T]['params'],
|
|
48
|
-
{
|
|
49
|
-
|
|
61
|
+
{
|
|
62
|
+
queryKey = [],
|
|
63
|
+
enabled = !!params,
|
|
64
|
+
...options
|
|
65
|
+
}: UseSuiClientInfiniteQueryOptions<T, TData> = {},
|
|
66
|
+
): UseInfiniteQueryResult<TData, Error> {
|
|
50
67
|
const suiContext = useSuiClientContext();
|
|
51
68
|
|
|
52
69
|
return useInfiniteQuery({
|
|
53
70
|
...options,
|
|
71
|
+
initialPageParam: null,
|
|
54
72
|
queryKey: [suiContext.network, method, params, ...queryKey],
|
|
55
73
|
enabled,
|
|
56
|
-
queryFn:
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
},
|
|
74
|
+
queryFn: ({ pageParam }) =>
|
|
75
|
+
suiContext.client[method]({
|
|
76
|
+
...(params ?? {}),
|
|
77
|
+
cursor: pageParam,
|
|
78
|
+
} as never),
|
|
79
|
+
getNextPageParam: ({ nextCursor }) => nextCursor ?? null,
|
|
62
80
|
});
|
|
63
81
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Mysten Labs, Inc.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import type { UseMutationOptions } from '@tanstack/react-query';
|
|
4
|
+
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
5
5
|
import { useMutation } from '@tanstack/react-query';
|
|
6
6
|
|
|
7
7
|
import { useSuiClientContext } from './useSuiClient.js';
|
|
@@ -15,7 +15,7 @@ export type UseSuiClientMutationOptions<T extends keyof SuiRpcMethods> = Omit<
|
|
|
15
15
|
export function useSuiClientMutation<T extends keyof SuiRpcMethods>(
|
|
16
16
|
method: T,
|
|
17
17
|
options: UseSuiClientMutationOptions<T> = {},
|
|
18
|
-
) {
|
|
18
|
+
): UseMutationResult<SuiRpcMethods[T]['result'], Error, SuiRpcMethods[T]['params'], unknown[]> {
|
|
19
19
|
const suiContext = useSuiClientContext();
|
|
20
20
|
|
|
21
21
|
return useMutation({
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import type { SuiClient } from '@mysten/sui.js/client';
|
|
5
|
-
import type { UseQueryOptions } from '@tanstack/react-query';
|
|
5
|
+
import type { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
|
|
6
6
|
import { useQuery } from '@tanstack/react-query';
|
|
7
7
|
|
|
8
|
+
import type { PartialBy } from '../types/utilityTypes.js';
|
|
8
9
|
import { useSuiClientContext } from './useSuiClient.js';
|
|
9
10
|
|
|
10
11
|
export type SuiRpcMethodName = {
|
|
@@ -29,20 +30,23 @@ export type SuiRpcMethods = {
|
|
|
29
30
|
: never;
|
|
30
31
|
};
|
|
31
32
|
|
|
32
|
-
export type UseSuiClientQueryOptions<T extends keyof SuiRpcMethods> =
|
|
33
|
-
UseQueryOptions<SuiRpcMethods[T]['result'], Error,
|
|
34
|
-
'
|
|
33
|
+
export type UseSuiClientQueryOptions<T extends keyof SuiRpcMethods, TData> = PartialBy<
|
|
34
|
+
Omit<UseQueryOptions<SuiRpcMethods[T]['result'], Error, TData, unknown[]>, 'queryFn'>,
|
|
35
|
+
'queryKey'
|
|
35
36
|
>;
|
|
36
37
|
|
|
37
|
-
export function useSuiClientQuery<
|
|
38
|
+
export function useSuiClientQuery<
|
|
39
|
+
T extends keyof SuiRpcMethods,
|
|
40
|
+
TData = SuiRpcMethods[T]['result'],
|
|
41
|
+
>(
|
|
38
42
|
...args: undefined extends SuiRpcMethods[T]['params']
|
|
39
|
-
? [method: T, params?: SuiRpcMethods[T]['params'], options?: UseSuiClientQueryOptions<T>]
|
|
40
|
-
: [method: T, params: SuiRpcMethods[T]['params'], options?: UseSuiClientQueryOptions<T>]
|
|
41
|
-
) {
|
|
43
|
+
? [method: T, params?: SuiRpcMethods[T]['params'], options?: UseSuiClientQueryOptions<T, TData>]
|
|
44
|
+
: [method: T, params: SuiRpcMethods[T]['params'], options?: UseSuiClientQueryOptions<T, TData>]
|
|
45
|
+
): UseQueryResult<TData, Error> {
|
|
42
46
|
const [method, params, { queryKey = [], ...options } = {}] = args as [
|
|
43
47
|
method: T,
|
|
44
48
|
params?: SuiRpcMethods[T]['params'],
|
|
45
|
-
options?: UseSuiClientQueryOptions<T>,
|
|
49
|
+
options?: UseSuiClientQueryOptions<T, TData>,
|
|
46
50
|
];
|
|
47
51
|
|
|
48
52
|
const suiContext = useSuiClientContext();
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
// Copyright (c) Mysten Labs, Inc.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
+
import type { WalletAccount } from '@mysten/wallet-standard';
|
|
5
|
+
|
|
4
6
|
import { useWalletStore } from './useWalletStore.js';
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* Retrieves a list of connected accounts authorized by the dApp.
|
|
8
10
|
*/
|
|
9
|
-
export function useAccounts() {
|
|
11
|
+
export function useAccounts(): readonly WalletAccount[] {
|
|
10
12
|
return useWalletStore((state) => state.accounts);
|
|
11
13
|
}
|
|
@@ -4,31 +4,48 @@
|
|
|
4
4
|
import { useEffect } from 'react';
|
|
5
5
|
|
|
6
6
|
import { useConnectWallet } from './useConnectWallet.js';
|
|
7
|
+
import { useCurrentWallet } from './useCurrentWallet.js';
|
|
7
8
|
import { useWallets } from './useWallets.js';
|
|
8
9
|
import { useWalletStore } from './useWalletStore.js';
|
|
9
10
|
|
|
10
11
|
export function useAutoConnectWallet(autoConnectEnabled: boolean) {
|
|
11
12
|
const { mutate: connectWallet } = useConnectWallet();
|
|
12
|
-
const
|
|
13
|
+
const setAutoConnectionStatus = useWalletStore((state) => state.setAutoConnectionStatus);
|
|
13
14
|
const lastConnectedWalletName = useWalletStore((state) => state.lastConnectedWalletName);
|
|
14
15
|
const lastConnectedAccountAddress = useWalletStore((state) => state.lastConnectedAccountAddress);
|
|
16
|
+
const wallets = useWallets();
|
|
17
|
+
const { isDisconnected } = useCurrentWallet();
|
|
15
18
|
|
|
16
19
|
useEffect(() => {
|
|
17
|
-
if (
|
|
20
|
+
if (
|
|
21
|
+
!autoConnectEnabled ||
|
|
22
|
+
!lastConnectedWalletName ||
|
|
23
|
+
!lastConnectedAccountAddress ||
|
|
24
|
+
!isDisconnected
|
|
25
|
+
) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
18
28
|
|
|
19
29
|
const wallet = wallets.find((wallet) => wallet.name === lastConnectedWalletName);
|
|
20
30
|
if (wallet) {
|
|
21
|
-
connectWallet(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
31
|
+
connectWallet(
|
|
32
|
+
{
|
|
33
|
+
wallet,
|
|
34
|
+
accountAddress: lastConnectedAccountAddress,
|
|
35
|
+
silent: true,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
onSettled: () => setAutoConnectionStatus('settled'),
|
|
39
|
+
},
|
|
40
|
+
);
|
|
26
41
|
}
|
|
27
42
|
}, [
|
|
28
43
|
autoConnectEnabled,
|
|
29
44
|
connectWallet,
|
|
45
|
+
isDisconnected,
|
|
30
46
|
lastConnectedAccountAddress,
|
|
31
47
|
lastConnectedWalletName,
|
|
48
|
+
setAutoConnectionStatus,
|
|
32
49
|
wallets,
|
|
33
50
|
]);
|
|
34
51
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Copyright (c) Mysten Labs, Inc.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { useWalletStore } from './useWalletStore.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Retrieves the status for the initial wallet auto-connection process.
|
|
8
|
+
*/
|
|
9
|
+
export function useAutoConnectionStatus() {
|
|
10
|
+
// TODO: Replace this with shareable mutation state once we require react-query v5
|
|
11
|
+
return useWalletStore((state) => state.autoConnectionStatus);
|
|
12
|
+
}
|
|
@@ -7,7 +7,7 @@ import type {
|
|
|
7
7
|
WalletAccount,
|
|
8
8
|
WalletWithRequiredFeatures,
|
|
9
9
|
} from '@mysten/wallet-standard';
|
|
10
|
-
import type { UseMutationOptions } from '@tanstack/react-query';
|
|
10
|
+
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
11
11
|
import { useMutation } from '@tanstack/react-query';
|
|
12
12
|
|
|
13
13
|
import { walletMutationKeys } from '../../constants/walletMutationKeys.js';
|
|
@@ -34,20 +34,34 @@ type UseConnectWalletMutationOptions = Omit<
|
|
|
34
34
|
export function useConnectWallet({
|
|
35
35
|
mutationKey,
|
|
36
36
|
...mutationOptions
|
|
37
|
-
}: UseConnectWalletMutationOptions = {})
|
|
37
|
+
}: UseConnectWalletMutationOptions = {}): UseMutationResult<
|
|
38
|
+
ConnectWalletResult,
|
|
39
|
+
Error,
|
|
40
|
+
ConnectWalletArgs,
|
|
41
|
+
unknown
|
|
42
|
+
> {
|
|
38
43
|
const setWalletConnected = useWalletStore((state) => state.setWalletConnected);
|
|
44
|
+
const setConnectionStatus = useWalletStore((state) => state.setConnectionStatus);
|
|
39
45
|
|
|
40
46
|
return useMutation({
|
|
41
47
|
mutationKey: walletMutationKeys.connectWallet(mutationKey),
|
|
42
|
-
mutationFn: async ({ wallet, accountAddress, ...
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
account.chains.some((chain) => chain.split(':')[0] === 'sui'),
|
|
46
|
-
);
|
|
47
|
-
const selectedAccount = getSelectedAccount(connectedSuiAccounts, accountAddress);
|
|
48
|
+
mutationFn: async ({ wallet, accountAddress, ...connectArgs }) => {
|
|
49
|
+
try {
|
|
50
|
+
setConnectionStatus('connecting');
|
|
48
51
|
|
|
49
|
-
|
|
50
|
-
|
|
52
|
+
const connectResult = await wallet.features['standard:connect'].connect(connectArgs);
|
|
53
|
+
const connectedSuiAccounts = connectResult.accounts.filter((account) =>
|
|
54
|
+
account.chains.some((chain) => chain.split(':')[0] === 'sui'),
|
|
55
|
+
);
|
|
56
|
+
const selectedAccount = getSelectedAccount(connectedSuiAccounts, accountAddress);
|
|
57
|
+
|
|
58
|
+
setWalletConnected(wallet, connectedSuiAccounts, selectedAccount);
|
|
59
|
+
|
|
60
|
+
return { accounts: connectedSuiAccounts };
|
|
61
|
+
} catch (error) {
|
|
62
|
+
setConnectionStatus('disconnected');
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
51
65
|
},
|
|
52
66
|
...mutationOptions,
|
|
53
67
|
});
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
// Copyright (c) Mysten Labs, Inc.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
+
import type { WalletAccount } from '@mysten/wallet-standard';
|
|
5
|
+
|
|
4
6
|
import { useWalletStore } from './useWalletStore.js';
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* Retrieves the wallet account that is currently selected, if one exists.
|
|
8
10
|
*/
|
|
9
|
-
export function useCurrentAccount() {
|
|
11
|
+
export function useCurrentAccount(): WalletAccount | null {
|
|
10
12
|
return useWalletStore((state) => state.currentAccount);
|
|
11
13
|
}
|
|
@@ -7,5 +7,34 @@ import { useWalletStore } from './useWalletStore.js';
|
|
|
7
7
|
* Retrieves the wallet that is currently connected to the dApp, if one exists.
|
|
8
8
|
*/
|
|
9
9
|
export function useCurrentWallet() {
|
|
10
|
-
|
|
10
|
+
const currentWallet = useWalletStore((state) => state.currentWallet);
|
|
11
|
+
const connectionStatus = useWalletStore((state) => state.connectionStatus);
|
|
12
|
+
|
|
13
|
+
switch (connectionStatus) {
|
|
14
|
+
case 'connecting':
|
|
15
|
+
return {
|
|
16
|
+
connectionStatus,
|
|
17
|
+
currentWallet: null,
|
|
18
|
+
isDisconnected: false,
|
|
19
|
+
isConnecting: true,
|
|
20
|
+
isConnected: false,
|
|
21
|
+
} as const;
|
|
22
|
+
case 'disconnected':
|
|
23
|
+
return {
|
|
24
|
+
connectionStatus,
|
|
25
|
+
currentWallet: null,
|
|
26
|
+
isDisconnected: true,
|
|
27
|
+
isConnecting: false,
|
|
28
|
+
isConnected: false,
|
|
29
|
+
} as const;
|
|
30
|
+
case 'connected': {
|
|
31
|
+
return {
|
|
32
|
+
connectionStatus,
|
|
33
|
+
currentWallet: currentWallet!,
|
|
34
|
+
isDisconnected: false,
|
|
35
|
+
isConnecting: false,
|
|
36
|
+
isConnected: true,
|
|
37
|
+
} as const;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
11
40
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Mysten Labs, Inc.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import type { UseMutationOptions } from '@tanstack/react-query';
|
|
4
|
+
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
5
5
|
import { useMutation } from '@tanstack/react-query';
|
|
6
6
|
|
|
7
7
|
import { walletMutationKeys } from '../../constants/walletMutationKeys.js';
|
|
@@ -22,8 +22,12 @@ type UseDisconnectWalletMutationOptions = Omit<
|
|
|
22
22
|
export function useDisconnectWallet({
|
|
23
23
|
mutationKey,
|
|
24
24
|
...mutationOptions
|
|
25
|
-
}: UseDisconnectWalletMutationOptions = {})
|
|
26
|
-
|
|
25
|
+
}: UseDisconnectWalletMutationOptions = {}): UseMutationResult<
|
|
26
|
+
void,
|
|
27
|
+
UseDisconnectWalletError,
|
|
28
|
+
void
|
|
29
|
+
> {
|
|
30
|
+
const { currentWallet } = useCurrentWallet();
|
|
27
31
|
const setWalletDisconnected = useWalletStore((state) => state.setWalletDisconnected);
|
|
28
32
|
|
|
29
33
|
return useMutation({
|
|
@@ -5,7 +5,7 @@ import type {
|
|
|
5
5
|
SuiSignAndExecuteTransactionBlockInput,
|
|
6
6
|
SuiSignAndExecuteTransactionBlockOutput,
|
|
7
7
|
} from '@mysten/wallet-standard';
|
|
8
|
-
import type { UseMutationOptions } from '@tanstack/react-query';
|
|
8
|
+
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
9
9
|
import { useMutation } from '@tanstack/react-query';
|
|
10
10
|
|
|
11
11
|
import { walletMutationKeys } from '../../constants/walletMutationKeys.js';
|
|
@@ -51,8 +51,12 @@ export function useSignAndExecuteTransactionBlock({
|
|
|
51
51
|
mutationKey,
|
|
52
52
|
executeFromWallet,
|
|
53
53
|
...mutationOptions
|
|
54
|
-
}: UseSignAndExecuteTransactionBlockMutationOptions = {})
|
|
55
|
-
|
|
54
|
+
}: UseSignAndExecuteTransactionBlockMutationOptions = {}): UseMutationResult<
|
|
55
|
+
UseSignAndExecuteTransactionBlockResult,
|
|
56
|
+
UseSignAndExecuteTransactionBlockError,
|
|
57
|
+
UseSignAndExecuteTransactionBlockArgs
|
|
58
|
+
> {
|
|
59
|
+
const { currentWallet } = useCurrentWallet();
|
|
56
60
|
const currentAccount = useCurrentAccount();
|
|
57
61
|
const client = useSuiClient();
|
|
58
62
|
|
|
@@ -5,7 +5,7 @@ import type {
|
|
|
5
5
|
SuiSignPersonalMessageInput,
|
|
6
6
|
SuiSignPersonalMessageOutput,
|
|
7
7
|
} from '@mysten/wallet-standard';
|
|
8
|
-
import type { UseMutationOptions } from '@tanstack/react-query';
|
|
8
|
+
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
9
9
|
import { useMutation } from '@tanstack/react-query';
|
|
10
10
|
|
|
11
11
|
import {
|
|
@@ -44,8 +44,12 @@ type UseSignPersonalMessageMutationOptions = Omit<
|
|
|
44
44
|
export function useSignPersonalMessage({
|
|
45
45
|
mutationKey,
|
|
46
46
|
...mutationOptions
|
|
47
|
-
}: UseSignPersonalMessageMutationOptions = {})
|
|
48
|
-
|
|
47
|
+
}: UseSignPersonalMessageMutationOptions = {}): UseMutationResult<
|
|
48
|
+
UseSignPersonalMessageResult,
|
|
49
|
+
UseSignPersonalMessageError,
|
|
50
|
+
UseSignPersonalMessageArgs
|
|
51
|
+
> {
|
|
52
|
+
const { currentWallet } = useCurrentWallet();
|
|
49
53
|
const currentAccount = useCurrentAccount();
|
|
50
54
|
|
|
51
55
|
return useMutation({
|
|
@@ -5,7 +5,7 @@ import type {
|
|
|
5
5
|
SuiSignTransactionBlockInput,
|
|
6
6
|
SuiSignTransactionBlockOutput,
|
|
7
7
|
} from '@mysten/wallet-standard';
|
|
8
|
-
import type { UseMutationOptions } from '@tanstack/react-query';
|
|
8
|
+
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
9
9
|
import { useMutation } from '@tanstack/react-query';
|
|
10
10
|
|
|
11
11
|
import {
|
|
@@ -44,8 +44,12 @@ type UseSignTransactionBlockMutationOptions = Omit<
|
|
|
44
44
|
export function useSignTransactionBlock({
|
|
45
45
|
mutationKey,
|
|
46
46
|
...mutationOptions
|
|
47
|
-
}: UseSignTransactionBlockMutationOptions = {})
|
|
48
|
-
|
|
47
|
+
}: UseSignTransactionBlockMutationOptions = {}): UseMutationResult<
|
|
48
|
+
UseSignTransactionBlockResult,
|
|
49
|
+
UseSignTransactionBlockError,
|
|
50
|
+
UseSignTransactionBlockArgs
|
|
51
|
+
> {
|
|
52
|
+
const { currentWallet } = useCurrentWallet();
|
|
49
53
|
const currentAccount = useCurrentAccount();
|
|
50
54
|
|
|
51
55
|
return useMutation({
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import type { WalletAccount } from '@mysten/wallet-standard';
|
|
5
|
-
import type { UseMutationOptions } from '@tanstack/react-query';
|
|
5
|
+
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
6
6
|
import { useMutation } from '@tanstack/react-query';
|
|
7
7
|
|
|
8
8
|
import { walletMutationKeys } from '../../constants/walletMutationKeys.js';
|
|
@@ -29,8 +29,12 @@ type UseSwitchAccountMutationOptions = Omit<
|
|
|
29
29
|
export function useSwitchAccount({
|
|
30
30
|
mutationKey,
|
|
31
31
|
...mutationOptions
|
|
32
|
-
}: UseSwitchAccountMutationOptions = {})
|
|
33
|
-
|
|
32
|
+
}: UseSwitchAccountMutationOptions = {}): UseMutationResult<
|
|
33
|
+
SwitchAccountResult,
|
|
34
|
+
UseSwitchAccountError,
|
|
35
|
+
SwitchAccountArgs
|
|
36
|
+
> {
|
|
37
|
+
const { currentWallet } = useCurrentWallet();
|
|
34
38
|
const setAccountSwitched = useWalletStore((state) => state.setAccountSwitched);
|
|
35
39
|
|
|
36
40
|
return useMutation({
|
|
@@ -10,7 +10,7 @@ import { useWalletStore } from './useWalletStore.js';
|
|
|
10
10
|
* Internal hook for easily handling various changes in properties for a wallet.
|
|
11
11
|
*/
|
|
12
12
|
export function useWalletPropertiesChanged() {
|
|
13
|
-
const currentWallet = useCurrentWallet();
|
|
13
|
+
const { currentWallet } = useCurrentWallet();
|
|
14
14
|
const updateWalletAccounts = useWalletStore((state) => state.updateWalletAccounts);
|
|
15
15
|
|
|
16
16
|
useEffect(() => {
|
package/src/index.ts
CHANGED
|
@@ -13,6 +13,7 @@ export * from './hooks/useSuiClientInfiniteQuery.js';
|
|
|
13
13
|
export * from './hooks/useSuiClientMutation.js';
|
|
14
14
|
export * from './hooks/useSuiClientQuery.js';
|
|
15
15
|
export * from './hooks/wallet/useAccounts.js';
|
|
16
|
+
export * from './hooks/wallet/useAutoConnectionStatus.js';
|
|
16
17
|
export * from './hooks/wallet/useConnectWallet.js';
|
|
17
18
|
export * from './hooks/wallet/useCurrentAccount.js';
|
|
18
19
|
export * from './hooks/wallet/useCurrentWallet.js';
|
package/src/walletStore.ts
CHANGED
|
@@ -6,8 +6,14 @@ import { createStore } from 'zustand';
|
|
|
6
6
|
import type { StateStorage } from 'zustand/middleware';
|
|
7
7
|
import { createJSONStorage, persist } from 'zustand/middleware';
|
|
8
8
|
|
|
9
|
+
type WalletConnectionStatus = 'disconnected' | 'connecting' | 'connected';
|
|
10
|
+
|
|
11
|
+
type WalletAutoConnectionStatus = 'disabled' | 'idle' | 'settled';
|
|
12
|
+
|
|
9
13
|
export type WalletActions = {
|
|
10
14
|
setAccountSwitched: (selectedAccount: WalletAccount) => void;
|
|
15
|
+
setConnectionStatus: (connectionStatus: WalletConnectionStatus) => void;
|
|
16
|
+
setAutoConnectionStatus: (autoConnectionStatus: WalletAutoConnectionStatus) => void;
|
|
11
17
|
setWalletConnected: (
|
|
12
18
|
wallet: WalletWithRequiredFeatures,
|
|
13
19
|
connectedAccounts: readonly WalletAccount[],
|
|
@@ -31,15 +37,23 @@ export type StoreState = {
|
|
|
31
37
|
currentAccount: WalletAccount | null;
|
|
32
38
|
lastConnectedAccountAddress: string | null;
|
|
33
39
|
lastConnectedWalletName: string | null;
|
|
40
|
+
connectionStatus: WalletConnectionStatus;
|
|
41
|
+
autoConnectionStatus: WalletAutoConnectionStatus;
|
|
34
42
|
} & WalletActions;
|
|
35
43
|
|
|
36
|
-
|
|
44
|
+
type WalletConfiguration = {
|
|
37
45
|
wallets: WalletWithRequiredFeatures[];
|
|
46
|
+
autoConnect: boolean;
|
|
38
47
|
storage: StateStorage;
|
|
39
48
|
storageKey: string;
|
|
40
49
|
};
|
|
41
50
|
|
|
42
|
-
export function createWalletStore({
|
|
51
|
+
export function createWalletStore({
|
|
52
|
+
wallets,
|
|
53
|
+
storage,
|
|
54
|
+
storageKey,
|
|
55
|
+
autoConnect,
|
|
56
|
+
}: WalletConfiguration) {
|
|
43
57
|
return createStore<StoreState>()(
|
|
44
58
|
persist(
|
|
45
59
|
(set, get) => ({
|
|
@@ -50,6 +64,17 @@ export function createWalletStore({ wallets, storage, storageKey }: WalletConfig
|
|
|
50
64
|
lastConnectedAccountAddress: null,
|
|
51
65
|
lastConnectedWalletName: null,
|
|
52
66
|
connectionStatus: 'disconnected',
|
|
67
|
+
autoConnectionStatus: autoConnect ? 'idle' : 'disabled',
|
|
68
|
+
setConnectionStatus(connectionStatus) {
|
|
69
|
+
set(() => ({
|
|
70
|
+
connectionStatus,
|
|
71
|
+
}));
|
|
72
|
+
},
|
|
73
|
+
setAutoConnectionStatus(autoConnectionStatus) {
|
|
74
|
+
set(() => ({
|
|
75
|
+
autoConnectionStatus,
|
|
76
|
+
}));
|
|
77
|
+
},
|
|
53
78
|
setWalletConnected(wallet, connectedAccounts, selectedAccount) {
|
|
54
79
|
set(() => ({
|
|
55
80
|
accounts: connectedAccounts,
|
|
@@ -57,6 +82,7 @@ export function createWalletStore({ wallets, storage, storageKey }: WalletConfig
|
|
|
57
82
|
currentAccount: selectedAccount,
|
|
58
83
|
lastConnectedWalletName: wallet.name,
|
|
59
84
|
lastConnectedAccountAddress: selectedAccount?.address,
|
|
85
|
+
connectionStatus: 'connected',
|
|
60
86
|
}));
|
|
61
87
|
},
|
|
62
88
|
setWalletDisconnected() {
|
|
@@ -66,6 +92,7 @@ export function createWalletStore({ wallets, storage, storageKey }: WalletConfig
|
|
|
66
92
|
currentAccount: null,
|
|
67
93
|
lastConnectedWalletName: null,
|
|
68
94
|
lastConnectedAccountAddress: null,
|
|
95
|
+
connectionStatus: 'disconnected',
|
|
69
96
|
}));
|
|
70
97
|
},
|
|
71
98
|
setAccountSwitched(selectedAccount) {
|
|
@@ -86,6 +113,7 @@ export function createWalletStore({ wallets, storage, storageKey }: WalletConfig
|
|
|
86
113
|
currentAccount: null,
|
|
87
114
|
lastConnectedWalletName: null,
|
|
88
115
|
lastConnectedAccountAddress: null,
|
|
116
|
+
connectionStatus: 'disconnected',
|
|
89
117
|
}));
|
|
90
118
|
} else {
|
|
91
119
|
set(() => ({ wallets: updatedWallets }));
|