@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.
Files changed (151) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +4 -4
  3. package/dist/cjs/components/AccountDropdownMenu.js +34 -6
  4. package/dist/cjs/components/AccountDropdownMenu.js.map +2 -2
  5. package/dist/cjs/components/ConnectButton.js +56 -16
  6. package/dist/cjs/components/ConnectButton.js.map +3 -3
  7. package/dist/cjs/components/WalletProvider.js +91 -28
  8. package/dist/cjs/components/WalletProvider.js.map +3 -3
  9. package/dist/cjs/components/connect-modal/ConnectModal.js +16 -9
  10. package/dist/cjs/components/connect-modal/ConnectModal.js.map +2 -2
  11. package/dist/cjs/hooks/useResolveSuiNSNames.d.ts +2 -106
  12. package/dist/cjs/hooks/useResolveSuiNSNames.js +3 -3
  13. package/dist/cjs/hooks/useResolveSuiNSNames.js.map +2 -2
  14. package/dist/cjs/hooks/useSuiClientInfiniteQuery.d.ts +7 -8
  15. package/dist/cjs/hooks/useSuiClientInfiniteQuery.js +11 -7
  16. package/dist/cjs/hooks/useSuiClientInfiniteQuery.js.map +2 -2
  17. package/dist/cjs/hooks/useSuiClientMutation.d.ts +2 -2
  18. package/dist/cjs/hooks/useSuiClientMutation.js.map +2 -2
  19. package/dist/cjs/hooks/useSuiClientQuery.d.ts +4 -3
  20. package/dist/cjs/hooks/useSuiClientQuery.js.map +2 -2
  21. package/dist/cjs/hooks/wallet/useAccounts.d.ts +2 -1
  22. package/dist/cjs/hooks/wallet/useAccounts.js.map +2 -2
  23. package/dist/cjs/hooks/wallet/useAutoConnectWallet.js +65 -15
  24. package/dist/cjs/hooks/wallet/useAutoConnectWallet.js.map +3 -3
  25. package/dist/cjs/hooks/wallet/useAutoConnectionStatus.d.ts +4 -0
  26. package/dist/cjs/hooks/wallet/useAutoConnectionStatus.js +50 -0
  27. package/dist/cjs/hooks/wallet/useAutoConnectionStatus.js.map +7 -0
  28. package/dist/cjs/hooks/wallet/useConnectWallet.d.ts +3 -5
  29. package/dist/cjs/hooks/wallet/useConnectWallet.js +15 -8
  30. package/dist/cjs/hooks/wallet/useConnectWallet.js.map +2 -2
  31. package/dist/cjs/hooks/wallet/useCurrentAccount.d.ts +2 -1
  32. package/dist/cjs/hooks/wallet/useCurrentAccount.js.map +2 -2
  33. package/dist/cjs/hooks/wallet/useCurrentWallet.d.ts +19 -1
  34. package/dist/cjs/hooks/wallet/useCurrentWallet.js +29 -1
  35. package/dist/cjs/hooks/wallet/useCurrentWallet.js.map +2 -2
  36. package/dist/cjs/hooks/wallet/useDisconnectWallet.d.ts +2 -2
  37. package/dist/cjs/hooks/wallet/useDisconnectWallet.js +30 -2
  38. package/dist/cjs/hooks/wallet/useDisconnectWallet.js.map +2 -2
  39. package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.d.ts +2 -2
  40. package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.js +30 -2
  41. package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.js.map +2 -2
  42. package/dist/cjs/hooks/wallet/useSignPersonalMessage.d.ts +2 -2
  43. package/dist/cjs/hooks/wallet/useSignPersonalMessage.js +30 -2
  44. package/dist/cjs/hooks/wallet/useSignPersonalMessage.js.map +2 -2
  45. package/dist/cjs/hooks/wallet/useSignTransactionBlock.d.ts +2 -2
  46. package/dist/cjs/hooks/wallet/useSignTransactionBlock.js +30 -2
  47. package/dist/cjs/hooks/wallet/useSignTransactionBlock.js.map +2 -2
  48. package/dist/cjs/hooks/wallet/useSwitchAccount.d.ts +2 -2
  49. package/dist/cjs/hooks/wallet/useSwitchAccount.js +30 -2
  50. package/dist/cjs/hooks/wallet/useSwitchAccount.js.map +2 -2
  51. package/dist/cjs/hooks/wallet/useWalletPropertiesChanged.js +30 -2
  52. package/dist/cjs/hooks/wallet/useWalletPropertiesChanged.js.map +2 -2
  53. package/dist/cjs/index.d.ts +1 -0
  54. package/dist/cjs/index.js +119 -39
  55. package/dist/cjs/index.js.map +4 -4
  56. package/dist/cjs/walletStore.d.ts +10 -2
  57. package/dist/cjs/walletStore.js +23 -4
  58. package/dist/cjs/walletStore.js.map +2 -2
  59. package/dist/esm/components/AccountDropdownMenu.d.ts +2 -2
  60. package/dist/esm/components/AccountDropdownMenu.js +34 -6
  61. package/dist/esm/components/AccountDropdownMenu.js.map +2 -2
  62. package/dist/esm/components/ConnectButton.d.ts +1 -1
  63. package/dist/esm/components/ConnectButton.js +56 -16
  64. package/dist/esm/components/ConnectButton.js.map +3 -3
  65. package/dist/esm/components/SuiClientProvider.d.ts +1 -1
  66. package/dist/esm/components/WalletProvider.d.ts +1 -1
  67. package/dist/esm/components/WalletProvider.js +91 -28
  68. package/dist/esm/components/WalletProvider.js.map +3 -3
  69. package/dist/esm/components/connect-modal/ConnectModal.d.ts +1 -1
  70. package/dist/esm/components/connect-modal/ConnectModal.js +16 -9
  71. package/dist/esm/components/connect-modal/ConnectModal.js.map +2 -2
  72. package/dist/esm/components/connect-modal/InfoSection.d.ts +1 -1
  73. package/dist/esm/components/connect-modal/views/ConnectionStatus.d.ts +1 -1
  74. package/dist/esm/components/connect-modal/views/GettingStarted.d.ts +1 -1
  75. package/dist/esm/components/connect-modal/views/WhatIsAWallet.d.ts +1 -1
  76. package/dist/esm/components/connect-modal/wallet-list/WalletList.d.ts +1 -1
  77. package/dist/esm/components/connect-modal/wallet-list/WalletListItem.d.ts +1 -1
  78. package/dist/esm/components/styling/InjectedThemeStyles.d.ts +1 -1
  79. package/dist/esm/contexts/walletContext.d.ts +2 -2
  80. package/dist/esm/hooks/useResolveSuiNSNames.d.ts +2 -106
  81. package/dist/esm/hooks/useResolveSuiNSNames.js +3 -3
  82. package/dist/esm/hooks/useResolveSuiNSNames.js.map +2 -2
  83. package/dist/esm/hooks/useSuiClientInfiniteQuery.d.ts +7 -8
  84. package/dist/esm/hooks/useSuiClientInfiniteQuery.js +11 -7
  85. package/dist/esm/hooks/useSuiClientInfiniteQuery.js.map +2 -2
  86. package/dist/esm/hooks/useSuiClientMutation.d.ts +2 -2
  87. package/dist/esm/hooks/useSuiClientMutation.js.map +2 -2
  88. package/dist/esm/hooks/useSuiClientQuery.d.ts +4 -3
  89. package/dist/esm/hooks/useSuiClientQuery.js.map +2 -2
  90. package/dist/esm/hooks/wallet/useAccounts.d.ts +2 -1
  91. package/dist/esm/hooks/wallet/useAccounts.js.map +2 -2
  92. package/dist/esm/hooks/wallet/useAutoConnectWallet.js +65 -15
  93. package/dist/esm/hooks/wallet/useAutoConnectWallet.js.map +3 -3
  94. package/dist/esm/hooks/wallet/useAutoConnectionStatus.d.ts +4 -0
  95. package/dist/esm/hooks/wallet/useAutoConnectionStatus.js +27 -0
  96. package/dist/esm/hooks/wallet/useAutoConnectionStatus.js.map +7 -0
  97. package/dist/esm/hooks/wallet/useConnectWallet.d.ts +3 -5
  98. package/dist/esm/hooks/wallet/useConnectWallet.js +15 -8
  99. package/dist/esm/hooks/wallet/useConnectWallet.js.map +2 -2
  100. package/dist/esm/hooks/wallet/useCurrentAccount.d.ts +2 -1
  101. package/dist/esm/hooks/wallet/useCurrentAccount.js.map +2 -2
  102. package/dist/esm/hooks/wallet/useCurrentWallet.d.ts +19 -1
  103. package/dist/esm/hooks/wallet/useCurrentWallet.js +29 -1
  104. package/dist/esm/hooks/wallet/useCurrentWallet.js.map +2 -2
  105. package/dist/esm/hooks/wallet/useDisconnectWallet.d.ts +2 -2
  106. package/dist/esm/hooks/wallet/useDisconnectWallet.js +30 -2
  107. package/dist/esm/hooks/wallet/useDisconnectWallet.js.map +2 -2
  108. package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.d.ts +2 -2
  109. package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.js +30 -2
  110. package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.js.map +2 -2
  111. package/dist/esm/hooks/wallet/useSignPersonalMessage.d.ts +2 -2
  112. package/dist/esm/hooks/wallet/useSignPersonalMessage.js +30 -2
  113. package/dist/esm/hooks/wallet/useSignPersonalMessage.js.map +2 -2
  114. package/dist/esm/hooks/wallet/useSignTransactionBlock.d.ts +2 -2
  115. package/dist/esm/hooks/wallet/useSignTransactionBlock.js +30 -2
  116. package/dist/esm/hooks/wallet/useSignTransactionBlock.js.map +2 -2
  117. package/dist/esm/hooks/wallet/useSwitchAccount.d.ts +2 -2
  118. package/dist/esm/hooks/wallet/useSwitchAccount.js +30 -2
  119. package/dist/esm/hooks/wallet/useSwitchAccount.js.map +2 -2
  120. package/dist/esm/hooks/wallet/useWalletPropertiesChanged.js +30 -2
  121. package/dist/esm/hooks/wallet/useWalletPropertiesChanged.js.map +2 -2
  122. package/dist/esm/index.d.ts +1 -0
  123. package/dist/esm/index.js +119 -39
  124. package/dist/esm/index.js.map +4 -4
  125. package/dist/esm/walletStore.d.ts +10 -2
  126. package/dist/esm/walletStore.js +23 -4
  127. package/dist/esm/walletStore.js.map +2 -2
  128. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  129. package/dist/tsconfig.tsbuildinfo +1 -1
  130. package/package.json +5 -5
  131. package/src/components/ConnectButton.tsx +8 -1
  132. package/src/components/WalletProvider.tsx +1 -0
  133. package/src/components/connect-modal/ConnectModal.tsx +1 -3
  134. package/src/hooks/useResolveSuiNSNames.ts +7 -8
  135. package/src/hooks/useSuiClientInfiniteQuery.ts +43 -25
  136. package/src/hooks/useSuiClientMutation.ts +2 -2
  137. package/src/hooks/useSuiClientQuery.ts +13 -9
  138. package/src/hooks/wallet/useAccounts.ts +3 -1
  139. package/src/hooks/wallet/useAutoConnectWallet.ts +24 -7
  140. package/src/hooks/wallet/useAutoConnectionStatus.ts +12 -0
  141. package/src/hooks/wallet/useConnectWallet.ts +24 -10
  142. package/src/hooks/wallet/useCurrentAccount.ts +3 -1
  143. package/src/hooks/wallet/useCurrentWallet.ts +30 -1
  144. package/src/hooks/wallet/useDisconnectWallet.ts +7 -3
  145. package/src/hooks/wallet/useSignAndExecuteTransactionBlock.ts +7 -3
  146. package/src/hooks/wallet/useSignPersonalMessage.ts +7 -3
  147. package/src/hooks/wallet/useSignTransactionBlock.ts +7 -3
  148. package/src/hooks/wallet/useSwitchAccount.ts +7 -3
  149. package/src/hooks/wallet/useWalletPropertiesChanged.ts +1 -1
  150. package/src/index.ts +1 -0
  151. 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): import("@tanstack/react-query").UseMutationResult<SuiSignTransactionBlockOutput, Error | WalletNotConnectedError | WalletNoAccountSelectedError | WalletFeatureNotSupportedError, UseSignTransactionBlockArgs, unknown>;
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
- return useWalletStore((state) => state.currentWallet);
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\treturn useWalletStore((state) => state.currentWallet);\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;;;AETO,SAAS,oBAAoB;AACnC,SAAO,eAAe,CAAC,UAAU,MAAM,cAAc;AACtD;;;ACFO,SAAS,mBAAmB;AAClC,SAAO,eAAe,CAAC,UAAU,MAAM,aAAa;AACrD;;;ANiCO,SAAS,wBAAwB;AAAA,EACvC;AAAA,EACA,GAAG;AACJ,IAA4C,CAAC,GAAG;AAC/C,QAAM,gBAAgB,iBAAiB;AACvC,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;",
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): import("@tanstack/react-query").UseMutationResult<void, Error | WalletNotConnectedError | WalletAccountNotFoundError, SwitchAccountArgs, unknown>;
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
- return useWalletStore((state) => state.currentWallet);
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\treturn useWalletStore((state) => state.currentWallet);\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,SAAO,eAAe,CAAC,UAAU,MAAM,aAAa;AACrD;;;ALkBO,SAAS,iBAAiB;AAAA,EAChC;AAAA,EACA,GAAG;AACJ,IAAqC,CAAC,GAAG;AACxC,QAAM,gBAAgB,iBAAiB;AACvC,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;",
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
- return useWalletStore((state) => state.currentWallet);
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\treturn useWalletStore((state) => state.currentWallet);\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,SAAO,eAAe,CAAC,UAAU,MAAM,aAAa;AACrD;;;AHCO,SAAS,6BAA6B;AAC5C,QAAM,gBAAgB,iBAAiB;AACvC,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;",
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
  }
