@provablehq/aleo-wallet-adaptor-react 0.3.0-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 {
@@ -93,6 +93,16 @@ interface WalletContextState {
93
93
  executeDeployment: (deployment: AleoDeployment) => Promise<{
94
94
  transactionId: string;
95
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>;
96
106
  }
97
107
  /**
98
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 {
@@ -93,6 +93,16 @@ interface WalletContextState {
93
93
  executeDeployment: (deployment: AleoDeployment) => Promise<{
94
94
  transactionId: string;
95
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>;
96
106
  }
97
107
  /**
98
108
  * Wallet context
package/dist/index.js CHANGED
@@ -393,6 +393,24 @@ var AleoWalletProvider = ({
393
393
  },
394
394
  [adapter, handleError, connected]
395
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
+ );
396
414
  const checkNetwork = (0, import_react3.useCallback)(async () => {
397
415
  if (adapter && adapter.network !== initialNetwork) {
398
416
  const switchResult = await switchNetwork(initialNetwork);
@@ -423,7 +441,9 @@ var AleoWalletProvider = ({
423
441
  switchNetwork,
424
442
  decrypt,
425
443
  requestRecords,
426
- executeDeployment
444
+ executeDeployment,
445
+ transitionViewKeys,
446
+ requestTransactionHistory
427
447
  },
428
448
  children
429
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 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\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 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 }}\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"]}
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
@@ -373,6 +373,24 @@ var AleoWalletProvider = ({
373
373
  },
374
374
  [adapter, handleError, connected]
375
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
+ );
376
394
  const checkNetwork = useCallback(async () => {
377
395
  if (adapter && adapter.network !== initialNetwork) {
378
396
  const switchResult = await switchNetwork(initialNetwork);
@@ -403,7 +421,9 @@ var AleoWalletProvider = ({
403
421
  switchNetwork,
404
422
  decrypt,
405
423
  requestRecords,
406
- executeDeployment
424
+ executeDeployment,
425
+ transitionViewKeys,
426
+ requestTransactionHistory
407
427
  },
408
428
  children
409
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 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\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 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 }}\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.3.0-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-standard": "0.3.0-alpha.0",
15
- "@provablehq/aleo-types": "0.3.0-alpha.0",
16
- "@provablehq/aleo-wallet-adaptor-core": "0.3.0-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",