@provablehq/aleo-wallet-adaptor-react 0.1.1-alpha.0 → 0.3.0-alpha.1

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/README.md CHANGED
@@ -18,9 +18,9 @@ pnpm add @provablehq/aleo-wallet-adaptor-react
18
18
 
19
19
  ```tsx
20
20
  import { AleoWalletProvider } from '@provablehq/aleo-wallet-adaptor-react';
21
- import { GalileoWalletAdapter } from '@provablehq/aleo-wallet-adaptor-prove-alpha';
21
+ import { ShieldWalletAdapter } from '@provablehq/aleo-wallet-adaptor-shield';
22
22
 
23
- const wallets = [new GalileoWalletAdapter()];
23
+ const wallets = [new ShieldWalletAdapter()];
24
24
 
25
25
  export function App({ children }: { children: React.ReactNode }) {
26
26
  return <AleoWalletProvider wallets={wallets}>{children}</AleoWalletProvider>;
@@ -31,6 +31,6 @@ export function App({ children }: { children: React.ReactNode }) {
31
31
 
32
32
  - `@provablehq/aleo-wallet-adaptor-core` – underlying adapter interfaces consumed by the provider.
33
33
  - `@provablehq/aleo-wallet-adaptor-react-ui` – drop-in modals and buttons that work with this context.
34
- - Wallet adapters such as `@provablehq/aleo-wallet-adaptor-prove-alpha`, `-puzzle`, `-leo`, etc.
34
+ - Wallet adapters such as `@provablehq/aleo-wallet-adaptor-shield`, `-puzzle`, `-leo`, etc.
35
35
 
36
36
  Live demo: https://aleo-dev-toolkit-react-app.vercel.app/
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { FC, ReactNode } from 'react';
3
3
  import { WalletAdapter, WalletReadyState, WalletName, AleoDeployment } from '@provablehq/aleo-wallet-standard';
4
- import { Network, TransactionOptions, TransactionStatusResponse } from '@provablehq/aleo-types';
4
+ import { Network, TransactionOptions, TransactionStatusResponse, TxHistoryResult } from '@provablehq/aleo-types';
5
5
  import { WalletError, DecryptPermission } from '@provablehq/aleo-wallet-adaptor-core';
6
6
 
7
7
  interface Wallet {
@@ -36,6 +36,10 @@ interface WalletContextState {
36
36
  * Whether the wallet is disconnecting
37
37
  */
38
38
  disconnecting: boolean;
39
+ /**
40
+ * Whether the wallet is reauthorizing after an account change
41
+ */
42
+ reconnecting: boolean;
39
43
  /**
40
44
  * Whether the wallet is auto-connecting
41
45
  */
@@ -89,6 +93,16 @@ interface WalletContextState {
89
93
  executeDeployment: (deployment: AleoDeployment) => Promise<{
90
94
  transactionId: string;
91
95
  }>;
96
+ /**
97
+ * get transition view keys(tvk) for a transaction
98
+ */
99
+ transitionViewKeys: (transactionId: string) => Promise<string[]>;
100
+ /**
101
+ * get transaction of specific program
102
+ * @param program The program ID
103
+ * @returns array of transactionId
104
+ */
105
+ requestTransactionHistory: (program: string) => Promise<TxHistoryResult>;
92
106
  }
93
107
  /**
94
108
  * Wallet context
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { FC, ReactNode } from 'react';
3
3
  import { WalletAdapter, WalletReadyState, WalletName, AleoDeployment } from '@provablehq/aleo-wallet-standard';
4
- import { Network, TransactionOptions, TransactionStatusResponse } from '@provablehq/aleo-types';
4
+ import { Network, TransactionOptions, TransactionStatusResponse, TxHistoryResult } from '@provablehq/aleo-types';
5
5
  import { WalletError, DecryptPermission } from '@provablehq/aleo-wallet-adaptor-core';
6
6
 
7
7
  interface Wallet {
@@ -36,6 +36,10 @@ interface WalletContextState {
36
36
  * Whether the wallet is disconnecting
37
37
  */
38
38
  disconnecting: boolean;
39
+ /**
40
+ * Whether the wallet is reauthorizing after an account change
41
+ */
42
+ reconnecting: boolean;
39
43
  /**
40
44
  * Whether the wallet is auto-connecting
41
45
  */
@@ -89,6 +93,16 @@ interface WalletContextState {
89
93
  executeDeployment: (deployment: AleoDeployment) => Promise<{
90
94
  transactionId: string;
91
95
  }>;
96
+ /**
97
+ * get transition view keys(tvk) for a transaction
98
+ */
99
+ transitionViewKeys: (transactionId: string) => Promise<string[]>;
100
+ /**
101
+ * get transaction of specific program
102
+ * @param program The program ID
103
+ * @returns array of transactionId
104
+ */
105
+ requestTransactionHistory: (program: string) => Promise<TxHistoryResult>;
92
106
  }
93
107
  /**
94
108
  * Wallet context
package/dist/index.js CHANGED
@@ -104,9 +104,12 @@ var AleoWalletProvider = ({
104
104
  const readyState = adapter?.readyState || import_aleo_wallet_standard.WalletReadyState.UNSUPPORTED;
105
105
  const [connecting, setConnecting] = (0, import_react3.useState)(false);
106
106
  const [disconnecting, setDisconnecting] = (0, import_react3.useState)(false);
107
+ const [reconnecting, setReconnecting] = (0, import_react3.useState)(false);
107
108
  const isConnecting = (0, import_react3.useRef)(false);
108
109
  const isDisconnecting = (0, import_react3.useRef)(false);
110
+ const isReconnecting = (0, import_react3.useRef)(false);
109
111
  const isUnloading = (0, import_react3.useRef)(false);
112
+ const lastAuthorizedAccount = (0, import_react3.useRef)(null);
110
113
  const [wallets, setWallets] = (0, import_react3.useState)(
111
114
  () => adapters.map((adapter2) => ({
112
115
  adapter: adapter2,
@@ -158,8 +161,10 @@ var AleoWalletProvider = ({
158
161
  publicKey: wallet2.adapter.account?.address ?? null,
159
162
  network: wallet2.adapter.network ?? null
160
163
  });
164
+ lastAuthorizedAccount.current = wallet2.adapter.account?.address ?? null;
161
165
  } else {
162
166
  setState(initialState);
167
+ lastAuthorizedAccount.current = null;
163
168
  }
164
169
  }, [name, wallets]);
165
170
  (0, import_react3.useEffect)(() => {
@@ -177,10 +182,27 @@ var AleoWalletProvider = ({
177
182
  publicKey: adapter.account?.address ?? null,
178
183
  network: adapter.network ?? null
179
184
  }));
185
+ lastAuthorizedAccount.current = adapter.account?.address ?? null;
180
186
  }, [adapter]);
181
187
  const handleDisconnect = (0, import_react3.useCallback)(() => {
182
188
  if (!isUnloading.current) setName(null);
189
+ lastAuthorizedAccount.current = null;
183
190
  }, [isUnloading, setName]);
191
+ const disconnect = (0, import_react3.useCallback)(async () => {
192
+ if (isDisconnecting.current) return;
193
+ if (!adapter) return setName(null);
194
+ isDisconnecting.current = true;
195
+ setDisconnecting(true);
196
+ try {
197
+ await adapter.disconnect();
198
+ } catch (error) {
199
+ setName(null);
200
+ throw error;
201
+ } finally {
202
+ setDisconnecting(false);
203
+ isDisconnecting.current = false;
204
+ }
205
+ }, [isDisconnecting, adapter, setName]);
184
206
  const handleError = (0, import_react3.useCallback)(
185
207
  (error) => {
186
208
  if (!isUnloading.current) (onError || console.error)(error);
@@ -188,18 +210,46 @@ var AleoWalletProvider = ({
188
210
  },
189
211
  [isUnloading, onError]
190
212
  );
213
+ const handleAccountChange = (0, import_react3.useCallback)(async () => {
214
+ if (!adapter || isReconnecting.current) return;
215
+ isReconnecting.current = true;
216
+ setReconnecting(true);
217
+ setState((state) => ({
218
+ ...state,
219
+ publicKey: null,
220
+ connected: false
221
+ }));
222
+ try {
223
+ const account = await adapter.connect(initialNetwork, decryptPermission, programs);
224
+ setState((state) => ({
225
+ ...state,
226
+ publicKey: account.address,
227
+ connected: adapter.connected,
228
+ network: adapter.network ?? state.network
229
+ }));
230
+ lastAuthorizedAccount.current = account.address ?? null;
231
+ } catch (error) {
232
+ handleError(error);
233
+ await disconnect();
234
+ } finally {
235
+ setReconnecting(false);
236
+ isReconnecting.current = false;
237
+ }
238
+ }, [adapter, disconnect, handleError, initialNetwork, decryptPermission, programs]);
191
239
  (0, import_react3.useEffect)(() => {
192
240
  if (adapter) {
193
241
  adapter.on("connect", handleConnect);
194
242
  adapter.on("disconnect", handleDisconnect);
195
243
  adapter.on("error", handleError);
244
+ adapter.on("accountChange", handleAccountChange);
196
245
  return () => {
197
246
  adapter.off("connect", handleConnect);
198
247
  adapter.off("disconnect", handleDisconnect);
199
248
  adapter.off("error", handleError);
249
+ adapter.off("accountChange", handleAccountChange);
200
250
  };
201
251
  }
202
- }, [adapter, handleConnect, handleDisconnect, handleError]);
252
+ }, [adapter, handleConnect, handleDisconnect, handleError, handleAccountChange]);
203
253
  (0, import_react3.useEffect)(() => {
204
254
  return () => {
205
255
  if (adapter && adapter.connected) {
@@ -208,13 +258,14 @@ var AleoWalletProvider = ({
208
258
  };
209
259
  }, [adapter]);
210
260
  (0, import_react3.useEffect)(() => {
211
- if (isConnecting.current || connected || !autoConnect || !adapter || !(readyState === import_aleo_wallet_standard.WalletReadyState.INSTALLED || readyState === import_aleo_wallet_standard.WalletReadyState.LOADABLE))
261
+ if (isConnecting.current || isReconnecting.current || connected || !autoConnect || !adapter || !(readyState === import_aleo_wallet_standard.WalletReadyState.INSTALLED || readyState === import_aleo_wallet_standard.WalletReadyState.LOADABLE))
212
262
  return;
213
263
  (async function() {
214
264
  isConnecting.current = true;
215
265
  setConnecting(true);
216
266
  try {
217
- await adapter.connect(initialNetwork, decryptPermission, programs);
267
+ const account = await adapter.connect(initialNetwork, decryptPermission, programs);
268
+ lastAuthorizedAccount.current = account.address ?? null;
218
269
  } catch (error) {
219
270
  setName(null);
220
271
  } finally {
@@ -251,7 +302,8 @@ var AleoWalletProvider = ({
251
302
  isConnecting.current = true;
252
303
  setConnecting(true);
253
304
  try {
254
- await adapter.connect(initialNetwork, decryptPermission, programs);
305
+ const account = await adapter.connect(initialNetwork, decryptPermission, programs);
306
+ lastAuthorizedAccount.current = account.address ?? null;
255
307
  } catch (error) {
256
308
  setName(null);
257
309
  throw error;
@@ -260,21 +312,6 @@ var AleoWalletProvider = ({
260
312
  isConnecting.current = false;
261
313
  }
262
314
  }, [isConnecting, isDisconnecting, connected, adapter, readyState, handleError, setName]);
263
- const disconnect = (0, import_react3.useCallback)(async () => {
264
- if (isDisconnecting.current) return;
265
- if (!adapter) return setName(null);
266
- isDisconnecting.current = true;
267
- setDisconnecting(true);
268
- try {
269
- await adapter.disconnect();
270
- } catch (error) {
271
- setName(null);
272
- throw error;
273
- } finally {
274
- setDisconnecting(false);
275
- isDisconnecting.current = false;
276
- }
277
- }, [isDisconnecting, adapter, setName]);
278
315
  const executeTransaction = (0, import_react3.useCallback)(
279
316
  async (transaction) => {
280
317
  if (!connected) throw handleError(new import_aleo_wallet_adaptor_core.WalletNotConnectedError());
@@ -356,6 +393,24 @@ var AleoWalletProvider = ({
356
393
  },
357
394
  [adapter, handleError, connected]
358
395
  );
396
+ const transitionViewKeys = (0, import_react3.useCallback)(
397
+ async (transactionId) => {
398
+ if (!connected) throw handleError(new import_aleo_wallet_adaptor_core.WalletNotConnectedError());
399
+ if (!adapter || !("transitionViewKeys" in adapter))
400
+ throw handleError(new import_aleo_wallet_adaptor_core.MethodNotImplementedError("transitionViewKeys"));
401
+ return await adapter.transitionViewKeys(transactionId);
402
+ },
403
+ [adapter, handleError, connected]
404
+ );
405
+ const requestTransactionHistory = (0, import_react3.useCallback)(
406
+ async (program) => {
407
+ if (!connected) throw handleError(new import_aleo_wallet_adaptor_core.WalletNotConnectedError());
408
+ if (!adapter || !("requestTransactionHistory" in adapter))
409
+ throw handleError(new import_aleo_wallet_adaptor_core.MethodNotImplementedError("requestTransactionHistory"));
410
+ return await adapter.requestTransactionHistory(program);
411
+ },
412
+ [adapter, handleError, connected]
413
+ );
359
414
  const checkNetwork = (0, import_react3.useCallback)(async () => {
360
415
  if (adapter && adapter.network !== initialNetwork) {
361
416
  const switchResult = await switchNetwork(initialNetwork);
@@ -374,6 +429,7 @@ var AleoWalletProvider = ({
374
429
  address: publicKey ?? null,
375
430
  connected,
376
431
  connecting,
432
+ reconnecting,
377
433
  disconnecting,
378
434
  network,
379
435
  selectWallet: setName,
@@ -385,7 +441,9 @@ var AleoWalletProvider = ({
385
441
  switchNetwork,
386
442
  decrypt,
387
443
  requestRecords,
388
- executeDeployment
444
+ executeDeployment,
445
+ transitionViewKeys,
446
+ requestTransactionHistory
389
447
  },
390
448
  children
391
449
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/context.ts","../src/WalletProvider.tsx","../src/useLocalStorage.ts","../src/useWallet.ts"],"sourcesContent":["export * from './context';\nexport { AleoWalletProvider } from './WalletProvider';\nexport * from './useWallet';\n","import { createContext, useContext } from 'react';\nimport {\n AleoDeployment,\n WalletAdapter,\n WalletName,\n WalletReadyState,\n} from '@provablehq/aleo-wallet-standard';\nimport { Network, TransactionOptions, TransactionStatusResponse } from '@provablehq/aleo-types';\n\nexport interface Wallet {\n adapter: WalletAdapter;\n readyState: WalletReadyState;\n}\n\n/**\n * Wallet context state\n */\nexport interface WalletContextState {\n /**\n * All available wallet adapters\n */\n wallets: Wallet[];\n\n /**\n * The connected wallet adapter\n */\n wallet: Wallet | null;\n\n /**\n * The connected account\n */\n address: string | null;\n\n /**\n * Whether the wallet is connected\n */\n connected: boolean;\n\n /**\n * Whether the wallet is connecting\n */\n connecting: boolean;\n\n /**\n * Whether the wallet is disconnecting\n */\n disconnecting: boolean;\n\n /**\n * Whether the wallet is auto-connecting\n */\n autoConnect: boolean;\n\n /**\n * The current network\n */\n network: Network | null;\n\n /**\n * Select a wallet by name\n * @param name The name of the wallet to select\n */\n selectWallet: (name: WalletName) => void;\n\n /**\n * Connect to the selected wallet\n */\n connect: (network: Network) => Promise<void>;\n\n /**\n * Disconnect from the connected wallet\n */\n disconnect: () => Promise<void>;\n\n /**\n * Execute a transaction\n */\n executeTransaction: (\n options: TransactionOptions,\n ) => Promise<{ transactionId: string } | undefined>;\n\n /**\n * Get transaction status\n */\n transactionStatus: (transactionId: string) => Promise<TransactionStatusResponse>;\n\n /**\n * Sign a message\n */\n signMessage: (message: Uint8Array | string) => Promise<Uint8Array | undefined>;\n\n /**\n * Switch the network\n */\n switchNetwork: (network: Network) => Promise<boolean>;\n\n /**\n * Decrypt a ciphertext\n */\n decrypt: (cipherText: string) => Promise<string>;\n\n /**\n * Request records\n */\n requestRecords: (program: string, includePlaintext?: boolean) => Promise<unknown[]>;\n\n /**\n * Execute a deployment\n */\n executeDeployment: (deployment: AleoDeployment) => Promise<{ transactionId: string }>;\n}\n\n/**\n * Wallet context\n */\nexport const WalletContext = createContext<WalletContextState | undefined>(undefined);\n\n/**\n * Custom hook to use the wallet context\n * @returns The wallet context state\n */\nexport function useWalletContext(): WalletContextState {\n const ctx = useContext(WalletContext);\n if (!ctx) {\n throw new Error('`useWalletContext` must be used inside `AleoWalletProvider`');\n }\n return ctx;\n}\n","import type { FC, ReactNode } from 'react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n WalletName,\n WalletReadyState,\n WalletAdapter,\n AleoDeployment,\n} from '@provablehq/aleo-wallet-standard';\nimport { Network, TransactionOptions } from '@provablehq/aleo-types';\nimport { Wallet, WalletContext } from './context';\nimport { useLocalStorage } from './useLocalStorage';\nimport {\n WalletError,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletNotSelectedError,\n MethodNotImplementedError,\n WalletSwitchNetworkError,\n DecryptPermission,\n} from '@provablehq/aleo-wallet-adaptor-core';\n\nexport interface WalletProviderProps {\n children: ReactNode;\n wallets: WalletAdapter[];\n network?: Network;\n autoConnect?: boolean;\n onError?: (error: WalletError) => void;\n localStorageKey?: string;\n decryptPermission?: DecryptPermission;\n programs?: string[];\n}\n\nconst initialState: {\n wallet: Wallet | null;\n adapter: WalletAdapter | null;\n publicKey: string | null;\n connected: boolean;\n network: Network | null;\n} = {\n wallet: null,\n adapter: null,\n publicKey: null,\n connected: false,\n network: null,\n};\n\nexport const AleoWalletProvider: FC<WalletProviderProps> = ({\n children,\n wallets: adapters,\n autoConnect = false,\n network: initialNetwork = Network.TESTNET3,\n onError,\n localStorageKey = 'walletName',\n decryptPermission = DecryptPermission.NoDecrypt,\n programs,\n}) => {\n const [name, setName] = useLocalStorage<WalletName | null>(localStorageKey, null);\n const [{ wallet, adapter, publicKey, connected, network }, setState] = useState(initialState);\n const readyState = adapter?.readyState || WalletReadyState.UNSUPPORTED;\n const [connecting, setConnecting] = useState(false);\n const [disconnecting, setDisconnecting] = useState(false);\n const isConnecting = useRef(false);\n const isDisconnecting = useRef(false);\n const isUnloading = useRef(false);\n\n // Wrap adapters to conform to the `Wallet` interface\n const [wallets, setWallets] = useState(() =>\n adapters.map(adapter => ({\n adapter,\n readyState: adapter.readyState,\n })),\n );\n\n // When the adapters change, start to listen for changes to their `readyState`\n useEffect(() => {\n // When the adapters change, wrap them to conform to the `Wallet` interface\n setWallets(wallets =>\n adapters.map((adapter, index) => {\n const wallet = wallets[index];\n // If the wallet hasn't changed, return the same instance\n return wallet && wallet.adapter === adapter && wallet.readyState === adapter.readyState\n ? wallet\n : {\n adapter: adapter,\n readyState: adapter.readyState,\n };\n }),\n );\n\n function handleReadyStateChange(this: WalletAdapter, readyState: WalletReadyState): void {\n setWallets(prevWallets => {\n const index = prevWallets.findIndex(({ adapter }) => adapter === this);\n if (index === -1) return prevWallets;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { adapter } = prevWallets[index]!;\n return [\n ...prevWallets.slice(0, index),\n { adapter, readyState },\n ...prevWallets.slice(index + 1),\n ];\n });\n }\n\n function handleNetworkChange(this: WalletAdapter, network: Network): void {\n setState(state => ({\n ...state,\n network,\n }));\n }\n\n adapters.forEach(adapter => adapter.on('readyStateChange', handleReadyStateChange, adapter));\n adapters.forEach(adapter => adapter.on('networkChange', handleNetworkChange, adapter));\n return () => {\n adapters.forEach(adapter => adapter.off('readyStateChange', handleReadyStateChange, adapter));\n adapters.forEach(adapter => adapter.off('networkChange', handleNetworkChange, adapter));\n };\n }, [adapters]);\n\n // When the selected wallet changes, initialize the state\n useEffect(() => {\n const wallet = name && wallets.find(({ adapter }) => adapter.name === name);\n if (wallet) {\n setState({\n wallet,\n adapter: wallet.adapter,\n connected: wallet.adapter.connected,\n publicKey: wallet.adapter.account?.address ?? null,\n network: wallet.adapter.network ?? null,\n });\n } else {\n setState(initialState);\n }\n }, [name, wallets]);\n\n // If the window is closing or reloading, ignore disconnect and error events from the adapter\n useEffect(() => {\n function listener() {\n isUnloading.current = true;\n }\n\n window.addEventListener('beforeunload', listener);\n return () => window.removeEventListener('beforeunload', listener);\n }, [isUnloading]);\n\n // Handle the adapter's connect event\n const handleConnect = useCallback(() => {\n if (!adapter) return;\n setState(state => ({\n ...state,\n connected: adapter.connected,\n publicKey: adapter.account?.address ?? null,\n network: adapter.network ?? null,\n }));\n }, [adapter]);\n\n // Handle the adapter's disconnect event\n const handleDisconnect = useCallback(() => {\n // Clear the selected wallet unless the window is unloading\n if (!isUnloading.current) setName(null);\n }, [isUnloading, setName]);\n\n // Handle the adapter's error event, and local errors\n const handleError = useCallback(\n (error: WalletError) => {\n // Call onError unless the window is unloading\n if (!isUnloading.current) (onError || console.error)(error);\n return error;\n },\n [isUnloading, onError],\n );\n\n // Setup and teardown event listeners when the adapter changes\n useEffect(() => {\n if (adapter) {\n adapter.on('connect', handleConnect);\n adapter.on('disconnect', handleDisconnect);\n adapter.on('error', handleError);\n return () => {\n adapter.off('connect', handleConnect);\n adapter.off('disconnect', handleDisconnect);\n adapter.off('error', handleError);\n };\n }\n }, [adapter, handleConnect, handleDisconnect, handleError]);\n\n // When the adapter changes, disconnect the old one\n useEffect(() => {\n return () => {\n if (adapter && adapter.connected) {\n adapter.disconnect();\n }\n };\n }, [adapter]);\n\n // If autoConnect is enabled, try to connect when the adapter changes and is ready\n useEffect(() => {\n if (\n isConnecting.current ||\n connected ||\n !autoConnect ||\n !adapter ||\n !(readyState === WalletReadyState.INSTALLED || readyState === WalletReadyState.LOADABLE)\n )\n return;\n\n (async function () {\n isConnecting.current = true;\n setConnecting(true);\n try {\n await adapter.connect(initialNetwork, decryptPermission, programs);\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n // Don't throw error, but handleError will still be called\n } finally {\n setConnecting(false);\n isConnecting.current = false;\n }\n })();\n }, [isConnecting, connected, autoConnect, adapter, readyState, setName]);\n\n useEffect(() => {\n if (adapter && connected && adapter.network !== initialNetwork) {\n try {\n switchNetwork(initialNetwork);\n } catch (error: unknown) {\n console.error('Failed to switch network, disconnecting');\n disconnect();\n }\n }\n }, [initialNetwork]);\n\n useEffect(() => {\n if (adapter && connected) {\n disconnect();\n }\n }, [decryptPermission, programs]);\n\n // Connect the adapter to the wallet\n const connect = useCallback(async () => {\n if (isConnecting.current || isDisconnecting.current || connected) return;\n if (!adapter) throw handleError(new WalletNotSelectedError());\n\n if (!(readyState === WalletReadyState.INSTALLED || readyState === WalletReadyState.LOADABLE)) {\n // Clear the selected wallet\n setName(null);\n\n if (typeof window !== 'undefined') {\n window.open(adapter.url, '_blank');\n }\n\n throw handleError(new WalletNotReadyError());\n }\n\n isConnecting.current = true;\n setConnecting(true);\n try {\n await adapter.connect(initialNetwork, decryptPermission, programs);\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n // Rethrow the error, and handleError will also be called\n throw error;\n } finally {\n setConnecting(false);\n isConnecting.current = false;\n }\n }, [isConnecting, isDisconnecting, connected, adapter, readyState, handleError, setName]);\n\n // Disconnect the adapter from the wallet\n const disconnect = useCallback(async () => {\n if (isDisconnecting.current) return;\n if (!adapter) return setName(null);\n\n isDisconnecting.current = true;\n setDisconnecting(true);\n try {\n await adapter.disconnect();\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n // Rethrow the error, and handleError will also be called\n throw error;\n } finally {\n setDisconnecting(false);\n isDisconnecting.current = false;\n }\n }, [isDisconnecting, adapter, setName]);\n\n const executeTransaction = useCallback(\n async (transaction: TransactionOptions) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('executeTransaction' in adapter))\n throw handleError(new MethodNotImplementedError('executeTransaction'));\n\n await checkNetwork();\n\n return await adapter.executeTransaction(transaction);\n },\n [adapter, handleError, connected],\n );\n\n const transactionStatus = useCallback(\n async (transactionId: string) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('transactionStatus' in adapter))\n throw handleError(new MethodNotImplementedError('transactionStatus'));\n\n return await adapter.transactionStatus(transactionId);\n },\n [adapter, handleError, connected],\n );\n\n // Sign an arbitrary message if the wallet supports it\n const signMessage = useMemo(\n () =>\n async (message: Uint8Array | string): Promise<Uint8Array | undefined> => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('signMessage' in adapter))\n throw handleError(new MethodNotImplementedError('signMessage'));\n\n return await adapter.signMessage(\n typeof message === 'string' ? new TextEncoder().encode(message) : message,\n );\n },\n [adapter, handleError, connected],\n );\n\n const switchNetwork = useCallback(\n async (network: Network) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('switchNetwork' in adapter))\n throw handleError(new MethodNotImplementedError('switchNetwork'));\n let switched = false;\n try {\n isConnecting.current = true;\n setConnecting(true);\n await adapter.switchNetwork(network);\n switched = true;\n } catch (error: unknown) {\n if (error instanceof MethodNotImplementedError) {\n await disconnect();\n }\n\n console.error('Failed to switch network');\n } finally {\n isConnecting.current = false;\n setConnecting(false);\n }\n return switched;\n },\n [adapter, handleError, connected],\n );\n\n const decrypt = useCallback(\n async (cipherText: string) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('decrypt' in adapter))\n throw handleError(new MethodNotImplementedError('decrypt'));\n\n return await adapter.decrypt(cipherText);\n },\n [adapter, handleError, connected],\n );\n\n const requestRecords = useCallback(\n async (program: string, includePlaintext?: boolean) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('requestRecords' in adapter))\n throw handleError(new MethodNotImplementedError('requestRecords'));\n\n return await adapter.requestRecords(program, includePlaintext);\n },\n [adapter, handleError, connected],\n );\n\n const executeDeployment = useCallback(\n async (deployment: AleoDeployment) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('executeDeployment' in adapter))\n throw handleError(new MethodNotImplementedError('executeDeployment'));\n\n return await adapter.executeDeployment(deployment);\n },\n [adapter, handleError, connected],\n );\n\n const checkNetwork = useCallback(async () => {\n if (adapter && adapter.network !== initialNetwork) {\n const switchResult = await switchNetwork(initialNetwork);\n if (!switchResult) {\n throw handleError(new WalletSwitchNetworkError('Failed to switch network'));\n }\n }\n }, [adapter, initialNetwork, switchNetwork]);\n\n return (\n <WalletContext.Provider\n value={{\n autoConnect,\n wallets,\n wallet,\n address: publicKey ?? null,\n connected,\n connecting,\n disconnecting,\n network,\n selectWallet: setName,\n connect,\n disconnect,\n executeTransaction,\n transactionStatus,\n signMessage,\n switchNetwork,\n decrypt,\n requestRecords,\n executeDeployment,\n }}\n >\n {children}\n </WalletContext.Provider>\n );\n};\n","import type { Dispatch, SetStateAction } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nexport function useLocalStorage<T>(key: string, defaultState: T): [T, Dispatch<SetStateAction<T>>] {\n const state = useState<T>(() => {\n try {\n const value = localStorage.getItem(key);\n if (value) return JSON.parse(value) as T;\n } catch (error: unknown) {\n if (typeof window !== 'undefined') {\n console.error(error);\n }\n }\n\n return defaultState;\n });\n const value = state[0];\n\n const isFirstRender = useRef(true);\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n try {\n if (value === null) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, JSON.stringify(value));\n }\n } catch (error: unknown) {\n if (typeof window !== 'undefined') {\n console.error(error);\n }\n }\n }, [value, key]);\n\n return state;\n}\n","import { useWalletContext } from './context';\nimport type { WalletContextState } from './context';\n\n/**\n * Custom hook to use the wallet\n * @returns The wallet context state\n */\nexport function useWallet(): WalletContextState {\n return useWalletContext();\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAA0C;AAmHnC,IAAM,oBAAgB,4BAA8C,MAAS;AAM7E,SAAS,mBAAuC;AACrD,QAAM,UAAM,yBAAW,aAAa;AACpC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACA,SAAO;AACT;;;AC9HA,IAAAA,gBAAkE;AAClE,kCAKO;AACP,wBAA4C;;;ACP5C,IAAAC,gBAA4C;AAErC,SAAS,gBAAmB,KAAa,cAAmD;AACjG,QAAM,YAAQ,wBAAY,MAAM;AAC9B,QAAI;AACF,YAAMC,SAAQ,aAAa,QAAQ,GAAG;AACtC,UAAIA,OAAO,QAAO,KAAK,MAAMA,MAAK;AAAA,IACpC,SAAS,OAAgB;AACvB,UAAI,OAAO,WAAW,aAAa;AACjC,gBAAQ,MAAM,KAAK;AAAA,MACrB;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC;AACD,QAAM,QAAQ,MAAM,CAAC;AAErB,QAAM,oBAAgB,sBAAO,IAAI;AACjC,+BAAU,MAAM;AACd,QAAI,cAAc,SAAS;AACzB,oBAAc,UAAU;AACxB;AAAA,IACF;AACA,QAAI;AACF,UAAI,UAAU,MAAM;AAClB,qBAAa,WAAW,GAAG;AAAA,MAC7B,OAAO;AACL,qBAAa,QAAQ,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,MACjD;AAAA,IACF,SAAS,OAAgB;AACvB,UAAI,OAAO,WAAW,aAAa;AACjC,gBAAQ,MAAM,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,GAAG,CAAC;AAEf,SAAO;AACT;;;AD3BA,sCAQO;AA2XH;AA9WJ,IAAM,eAMF;AAAA,EACF,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AACX;AAEO,IAAM,qBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS,iBAAiB,0BAAQ;AAAA,EAClC;AAAA,EACA,kBAAkB;AAAA,EAClB,oBAAoB,kDAAkB;AAAA,EACtC;AACF,MAAM;AACJ,QAAM,CAAC,MAAM,OAAO,IAAI,gBAAmC,iBAAiB,IAAI;AAChF,QAAM,CAAC,EAAE,QAAQ,SAAS,WAAW,WAAW,QAAQ,GAAG,QAAQ,QAAI,wBAAS,YAAY;AAC5F,QAAM,aAAa,SAAS,cAAc,6CAAiB;AAC3D,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,KAAK;AAClD,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAS,KAAK;AACxD,QAAM,mBAAe,sBAAO,KAAK;AACjC,QAAM,sBAAkB,sBAAO,KAAK;AACpC,QAAM,kBAAc,sBAAO,KAAK;AAGhC,QAAM,CAAC,SAAS,UAAU,QAAI;AAAA,IAAS,MACrC,SAAS,IAAI,CAAAC,cAAY;AAAA,MACvB,SAAAA;AAAA,MACA,YAAYA,SAAQ;AAAA,IACtB,EAAE;AAAA,EACJ;AAGA,+BAAU,MAAM;AAEd;AAAA,MAAW,CAAAC,aACT,SAAS,IAAI,CAACD,UAAS,UAAU;AAC/B,cAAME,UAASD,SAAQ,KAAK;AAE5B,eAAOC,WAAUA,QAAO,YAAYF,YAAWE,QAAO,eAAeF,SAAQ,aACzEE,UACA;AAAA,UACE,SAASF;AAAA,UACT,YAAYA,SAAQ;AAAA,QACtB;AAAA,MACN,CAAC;AAAA,IACH;AAEA,aAAS,uBAA4CG,aAAoC;AACvF,iBAAW,iBAAe;AACxB,cAAM,QAAQ,YAAY,UAAU,CAAC,EAAE,SAAAH,SAAQ,MAAMA,aAAY,IAAI;AACrE,YAAI,UAAU,GAAI,QAAO;AAGzB,cAAM,EAAE,SAAAA,SAAQ,IAAI,YAAY,KAAK;AACrC,eAAO;AAAA,UACL,GAAG,YAAY,MAAM,GAAG,KAAK;AAAA,UAC7B,EAAE,SAAAA,UAAS,YAAAG,YAAW;AAAA,UACtB,GAAG,YAAY,MAAM,QAAQ,CAAC;AAAA,QAChC;AAAA,MACF,CAAC;AAAA,IACH;AAEA,aAAS,oBAAyCC,UAAwB;AACxE,eAAS,YAAU;AAAA,QACjB,GAAG;AAAA,QACH,SAAAA;AAAA,MACF,EAAE;AAAA,IACJ;AAEA,aAAS,QAAQ,CAAAJ,aAAWA,SAAQ,GAAG,oBAAoB,wBAAwBA,QAAO,CAAC;AAC3F,aAAS,QAAQ,CAAAA,aAAWA,SAAQ,GAAG,iBAAiB,qBAAqBA,QAAO,CAAC;AACrF,WAAO,MAAM;AACX,eAAS,QAAQ,CAAAA,aAAWA,SAAQ,IAAI,oBAAoB,wBAAwBA,QAAO,CAAC;AAC5F,eAAS,QAAQ,CAAAA,aAAWA,SAAQ,IAAI,iBAAiB,qBAAqBA,QAAO,CAAC;AAAA,IACxF;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAGb,+BAAU,MAAM;AACd,UAAME,UAAS,QAAQ,QAAQ,KAAK,CAAC,EAAE,SAAAF,SAAQ,MAAMA,SAAQ,SAAS,IAAI;AAC1E,QAAIE,SAAQ;AACV,eAAS;AAAA,QACP,QAAAA;AAAA,QACA,SAASA,QAAO;AAAA,QAChB,WAAWA,QAAO,QAAQ;AAAA,QAC1B,WAAWA,QAAO,QAAQ,SAAS,WAAW;AAAA,QAC9C,SAASA,QAAO,QAAQ,WAAW;AAAA,MACrC,CAAC;AAAA,IACH,OAAO;AACL,eAAS,YAAY;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,MAAM,OAAO,CAAC;AAGlB,+BAAU,MAAM;AACd,aAAS,WAAW;AAClB,kBAAY,UAAU;AAAA,IACxB;AAEA,WAAO,iBAAiB,gBAAgB,QAAQ;AAChD,WAAO,MAAM,OAAO,oBAAoB,gBAAgB,QAAQ;AAAA,EAClE,GAAG,CAAC,WAAW,CAAC;AAGhB,QAAM,oBAAgB,2BAAY,MAAM;AACtC,QAAI,CAAC,QAAS;AACd,aAAS,YAAU;AAAA,MACjB,GAAG;AAAA,MACH,WAAW,QAAQ;AAAA,MACnB,WAAW,QAAQ,SAAS,WAAW;AAAA,MACvC,SAAS,QAAQ,WAAW;AAAA,IAC9B,EAAE;AAAA,EACJ,GAAG,CAAC,OAAO,CAAC;AAGZ,QAAM,uBAAmB,2BAAY,MAAM;AAEzC,QAAI,CAAC,YAAY,QAAS,SAAQ,IAAI;AAAA,EACxC,GAAG,CAAC,aAAa,OAAO,CAAC;AAGzB,QAAM,kBAAc;AAAA,IAClB,CAAC,UAAuB;AAEtB,UAAI,CAAC,YAAY,QAAS,EAAC,WAAW,QAAQ,OAAO,KAAK;AAC1D,aAAO;AAAA,IACT;AAAA,IACA,CAAC,aAAa,OAAO;AAAA,EACvB;AAGA,+BAAU,MAAM;AACd,QAAI,SAAS;AACX,cAAQ,GAAG,WAAW,aAAa;AACnC,cAAQ,GAAG,cAAc,gBAAgB;AACzC,cAAQ,GAAG,SAAS,WAAW;AAC/B,aAAO,MAAM;AACX,gBAAQ,IAAI,WAAW,aAAa;AACpC,gBAAQ,IAAI,cAAc,gBAAgB;AAC1C,gBAAQ,IAAI,SAAS,WAAW;AAAA,MAClC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,eAAe,kBAAkB,WAAW,CAAC;AAG1D,+BAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,WAAW,QAAQ,WAAW;AAChC,gBAAQ,WAAW;AAAA,MACrB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAGZ,+BAAU,MAAM;AACd,QACE,aAAa,WACb,aACA,CAAC,eACD,CAAC,WACD,EAAE,eAAe,6CAAiB,aAAa,eAAe,6CAAiB;AAE/E;AAEF,KAAC,iBAAkB;AACjB,mBAAa,UAAU;AACvB,oBAAc,IAAI;AAClB,UAAI;AACF,cAAM,QAAQ,QAAQ,gBAAgB,mBAAmB,QAAQ;AAAA,MACnE,SAAS,OAAgB;AAEvB,gBAAQ,IAAI;AAAA,MAEd,UAAE;AACA,sBAAc,KAAK;AACnB,qBAAa,UAAU;AAAA,MACzB;AAAA,IACF,GAAG;AAAA,EACL,GAAG,CAAC,cAAc,WAAW,aAAa,SAAS,YAAY,OAAO,CAAC;AAEvE,+BAAU,MAAM;AACd,QAAI,WAAW,aAAa,QAAQ,YAAY,gBAAgB;AAC9D,UAAI;AACF,sBAAc,cAAc;AAAA,MAC9B,SAAS,OAAgB;AACvB,gBAAQ,MAAM,yCAAyC;AACvD,mBAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,+BAAU,MAAM;AACd,QAAI,WAAW,WAAW;AACxB,iBAAW;AAAA,IACb;AAAA,EACF,GAAG,CAAC,mBAAmB,QAAQ,CAAC;AAGhC,QAAM,cAAU,2BAAY,YAAY;AACtC,QAAI,aAAa,WAAW,gBAAgB,WAAW,UAAW;AAClE,QAAI,CAAC,QAAS,OAAM,YAAY,IAAI,uDAAuB,CAAC;AAE5D,QAAI,EAAE,eAAe,6CAAiB,aAAa,eAAe,6CAAiB,WAAW;AAE5F,cAAQ,IAAI;AAEZ,UAAI,OAAO,WAAW,aAAa;AACjC,eAAO,KAAK,QAAQ,KAAK,QAAQ;AAAA,MACnC;AAEA,YAAM,YAAY,IAAI,oDAAoB,CAAC;AAAA,IAC7C;AAEA,iBAAa,UAAU;AACvB,kBAAc,IAAI;AAClB,QAAI;AACF,YAAM,QAAQ,QAAQ,gBAAgB,mBAAmB,QAAQ;AAAA,IACnE,SAAS,OAAgB;AAEvB,cAAQ,IAAI;AAEZ,YAAM;AAAA,IACR,UAAE;AACA,oBAAc,KAAK;AACnB,mBAAa,UAAU;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,cAAc,iBAAiB,WAAW,SAAS,YAAY,aAAa,OAAO,CAAC;AAGxF,QAAM,iBAAa,2BAAY,YAAY;AACzC,QAAI,gBAAgB,QAAS;AAC7B,QAAI,CAAC,QAAS,QAAO,QAAQ,IAAI;AAEjC,oBAAgB,UAAU;AAC1B,qBAAiB,IAAI;AACrB,QAAI;AACF,YAAM,QAAQ,WAAW;AAAA,IAC3B,SAAS,OAAgB;AAEvB,cAAQ,IAAI;AAEZ,YAAM;AAAA,IACR,UAAE;AACA,uBAAiB,KAAK;AACtB,sBAAgB,UAAU;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,iBAAiB,SAAS,OAAO,CAAC;AAEtC,QAAM,yBAAqB;AAAA,IACzB,OAAO,gBAAoC;AACzC,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,wBAAwB;AACxC,cAAM,YAAY,IAAI,0DAA0B,oBAAoB,CAAC;AAEvE,YAAM,aAAa;AAEnB,aAAO,MAAM,QAAQ,mBAAmB,WAAW;AAAA,IACrD;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,wBAAoB;AAAA,IACxB,OAAO,kBAA0B;AAC/B,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,uBAAuB;AACvC,cAAM,YAAY,IAAI,0DAA0B,mBAAmB,CAAC;AAEtE,aAAO,MAAM,QAAQ,kBAAkB,aAAa;AAAA,IACtD;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAGA,QAAM,kBAAc;AAAA,IAClB,MACE,OAAO,YAAkE;AACvE,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,iBAAiB;AACjC,cAAM,YAAY,IAAI,0DAA0B,aAAa,CAAC;AAEhE,aAAO,MAAM,QAAQ;AAAA,QACnB,OAAO,YAAY,WAAW,IAAI,YAAY,EAAE,OAAO,OAAO,IAAI;AAAA,MACpE;AAAA,IACF;AAAA,IACF,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,oBAAgB;AAAA,IACpB,OAAOE,aAAqB;AAC1B,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,mBAAmB;AACnC,cAAM,YAAY,IAAI,0DAA0B,eAAe,CAAC;AAClE,UAAI,WAAW;AACf,UAAI;AACF,qBAAa,UAAU;AACvB,sBAAc,IAAI;AAClB,cAAM,QAAQ,cAAcA,QAAO;AACnC,mBAAW;AAAA,MACb,SAAS,OAAgB;AACvB,YAAI,iBAAiB,2DAA2B;AAC9C,gBAAM,WAAW;AAAA,QACnB;AAEA,gBAAQ,MAAM,0BAA0B;AAAA,MAC1C,UAAE;AACA,qBAAa,UAAU;AACvB,sBAAc,KAAK;AAAA,MACrB;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,cAAU;AAAA,IACd,OAAO,eAAuB;AAC5B,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,aAAa;AAC7B,cAAM,YAAY,IAAI,0DAA0B,SAAS,CAAC;AAE5D,aAAO,MAAM,QAAQ,QAAQ,UAAU;AAAA,IACzC;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,qBAAiB;AAAA,IACrB,OAAO,SAAiB,qBAA+B;AACrD,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,oBAAoB;AACpC,cAAM,YAAY,IAAI,0DAA0B,gBAAgB,CAAC;AAEnE,aAAO,MAAM,QAAQ,eAAe,SAAS,gBAAgB;AAAA,IAC/D;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,wBAAoB;AAAA,IACxB,OAAO,eAA+B;AACpC,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,uBAAuB;AACvC,cAAM,YAAY,IAAI,0DAA0B,mBAAmB,CAAC;AAEtE,aAAO,MAAM,QAAQ,kBAAkB,UAAU;AAAA,IACnD;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,mBAAe,2BAAY,YAAY;AAC3C,QAAI,WAAW,QAAQ,YAAY,gBAAgB;AACjD,YAAM,eAAe,MAAM,cAAc,cAAc;AACvD,UAAI,CAAC,cAAc;AACjB,cAAM,YAAY,IAAI,yDAAyB,0BAA0B,CAAC;AAAA,MAC5E;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,gBAAgB,aAAa,CAAC;AAE3C,SACE;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACC,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,aAAa;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;AEhaO,SAAS,YAAgC;AAC9C,SAAO,iBAAiB;AAC1B;","names":["import_react","import_react","value","adapter","wallets","wallet","readyState","network"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/context.ts","../src/WalletProvider.tsx","../src/useLocalStorage.ts","../src/useWallet.ts"],"sourcesContent":["export * from './context';\nexport { AleoWalletProvider } from './WalletProvider';\nexport * from './useWallet';\n","import { createContext, useContext } from 'react';\nimport {\n AleoDeployment,\n WalletAdapter,\n WalletName,\n WalletReadyState,\n} from '@provablehq/aleo-wallet-standard';\nimport {\n Network,\n TransactionOptions,\n TransactionStatusResponse,\n TxHistoryResult,\n} from '@provablehq/aleo-types';\n\nexport interface Wallet {\n adapter: WalletAdapter;\n readyState: WalletReadyState;\n}\n\n/**\n * Wallet context state\n */\nexport interface WalletContextState {\n /**\n * All available wallet adapters\n */\n wallets: Wallet[];\n\n /**\n * The connected wallet adapter\n */\n wallet: Wallet | null;\n\n /**\n * The connected account\n */\n address: string | null;\n\n /**\n * Whether the wallet is connected\n */\n connected: boolean;\n\n /**\n * Whether the wallet is connecting\n */\n connecting: boolean;\n\n /**\n * Whether the wallet is disconnecting\n */\n disconnecting: boolean;\n\n /**\n * Whether the wallet is reauthorizing after an account change\n */\n reconnecting: boolean;\n\n /**\n * Whether the wallet is auto-connecting\n */\n autoConnect: boolean;\n\n /**\n * The current network\n */\n network: Network | null;\n\n /**\n * Select a wallet by name\n * @param name The name of the wallet to select\n */\n selectWallet: (name: WalletName) => void;\n\n /**\n * Connect to the selected wallet\n */\n connect: (network: Network) => Promise<void>;\n\n /**\n * Disconnect from the connected wallet\n */\n disconnect: () => Promise<void>;\n\n /**\n * Execute a transaction\n */\n executeTransaction: (\n options: TransactionOptions,\n ) => Promise<{ transactionId: string } | undefined>;\n\n /**\n * Get transaction status\n */\n transactionStatus: (transactionId: string) => Promise<TransactionStatusResponse>;\n\n /**\n * Sign a message\n */\n signMessage: (message: Uint8Array | string) => Promise<Uint8Array | undefined>;\n\n /**\n * Switch the network\n */\n switchNetwork: (network: Network) => Promise<boolean>;\n\n /**\n * Decrypt a ciphertext\n */\n decrypt: (cipherText: string) => Promise<string>;\n\n /**\n * Request records\n */\n requestRecords: (program: string, includePlaintext?: boolean) => Promise<unknown[]>;\n\n /**\n * Execute a deployment\n */\n executeDeployment: (deployment: AleoDeployment) => Promise<{ transactionId: string }>;\n /**\n * get transition view keys(tvk) for a transaction\n */\n transitionViewKeys: (transactionId: string) => Promise<string[]>;\n /**\n * get transaction of specific program\n * @param program The program ID\n * @returns array of transactionId\n */\n requestTransactionHistory: (program: string) => Promise<TxHistoryResult>;\n}\n\n/**\n * Wallet context\n */\nexport const WalletContext = createContext<WalletContextState | undefined>(undefined);\n\n/**\n * Custom hook to use the wallet context\n * @returns The wallet context state\n */\nexport function useWalletContext(): WalletContextState {\n const ctx = useContext(WalletContext);\n if (!ctx) {\n throw new Error('`useWalletContext` must be used inside `AleoWalletProvider`');\n }\n return ctx;\n}\n","import type { FC, ReactNode } from 'react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n WalletName,\n WalletReadyState,\n WalletAdapter,\n AleoDeployment,\n} from '@provablehq/aleo-wallet-standard';\nimport { Network, TransactionOptions } from '@provablehq/aleo-types';\nimport { Wallet, WalletContext } from './context';\nimport { useLocalStorage } from './useLocalStorage';\nimport {\n WalletError,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletNotSelectedError,\n MethodNotImplementedError,\n WalletSwitchNetworkError,\n DecryptPermission,\n} from '@provablehq/aleo-wallet-adaptor-core';\n\nexport interface WalletProviderProps {\n children: ReactNode;\n wallets: WalletAdapter[];\n network?: Network;\n autoConnect?: boolean;\n onError?: (error: WalletError) => void;\n localStorageKey?: string;\n decryptPermission?: DecryptPermission;\n programs?: string[];\n}\n\nconst initialState: {\n wallet: Wallet | null;\n adapter: WalletAdapter | null;\n publicKey: string | null;\n connected: boolean;\n network: Network | null;\n} = {\n wallet: null,\n adapter: null,\n publicKey: null,\n connected: false,\n network: null,\n};\n\nexport const AleoWalletProvider: FC<WalletProviderProps> = ({\n children,\n wallets: adapters,\n autoConnect = false,\n network: initialNetwork = Network.TESTNET3,\n onError,\n localStorageKey = 'walletName',\n decryptPermission = DecryptPermission.NoDecrypt,\n programs,\n}) => {\n const [name, setName] = useLocalStorage<WalletName | null>(localStorageKey, null);\n const [{ wallet, adapter, publicKey, connected, network }, setState] = useState(initialState);\n const readyState = adapter?.readyState || WalletReadyState.UNSUPPORTED;\n const [connecting, setConnecting] = useState(false);\n const [disconnecting, setDisconnecting] = useState(false);\n const [reconnecting, setReconnecting] = useState(false);\n const isConnecting = useRef(false);\n const isDisconnecting = useRef(false);\n const isReconnecting = useRef(false);\n const isUnloading = useRef(false);\n const lastAuthorizedAccount = useRef<string | null>(null);\n\n // Wrap adapters to conform to the `Wallet` interface\n const [wallets, setWallets] = useState(() =>\n adapters.map(adapter => ({\n adapter,\n readyState: adapter.readyState,\n })),\n );\n\n // When the adapters change, start to listen for changes to their `readyState`\n useEffect(() => {\n // When the adapters change, wrap them to conform to the `Wallet` interface\n setWallets(wallets =>\n adapters.map((adapter, index) => {\n const wallet = wallets[index];\n // If the wallet hasn't changed, return the same instance\n return wallet && wallet.adapter === adapter && wallet.readyState === adapter.readyState\n ? wallet\n : {\n adapter: adapter,\n readyState: adapter.readyState,\n };\n }),\n );\n\n function handleReadyStateChange(this: WalletAdapter, readyState: WalletReadyState): void {\n setWallets(prevWallets => {\n const index = prevWallets.findIndex(({ adapter }) => adapter === this);\n if (index === -1) return prevWallets;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { adapter } = prevWallets[index]!;\n return [\n ...prevWallets.slice(0, index),\n { adapter, readyState },\n ...prevWallets.slice(index + 1),\n ];\n });\n }\n\n function handleNetworkChange(this: WalletAdapter, network: Network): void {\n setState(state => ({\n ...state,\n network,\n }));\n }\n\n adapters.forEach(adapter => adapter.on('readyStateChange', handleReadyStateChange, adapter));\n adapters.forEach(adapter => adapter.on('networkChange', handleNetworkChange, adapter));\n return () => {\n adapters.forEach(adapter => adapter.off('readyStateChange', handleReadyStateChange, adapter));\n adapters.forEach(adapter => adapter.off('networkChange', handleNetworkChange, adapter));\n };\n }, [adapters]);\n\n // When the selected wallet changes, initialize the state\n useEffect(() => {\n const wallet = name && wallets.find(({ adapter }) => adapter.name === name);\n if (wallet) {\n setState({\n wallet,\n adapter: wallet.adapter,\n connected: wallet.adapter.connected,\n publicKey: wallet.adapter.account?.address ?? null,\n network: wallet.adapter.network ?? null,\n });\n lastAuthorizedAccount.current = wallet.adapter.account?.address ?? null;\n } else {\n setState(initialState);\n lastAuthorizedAccount.current = null;\n }\n }, [name, wallets]);\n\n // If the window is closing or reloading, ignore disconnect and error events from the adapter\n useEffect(() => {\n function listener() {\n isUnloading.current = true;\n }\n\n window.addEventListener('beforeunload', listener);\n return () => window.removeEventListener('beforeunload', listener);\n }, [isUnloading]);\n\n // Handle the adapter's connect event\n const handleConnect = useCallback(() => {\n if (!adapter) return;\n setState(state => ({\n ...state,\n connected: adapter.connected,\n publicKey: adapter.account?.address ?? null,\n network: adapter.network ?? null,\n }));\n lastAuthorizedAccount.current = adapter.account?.address ?? null;\n }, [adapter]);\n\n // Handle the adapter's disconnect event\n const handleDisconnect = useCallback(() => {\n // Clear the selected wallet unless the window is unloading\n if (!isUnloading.current) setName(null);\n lastAuthorizedAccount.current = null;\n }, [isUnloading, setName]);\n\n // Disconnect the adapter from the wallet\n const disconnect = useCallback(async () => {\n if (isDisconnecting.current) return;\n if (!adapter) return setName(null);\n\n isDisconnecting.current = true;\n setDisconnecting(true);\n try {\n await adapter.disconnect();\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n // Rethrow the error, and handleError will also be called\n throw error;\n } finally {\n setDisconnecting(false);\n isDisconnecting.current = false;\n }\n }, [isDisconnecting, adapter, setName]);\n\n // Handle the adapter's error event, and local errors\n const handleError = useCallback(\n (error: WalletError) => {\n // Call onError unless the window is unloading\n if (!isUnloading.current) (onError || console.error)(error);\n return error;\n },\n [isUnloading, onError],\n );\n\n // Handle the adapter's account change event\n const handleAccountChange = useCallback(async () => {\n if (!adapter || isReconnecting.current) return;\n\n isReconnecting.current = true;\n setReconnecting(true);\n setState(state => ({\n ...state,\n publicKey: null,\n connected: false,\n }));\n\n try {\n const account = await adapter.connect(initialNetwork, decryptPermission, programs);\n setState(state => ({\n ...state,\n publicKey: account.address,\n connected: adapter.connected,\n network: adapter.network ?? state.network,\n }));\n lastAuthorizedAccount.current = account.address ?? null;\n } catch (error: unknown) {\n handleError(error as WalletError);\n await disconnect();\n } finally {\n setReconnecting(false);\n isReconnecting.current = false;\n }\n }, [adapter, disconnect, handleError, initialNetwork, decryptPermission, programs]);\n\n // Setup and teardown event listeners when the adapter changes\n useEffect(() => {\n if (adapter) {\n adapter.on('connect', handleConnect);\n adapter.on('disconnect', handleDisconnect);\n adapter.on('error', handleError);\n adapter.on('accountChange', handleAccountChange);\n return () => {\n adapter.off('connect', handleConnect);\n adapter.off('disconnect', handleDisconnect);\n adapter.off('error', handleError);\n adapter.off('accountChange', handleAccountChange);\n };\n }\n }, [adapter, handleConnect, handleDisconnect, handleError, handleAccountChange]);\n\n // When the adapter changes, disconnect the old one\n useEffect(() => {\n return () => {\n if (adapter && adapter.connected) {\n adapter.disconnect();\n }\n };\n }, [adapter]);\n\n // If autoConnect is enabled, try to connect when the adapter changes and is ready\n useEffect(() => {\n if (\n isConnecting.current ||\n isReconnecting.current ||\n connected ||\n !autoConnect ||\n !adapter ||\n !(readyState === WalletReadyState.INSTALLED || readyState === WalletReadyState.LOADABLE)\n )\n return;\n\n (async function () {\n isConnecting.current = true;\n setConnecting(true);\n try {\n const account = await adapter.connect(initialNetwork, decryptPermission, programs);\n lastAuthorizedAccount.current = account.address ?? null;\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n // Don't throw error, but handleError will still be called\n } finally {\n setConnecting(false);\n isConnecting.current = false;\n }\n })();\n }, [isConnecting, connected, autoConnect, adapter, readyState, setName]);\n\n useEffect(() => {\n if (adapter && connected && adapter.network !== initialNetwork) {\n try {\n switchNetwork(initialNetwork);\n } catch (error: unknown) {\n console.error('Failed to switch network, disconnecting');\n disconnect();\n }\n }\n }, [initialNetwork]);\n\n useEffect(() => {\n if (adapter && connected) {\n disconnect();\n }\n }, [decryptPermission, programs]);\n\n // Connect the adapter to the wallet\n const connect = useCallback(async () => {\n if (isConnecting.current || isDisconnecting.current || connected) return;\n if (!adapter) throw handleError(new WalletNotSelectedError());\n\n if (!(readyState === WalletReadyState.INSTALLED || readyState === WalletReadyState.LOADABLE)) {\n // Clear the selected wallet\n setName(null);\n\n if (typeof window !== 'undefined') {\n window.open(adapter.url, '_blank');\n }\n\n throw handleError(new WalletNotReadyError());\n }\n\n isConnecting.current = true;\n setConnecting(true);\n try {\n const account = await adapter.connect(initialNetwork, decryptPermission, programs);\n lastAuthorizedAccount.current = account.address ?? null;\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n // Rethrow the error, and handleError will also be called\n throw error;\n } finally {\n setConnecting(false);\n isConnecting.current = false;\n }\n }, [isConnecting, isDisconnecting, connected, adapter, readyState, handleError, setName]);\n\n const executeTransaction = useCallback(\n async (transaction: TransactionOptions) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('executeTransaction' in adapter))\n throw handleError(new MethodNotImplementedError('executeTransaction'));\n\n await checkNetwork();\n\n return await adapter.executeTransaction(transaction);\n },\n [adapter, handleError, connected],\n );\n\n const transactionStatus = useCallback(\n async (transactionId: string) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('transactionStatus' in adapter))\n throw handleError(new MethodNotImplementedError('transactionStatus'));\n\n return await adapter.transactionStatus(transactionId);\n },\n [adapter, handleError, connected],\n );\n\n // Sign an arbitrary message if the wallet supports it\n const signMessage = useMemo(\n () =>\n async (message: Uint8Array | string): Promise<Uint8Array | undefined> => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('signMessage' in adapter))\n throw handleError(new MethodNotImplementedError('signMessage'));\n\n return await adapter.signMessage(\n typeof message === 'string' ? new TextEncoder().encode(message) : message,\n );\n },\n [adapter, handleError, connected],\n );\n\n const switchNetwork = useCallback(\n async (network: Network) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('switchNetwork' in adapter))\n throw handleError(new MethodNotImplementedError('switchNetwork'));\n let switched = false;\n try {\n isConnecting.current = true;\n setConnecting(true);\n await adapter.switchNetwork(network);\n switched = true;\n } catch (error: unknown) {\n if (error instanceof MethodNotImplementedError) {\n await disconnect();\n }\n\n console.error('Failed to switch network');\n } finally {\n isConnecting.current = false;\n setConnecting(false);\n }\n return switched;\n },\n [adapter, handleError, connected],\n );\n\n const decrypt = useCallback(\n async (cipherText: string) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('decrypt' in adapter))\n throw handleError(new MethodNotImplementedError('decrypt'));\n\n return await adapter.decrypt(cipherText);\n },\n [adapter, handleError, connected],\n );\n\n const requestRecords = useCallback(\n async (program: string, includePlaintext?: boolean) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('requestRecords' in adapter))\n throw handleError(new MethodNotImplementedError('requestRecords'));\n\n return await adapter.requestRecords(program, includePlaintext);\n },\n [adapter, handleError, connected],\n );\n\n const executeDeployment = useCallback(\n async (deployment: AleoDeployment) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('executeDeployment' in adapter))\n throw handleError(new MethodNotImplementedError('executeDeployment'));\n\n return await adapter.executeDeployment(deployment);\n },\n [adapter, handleError, connected],\n );\n\n const transitionViewKeys = useCallback(\n async (transactionId: string) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('transitionViewKeys' in adapter))\n throw handleError(new MethodNotImplementedError('transitionViewKeys'));\n\n return await adapter.transitionViewKeys(transactionId);\n },\n [adapter, handleError, connected],\n );\n\n const requestTransactionHistory = useCallback(\n async (program: string) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('requestTransactionHistory' in adapter))\n throw handleError(new MethodNotImplementedError('requestTransactionHistory'));\n\n return await adapter.requestTransactionHistory(program);\n },\n [adapter, handleError, connected],\n );\n\n const checkNetwork = useCallback(async () => {\n if (adapter && adapter.network !== initialNetwork) {\n const switchResult = await switchNetwork(initialNetwork);\n if (!switchResult) {\n throw handleError(new WalletSwitchNetworkError('Failed to switch network'));\n }\n }\n }, [adapter, initialNetwork, switchNetwork]);\n\n return (\n <WalletContext.Provider\n value={{\n autoConnect,\n wallets,\n wallet,\n address: publicKey ?? null,\n connected,\n connecting,\n reconnecting,\n disconnecting,\n network,\n selectWallet: setName,\n connect,\n disconnect,\n executeTransaction,\n transactionStatus,\n signMessage,\n switchNetwork,\n decrypt,\n requestRecords,\n executeDeployment,\n transitionViewKeys,\n requestTransactionHistory,\n }}\n >\n {children}\n </WalletContext.Provider>\n );\n};\n","import type { Dispatch, SetStateAction } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nexport function useLocalStorage<T>(key: string, defaultState: T): [T, Dispatch<SetStateAction<T>>] {\n const state = useState<T>(() => {\n try {\n const value = localStorage.getItem(key);\n if (value) return JSON.parse(value) as T;\n } catch (error: unknown) {\n if (typeof window !== 'undefined') {\n console.error(error);\n }\n }\n\n return defaultState;\n });\n const value = state[0];\n\n const isFirstRender = useRef(true);\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n try {\n if (value === null) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, JSON.stringify(value));\n }\n } catch (error: unknown) {\n if (typeof window !== 'undefined') {\n console.error(error);\n }\n }\n }, [value, key]);\n\n return state;\n}\n","import { useWalletContext } from './context';\nimport type { WalletContextState } from './context';\n\n/**\n * Custom hook to use the wallet\n * @returns The wallet context state\n */\nexport function useWallet(): WalletContextState {\n return useWalletContext();\n}\n"],"mappings":"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","names":["import_react","import_react","value","adapter","wallets","wallet","readyState","network"]}
package/dist/index.mjs CHANGED
@@ -84,9 +84,12 @@ var AleoWalletProvider = ({
84
84
  const readyState = adapter?.readyState || WalletReadyState.UNSUPPORTED;
85
85
  const [connecting, setConnecting] = useState2(false);
86
86
  const [disconnecting, setDisconnecting] = useState2(false);
87
+ const [reconnecting, setReconnecting] = useState2(false);
87
88
  const isConnecting = useRef2(false);
88
89
  const isDisconnecting = useRef2(false);
90
+ const isReconnecting = useRef2(false);
89
91
  const isUnloading = useRef2(false);
92
+ const lastAuthorizedAccount = useRef2(null);
90
93
  const [wallets, setWallets] = useState2(
91
94
  () => adapters.map((adapter2) => ({
92
95
  adapter: adapter2,
@@ -138,8 +141,10 @@ var AleoWalletProvider = ({
138
141
  publicKey: wallet2.adapter.account?.address ?? null,
139
142
  network: wallet2.adapter.network ?? null
140
143
  });
144
+ lastAuthorizedAccount.current = wallet2.adapter.account?.address ?? null;
141
145
  } else {
142
146
  setState(initialState);
147
+ lastAuthorizedAccount.current = null;
143
148
  }
144
149
  }, [name, wallets]);
145
150
  useEffect2(() => {
@@ -157,10 +162,27 @@ var AleoWalletProvider = ({
157
162
  publicKey: adapter.account?.address ?? null,
158
163
  network: adapter.network ?? null
159
164
  }));
165
+ lastAuthorizedAccount.current = adapter.account?.address ?? null;
160
166
  }, [adapter]);
161
167
  const handleDisconnect = useCallback(() => {
162
168
  if (!isUnloading.current) setName(null);
169
+ lastAuthorizedAccount.current = null;
163
170
  }, [isUnloading, setName]);
171
+ const disconnect = useCallback(async () => {
172
+ if (isDisconnecting.current) return;
173
+ if (!adapter) return setName(null);
174
+ isDisconnecting.current = true;
175
+ setDisconnecting(true);
176
+ try {
177
+ await adapter.disconnect();
178
+ } catch (error) {
179
+ setName(null);
180
+ throw error;
181
+ } finally {
182
+ setDisconnecting(false);
183
+ isDisconnecting.current = false;
184
+ }
185
+ }, [isDisconnecting, adapter, setName]);
164
186
  const handleError = useCallback(
165
187
  (error) => {
166
188
  if (!isUnloading.current) (onError || console.error)(error);
@@ -168,18 +190,46 @@ var AleoWalletProvider = ({
168
190
  },
169
191
  [isUnloading, onError]
170
192
  );
193
+ const handleAccountChange = useCallback(async () => {
194
+ if (!adapter || isReconnecting.current) return;
195
+ isReconnecting.current = true;
196
+ setReconnecting(true);
197
+ setState((state) => ({
198
+ ...state,
199
+ publicKey: null,
200
+ connected: false
201
+ }));
202
+ try {
203
+ const account = await adapter.connect(initialNetwork, decryptPermission, programs);
204
+ setState((state) => ({
205
+ ...state,
206
+ publicKey: account.address,
207
+ connected: adapter.connected,
208
+ network: adapter.network ?? state.network
209
+ }));
210
+ lastAuthorizedAccount.current = account.address ?? null;
211
+ } catch (error) {
212
+ handleError(error);
213
+ await disconnect();
214
+ } finally {
215
+ setReconnecting(false);
216
+ isReconnecting.current = false;
217
+ }
218
+ }, [adapter, disconnect, handleError, initialNetwork, decryptPermission, programs]);
171
219
  useEffect2(() => {
172
220
  if (adapter) {
173
221
  adapter.on("connect", handleConnect);
174
222
  adapter.on("disconnect", handleDisconnect);
175
223
  adapter.on("error", handleError);
224
+ adapter.on("accountChange", handleAccountChange);
176
225
  return () => {
177
226
  adapter.off("connect", handleConnect);
178
227
  adapter.off("disconnect", handleDisconnect);
179
228
  adapter.off("error", handleError);
229
+ adapter.off("accountChange", handleAccountChange);
180
230
  };
181
231
  }
182
- }, [adapter, handleConnect, handleDisconnect, handleError]);
232
+ }, [adapter, handleConnect, handleDisconnect, handleError, handleAccountChange]);
183
233
  useEffect2(() => {
184
234
  return () => {
185
235
  if (adapter && adapter.connected) {
@@ -188,13 +238,14 @@ var AleoWalletProvider = ({
188
238
  };
189
239
  }, [adapter]);
190
240
  useEffect2(() => {
191
- if (isConnecting.current || connected || !autoConnect || !adapter || !(readyState === WalletReadyState.INSTALLED || readyState === WalletReadyState.LOADABLE))
241
+ if (isConnecting.current || isReconnecting.current || connected || !autoConnect || !adapter || !(readyState === WalletReadyState.INSTALLED || readyState === WalletReadyState.LOADABLE))
192
242
  return;
193
243
  (async function() {
194
244
  isConnecting.current = true;
195
245
  setConnecting(true);
196
246
  try {
197
- await adapter.connect(initialNetwork, decryptPermission, programs);
247
+ const account = await adapter.connect(initialNetwork, decryptPermission, programs);
248
+ lastAuthorizedAccount.current = account.address ?? null;
198
249
  } catch (error) {
199
250
  setName(null);
200
251
  } finally {
@@ -231,7 +282,8 @@ var AleoWalletProvider = ({
231
282
  isConnecting.current = true;
232
283
  setConnecting(true);
233
284
  try {
234
- await adapter.connect(initialNetwork, decryptPermission, programs);
285
+ const account = await adapter.connect(initialNetwork, decryptPermission, programs);
286
+ lastAuthorizedAccount.current = account.address ?? null;
235
287
  } catch (error) {
236
288
  setName(null);
237
289
  throw error;
@@ -240,21 +292,6 @@ var AleoWalletProvider = ({
240
292
  isConnecting.current = false;
241
293
  }
242
294
  }, [isConnecting, isDisconnecting, connected, adapter, readyState, handleError, setName]);
243
- const disconnect = useCallback(async () => {
244
- if (isDisconnecting.current) return;
245
- if (!adapter) return setName(null);
246
- isDisconnecting.current = true;
247
- setDisconnecting(true);
248
- try {
249
- await adapter.disconnect();
250
- } catch (error) {
251
- setName(null);
252
- throw error;
253
- } finally {
254
- setDisconnecting(false);
255
- isDisconnecting.current = false;
256
- }
257
- }, [isDisconnecting, adapter, setName]);
258
295
  const executeTransaction = useCallback(
259
296
  async (transaction) => {
260
297
  if (!connected) throw handleError(new WalletNotConnectedError());
@@ -336,6 +373,24 @@ var AleoWalletProvider = ({
336
373
  },
337
374
  [adapter, handleError, connected]
338
375
  );
376
+ const transitionViewKeys = useCallback(
377
+ async (transactionId) => {
378
+ if (!connected) throw handleError(new WalletNotConnectedError());
379
+ if (!adapter || !("transitionViewKeys" in adapter))
380
+ throw handleError(new MethodNotImplementedError("transitionViewKeys"));
381
+ return await adapter.transitionViewKeys(transactionId);
382
+ },
383
+ [adapter, handleError, connected]
384
+ );
385
+ const requestTransactionHistory = useCallback(
386
+ async (program) => {
387
+ if (!connected) throw handleError(new WalletNotConnectedError());
388
+ if (!adapter || !("requestTransactionHistory" in adapter))
389
+ throw handleError(new MethodNotImplementedError("requestTransactionHistory"));
390
+ return await adapter.requestTransactionHistory(program);
391
+ },
392
+ [adapter, handleError, connected]
393
+ );
339
394
  const checkNetwork = useCallback(async () => {
340
395
  if (adapter && adapter.network !== initialNetwork) {
341
396
  const switchResult = await switchNetwork(initialNetwork);
@@ -354,6 +409,7 @@ var AleoWalletProvider = ({
354
409
  address: publicKey ?? null,
355
410
  connected,
356
411
  connecting,
412
+ reconnecting,
357
413
  disconnecting,
358
414
  network,
359
415
  selectWallet: setName,
@@ -365,7 +421,9 @@ var AleoWalletProvider = ({
365
421
  switchNetwork,
366
422
  decrypt,
367
423
  requestRecords,
368
- executeDeployment
424
+ executeDeployment,
425
+ transitionViewKeys,
426
+ requestTransactionHistory
369
427
  },
370
428
  children
371
429
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context.ts","../src/WalletProvider.tsx","../src/useLocalStorage.ts","../src/useWallet.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport {\n AleoDeployment,\n WalletAdapter,\n WalletName,\n WalletReadyState,\n} from '@provablehq/aleo-wallet-standard';\nimport { Network, TransactionOptions, TransactionStatusResponse } from '@provablehq/aleo-types';\n\nexport interface Wallet {\n adapter: WalletAdapter;\n readyState: WalletReadyState;\n}\n\n/**\n * Wallet context state\n */\nexport interface WalletContextState {\n /**\n * All available wallet adapters\n */\n wallets: Wallet[];\n\n /**\n * The connected wallet adapter\n */\n wallet: Wallet | null;\n\n /**\n * The connected account\n */\n address: string | null;\n\n /**\n * Whether the wallet is connected\n */\n connected: boolean;\n\n /**\n * Whether the wallet is connecting\n */\n connecting: boolean;\n\n /**\n * Whether the wallet is disconnecting\n */\n disconnecting: boolean;\n\n /**\n * Whether the wallet is auto-connecting\n */\n autoConnect: boolean;\n\n /**\n * The current network\n */\n network: Network | null;\n\n /**\n * Select a wallet by name\n * @param name The name of the wallet to select\n */\n selectWallet: (name: WalletName) => void;\n\n /**\n * Connect to the selected wallet\n */\n connect: (network: Network) => Promise<void>;\n\n /**\n * Disconnect from the connected wallet\n */\n disconnect: () => Promise<void>;\n\n /**\n * Execute a transaction\n */\n executeTransaction: (\n options: TransactionOptions,\n ) => Promise<{ transactionId: string } | undefined>;\n\n /**\n * Get transaction status\n */\n transactionStatus: (transactionId: string) => Promise<TransactionStatusResponse>;\n\n /**\n * Sign a message\n */\n signMessage: (message: Uint8Array | string) => Promise<Uint8Array | undefined>;\n\n /**\n * Switch the network\n */\n switchNetwork: (network: Network) => Promise<boolean>;\n\n /**\n * Decrypt a ciphertext\n */\n decrypt: (cipherText: string) => Promise<string>;\n\n /**\n * Request records\n */\n requestRecords: (program: string, includePlaintext?: boolean) => Promise<unknown[]>;\n\n /**\n * Execute a deployment\n */\n executeDeployment: (deployment: AleoDeployment) => Promise<{ transactionId: string }>;\n}\n\n/**\n * Wallet context\n */\nexport const WalletContext = createContext<WalletContextState | undefined>(undefined);\n\n/**\n * Custom hook to use the wallet context\n * @returns The wallet context state\n */\nexport function useWalletContext(): WalletContextState {\n const ctx = useContext(WalletContext);\n if (!ctx) {\n throw new Error('`useWalletContext` must be used inside `AleoWalletProvider`');\n }\n return ctx;\n}\n","import type { FC, ReactNode } from 'react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n WalletName,\n WalletReadyState,\n WalletAdapter,\n AleoDeployment,\n} from '@provablehq/aleo-wallet-standard';\nimport { Network, TransactionOptions } from '@provablehq/aleo-types';\nimport { Wallet, WalletContext } from './context';\nimport { useLocalStorage } from './useLocalStorage';\nimport {\n WalletError,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletNotSelectedError,\n MethodNotImplementedError,\n WalletSwitchNetworkError,\n DecryptPermission,\n} from '@provablehq/aleo-wallet-adaptor-core';\n\nexport interface WalletProviderProps {\n children: ReactNode;\n wallets: WalletAdapter[];\n network?: Network;\n autoConnect?: boolean;\n onError?: (error: WalletError) => void;\n localStorageKey?: string;\n decryptPermission?: DecryptPermission;\n programs?: string[];\n}\n\nconst initialState: {\n wallet: Wallet | null;\n adapter: WalletAdapter | null;\n publicKey: string | null;\n connected: boolean;\n network: Network | null;\n} = {\n wallet: null,\n adapter: null,\n publicKey: null,\n connected: false,\n network: null,\n};\n\nexport const AleoWalletProvider: FC<WalletProviderProps> = ({\n children,\n wallets: adapters,\n autoConnect = false,\n network: initialNetwork = Network.TESTNET3,\n onError,\n localStorageKey = 'walletName',\n decryptPermission = DecryptPermission.NoDecrypt,\n programs,\n}) => {\n const [name, setName] = useLocalStorage<WalletName | null>(localStorageKey, null);\n const [{ wallet, adapter, publicKey, connected, network }, setState] = useState(initialState);\n const readyState = adapter?.readyState || WalletReadyState.UNSUPPORTED;\n const [connecting, setConnecting] = useState(false);\n const [disconnecting, setDisconnecting] = useState(false);\n const isConnecting = useRef(false);\n const isDisconnecting = useRef(false);\n const isUnloading = useRef(false);\n\n // Wrap adapters to conform to the `Wallet` interface\n const [wallets, setWallets] = useState(() =>\n adapters.map(adapter => ({\n adapter,\n readyState: adapter.readyState,\n })),\n );\n\n // When the adapters change, start to listen for changes to their `readyState`\n useEffect(() => {\n // When the adapters change, wrap them to conform to the `Wallet` interface\n setWallets(wallets =>\n adapters.map((adapter, index) => {\n const wallet = wallets[index];\n // If the wallet hasn't changed, return the same instance\n return wallet && wallet.adapter === adapter && wallet.readyState === adapter.readyState\n ? wallet\n : {\n adapter: adapter,\n readyState: adapter.readyState,\n };\n }),\n );\n\n function handleReadyStateChange(this: WalletAdapter, readyState: WalletReadyState): void {\n setWallets(prevWallets => {\n const index = prevWallets.findIndex(({ adapter }) => adapter === this);\n if (index === -1) return prevWallets;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { adapter } = prevWallets[index]!;\n return [\n ...prevWallets.slice(0, index),\n { adapter, readyState },\n ...prevWallets.slice(index + 1),\n ];\n });\n }\n\n function handleNetworkChange(this: WalletAdapter, network: Network): void {\n setState(state => ({\n ...state,\n network,\n }));\n }\n\n adapters.forEach(adapter => adapter.on('readyStateChange', handleReadyStateChange, adapter));\n adapters.forEach(adapter => adapter.on('networkChange', handleNetworkChange, adapter));\n return () => {\n adapters.forEach(adapter => adapter.off('readyStateChange', handleReadyStateChange, adapter));\n adapters.forEach(adapter => adapter.off('networkChange', handleNetworkChange, adapter));\n };\n }, [adapters]);\n\n // When the selected wallet changes, initialize the state\n useEffect(() => {\n const wallet = name && wallets.find(({ adapter }) => adapter.name === name);\n if (wallet) {\n setState({\n wallet,\n adapter: wallet.adapter,\n connected: wallet.adapter.connected,\n publicKey: wallet.adapter.account?.address ?? null,\n network: wallet.adapter.network ?? null,\n });\n } else {\n setState(initialState);\n }\n }, [name, wallets]);\n\n // If the window is closing or reloading, ignore disconnect and error events from the adapter\n useEffect(() => {\n function listener() {\n isUnloading.current = true;\n }\n\n window.addEventListener('beforeunload', listener);\n return () => window.removeEventListener('beforeunload', listener);\n }, [isUnloading]);\n\n // Handle the adapter's connect event\n const handleConnect = useCallback(() => {\n if (!adapter) return;\n setState(state => ({\n ...state,\n connected: adapter.connected,\n publicKey: adapter.account?.address ?? null,\n network: adapter.network ?? null,\n }));\n }, [adapter]);\n\n // Handle the adapter's disconnect event\n const handleDisconnect = useCallback(() => {\n // Clear the selected wallet unless the window is unloading\n if (!isUnloading.current) setName(null);\n }, [isUnloading, setName]);\n\n // Handle the adapter's error event, and local errors\n const handleError = useCallback(\n (error: WalletError) => {\n // Call onError unless the window is unloading\n if (!isUnloading.current) (onError || console.error)(error);\n return error;\n },\n [isUnloading, onError],\n );\n\n // Setup and teardown event listeners when the adapter changes\n useEffect(() => {\n if (adapter) {\n adapter.on('connect', handleConnect);\n adapter.on('disconnect', handleDisconnect);\n adapter.on('error', handleError);\n return () => {\n adapter.off('connect', handleConnect);\n adapter.off('disconnect', handleDisconnect);\n adapter.off('error', handleError);\n };\n }\n }, [adapter, handleConnect, handleDisconnect, handleError]);\n\n // When the adapter changes, disconnect the old one\n useEffect(() => {\n return () => {\n if (adapter && adapter.connected) {\n adapter.disconnect();\n }\n };\n }, [adapter]);\n\n // If autoConnect is enabled, try to connect when the adapter changes and is ready\n useEffect(() => {\n if (\n isConnecting.current ||\n connected ||\n !autoConnect ||\n !adapter ||\n !(readyState === WalletReadyState.INSTALLED || readyState === WalletReadyState.LOADABLE)\n )\n return;\n\n (async function () {\n isConnecting.current = true;\n setConnecting(true);\n try {\n await adapter.connect(initialNetwork, decryptPermission, programs);\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n // Don't throw error, but handleError will still be called\n } finally {\n setConnecting(false);\n isConnecting.current = false;\n }\n })();\n }, [isConnecting, connected, autoConnect, adapter, readyState, setName]);\n\n useEffect(() => {\n if (adapter && connected && adapter.network !== initialNetwork) {\n try {\n switchNetwork(initialNetwork);\n } catch (error: unknown) {\n console.error('Failed to switch network, disconnecting');\n disconnect();\n }\n }\n }, [initialNetwork]);\n\n useEffect(() => {\n if (adapter && connected) {\n disconnect();\n }\n }, [decryptPermission, programs]);\n\n // Connect the adapter to the wallet\n const connect = useCallback(async () => {\n if (isConnecting.current || isDisconnecting.current || connected) return;\n if (!adapter) throw handleError(new WalletNotSelectedError());\n\n if (!(readyState === WalletReadyState.INSTALLED || readyState === WalletReadyState.LOADABLE)) {\n // Clear the selected wallet\n setName(null);\n\n if (typeof window !== 'undefined') {\n window.open(adapter.url, '_blank');\n }\n\n throw handleError(new WalletNotReadyError());\n }\n\n isConnecting.current = true;\n setConnecting(true);\n try {\n await adapter.connect(initialNetwork, decryptPermission, programs);\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n // Rethrow the error, and handleError will also be called\n throw error;\n } finally {\n setConnecting(false);\n isConnecting.current = false;\n }\n }, [isConnecting, isDisconnecting, connected, adapter, readyState, handleError, setName]);\n\n // Disconnect the adapter from the wallet\n const disconnect = useCallback(async () => {\n if (isDisconnecting.current) return;\n if (!adapter) return setName(null);\n\n isDisconnecting.current = true;\n setDisconnecting(true);\n try {\n await adapter.disconnect();\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n // Rethrow the error, and handleError will also be called\n throw error;\n } finally {\n setDisconnecting(false);\n isDisconnecting.current = false;\n }\n }, [isDisconnecting, adapter, setName]);\n\n const executeTransaction = useCallback(\n async (transaction: TransactionOptions) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('executeTransaction' in adapter))\n throw handleError(new MethodNotImplementedError('executeTransaction'));\n\n await checkNetwork();\n\n return await adapter.executeTransaction(transaction);\n },\n [adapter, handleError, connected],\n );\n\n const transactionStatus = useCallback(\n async (transactionId: string) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('transactionStatus' in adapter))\n throw handleError(new MethodNotImplementedError('transactionStatus'));\n\n return await adapter.transactionStatus(transactionId);\n },\n [adapter, handleError, connected],\n );\n\n // Sign an arbitrary message if the wallet supports it\n const signMessage = useMemo(\n () =>\n async (message: Uint8Array | string): Promise<Uint8Array | undefined> => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('signMessage' in adapter))\n throw handleError(new MethodNotImplementedError('signMessage'));\n\n return await adapter.signMessage(\n typeof message === 'string' ? new TextEncoder().encode(message) : message,\n );\n },\n [adapter, handleError, connected],\n );\n\n const switchNetwork = useCallback(\n async (network: Network) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('switchNetwork' in adapter))\n throw handleError(new MethodNotImplementedError('switchNetwork'));\n let switched = false;\n try {\n isConnecting.current = true;\n setConnecting(true);\n await adapter.switchNetwork(network);\n switched = true;\n } catch (error: unknown) {\n if (error instanceof MethodNotImplementedError) {\n await disconnect();\n }\n\n console.error('Failed to switch network');\n } finally {\n isConnecting.current = false;\n setConnecting(false);\n }\n return switched;\n },\n [adapter, handleError, connected],\n );\n\n const decrypt = useCallback(\n async (cipherText: string) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('decrypt' in adapter))\n throw handleError(new MethodNotImplementedError('decrypt'));\n\n return await adapter.decrypt(cipherText);\n },\n [adapter, handleError, connected],\n );\n\n const requestRecords = useCallback(\n async (program: string, includePlaintext?: boolean) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('requestRecords' in adapter))\n throw handleError(new MethodNotImplementedError('requestRecords'));\n\n return await adapter.requestRecords(program, includePlaintext);\n },\n [adapter, handleError, connected],\n );\n\n const executeDeployment = useCallback(\n async (deployment: AleoDeployment) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('executeDeployment' in adapter))\n throw handleError(new MethodNotImplementedError('executeDeployment'));\n\n return await adapter.executeDeployment(deployment);\n },\n [adapter, handleError, connected],\n );\n\n const checkNetwork = useCallback(async () => {\n if (adapter && adapter.network !== initialNetwork) {\n const switchResult = await switchNetwork(initialNetwork);\n if (!switchResult) {\n throw handleError(new WalletSwitchNetworkError('Failed to switch network'));\n }\n }\n }, [adapter, initialNetwork, switchNetwork]);\n\n return (\n <WalletContext.Provider\n value={{\n autoConnect,\n wallets,\n wallet,\n address: publicKey ?? null,\n connected,\n connecting,\n disconnecting,\n network,\n selectWallet: setName,\n connect,\n disconnect,\n executeTransaction,\n transactionStatus,\n signMessage,\n switchNetwork,\n decrypt,\n requestRecords,\n executeDeployment,\n }}\n >\n {children}\n </WalletContext.Provider>\n );\n};\n","import type { Dispatch, SetStateAction } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nexport function useLocalStorage<T>(key: string, defaultState: T): [T, Dispatch<SetStateAction<T>>] {\n const state = useState<T>(() => {\n try {\n const value = localStorage.getItem(key);\n if (value) return JSON.parse(value) as T;\n } catch (error: unknown) {\n if (typeof window !== 'undefined') {\n console.error(error);\n }\n }\n\n return defaultState;\n });\n const value = state[0];\n\n const isFirstRender = useRef(true);\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n try {\n if (value === null) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, JSON.stringify(value));\n }\n } catch (error: unknown) {\n if (typeof window !== 'undefined') {\n console.error(error);\n }\n }\n }, [value, key]);\n\n return state;\n}\n","import { useWalletContext } from './context';\nimport type { WalletContextState } from './context';\n\n/**\n * Custom hook to use the wallet\n * @returns The wallet context state\n */\nexport function useWallet(): WalletContextState {\n return useWalletContext();\n}\n"],"mappings":"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","names":["useEffect","useRef","useState","value","useState","useRef","adapter","useEffect","wallets","wallet","readyState","network"]}
1
+ {"version":3,"sources":["../src/context.ts","../src/WalletProvider.tsx","../src/useLocalStorage.ts","../src/useWallet.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport {\n AleoDeployment,\n WalletAdapter,\n WalletName,\n WalletReadyState,\n} from '@provablehq/aleo-wallet-standard';\nimport {\n Network,\n TransactionOptions,\n TransactionStatusResponse,\n TxHistoryResult,\n} from '@provablehq/aleo-types';\n\nexport interface Wallet {\n adapter: WalletAdapter;\n readyState: WalletReadyState;\n}\n\n/**\n * Wallet context state\n */\nexport interface WalletContextState {\n /**\n * All available wallet adapters\n */\n wallets: Wallet[];\n\n /**\n * The connected wallet adapter\n */\n wallet: Wallet | null;\n\n /**\n * The connected account\n */\n address: string | null;\n\n /**\n * Whether the wallet is connected\n */\n connected: boolean;\n\n /**\n * Whether the wallet is connecting\n */\n connecting: boolean;\n\n /**\n * Whether the wallet is disconnecting\n */\n disconnecting: boolean;\n\n /**\n * Whether the wallet is reauthorizing after an account change\n */\n reconnecting: boolean;\n\n /**\n * Whether the wallet is auto-connecting\n */\n autoConnect: boolean;\n\n /**\n * The current network\n */\n network: Network | null;\n\n /**\n * Select a wallet by name\n * @param name The name of the wallet to select\n */\n selectWallet: (name: WalletName) => void;\n\n /**\n * Connect to the selected wallet\n */\n connect: (network: Network) => Promise<void>;\n\n /**\n * Disconnect from the connected wallet\n */\n disconnect: () => Promise<void>;\n\n /**\n * Execute a transaction\n */\n executeTransaction: (\n options: TransactionOptions,\n ) => Promise<{ transactionId: string } | undefined>;\n\n /**\n * Get transaction status\n */\n transactionStatus: (transactionId: string) => Promise<TransactionStatusResponse>;\n\n /**\n * Sign a message\n */\n signMessage: (message: Uint8Array | string) => Promise<Uint8Array | undefined>;\n\n /**\n * Switch the network\n */\n switchNetwork: (network: Network) => Promise<boolean>;\n\n /**\n * Decrypt a ciphertext\n */\n decrypt: (cipherText: string) => Promise<string>;\n\n /**\n * Request records\n */\n requestRecords: (program: string, includePlaintext?: boolean) => Promise<unknown[]>;\n\n /**\n * Execute a deployment\n */\n executeDeployment: (deployment: AleoDeployment) => Promise<{ transactionId: string }>;\n /**\n * get transition view keys(tvk) for a transaction\n */\n transitionViewKeys: (transactionId: string) => Promise<string[]>;\n /**\n * get transaction of specific program\n * @param program The program ID\n * @returns array of transactionId\n */\n requestTransactionHistory: (program: string) => Promise<TxHistoryResult>;\n}\n\n/**\n * Wallet context\n */\nexport const WalletContext = createContext<WalletContextState | undefined>(undefined);\n\n/**\n * Custom hook to use the wallet context\n * @returns The wallet context state\n */\nexport function useWalletContext(): WalletContextState {\n const ctx = useContext(WalletContext);\n if (!ctx) {\n throw new Error('`useWalletContext` must be used inside `AleoWalletProvider`');\n }\n return ctx;\n}\n","import type { FC, ReactNode } from 'react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n WalletName,\n WalletReadyState,\n WalletAdapter,\n AleoDeployment,\n} from '@provablehq/aleo-wallet-standard';\nimport { Network, TransactionOptions } from '@provablehq/aleo-types';\nimport { Wallet, WalletContext } from './context';\nimport { useLocalStorage } from './useLocalStorage';\nimport {\n WalletError,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletNotSelectedError,\n MethodNotImplementedError,\n WalletSwitchNetworkError,\n DecryptPermission,\n} from '@provablehq/aleo-wallet-adaptor-core';\n\nexport interface WalletProviderProps {\n children: ReactNode;\n wallets: WalletAdapter[];\n network?: Network;\n autoConnect?: boolean;\n onError?: (error: WalletError) => void;\n localStorageKey?: string;\n decryptPermission?: DecryptPermission;\n programs?: string[];\n}\n\nconst initialState: {\n wallet: Wallet | null;\n adapter: WalletAdapter | null;\n publicKey: string | null;\n connected: boolean;\n network: Network | null;\n} = {\n wallet: null,\n adapter: null,\n publicKey: null,\n connected: false,\n network: null,\n};\n\nexport const AleoWalletProvider: FC<WalletProviderProps> = ({\n children,\n wallets: adapters,\n autoConnect = false,\n network: initialNetwork = Network.TESTNET3,\n onError,\n localStorageKey = 'walletName',\n decryptPermission = DecryptPermission.NoDecrypt,\n programs,\n}) => {\n const [name, setName] = useLocalStorage<WalletName | null>(localStorageKey, null);\n const [{ wallet, adapter, publicKey, connected, network }, setState] = useState(initialState);\n const readyState = adapter?.readyState || WalletReadyState.UNSUPPORTED;\n const [connecting, setConnecting] = useState(false);\n const [disconnecting, setDisconnecting] = useState(false);\n const [reconnecting, setReconnecting] = useState(false);\n const isConnecting = useRef(false);\n const isDisconnecting = useRef(false);\n const isReconnecting = useRef(false);\n const isUnloading = useRef(false);\n const lastAuthorizedAccount = useRef<string | null>(null);\n\n // Wrap adapters to conform to the `Wallet` interface\n const [wallets, setWallets] = useState(() =>\n adapters.map(adapter => ({\n adapter,\n readyState: adapter.readyState,\n })),\n );\n\n // When the adapters change, start to listen for changes to their `readyState`\n useEffect(() => {\n // When the adapters change, wrap them to conform to the `Wallet` interface\n setWallets(wallets =>\n adapters.map((adapter, index) => {\n const wallet = wallets[index];\n // If the wallet hasn't changed, return the same instance\n return wallet && wallet.adapter === adapter && wallet.readyState === adapter.readyState\n ? wallet\n : {\n adapter: adapter,\n readyState: adapter.readyState,\n };\n }),\n );\n\n function handleReadyStateChange(this: WalletAdapter, readyState: WalletReadyState): void {\n setWallets(prevWallets => {\n const index = prevWallets.findIndex(({ adapter }) => adapter === this);\n if (index === -1) return prevWallets;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { adapter } = prevWallets[index]!;\n return [\n ...prevWallets.slice(0, index),\n { adapter, readyState },\n ...prevWallets.slice(index + 1),\n ];\n });\n }\n\n function handleNetworkChange(this: WalletAdapter, network: Network): void {\n setState(state => ({\n ...state,\n network,\n }));\n }\n\n adapters.forEach(adapter => adapter.on('readyStateChange', handleReadyStateChange, adapter));\n adapters.forEach(adapter => adapter.on('networkChange', handleNetworkChange, adapter));\n return () => {\n adapters.forEach(adapter => adapter.off('readyStateChange', handleReadyStateChange, adapter));\n adapters.forEach(adapter => adapter.off('networkChange', handleNetworkChange, adapter));\n };\n }, [adapters]);\n\n // When the selected wallet changes, initialize the state\n useEffect(() => {\n const wallet = name && wallets.find(({ adapter }) => adapter.name === name);\n if (wallet) {\n setState({\n wallet,\n adapter: wallet.adapter,\n connected: wallet.adapter.connected,\n publicKey: wallet.adapter.account?.address ?? null,\n network: wallet.adapter.network ?? null,\n });\n lastAuthorizedAccount.current = wallet.adapter.account?.address ?? null;\n } else {\n setState(initialState);\n lastAuthorizedAccount.current = null;\n }\n }, [name, wallets]);\n\n // If the window is closing or reloading, ignore disconnect and error events from the adapter\n useEffect(() => {\n function listener() {\n isUnloading.current = true;\n }\n\n window.addEventListener('beforeunload', listener);\n return () => window.removeEventListener('beforeunload', listener);\n }, [isUnloading]);\n\n // Handle the adapter's connect event\n const handleConnect = useCallback(() => {\n if (!adapter) return;\n setState(state => ({\n ...state,\n connected: adapter.connected,\n publicKey: adapter.account?.address ?? null,\n network: adapter.network ?? null,\n }));\n lastAuthorizedAccount.current = adapter.account?.address ?? null;\n }, [adapter]);\n\n // Handle the adapter's disconnect event\n const handleDisconnect = useCallback(() => {\n // Clear the selected wallet unless the window is unloading\n if (!isUnloading.current) setName(null);\n lastAuthorizedAccount.current = null;\n }, [isUnloading, setName]);\n\n // Disconnect the adapter from the wallet\n const disconnect = useCallback(async () => {\n if (isDisconnecting.current) return;\n if (!adapter) return setName(null);\n\n isDisconnecting.current = true;\n setDisconnecting(true);\n try {\n await adapter.disconnect();\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n // Rethrow the error, and handleError will also be called\n throw error;\n } finally {\n setDisconnecting(false);\n isDisconnecting.current = false;\n }\n }, [isDisconnecting, adapter, setName]);\n\n // Handle the adapter's error event, and local errors\n const handleError = useCallback(\n (error: WalletError) => {\n // Call onError unless the window is unloading\n if (!isUnloading.current) (onError || console.error)(error);\n return error;\n },\n [isUnloading, onError],\n );\n\n // Handle the adapter's account change event\n const handleAccountChange = useCallback(async () => {\n if (!adapter || isReconnecting.current) return;\n\n isReconnecting.current = true;\n setReconnecting(true);\n setState(state => ({\n ...state,\n publicKey: null,\n connected: false,\n }));\n\n try {\n const account = await adapter.connect(initialNetwork, decryptPermission, programs);\n setState(state => ({\n ...state,\n publicKey: account.address,\n connected: adapter.connected,\n network: adapter.network ?? state.network,\n }));\n lastAuthorizedAccount.current = account.address ?? null;\n } catch (error: unknown) {\n handleError(error as WalletError);\n await disconnect();\n } finally {\n setReconnecting(false);\n isReconnecting.current = false;\n }\n }, [adapter, disconnect, handleError, initialNetwork, decryptPermission, programs]);\n\n // Setup and teardown event listeners when the adapter changes\n useEffect(() => {\n if (adapter) {\n adapter.on('connect', handleConnect);\n adapter.on('disconnect', handleDisconnect);\n adapter.on('error', handleError);\n adapter.on('accountChange', handleAccountChange);\n return () => {\n adapter.off('connect', handleConnect);\n adapter.off('disconnect', handleDisconnect);\n adapter.off('error', handleError);\n adapter.off('accountChange', handleAccountChange);\n };\n }\n }, [adapter, handleConnect, handleDisconnect, handleError, handleAccountChange]);\n\n // When the adapter changes, disconnect the old one\n useEffect(() => {\n return () => {\n if (adapter && adapter.connected) {\n adapter.disconnect();\n }\n };\n }, [adapter]);\n\n // If autoConnect is enabled, try to connect when the adapter changes and is ready\n useEffect(() => {\n if (\n isConnecting.current ||\n isReconnecting.current ||\n connected ||\n !autoConnect ||\n !adapter ||\n !(readyState === WalletReadyState.INSTALLED || readyState === WalletReadyState.LOADABLE)\n )\n return;\n\n (async function () {\n isConnecting.current = true;\n setConnecting(true);\n try {\n const account = await adapter.connect(initialNetwork, decryptPermission, programs);\n lastAuthorizedAccount.current = account.address ?? null;\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n // Don't throw error, but handleError will still be called\n } finally {\n setConnecting(false);\n isConnecting.current = false;\n }\n })();\n }, [isConnecting, connected, autoConnect, adapter, readyState, setName]);\n\n useEffect(() => {\n if (adapter && connected && adapter.network !== initialNetwork) {\n try {\n switchNetwork(initialNetwork);\n } catch (error: unknown) {\n console.error('Failed to switch network, disconnecting');\n disconnect();\n }\n }\n }, [initialNetwork]);\n\n useEffect(() => {\n if (adapter && connected) {\n disconnect();\n }\n }, [decryptPermission, programs]);\n\n // Connect the adapter to the wallet\n const connect = useCallback(async () => {\n if (isConnecting.current || isDisconnecting.current || connected) return;\n if (!adapter) throw handleError(new WalletNotSelectedError());\n\n if (!(readyState === WalletReadyState.INSTALLED || readyState === WalletReadyState.LOADABLE)) {\n // Clear the selected wallet\n setName(null);\n\n if (typeof window !== 'undefined') {\n window.open(adapter.url, '_blank');\n }\n\n throw handleError(new WalletNotReadyError());\n }\n\n isConnecting.current = true;\n setConnecting(true);\n try {\n const account = await adapter.connect(initialNetwork, decryptPermission, programs);\n lastAuthorizedAccount.current = account.address ?? null;\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n // Rethrow the error, and handleError will also be called\n throw error;\n } finally {\n setConnecting(false);\n isConnecting.current = false;\n }\n }, [isConnecting, isDisconnecting, connected, adapter, readyState, handleError, setName]);\n\n const executeTransaction = useCallback(\n async (transaction: TransactionOptions) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('executeTransaction' in adapter))\n throw handleError(new MethodNotImplementedError('executeTransaction'));\n\n await checkNetwork();\n\n return await adapter.executeTransaction(transaction);\n },\n [adapter, handleError, connected],\n );\n\n const transactionStatus = useCallback(\n async (transactionId: string) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('transactionStatus' in adapter))\n throw handleError(new MethodNotImplementedError('transactionStatus'));\n\n return await adapter.transactionStatus(transactionId);\n },\n [adapter, handleError, connected],\n );\n\n // Sign an arbitrary message if the wallet supports it\n const signMessage = useMemo(\n () =>\n async (message: Uint8Array | string): Promise<Uint8Array | undefined> => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('signMessage' in adapter))\n throw handleError(new MethodNotImplementedError('signMessage'));\n\n return await adapter.signMessage(\n typeof message === 'string' ? new TextEncoder().encode(message) : message,\n );\n },\n [adapter, handleError, connected],\n );\n\n const switchNetwork = useCallback(\n async (network: Network) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('switchNetwork' in adapter))\n throw handleError(new MethodNotImplementedError('switchNetwork'));\n let switched = false;\n try {\n isConnecting.current = true;\n setConnecting(true);\n await adapter.switchNetwork(network);\n switched = true;\n } catch (error: unknown) {\n if (error instanceof MethodNotImplementedError) {\n await disconnect();\n }\n\n console.error('Failed to switch network');\n } finally {\n isConnecting.current = false;\n setConnecting(false);\n }\n return switched;\n },\n [adapter, handleError, connected],\n );\n\n const decrypt = useCallback(\n async (cipherText: string) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('decrypt' in adapter))\n throw handleError(new MethodNotImplementedError('decrypt'));\n\n return await adapter.decrypt(cipherText);\n },\n [adapter, handleError, connected],\n );\n\n const requestRecords = useCallback(\n async (program: string, includePlaintext?: boolean) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('requestRecords' in adapter))\n throw handleError(new MethodNotImplementedError('requestRecords'));\n\n return await adapter.requestRecords(program, includePlaintext);\n },\n [adapter, handleError, connected],\n );\n\n const executeDeployment = useCallback(\n async (deployment: AleoDeployment) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('executeDeployment' in adapter))\n throw handleError(new MethodNotImplementedError('executeDeployment'));\n\n return await adapter.executeDeployment(deployment);\n },\n [adapter, handleError, connected],\n );\n\n const transitionViewKeys = useCallback(\n async (transactionId: string) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('transitionViewKeys' in adapter))\n throw handleError(new MethodNotImplementedError('transitionViewKeys'));\n\n return await adapter.transitionViewKeys(transactionId);\n },\n [adapter, handleError, connected],\n );\n\n const requestTransactionHistory = useCallback(\n async (program: string) => {\n if (!connected) throw handleError(new WalletNotConnectedError());\n if (!adapter || !('requestTransactionHistory' in adapter))\n throw handleError(new MethodNotImplementedError('requestTransactionHistory'));\n\n return await adapter.requestTransactionHistory(program);\n },\n [adapter, handleError, connected],\n );\n\n const checkNetwork = useCallback(async () => {\n if (adapter && adapter.network !== initialNetwork) {\n const switchResult = await switchNetwork(initialNetwork);\n if (!switchResult) {\n throw handleError(new WalletSwitchNetworkError('Failed to switch network'));\n }\n }\n }, [adapter, initialNetwork, switchNetwork]);\n\n return (\n <WalletContext.Provider\n value={{\n autoConnect,\n wallets,\n wallet,\n address: publicKey ?? null,\n connected,\n connecting,\n reconnecting,\n disconnecting,\n network,\n selectWallet: setName,\n connect,\n disconnect,\n executeTransaction,\n transactionStatus,\n signMessage,\n switchNetwork,\n decrypt,\n requestRecords,\n executeDeployment,\n transitionViewKeys,\n requestTransactionHistory,\n }}\n >\n {children}\n </WalletContext.Provider>\n );\n};\n","import type { Dispatch, SetStateAction } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nexport function useLocalStorage<T>(key: string, defaultState: T): [T, Dispatch<SetStateAction<T>>] {\n const state = useState<T>(() => {\n try {\n const value = localStorage.getItem(key);\n if (value) return JSON.parse(value) as T;\n } catch (error: unknown) {\n if (typeof window !== 'undefined') {\n console.error(error);\n }\n }\n\n return defaultState;\n });\n const value = state[0];\n\n const isFirstRender = useRef(true);\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n try {\n if (value === null) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, JSON.stringify(value));\n }\n } catch (error: unknown) {\n if (typeof window !== 'undefined') {\n console.error(error);\n }\n }\n }, [value, key]);\n\n return state;\n}\n","import { useWalletContext } from './context';\nimport type { WalletContextState } from './context';\n\n/**\n * Custom hook to use the wallet\n * @returns The wallet context state\n */\nexport function useWallet(): WalletContextState {\n return useWalletContext();\n}\n"],"mappings":"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","names":["useEffect","useRef","useState","value","useState","useRef","adapter","useEffect","wallets","wallet","readyState","network"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@provablehq/aleo-wallet-adaptor-react",
3
- "version": "0.1.1-alpha.0",
3
+ "version": "0.3.0-alpha.1",
4
4
  "description": "React integration for wallet adapter",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -11,9 +11,9 @@
11
11
  ],
12
12
  "sideEffects": false,
13
13
  "dependencies": {
14
- "@provablehq/aleo-wallet-adaptor-core": "0.1.1-alpha.0",
15
- "@provablehq/aleo-wallet-standard": "0.1.1-alpha.0",
16
- "@provablehq/aleo-types": "0.1.1-alpha.0"
14
+ "@provablehq/aleo-wallet-adaptor-core": "0.3.0-alpha.1",
15
+ "@provablehq/aleo-wallet-standard": "0.3.0-alpha.1",
16
+ "@provablehq/aleo-types": "0.3.0-alpha.1"
17
17
  },
18
18
  "repository": {
19
19
  "type": "git",
@@ -48,6 +48,6 @@
48
48
  "clean": "rimraf dist",
49
49
  "dev": "tsup --watch",
50
50
  "lint": "eslint src/**/*.ts*",
51
- "test": "jest"
51
+ "test": "jest --passWithNoTests"
52
52
  }
53
53
  }