@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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SuiSignTransactionBlockInput, SuiSignTransactionBlockOutput } from '@mysten/wallet-standard';
|
|
2
|
-
import type { UseMutationOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
3
3
|
import { WalletFeatureNotSupportedError, WalletNoAccountSelectedError, WalletNotConnectedError } from '../..//errors/walletErrors.js';
|
|
4
4
|
import type { PartialBy } from '../../types/utilityTypes.js';
|
|
5
5
|
type UseSignTransactionBlockArgs = PartialBy<SuiSignTransactionBlockInput, 'account' | 'chain'>;
|
|
@@ -9,5 +9,5 @@ type UseSignTransactionBlockMutationOptions = Omit<UseMutationOptions<UseSignTra
|
|
|
9
9
|
/**
|
|
10
10
|
* Mutation hook for prompting the user to sign a transaction block.
|
|
11
11
|
*/
|
|
12
|
-
export declare function useSignTransactionBlock({ mutationKey, ...mutationOptions }?: UseSignTransactionBlockMutationOptions):
|
|
12
|
+
export declare function useSignTransactionBlock({ mutationKey, ...mutationOptions }?: UseSignTransactionBlockMutationOptions): UseMutationResult<UseSignTransactionBlockResult, UseSignTransactionBlockError, UseSignTransactionBlockArgs>;
|
|
13
13
|
export {};
|
|
@@ -75,7 +75,35 @@ function useCurrentAccount() {
|
|
|
75
75
|
|
|
76
76
|
// src/hooks/wallet/useCurrentWallet.ts
|
|
77
77
|
function useCurrentWallet() {
|
|
78
|
-
|
|
78
|
+
const currentWallet = useWalletStore((state) => state.currentWallet);
|
|
79
|
+
const connectionStatus = useWalletStore((state) => state.connectionStatus);
|
|
80
|
+
switch (connectionStatus) {
|
|
81
|
+
case "connecting":
|
|
82
|
+
return {
|
|
83
|
+
connectionStatus,
|
|
84
|
+
currentWallet: null,
|
|
85
|
+
isDisconnected: false,
|
|
86
|
+
isConnecting: true,
|
|
87
|
+
isConnected: false
|
|
88
|
+
};
|
|
89
|
+
case "disconnected":
|
|
90
|
+
return {
|
|
91
|
+
connectionStatus,
|
|
92
|
+
currentWallet: null,
|
|
93
|
+
isDisconnected: true,
|
|
94
|
+
isConnecting: false,
|
|
95
|
+
isConnected: false
|
|
96
|
+
};
|
|
97
|
+
case "connected": {
|
|
98
|
+
return {
|
|
99
|
+
connectionStatus,
|
|
100
|
+
currentWallet,
|
|
101
|
+
isDisconnected: false,
|
|
102
|
+
isConnecting: false,
|
|
103
|
+
isConnected: true
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
79
107
|
}
|
|
80
108
|
|
|
81
109
|
// src/hooks/wallet/useSignTransactionBlock.ts
|
|
@@ -83,7 +111,7 @@ function useSignTransactionBlock({
|
|
|
83
111
|
mutationKey,
|
|
84
112
|
...mutationOptions
|
|
85
113
|
} = {}) {
|
|
86
|
-
const currentWallet = useCurrentWallet();
|
|
114
|
+
const { currentWallet } = useCurrentWallet();
|
|
87
115
|
const currentAccount = useCurrentAccount();
|
|
88
116
|
return (0, import_react_query.useMutation)({
|
|
89
117
|
mutationKey: walletMutationKeys.signTransactionBlock(mutationKey),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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 } 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 = {}) {\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\tdisconnectWallet: formMutationKeyFn('disconnect-wallet'),\n\tsignPersonalMessage: formMutationKeyFn('sign-personal-message'),\n\tsignTransactionBlock: formMutationKeyFn('sign-transaction-block'),\n\tsignAndExecuteTransactionBlock: formMutationKeyFn('sign-and-execute-transaction-block'),\n\tswitchAccount: formMutationKeyFn('switch-account'),\n};\n\nfunction formMutationKeyFn(baseEntity: string) {\n\treturn function mutationKeyFn(additionalKeys: MutationKey = []) {\n\t\treturn [{ ...walletMutationKeys.all, baseEntity }, ...additionalKeys];\n\t};\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useContext } from 'react';\nimport { useStore } from 'zustand';\n\nimport { WalletContext } from '../../contexts/walletContext.js';\nimport type { StoreState } from '../../walletStore.js';\n\nexport function useWalletStore<T>(selector: (state: StoreState) => T): T {\n\tconst store = useContext(WalletContext);\n\tif (!store) {\n\t\tthrow new Error(\n\t\t\t'Could not find WalletContext. Ensure that you have set up the WalletProvider.',\n\t\t);\n\t}\n\treturn useStore(store, selector);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { createContext } from 'react';\n\nimport type { WalletStore } from '../walletStore.js';\n\nexport const WalletContext = createContext<WalletStore | null>(null);\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves the wallet account that is currently selected, if one exists.\n */\nexport function useCurrentAccount() {\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\
|
|
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,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;;;AChBA,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;;;
|
|
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\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,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;;;AChBA,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
6
|
"names": ["import_react"]
|
|
7
7
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { WalletAccount } from '@mysten/wallet-standard';
|
|
2
|
-
import type { UseMutationOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
3
3
|
import { WalletAccountNotFoundError, WalletNotConnectedError } from '../../errors/walletErrors.js';
|
|
4
4
|
type SwitchAccountArgs = {
|
|
5
5
|
account: WalletAccount;
|
|
@@ -10,5 +10,5 @@ type UseSwitchAccountMutationOptions = Omit<UseMutationOptions<SwitchAccountResu
|
|
|
10
10
|
/**
|
|
11
11
|
* Mutation hook for switching to a specific wallet account.
|
|
12
12
|
*/
|
|
13
|
-
export declare function useSwitchAccount({ mutationKey, ...mutationOptions }?: UseSwitchAccountMutationOptions):
|
|
13
|
+
export declare function useSwitchAccount({ mutationKey, ...mutationOptions }?: UseSwitchAccountMutationOptions): UseMutationResult<SwitchAccountResult, UseSwitchAccountError, SwitchAccountArgs>;
|
|
14
14
|
export {};
|
|
@@ -68,7 +68,35 @@ function useWalletStore(selector) {
|
|
|
68
68
|
|
|
69
69
|
// src/hooks/wallet/useCurrentWallet.ts
|
|
70
70
|
function useCurrentWallet() {
|
|
71
|
-
|
|
71
|
+
const currentWallet = useWalletStore((state) => state.currentWallet);
|
|
72
|
+
const connectionStatus = useWalletStore((state) => state.connectionStatus);
|
|
73
|
+
switch (connectionStatus) {
|
|
74
|
+
case "connecting":
|
|
75
|
+
return {
|
|
76
|
+
connectionStatus,
|
|
77
|
+
currentWallet: null,
|
|
78
|
+
isDisconnected: false,
|
|
79
|
+
isConnecting: true,
|
|
80
|
+
isConnected: false
|
|
81
|
+
};
|
|
82
|
+
case "disconnected":
|
|
83
|
+
return {
|
|
84
|
+
connectionStatus,
|
|
85
|
+
currentWallet: null,
|
|
86
|
+
isDisconnected: true,
|
|
87
|
+
isConnecting: false,
|
|
88
|
+
isConnected: false
|
|
89
|
+
};
|
|
90
|
+
case "connected": {
|
|
91
|
+
return {
|
|
92
|
+
connectionStatus,
|
|
93
|
+
currentWallet,
|
|
94
|
+
isDisconnected: false,
|
|
95
|
+
isConnecting: false,
|
|
96
|
+
isConnected: true
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
72
100
|
}
|
|
73
101
|
|
|
74
102
|
// src/hooks/wallet/useSwitchAccount.ts
|
|
@@ -76,7 +104,7 @@ function useSwitchAccount({
|
|
|
76
104
|
mutationKey,
|
|
77
105
|
...mutationOptions
|
|
78
106
|
} = {}) {
|
|
79
|
-
const currentWallet = useCurrentWallet();
|
|
107
|
+
const { currentWallet } = useCurrentWallet();
|
|
80
108
|
const setAccountSwitched = useWalletStore((state) => state.setAccountSwitched);
|
|
81
109
|
return (0, import_react_query.useMutation)({
|
|
82
110
|
mutationKey: walletMutationKeys.switchAccount(mutationKey),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/hooks/wallet/useSwitchAccount.ts", "../../../../src/constants/walletMutationKeys.ts", "../../../../src/errors/walletErrors.ts", "../../../../src/hooks/wallet/useWalletStore.ts", "../../../../src/contexts/walletContext.ts", "../../../../src/hooks/wallet/useCurrentWallet.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { WalletAccount } from '@mysten/wallet-standard';\nimport type { UseMutationOptions } from '@tanstack/react-query';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { walletMutationKeys } from '../../constants/walletMutationKeys.js';\nimport { WalletAccountNotFoundError, WalletNotConnectedError } from '../../errors/walletErrors.js';\nimport { useCurrentWallet } from './useCurrentWallet.js';\nimport { useWalletStore } from './useWalletStore.js';\n\ntype SwitchAccountArgs = {\n\taccount: WalletAccount;\n};\n\ntype SwitchAccountResult = void;\n\ntype UseSwitchAccountError = WalletNotConnectedError | WalletAccountNotFoundError | Error;\n\ntype UseSwitchAccountMutationOptions = Omit<\n\tUseMutationOptions<SwitchAccountResult, UseSwitchAccountError, SwitchAccountArgs, unknown>,\n\t'mutationFn'\n>;\n\n/**\n * Mutation hook for switching to a specific wallet account.\n */\nexport function useSwitchAccount({\n\tmutationKey,\n\t...mutationOptions\n}: UseSwitchAccountMutationOptions = {}) {\n\tconst currentWallet = useCurrentWallet();\n\tconst setAccountSwitched = useWalletStore((state) => state.setAccountSwitched);\n\n\treturn useMutation({\n\t\tmutationKey: walletMutationKeys.switchAccount(mutationKey),\n\t\tmutationFn: async ({ account }) => {\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 accountToSelect = currentWallet.accounts.find(\n\t\t\t\t(walletAccount) => walletAccount.address === account.address,\n\t\t\t);\n\t\t\tif (!accountToSelect) {\n\t\t\t\tthrow new WalletAccountNotFoundError(\n\t\t\t\t\t`No account with address ${account.address} is connected to ${currentWallet.name}.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsetAccountSwitched(accountToSelect);\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\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 { useContext } from 'react';\nimport { useStore } from 'zustand';\n\nimport { WalletContext } from '../../contexts/walletContext.js';\nimport type { StoreState } from '../../walletStore.js';\n\nexport function useWalletStore<T>(selector: (state: StoreState) => T): T {\n\tconst store = useContext(WalletContext);\n\tif (!store) {\n\t\tthrow new Error(\n\t\t\t'Could not find WalletContext. Ensure that you have set up the WalletProvider.',\n\t\t);\n\t}\n\treturn useStore(store, selector);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { createContext } from 'react';\n\nimport type { WalletStore } from '../walletStore.js';\n\nexport const WalletContext = createContext<WalletStore | null>(null);\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves the wallet that is currently connected to the dApp, if one exists.\n */\nexport function useCurrentWallet() {\n\
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,yBAA4B;;;ACArB,IAAM,qBAAqB;AAAA,EACjC,KAAK,EAAE,WAAW,SAAS;AAAA,EAC3B,eAAe,kBAAkB,gBAAgB;AAAA,EACjD,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;;;ACbO,IAAM,0BAAN,cAAsC,MAAM;AAAC;AAiB7C,IAAM,6BAAN,cAAyC,MAAM;AAAC;;;ACpBvD,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;;;AETO,SAAS,mBAAmB;AAClC,
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { WalletAccount } 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 { WalletAccountNotFoundError, WalletNotConnectedError } from '../../errors/walletErrors.js';\nimport { useCurrentWallet } from './useCurrentWallet.js';\nimport { useWalletStore } from './useWalletStore.js';\n\ntype SwitchAccountArgs = {\n\taccount: WalletAccount;\n};\n\ntype SwitchAccountResult = void;\n\ntype UseSwitchAccountError = WalletNotConnectedError | WalletAccountNotFoundError | Error;\n\ntype UseSwitchAccountMutationOptions = Omit<\n\tUseMutationOptions<SwitchAccountResult, UseSwitchAccountError, SwitchAccountArgs, unknown>,\n\t'mutationFn'\n>;\n\n/**\n * Mutation hook for switching to a specific wallet account.\n */\nexport function useSwitchAccount({\n\tmutationKey,\n\t...mutationOptions\n}: UseSwitchAccountMutationOptions = {}): UseMutationResult<\n\tSwitchAccountResult,\n\tUseSwitchAccountError,\n\tSwitchAccountArgs\n> {\n\tconst { currentWallet } = useCurrentWallet();\n\tconst setAccountSwitched = useWalletStore((state) => state.setAccountSwitched);\n\n\treturn useMutation({\n\t\tmutationKey: walletMutationKeys.switchAccount(mutationKey),\n\t\tmutationFn: async ({ account }) => {\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 accountToSelect = currentWallet.accounts.find(\n\t\t\t\t(walletAccount) => walletAccount.address === account.address,\n\t\t\t);\n\t\t\tif (!accountToSelect) {\n\t\t\t\tthrow new WalletAccountNotFoundError(\n\t\t\t\t\t`No account with address ${account.address} is connected to ${currentWallet.name}.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsetAccountSwitched(accountToSelect);\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\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 { useContext } from 'react';\nimport { useStore } from 'zustand';\n\nimport { WalletContext } from '../../contexts/walletContext.js';\nimport type { StoreState } from '../../walletStore.js';\n\nexport function useWalletStore<T>(selector: (state: StoreState) => T): T {\n\tconst store = useContext(WalletContext);\n\tif (!store) {\n\t\tthrow new Error(\n\t\t\t'Could not find WalletContext. Ensure that you have set up the WalletProvider.',\n\t\t);\n\t}\n\treturn useStore(store, selector);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { createContext } from 'react';\n\nimport type { WalletStore } from '../walletStore.js';\n\nexport const WalletContext = createContext<WalletStore | null>(null);\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves the wallet that is currently connected to the dApp, if one exists.\n */\nexport function useCurrentWallet() {\n\tconst currentWallet = useWalletStore((state) => state.currentWallet);\n\tconst connectionStatus = useWalletStore((state) => state.connectionStatus);\n\n\tswitch (connectionStatus) {\n\t\tcase 'connecting':\n\t\t\treturn {\n\t\t\t\tconnectionStatus,\n\t\t\t\tcurrentWallet: null,\n\t\t\t\tisDisconnected: false,\n\t\t\t\tisConnecting: true,\n\t\t\t\tisConnected: false,\n\t\t\t} as const;\n\t\tcase 'disconnected':\n\t\t\treturn {\n\t\t\t\tconnectionStatus,\n\t\t\t\tcurrentWallet: null,\n\t\t\t\tisDisconnected: true,\n\t\t\t\tisConnecting: false,\n\t\t\t\tisConnected: false,\n\t\t\t} as const;\n\t\tcase 'connected': {\n\t\t\treturn {\n\t\t\t\tconnectionStatus,\n\t\t\t\tcurrentWallet: currentWallet!,\n\t\t\t\tisDisconnected: false,\n\t\t\t\tisConnecting: false,\n\t\t\t\tisConnected: true,\n\t\t\t} as const;\n\t\t}\n\t}\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,yBAA4B;;;ACArB,IAAM,qBAAqB;AAAA,EACjC,KAAK,EAAE,WAAW,SAAS;AAAA,EAC3B,eAAe,kBAAkB,gBAAgB;AAAA,EACjD,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;;;ACbO,IAAM,0BAAN,cAAsC,MAAM;AAAC;AAiB7C,IAAM,6BAAN,cAAyC,MAAM;AAAC;;;ACpBvD,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;;;AETO,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;;;ALXO,SAAS,iBAAiB;AAAA,EAChC;AAAA,EACA,GAAG;AACJ,IAAqC,CAAC,GAIpC;AACD,QAAM,EAAE,cAAc,IAAI,iBAAiB;AAC3C,QAAM,qBAAqB,eAAe,CAAC,UAAU,MAAM,kBAAkB;AAE7E,aAAO,gCAAY;AAAA,IAClB,aAAa,mBAAmB,cAAc,WAAW;AAAA,IACzD,YAAY,OAAO,EAAE,QAAQ,MAAM;AAClC,UAAI,CAAC,eAAe;AACnB,cAAM,IAAI,wBAAwB,yBAAyB;AAAA,MAC5D;AAEA,YAAM,kBAAkB,cAAc,SAAS;AAAA,QAC9C,CAAC,kBAAkB,cAAc,YAAY,QAAQ;AAAA,MACtD;AACA,UAAI,CAAC,iBAAiB;AACrB,cAAM,IAAI;AAAA,UACT,2BAA2B,QAAQ,2BAA2B,cAAc;AAAA,QAC7E;AAAA,MACD;AAEA,yBAAmB,eAAe;AAAA,IACnC;AAAA,IACA,GAAG;AAAA,EACJ,CAAC;AACF;",
|
|
6
6
|
"names": ["import_react"]
|
|
7
7
|
}
|
|
@@ -46,12 +46,40 @@ function useWalletStore(selector) {
|
|
|
46
46
|
|
|
47
47
|
// src/hooks/wallet/useCurrentWallet.ts
|
|
48
48
|
function useCurrentWallet() {
|
|
49
|
-
|
|
49
|
+
const currentWallet = useWalletStore((state) => state.currentWallet);
|
|
50
|
+
const connectionStatus = useWalletStore((state) => state.connectionStatus);
|
|
51
|
+
switch (connectionStatus) {
|
|
52
|
+
case "connecting":
|
|
53
|
+
return {
|
|
54
|
+
connectionStatus,
|
|
55
|
+
currentWallet: null,
|
|
56
|
+
isDisconnected: false,
|
|
57
|
+
isConnecting: true,
|
|
58
|
+
isConnected: false
|
|
59
|
+
};
|
|
60
|
+
case "disconnected":
|
|
61
|
+
return {
|
|
62
|
+
connectionStatus,
|
|
63
|
+
currentWallet: null,
|
|
64
|
+
isDisconnected: true,
|
|
65
|
+
isConnecting: false,
|
|
66
|
+
isConnected: false
|
|
67
|
+
};
|
|
68
|
+
case "connected": {
|
|
69
|
+
return {
|
|
70
|
+
connectionStatus,
|
|
71
|
+
currentWallet,
|
|
72
|
+
isDisconnected: false,
|
|
73
|
+
isConnecting: false,
|
|
74
|
+
isConnected: true
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
50
78
|
}
|
|
51
79
|
|
|
52
80
|
// src/hooks/wallet/useWalletPropertiesChanged.ts
|
|
53
81
|
function useWalletPropertiesChanged() {
|
|
54
|
-
const currentWallet = useCurrentWallet();
|
|
82
|
+
const { currentWallet } = useCurrentWallet();
|
|
55
83
|
const updateWalletAccounts = useWalletStore((state) => state.updateWalletAccounts);
|
|
56
84
|
(0, import_react3.useEffect)(() => {
|
|
57
85
|
const unsubscribeFromEvents = currentWallet?.features["standard:events"].on(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/hooks/wallet/useWalletPropertiesChanged.ts", "../../../../src/hooks/wallet/useWalletStore.ts", "../../../../src/contexts/walletContext.ts", "../../../../src/hooks/wallet/useCurrentWallet.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useEffect } from 'react';\n\nimport { useCurrentWallet } from './useCurrentWallet.js';\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Internal hook for easily handling various changes in properties for a wallet.\n */\nexport function useWalletPropertiesChanged() {\n\tconst currentWallet = useCurrentWallet();\n\tconst updateWalletAccounts = useWalletStore((state) => state.updateWalletAccounts);\n\n\tuseEffect(() => {\n\t\tconst unsubscribeFromEvents = currentWallet?.features['standard:events'].on(\n\t\t\t'change',\n\t\t\t({ accounts }) => {\n\t\t\t\t// TODO: We should handle features changing that might make the list of wallets\n\t\t\t\t// or even the current wallet incompatible with the dApp.\n\t\t\t\tif (accounts) {\n\t\t\t\t\tupdateWalletAccounts(accounts);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\treturn unsubscribeFromEvents;\n\t}, [currentWallet?.features, updateWalletAccounts]);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useContext } from 'react';\nimport { useStore } from 'zustand';\n\nimport { WalletContext } from '../../contexts/walletContext.js';\nimport type { StoreState } from '../../walletStore.js';\n\nexport function useWalletStore<T>(selector: (state: StoreState) => T): T {\n\tconst store = useContext(WalletContext);\n\tif (!store) {\n\t\tthrow new Error(\n\t\t\t'Could not find WalletContext. Ensure that you have set up the WalletProvider.',\n\t\t);\n\t}\n\treturn useStore(store, selector);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { createContext } from 'react';\n\nimport type { WalletStore } from '../walletStore.js';\n\nexport const WalletContext = createContext<WalletStore | null>(null);\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves the wallet that is currently connected to the dApp, if one exists.\n */\nexport function useCurrentWallet() {\n\
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,IAAAA,gBAA0B;;;ACA1B,IAAAC,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;;;AETO,SAAS,mBAAmB;AAClC,
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useEffect } from 'react';\n\nimport { useCurrentWallet } from './useCurrentWallet.js';\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Internal hook for easily handling various changes in properties for a wallet.\n */\nexport function useWalletPropertiesChanged() {\n\tconst { currentWallet } = useCurrentWallet();\n\tconst updateWalletAccounts = useWalletStore((state) => state.updateWalletAccounts);\n\n\tuseEffect(() => {\n\t\tconst unsubscribeFromEvents = currentWallet?.features['standard:events'].on(\n\t\t\t'change',\n\t\t\t({ accounts }) => {\n\t\t\t\t// TODO: We should handle features changing that might make the list of wallets\n\t\t\t\t// or even the current wallet incompatible with the dApp.\n\t\t\t\tif (accounts) {\n\t\t\t\t\tupdateWalletAccounts(accounts);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\treturn unsubscribeFromEvents;\n\t}, [currentWallet?.features, updateWalletAccounts]);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useContext } from 'react';\nimport { useStore } from 'zustand';\n\nimport { WalletContext } from '../../contexts/walletContext.js';\nimport type { StoreState } from '../../walletStore.js';\n\nexport function useWalletStore<T>(selector: (state: StoreState) => T): T {\n\tconst store = useContext(WalletContext);\n\tif (!store) {\n\t\tthrow new Error(\n\t\t\t'Could not find WalletContext. Ensure that you have set up the WalletProvider.',\n\t\t);\n\t}\n\treturn useStore(store, selector);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { createContext } from 'react';\n\nimport type { WalletStore } from '../walletStore.js';\n\nexport const WalletContext = createContext<WalletStore | null>(null);\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves the wallet that is currently connected to the dApp, if one exists.\n */\nexport function useCurrentWallet() {\n\tconst currentWallet = useWalletStore((state) => state.currentWallet);\n\tconst connectionStatus = useWalletStore((state) => state.connectionStatus);\n\n\tswitch (connectionStatus) {\n\t\tcase 'connecting':\n\t\t\treturn {\n\t\t\t\tconnectionStatus,\n\t\t\t\tcurrentWallet: null,\n\t\t\t\tisDisconnected: false,\n\t\t\t\tisConnecting: true,\n\t\t\t\tisConnected: false,\n\t\t\t} as const;\n\t\tcase 'disconnected':\n\t\t\treturn {\n\t\t\t\tconnectionStatus,\n\t\t\t\tcurrentWallet: null,\n\t\t\t\tisDisconnected: true,\n\t\t\t\tisConnecting: false,\n\t\t\t\tisConnected: false,\n\t\t\t} as const;\n\t\tcase 'connected': {\n\t\t\treturn {\n\t\t\t\tconnectionStatus,\n\t\t\t\tcurrentWallet: currentWallet!,\n\t\t\t\tisDisconnected: false,\n\t\t\t\tisConnecting: false,\n\t\t\t\tisConnected: true,\n\t\t\t} as const;\n\t\t}\n\t}\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,IAAAA,gBAA0B;;;ACA1B,IAAAC,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;;;AETO,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;;;AH5BO,SAAS,6BAA6B;AAC5C,QAAM,EAAE,cAAc,IAAI,iBAAiB;AAC3C,QAAM,uBAAuB,eAAe,CAAC,UAAU,MAAM,oBAAoB;AAEjF,+BAAU,MAAM;AACf,UAAM,wBAAwB,eAAe,SAAS,iBAAiB,EAAE;AAAA,MACxE;AAAA,MACA,CAAC,EAAE,SAAS,MAAM;AAGjB,YAAI,UAAU;AACb,+BAAqB,QAAQ;AAAA,QAC9B;AAAA,MACD;AAAA,IACD;AACA,WAAO;AAAA,EACR,GAAG,CAAC,eAAe,UAAU,oBAAoB,CAAC;AACnD;",
|
|
6
6
|
"names": ["import_react", "import_react"]
|
|
7
7
|
}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export * from './hooks/useSuiClientInfiniteQuery.js';
|
|
|
10
10
|
export * from './hooks/useSuiClientMutation.js';
|
|
11
11
|
export * from './hooks/useSuiClientQuery.js';
|
|
12
12
|
export * from './hooks/wallet/useAccounts.js';
|
|
13
|
+
export * from './hooks/wallet/useAutoConnectionStatus.js';
|
|
13
14
|
export * from './hooks/wallet/useConnectWallet.js';
|
|
14
15
|
export * from './hooks/wallet/useCurrentAccount.js';
|
|
15
16
|
export * from './hooks/wallet/useCurrentWallet.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -71,6 +71,7 @@ __export(src_exports, {
|
|
|
71
71
|
createNetworkConfig: () => createNetworkConfig,
|
|
72
72
|
lightTheme: () => lightTheme,
|
|
73
73
|
useAccounts: () => useAccounts,
|
|
74
|
+
useAutoConnectionStatus: () => useAutoConnectionStatus,
|
|
74
75
|
useConnectWallet: () => useConnectWallet,
|
|
75
76
|
useCurrentAccount: () => useCurrentAccount,
|
|
76
77
|
useCurrentWallet: () => useCurrentWallet,
|
|
@@ -138,16 +139,23 @@ function useConnectWallet({
|
|
|
138
139
|
...mutationOptions
|
|
139
140
|
} = {}) {
|
|
140
141
|
const setWalletConnected = useWalletStore((state) => state.setWalletConnected);
|
|
142
|
+
const setConnectionStatus = useWalletStore((state) => state.setConnectionStatus);
|
|
141
143
|
return (0, import_react_query.useMutation)({
|
|
142
144
|
mutationKey: walletMutationKeys.connectWallet(mutationKey),
|
|
143
|
-
mutationFn: async ({ wallet, accountAddress, ...
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
145
|
+
mutationFn: async ({ wallet, accountAddress, ...connectArgs }) => {
|
|
146
|
+
try {
|
|
147
|
+
setConnectionStatus("connecting");
|
|
148
|
+
const connectResult = await wallet.features["standard:connect"].connect(connectArgs);
|
|
149
|
+
const connectedSuiAccounts = connectResult.accounts.filter(
|
|
150
|
+
(account) => account.chains.some((chain) => chain.split(":")[0] === "sui")
|
|
151
|
+
);
|
|
152
|
+
const selectedAccount = getSelectedAccount(connectedSuiAccounts, accountAddress);
|
|
153
|
+
setWalletConnected(wallet, connectedSuiAccounts, selectedAccount);
|
|
154
|
+
return { accounts: connectedSuiAccounts };
|
|
155
|
+
} catch (error) {
|
|
156
|
+
setConnectionStatus("disconnected");
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
151
159
|
},
|
|
152
160
|
...mutationOptions
|
|
153
161
|
});
|
|
@@ -541,7 +549,7 @@ function ConnectModal({ trigger, open, defaultOpen, onOpenChange }) {
|
|
|
541
549
|
modalContent = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(WhatIsAWallet, {});
|
|
542
550
|
}
|
|
543
551
|
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Dialog.Root, { open: open ?? isModalOpen, onOpenChange: handleOpenChange, children: [
|
|
544
|
-
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
552
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Dialog.Trigger, { asChild: true, children: trigger }),
|
|
545
553
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Dialog.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(StyleMarker, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Dialog.Overlay, { className: overlay, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Dialog.Content, { className: content, "aria-describedby": void 0, children: [
|
|
546
554
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
547
555
|
"div",
|
|
@@ -685,20 +693,20 @@ function useSuiClientQuery(...args) {
|
|
|
685
693
|
|
|
686
694
|
// src/hooks/useResolveSuiNSNames.ts
|
|
687
695
|
function useResolveSuiNSName(address, options) {
|
|
688
|
-
|
|
696
|
+
return useSuiClientQuery(
|
|
689
697
|
"resolveNameServiceNames",
|
|
690
698
|
{
|
|
691
699
|
address,
|
|
692
700
|
limit: 1
|
|
693
701
|
},
|
|
694
702
|
{
|
|
703
|
+
...options,
|
|
695
704
|
refetchOnWindowFocus: false,
|
|
696
705
|
retry: false,
|
|
697
|
-
|
|
706
|
+
select: (data) => data.data.length > 0 ? data.data[0] : null,
|
|
698
707
|
enabled: !!address && options?.enabled !== false
|
|
699
708
|
}
|
|
700
709
|
);
|
|
701
|
-
return { data: data?.data?.[0] ?? null, ...rest };
|
|
702
710
|
}
|
|
703
711
|
|
|
704
712
|
// src/hooks/wallet/useAccounts.ts
|
|
@@ -721,7 +729,35 @@ var WalletAccountNotFoundError = class extends Error {
|
|
|
721
729
|
|
|
722
730
|
// src/hooks/wallet/useCurrentWallet.ts
|
|
723
731
|
function useCurrentWallet() {
|
|
724
|
-
|
|
732
|
+
const currentWallet = useWalletStore((state) => state.currentWallet);
|
|
733
|
+
const connectionStatus2 = useWalletStore((state) => state.connectionStatus);
|
|
734
|
+
switch (connectionStatus2) {
|
|
735
|
+
case "connecting":
|
|
736
|
+
return {
|
|
737
|
+
connectionStatus: connectionStatus2,
|
|
738
|
+
currentWallet: null,
|
|
739
|
+
isDisconnected: false,
|
|
740
|
+
isConnecting: true,
|
|
741
|
+
isConnected: false
|
|
742
|
+
};
|
|
743
|
+
case "disconnected":
|
|
744
|
+
return {
|
|
745
|
+
connectionStatus: connectionStatus2,
|
|
746
|
+
currentWallet: null,
|
|
747
|
+
isDisconnected: true,
|
|
748
|
+
isConnecting: false,
|
|
749
|
+
isConnected: false
|
|
750
|
+
};
|
|
751
|
+
case "connected": {
|
|
752
|
+
return {
|
|
753
|
+
connectionStatus: connectionStatus2,
|
|
754
|
+
currentWallet,
|
|
755
|
+
isDisconnected: false,
|
|
756
|
+
isConnecting: false,
|
|
757
|
+
isConnected: true
|
|
758
|
+
};
|
|
759
|
+
}
|
|
760
|
+
}
|
|
725
761
|
}
|
|
726
762
|
|
|
727
763
|
// src/hooks/wallet/useDisconnectWallet.ts
|
|
@@ -729,7 +765,7 @@ function useDisconnectWallet({
|
|
|
729
765
|
mutationKey,
|
|
730
766
|
...mutationOptions
|
|
731
767
|
} = {}) {
|
|
732
|
-
const currentWallet = useCurrentWallet();
|
|
768
|
+
const { currentWallet } = useCurrentWallet();
|
|
733
769
|
const setWalletDisconnected = useWalletStore((state) => state.setWalletDisconnected);
|
|
734
770
|
return (0, import_react_query3.useMutation)({
|
|
735
771
|
mutationKey: walletMutationKeys.disconnectWallet(mutationKey),
|
|
@@ -754,7 +790,7 @@ function useSwitchAccount({
|
|
|
754
790
|
mutationKey,
|
|
755
791
|
...mutationOptions
|
|
756
792
|
} = {}) {
|
|
757
|
-
const currentWallet = useCurrentWallet();
|
|
793
|
+
const { currentWallet } = useCurrentWallet();
|
|
758
794
|
const setAccountSwitched = useWalletStore((state) => state.setAccountSwitched);
|
|
759
795
|
return (0, import_react_query4.useMutation)({
|
|
760
796
|
mutationKey: walletMutationKeys.switchAccount(mutationKey),
|
|
@@ -870,7 +906,12 @@ function ConnectButton({
|
|
|
870
906
|
...buttonProps
|
|
871
907
|
}) {
|
|
872
908
|
const currentAccount = useCurrentAccount();
|
|
873
|
-
return currentAccount ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(AccountDropdownMenu, { currentAccount }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
909
|
+
return currentAccount ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(AccountDropdownMenu, { currentAccount }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
910
|
+
ConnectModal,
|
|
911
|
+
{
|
|
912
|
+
trigger: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(StyleMarker, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Button, { ...buttonProps, children: connectText }) })
|
|
913
|
+
}
|
|
914
|
+
);
|
|
874
915
|
}
|
|
875
916
|
|
|
876
917
|
// src/components/WalletProvider.tsx
|
|
@@ -880,25 +921,35 @@ var import_react15 = require("react");
|
|
|
880
921
|
var import_react11 = require("react");
|
|
881
922
|
function useAutoConnectWallet(autoConnectEnabled) {
|
|
882
923
|
const { mutate: connectWallet } = useConnectWallet();
|
|
883
|
-
const
|
|
924
|
+
const setAutoConnectionStatus = useWalletStore((state) => state.setAutoConnectionStatus);
|
|
884
925
|
const lastConnectedWalletName = useWalletStore((state) => state.lastConnectedWalletName);
|
|
885
926
|
const lastConnectedAccountAddress = useWalletStore((state) => state.lastConnectedAccountAddress);
|
|
927
|
+
const wallets = useWallets();
|
|
928
|
+
const { isDisconnected } = useCurrentWallet();
|
|
886
929
|
(0, import_react11.useEffect)(() => {
|
|
887
|
-
if (!autoConnectEnabled || !lastConnectedWalletName)
|
|
930
|
+
if (!autoConnectEnabled || !lastConnectedWalletName || !lastConnectedAccountAddress || !isDisconnected) {
|
|
888
931
|
return;
|
|
932
|
+
}
|
|
889
933
|
const wallet = wallets.find((wallet2) => wallet2.name === lastConnectedWalletName);
|
|
890
934
|
if (wallet) {
|
|
891
|
-
connectWallet(
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
935
|
+
connectWallet(
|
|
936
|
+
{
|
|
937
|
+
wallet,
|
|
938
|
+
accountAddress: lastConnectedAccountAddress,
|
|
939
|
+
silent: true
|
|
940
|
+
},
|
|
941
|
+
{
|
|
942
|
+
onSettled: () => setAutoConnectionStatus("settled")
|
|
943
|
+
}
|
|
944
|
+
);
|
|
896
945
|
}
|
|
897
946
|
}, [
|
|
898
947
|
autoConnectEnabled,
|
|
899
948
|
connectWallet,
|
|
949
|
+
isDisconnected,
|
|
900
950
|
lastConnectedAccountAddress,
|
|
901
951
|
lastConnectedWalletName,
|
|
952
|
+
setAutoConnectionStatus,
|
|
902
953
|
wallets
|
|
903
954
|
]);
|
|
904
955
|
}
|
|
@@ -1022,7 +1073,7 @@ function registerUnsafeBurnerWallet(suiClient) {
|
|
|
1022
1073
|
// src/hooks/wallet/useWalletPropertiesChanged.ts
|
|
1023
1074
|
var import_react13 = require("react");
|
|
1024
1075
|
function useWalletPropertiesChanged() {
|
|
1025
|
-
const currentWallet = useCurrentWallet();
|
|
1076
|
+
const { currentWallet } = useCurrentWallet();
|
|
1026
1077
|
const updateWalletAccounts = useWalletStore((state) => state.updateWalletAccounts);
|
|
1027
1078
|
(0, import_react13.useEffect)(() => {
|
|
1028
1079
|
const unsubscribeFromEvents = currentWallet?.features["standard:events"].on(
|
|
@@ -1141,7 +1192,12 @@ var lightTheme = {
|
|
|
1141
1192
|
// src/walletStore.ts
|
|
1142
1193
|
var import_zustand2 = require("zustand");
|
|
1143
1194
|
var import_middleware = require("zustand/middleware");
|
|
1144
|
-
function createWalletStore({
|
|
1195
|
+
function createWalletStore({
|
|
1196
|
+
wallets,
|
|
1197
|
+
storage,
|
|
1198
|
+
storageKey,
|
|
1199
|
+
autoConnect
|
|
1200
|
+
}) {
|
|
1145
1201
|
return (0, import_zustand2.createStore)()(
|
|
1146
1202
|
(0, import_middleware.persist)(
|
|
1147
1203
|
(set, get) => ({
|
|
@@ -1152,13 +1208,25 @@ function createWalletStore({ wallets, storage, storageKey }) {
|
|
|
1152
1208
|
lastConnectedAccountAddress: null,
|
|
1153
1209
|
lastConnectedWalletName: null,
|
|
1154
1210
|
connectionStatus: "disconnected",
|
|
1211
|
+
autoConnectionStatus: autoConnect ? "idle" : "disabled",
|
|
1212
|
+
setConnectionStatus(connectionStatus2) {
|
|
1213
|
+
set(() => ({
|
|
1214
|
+
connectionStatus: connectionStatus2
|
|
1215
|
+
}));
|
|
1216
|
+
},
|
|
1217
|
+
setAutoConnectionStatus(autoConnectionStatus) {
|
|
1218
|
+
set(() => ({
|
|
1219
|
+
autoConnectionStatus
|
|
1220
|
+
}));
|
|
1221
|
+
},
|
|
1155
1222
|
setWalletConnected(wallet, connectedAccounts, selectedAccount) {
|
|
1156
1223
|
set(() => ({
|
|
1157
1224
|
accounts: connectedAccounts,
|
|
1158
1225
|
currentWallet: wallet,
|
|
1159
1226
|
currentAccount: selectedAccount,
|
|
1160
1227
|
lastConnectedWalletName: wallet.name,
|
|
1161
|
-
lastConnectedAccountAddress: selectedAccount?.address
|
|
1228
|
+
lastConnectedAccountAddress: selectedAccount?.address,
|
|
1229
|
+
connectionStatus: "connected"
|
|
1162
1230
|
}));
|
|
1163
1231
|
},
|
|
1164
1232
|
setWalletDisconnected() {
|
|
@@ -1167,7 +1235,8 @@ function createWalletStore({ wallets, storage, storageKey }) {
|
|
|
1167
1235
|
currentWallet: null,
|
|
1168
1236
|
currentAccount: null,
|
|
1169
1237
|
lastConnectedWalletName: null,
|
|
1170
|
-
lastConnectedAccountAddress: null
|
|
1238
|
+
lastConnectedAccountAddress: null,
|
|
1239
|
+
connectionStatus: "disconnected"
|
|
1171
1240
|
}));
|
|
1172
1241
|
},
|
|
1173
1242
|
setAccountSwitched(selectedAccount) {
|
|
@@ -1187,7 +1256,8 @@ function createWalletStore({ wallets, storage, storageKey }) {
|
|
|
1187
1256
|
currentWallet: null,
|
|
1188
1257
|
currentAccount: null,
|
|
1189
1258
|
lastConnectedWalletName: null,
|
|
1190
|
-
lastConnectedAccountAddress: null
|
|
1259
|
+
lastConnectedAccountAddress: null,
|
|
1260
|
+
connectionStatus: "disconnected"
|
|
1191
1261
|
}));
|
|
1192
1262
|
} else {
|
|
1193
1263
|
set(() => ({ wallets: updatedWallets }));
|
|
@@ -1328,7 +1398,8 @@ function WalletProvider({
|
|
|
1328
1398
|
createWalletStore({
|
|
1329
1399
|
wallets: getRegisteredWallets(preferredWallets, requiredFeatures),
|
|
1330
1400
|
storageKey,
|
|
1331
|
-
storage
|
|
1401
|
+
storage,
|
|
1402
|
+
autoConnect
|
|
1332
1403
|
})
|
|
1333
1404
|
);
|
|
1334
1405
|
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(WalletContext.Provider, { value: storeRef.current, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
@@ -1386,18 +1457,22 @@ function createNetworkConfig(networkConfig) {
|
|
|
1386
1457
|
|
|
1387
1458
|
// src/hooks/useSuiClientInfiniteQuery.ts
|
|
1388
1459
|
var import_react_query5 = require("@tanstack/react-query");
|
|
1389
|
-
function useSuiClientInfiniteQuery(method, params, {
|
|
1460
|
+
function useSuiClientInfiniteQuery(method, params, {
|
|
1461
|
+
queryKey = [],
|
|
1462
|
+
enabled = !!params,
|
|
1463
|
+
...options
|
|
1464
|
+
} = {}) {
|
|
1390
1465
|
const suiContext = useSuiClientContext();
|
|
1391
1466
|
return (0, import_react_query5.useInfiniteQuery)({
|
|
1392
1467
|
...options,
|
|
1468
|
+
initialPageParam: null,
|
|
1393
1469
|
queryKey: [suiContext.network, method, params, ...queryKey],
|
|
1394
1470
|
enabled,
|
|
1395
|
-
queryFn:
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
}
|
|
1471
|
+
queryFn: ({ pageParam }) => suiContext.client[method]({
|
|
1472
|
+
...params ?? {},
|
|
1473
|
+
cursor: pageParam
|
|
1474
|
+
}),
|
|
1475
|
+
getNextPageParam: ({ nextCursor }) => nextCursor ?? null
|
|
1401
1476
|
});
|
|
1402
1477
|
}
|
|
1403
1478
|
|
|
@@ -1413,6 +1488,11 @@ function useSuiClientMutation(method, options = {}) {
|
|
|
1413
1488
|
});
|
|
1414
1489
|
}
|
|
1415
1490
|
|
|
1491
|
+
// src/hooks/wallet/useAutoConnectionStatus.ts
|
|
1492
|
+
function useAutoConnectionStatus() {
|
|
1493
|
+
return useWalletStore((state) => state.autoConnectionStatus);
|
|
1494
|
+
}
|
|
1495
|
+
|
|
1416
1496
|
// src/hooks/wallet/useSignAndExecuteTransactionBlock.ts
|
|
1417
1497
|
var import_react_query7 = require("@tanstack/react-query");
|
|
1418
1498
|
function useSignAndExecuteTransactionBlock({
|
|
@@ -1420,7 +1500,7 @@ function useSignAndExecuteTransactionBlock({
|
|
|
1420
1500
|
executeFromWallet,
|
|
1421
1501
|
...mutationOptions
|
|
1422
1502
|
} = {}) {
|
|
1423
|
-
const currentWallet = useCurrentWallet();
|
|
1503
|
+
const { currentWallet } = useCurrentWallet();
|
|
1424
1504
|
const currentAccount = useCurrentAccount();
|
|
1425
1505
|
const client = useSuiClient();
|
|
1426
1506
|
return (0, import_react_query7.useMutation)({
|
|
@@ -1478,7 +1558,7 @@ function useSignPersonalMessage({
|
|
|
1478
1558
|
mutationKey,
|
|
1479
1559
|
...mutationOptions
|
|
1480
1560
|
} = {}) {
|
|
1481
|
-
const currentWallet = useCurrentWallet();
|
|
1561
|
+
const { currentWallet } = useCurrentWallet();
|
|
1482
1562
|
const currentAccount = useCurrentAccount();
|
|
1483
1563
|
return (0, import_react_query8.useMutation)({
|
|
1484
1564
|
mutationKey: walletMutationKeys.signPersonalMessage(mutationKey),
|
|
@@ -1513,7 +1593,7 @@ function useSignTransactionBlock({
|
|
|
1513
1593
|
mutationKey,
|
|
1514
1594
|
...mutationOptions
|
|
1515
1595
|
} = {}) {
|
|
1516
|
-
const currentWallet = useCurrentWallet();
|
|
1596
|
+
const { currentWallet } = useCurrentWallet();
|
|
1517
1597
|
const currentAccount = useCurrentAccount();
|
|
1518
1598
|
return (0, import_react_query9.useMutation)({
|
|
1519
1599
|
mutationKey: walletMutationKeys.signTransactionBlock(mutationKey),
|