@@ -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, ...standardConnectInput }) => {
144
- const connectResult = await wallet.features["standard:connect"].connect(standardConnectInput);
145
- const connectedSuiAccounts = connectResult.accounts.filter(
146
- (account) => account.chains.some((chain) => chain.split(":")[0] === "sui")
147
- );
148
- const selectedAccount = getSelectedAccount(connectedSuiAccounts, accountAddress);
149
- setWalletConnected(wallet, connectedSuiAccounts, selectedAccount);
150
- return { accounts: connectedSuiAccounts };
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)(StyleMarker, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Dialog.Trigger, { asChild: true, children: trigger }) }),
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
- const { data, ...rest } = useSuiClientQuery(
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
- ...options,
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
- return useWalletStore((state) => state.currentWallet);
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)(ConnectModal, { trigger: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Button, { ...buttonProps, children: connectText }) });
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 wallets = useWallets();
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
- wallet,
893
- accountAddress: lastConnectedAccountAddress || void 0,
894
- silent: true
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({ wallets, storage, storageKey }) {
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, { queryKey = [], enabled = !!params, ...options } = {}) {
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: async () => {
1396
- return await suiContext.client[method](params);
1397
- },
1398
- getNextPageParam: (lastPage) => {
1399
- return lastPage.nextCursor ?? null;
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),