@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 +3 -3
- package/dist/index.d.mts +11 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +21 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
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 {
|
|
21
|
+
import { ShieldWalletAdapter } from '@provablehq/aleo-wallet-adaptor-shield';
|
|
22
22
|
|
|
23
|
-
const wallets = [new
|
|
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-
|
|
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
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -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":";AAAA,SAAS,eAAe,kBAAkB;AAuInC,IAAM,gBAAgB,cAA8C,MAAS;AAM7E,SAAS,mBAAuC;AACrD,QAAM,MAAM,WAAW,aAAa;AACpC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACA,SAAO;AACT;;;AClJA,SAAS,aAAa,aAAAA,YAAW,SAAS,UAAAC,SAAQ,YAAAC,iBAAgB;AAClE;AAAA,EAEE;AAAA,OAGK;AACP,SAAS,eAAmC;;;ACP5C,SAAS,WAAW,QAAQ,gBAAgB;AAErC,SAAS,gBAAmB,KAAa,cAAmD;AACjG,QAAM,QAAQ,SAAY,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,gBAAgB,OAAO,IAAI;AACjC,YAAU,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;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA2bH;AA9aJ,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,QAAQ;AAAA,EAClC;AAAA,EACA,kBAAkB;AAAA,EAClB,oBAAoB,kBAAkB;AAAA,EACtC;AACF,MAAM;AACJ,QAAM,CAAC,MAAM,OAAO,IAAI,gBAAmC,iBAAiB,IAAI;AAChF,QAAM,CAAC,EAAE,QAAQ,SAAS,WAAW,WAAW,QAAQ,GAAG,QAAQ,IAAIC,UAAS,YAAY;AAC5F,QAAM,aAAa,SAAS,cAAc,iBAAiB;AAC3D,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,KAAK;AAClD,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAS,KAAK;AACxD,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,KAAK;AACtD,QAAM,eAAeC,QAAO,KAAK;AACjC,QAAM,kBAAkBA,QAAO,KAAK;AACpC,QAAM,iBAAiBA,QAAO,KAAK;AACnC,QAAM,cAAcA,QAAO,KAAK;AAChC,QAAM,wBAAwBA,QAAsB,IAAI;AAGxD,QAAM,CAAC,SAAS,UAAU,IAAID;AAAA,IAAS,MACrC,SAAS,IAAI,CAAAE,cAAY;AAAA,MACvB,SAAAA;AAAA,MACA,YAAYA,SAAQ;AAAA,IACtB,EAAE;AAAA,EACJ;AAGA,EAAAC,WAAU,MAAM;AAEd;AAAA,MAAW,CAAAC,aACT,SAAS,IAAI,CAACF,UAAS,UAAU;AAC/B,cAAMG,UAASD,SAAQ,KAAK;AAE5B,eAAOC,WAAUA,QAAO,YAAYH,YAAWG,QAAO,eAAeH,SAAQ,aACzEG,UACA;AAAA,UACE,SAASH;AAAA,UACT,YAAYA,SAAQ;AAAA,QACtB;AAAA,MACN,CAAC;AAAA,IACH;AAEA,aAAS,uBAA4CI,aAAoC;AACvF,iBAAW,iBAAe;AACxB,cAAM,QAAQ,YAAY,UAAU,CAAC,EAAE,SAAAJ,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,YAAAI,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,CAAAL,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,EAAAC,WAAU,MAAM;AACd,UAAME,UAAS,QAAQ,QAAQ,KAAK,CAAC,EAAE,SAAAH,SAAQ,MAAMA,SAAQ,SAAS,IAAI;AAC1E,QAAIG,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;AACD,4BAAsB,UAAUA,QAAO,QAAQ,SAAS,WAAW;AAAA,IACrE,OAAO;AACL,eAAS,YAAY;AACrB,4BAAsB,UAAU;AAAA,IAClC;AAAA,EACF,GAAG,CAAC,MAAM,OAAO,CAAC;AAGlB,EAAAF,WAAU,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,gBAAgB,YAAY,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;AACF,0BAAsB,UAAU,QAAQ,SAAS,WAAW;AAAA,EAC9D,GAAG,CAAC,OAAO,CAAC;AAGZ,QAAM,mBAAmB,YAAY,MAAM;AAEzC,QAAI,CAAC,YAAY,QAAS,SAAQ,IAAI;AACtC,0BAAsB,UAAU;AAAA,EAClC,GAAG,CAAC,aAAa,OAAO,CAAC;AAGzB,QAAM,aAAa,YAAY,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;AAGtC,QAAM,cAAc;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,QAAM,sBAAsB,YAAY,YAAY;AAClD,QAAI,CAAC,WAAW,eAAe,QAAS;AAExC,mBAAe,UAAU;AACzB,oBAAgB,IAAI;AACpB,aAAS,YAAU;AAAA,MACjB,GAAG;AAAA,MACH,WAAW;AAAA,MACX,WAAW;AAAA,IACb,EAAE;AAEF,QAAI;AACF,YAAM,UAAU,MAAM,QAAQ,QAAQ,gBAAgB,mBAAmB,QAAQ;AACjF,eAAS,YAAU;AAAA,QACjB,GAAG;AAAA,QACH,WAAW,QAAQ;AAAA,QACnB,WAAW,QAAQ;AAAA,QACnB,SAAS,QAAQ,WAAW,MAAM;AAAA,MACpC,EAAE;AACF,4BAAsB,UAAU,QAAQ,WAAW;AAAA,IACrD,SAAS,OAAgB;AACvB,kBAAY,KAAoB;AAChC,YAAM,WAAW;AAAA,IACnB,UAAE;AACA,sBAAgB,KAAK;AACrB,qBAAe,UAAU;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,SAAS,YAAY,aAAa,gBAAgB,mBAAmB,QAAQ,CAAC;AAGlF,EAAAA,WAAU,MAAM;AACd,QAAI,SAAS;AACX,cAAQ,GAAG,WAAW,aAAa;AACnC,cAAQ,GAAG,cAAc,gBAAgB;AACzC,cAAQ,GAAG,SAAS,WAAW;AAC/B,cAAQ,GAAG,iBAAiB,mBAAmB;AAC/C,aAAO,MAAM;AACX,gBAAQ,IAAI,WAAW,aAAa;AACpC,gBAAQ,IAAI,cAAc,gBAAgB;AAC1C,gBAAQ,IAAI,SAAS,WAAW;AAChC,gBAAQ,IAAI,iBAAiB,mBAAmB;AAAA,MAClD;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,eAAe,kBAAkB,aAAa,mBAAmB,CAAC;AAG/E,EAAAA,WAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,WAAW,QAAQ,WAAW;AAChC,gBAAQ,WAAW;AAAA,MACrB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAGZ,EAAAA,WAAU,MAAM;AACd,QACE,aAAa,WACb,eAAe,WACf,aACA,CAAC,eACD,CAAC,WACD,EAAE,eAAe,iBAAiB,aAAa,eAAe,iBAAiB;AAE/E;AAEF,KAAC,iBAAkB;AACjB,mBAAa,UAAU;AACvB,oBAAc,IAAI;AAClB,UAAI;AACF,cAAM,UAAU,MAAM,QAAQ,QAAQ,gBAAgB,mBAAmB,QAAQ;AACjF,8BAAsB,UAAU,QAAQ,WAAW;AAAA,MACrD,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,EAAAA,WAAU,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,EAAAA,WAAU,MAAM;AACd,QAAI,WAAW,WAAW;AACxB,iBAAW;AAAA,IACb;AAAA,EACF,GAAG,CAAC,mBAAmB,QAAQ,CAAC;AAGhC,QAAM,UAAU,YAAY,YAAY;AACtC,QAAI,aAAa,WAAW,gBAAgB,WAAW,UAAW;AAClE,QAAI,CAAC,QAAS,OAAM,YAAY,IAAI,uBAAuB,CAAC;AAE5D,QAAI,EAAE,eAAe,iBAAiB,aAAa,eAAe,iBAAiB,WAAW;AAE5F,cAAQ,IAAI;AAEZ,UAAI,OAAO,WAAW,aAAa;AACjC,eAAO,KAAK,QAAQ,KAAK,QAAQ;AAAA,MACnC;AAEA,YAAM,YAAY,IAAI,oBAAoB,CAAC;AAAA,IAC7C;AAEA,iBAAa,UAAU;AACvB,kBAAc,IAAI;AAClB,QAAI;AACF,YAAM,UAAU,MAAM,QAAQ,QAAQ,gBAAgB,mBAAmB,QAAQ;AACjF,4BAAsB,UAAU,QAAQ,WAAW;AAAA,IACrD,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;AAExF,QAAM,qBAAqB;AAAA,IACzB,OAAO,gBAAoC;AACzC,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wBAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,wBAAwB;AACxC,cAAM,YAAY,IAAI,0BAA0B,oBAAoB,CAAC;AAEvE,YAAM,aAAa;AAEnB,aAAO,MAAM,QAAQ,mBAAmB,WAAW;AAAA,IACrD;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,oBAAoB;AAAA,IACxB,OAAO,kBAA0B;AAC/B,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wBAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,uBAAuB;AACvC,cAAM,YAAY,IAAI,0BAA0B,mBAAmB,CAAC;AAEtE,aAAO,MAAM,QAAQ,kBAAkB,aAAa;AAAA,IACtD;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAGA,QAAM,cAAc;AAAA,IAClB,MACE,OAAO,YAAkE;AACvE,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wBAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,iBAAiB;AACjC,cAAM,YAAY,IAAI,0BAA0B,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,gBAAgB;AAAA,IACpB,OAAOI,aAAqB;AAC1B,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wBAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,mBAAmB;AACnC,cAAM,YAAY,IAAI,0BAA0B,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,2BAA2B;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,UAAU;AAAA,IACd,OAAO,eAAuB;AAC5B,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wBAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,aAAa;AAC7B,cAAM,YAAY,IAAI,0BAA0B,SAAS,CAAC;AAE5D,aAAO,MAAM,QAAQ,QAAQ,UAAU;AAAA,IACzC;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,iBAAiB;AAAA,IACrB,OAAO,SAAiB,qBAA+B;AACrD,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wBAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,oBAAoB;AACpC,cAAM,YAAY,IAAI,0BAA0B,gBAAgB,CAAC;AAEnE,aAAO,MAAM,QAAQ,eAAe,SAAS,gBAAgB;AAAA,IAC/D;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,oBAAoB;AAAA,IACxB,OAAO,eAA+B;AACpC,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wBAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,uBAAuB;AACvC,cAAM,YAAY,IAAI,0BAA0B,mBAAmB,CAAC;AAEtE,aAAO,MAAM,QAAQ,kBAAkB,UAAU;AAAA,IACnD;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,qBAAqB;AAAA,IACzB,OAAO,kBAA0B;AAC/B,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wBAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,wBAAwB;AACxC,cAAM,YAAY,IAAI,0BAA0B,oBAAoB,CAAC;AAEvE,aAAO,MAAM,QAAQ,mBAAmB,aAAa;AAAA,IACvD;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,4BAA4B;AAAA,IAChC,OAAO,YAAoB;AACzB,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wBAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,+BAA+B;AAC/C,cAAM,YAAY,IAAI,0BAA0B,2BAA2B,CAAC;AAE9E,aAAO,MAAM,QAAQ,0BAA0B,OAAO;AAAA,IACxD;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,eAAe,YAAY,YAAY;AAC3C,QAAI,WAAW,QAAQ,YAAY,gBAAgB;AACjD,YAAM,eAAe,MAAM,cAAc,cAAc;AACvD,UAAI,CAAC,cAAc;AACjB,cAAM,YAAY,IAAI,yBAAyB,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;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;AEneO,SAAS,YAAgC;AAC9C,SAAO,iBAAiB;AAC1B;","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.
|
|
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-
|
|
15
|
-
"@provablehq/aleo-
|
|
16
|
-
"@provablehq/aleo-
|
|
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",
|