@provablehq/aleo-wallet-adaptor-react 0.3.0-alpha.4 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +24 -1
- package/dist/index.d.ts +24 -1
- package/dist/index.js +73 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +73 -9
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { FC, ReactNode } from 'react';
|
|
3
|
-
import { WalletAdapter, WalletReadyState, WalletName, RecordStatusFilter, AleoDeployment } from '@provablehq/aleo-wallet-standard';
|
|
3
|
+
import { WalletAdapter, WalletReadyState, WalletName, RecordStatusFilter, AleoDeployment, RecordAccessGrant, AlgorithmGrant } from '@provablehq/aleo-wallet-standard';
|
|
4
4
|
import { Network, TransactionOptions, TransactionStatusResponse, TxHistoryResult } from '@provablehq/aleo-types';
|
|
5
5
|
import { WalletError, DecryptPermission } from '@provablehq/aleo-wallet-adaptor-core';
|
|
6
6
|
|
|
@@ -103,6 +103,13 @@ interface WalletContextState {
|
|
|
103
103
|
* @returns array of transactionId
|
|
104
104
|
*/
|
|
105
105
|
requestTransactionHistory: (program: string) => Promise<TxHistoryResult>;
|
|
106
|
+
/**
|
|
107
|
+
* Return the algorithm names this wallet implements for `type: "derived"`
|
|
108
|
+
* InputRequests. A dapp calls this before connect to pick which entries to
|
|
109
|
+
* include in `algorithmsAllowed`. Wallets without derived-input support
|
|
110
|
+
* return `[]`.
|
|
111
|
+
*/
|
|
112
|
+
algorithmsSupported: () => Promise<string[]>;
|
|
106
113
|
}
|
|
107
114
|
/**
|
|
108
115
|
* Wallet context
|
|
@@ -123,6 +130,22 @@ interface WalletProviderProps {
|
|
|
123
130
|
localStorageKey?: string;
|
|
124
131
|
decryptPermission?: DecryptPermission;
|
|
125
132
|
programs?: string[];
|
|
133
|
+
/**
|
|
134
|
+
* Opt-in record/field narrowing on top of `programs`. Forwarded to the
|
|
135
|
+
* wallet's connect call. Only honored by wallets that support it (e.g. shield).
|
|
136
|
+
*/
|
|
137
|
+
recordAccess?: RecordAccessGrant;
|
|
138
|
+
/**
|
|
139
|
+
* When `false`, the dapp transacts without learning the user's address.
|
|
140
|
+
* Defaults to `true`. Only valid with `decryptPermission: NoDecrypt`.
|
|
141
|
+
*/
|
|
142
|
+
readAddress?: boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Strict opt-in allowlist for `type: "derived"` InputRequests. Each grant
|
|
145
|
+
* authorizes exactly one (algorithm, program, function, inputPosition)
|
|
146
|
+
* call site. Default undefined → every derived request is refused.
|
|
147
|
+
*/
|
|
148
|
+
algorithmsAllowed?: AlgorithmGrant[];
|
|
126
149
|
}
|
|
127
150
|
declare const AleoWalletProvider: FC<WalletProviderProps>;
|
|
128
151
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { FC, ReactNode } from 'react';
|
|
3
|
-
import { WalletAdapter, WalletReadyState, WalletName, RecordStatusFilter, AleoDeployment } from '@provablehq/aleo-wallet-standard';
|
|
3
|
+
import { WalletAdapter, WalletReadyState, WalletName, RecordStatusFilter, AleoDeployment, RecordAccessGrant, AlgorithmGrant } from '@provablehq/aleo-wallet-standard';
|
|
4
4
|
import { Network, TransactionOptions, TransactionStatusResponse, TxHistoryResult } from '@provablehq/aleo-types';
|
|
5
5
|
import { WalletError, DecryptPermission } from '@provablehq/aleo-wallet-adaptor-core';
|
|
6
6
|
|
|
@@ -103,6 +103,13 @@ interface WalletContextState {
|
|
|
103
103
|
* @returns array of transactionId
|
|
104
104
|
*/
|
|
105
105
|
requestTransactionHistory: (program: string) => Promise<TxHistoryResult>;
|
|
106
|
+
/**
|
|
107
|
+
* Return the algorithm names this wallet implements for `type: "derived"`
|
|
108
|
+
* InputRequests. A dapp calls this before connect to pick which entries to
|
|
109
|
+
* include in `algorithmsAllowed`. Wallets without derived-input support
|
|
110
|
+
* return `[]`.
|
|
111
|
+
*/
|
|
112
|
+
algorithmsSupported: () => Promise<string[]>;
|
|
106
113
|
}
|
|
107
114
|
/**
|
|
108
115
|
* Wallet context
|
|
@@ -123,6 +130,22 @@ interface WalletProviderProps {
|
|
|
123
130
|
localStorageKey?: string;
|
|
124
131
|
decryptPermission?: DecryptPermission;
|
|
125
132
|
programs?: string[];
|
|
133
|
+
/**
|
|
134
|
+
* Opt-in record/field narrowing on top of `programs`. Forwarded to the
|
|
135
|
+
* wallet's connect call. Only honored by wallets that support it (e.g. shield).
|
|
136
|
+
*/
|
|
137
|
+
recordAccess?: RecordAccessGrant;
|
|
138
|
+
/**
|
|
139
|
+
* When `false`, the dapp transacts without learning the user's address.
|
|
140
|
+
* Defaults to `true`. Only valid with `decryptPermission: NoDecrypt`.
|
|
141
|
+
*/
|
|
142
|
+
readAddress?: boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Strict opt-in allowlist for `type: "derived"` InputRequests. Each grant
|
|
145
|
+
* authorizes exactly one (algorithm, program, function, inputPosition)
|
|
146
|
+
* call site. Default undefined → every derived request is refused.
|
|
147
|
+
*/
|
|
148
|
+
algorithmsAllowed?: AlgorithmGrant[];
|
|
126
149
|
}
|
|
127
150
|
declare const AleoWalletProvider: FC<WalletProviderProps>;
|
|
128
151
|
|
package/dist/index.js
CHANGED
|
@@ -97,8 +97,17 @@ var AleoWalletProvider = ({
|
|
|
97
97
|
onError,
|
|
98
98
|
localStorageKey = "walletName",
|
|
99
99
|
decryptPermission = import_aleo_wallet_adaptor_core.DecryptPermission.NoDecrypt,
|
|
100
|
-
programs
|
|
100
|
+
programs,
|
|
101
|
+
recordAccess,
|
|
102
|
+
readAddress,
|
|
103
|
+
algorithmsAllowed
|
|
101
104
|
}) => {
|
|
105
|
+
const connectOptions = (0, import_react3.useMemo)(() => {
|
|
106
|
+
if (recordAccess === void 0 && readAddress === void 0 && (algorithmsAllowed === void 0 || algorithmsAllowed.length === 0)) {
|
|
107
|
+
return void 0;
|
|
108
|
+
}
|
|
109
|
+
return { recordAccess, readAddress, algorithmsAllowed };
|
|
110
|
+
}, [recordAccess, readAddress, algorithmsAllowed]);
|
|
102
111
|
const [name, setName] = useLocalStorage(localStorageKey, null);
|
|
103
112
|
const [{ wallet, adapter, publicKey, connected, network }, setState] = (0, import_react3.useState)(initialState);
|
|
104
113
|
const readyState = adapter?.readyState || import_aleo_wallet_standard.WalletReadyState.UNSUPPORTED;
|
|
@@ -220,7 +229,12 @@ var AleoWalletProvider = ({
|
|
|
220
229
|
connected: false
|
|
221
230
|
}));
|
|
222
231
|
try {
|
|
223
|
-
const account = await adapter.connect(
|
|
232
|
+
const account = await adapter.connect(
|
|
233
|
+
initialNetwork,
|
|
234
|
+
decryptPermission,
|
|
235
|
+
programs,
|
|
236
|
+
connectOptions
|
|
237
|
+
);
|
|
224
238
|
setState((state) => ({
|
|
225
239
|
...state,
|
|
226
240
|
publicKey: account.address,
|
|
@@ -235,7 +249,15 @@ var AleoWalletProvider = ({
|
|
|
235
249
|
setReconnecting(false);
|
|
236
250
|
isReconnecting.current = false;
|
|
237
251
|
}
|
|
238
|
-
}, [
|
|
252
|
+
}, [
|
|
253
|
+
adapter,
|
|
254
|
+
disconnect,
|
|
255
|
+
handleError,
|
|
256
|
+
initialNetwork,
|
|
257
|
+
decryptPermission,
|
|
258
|
+
programs,
|
|
259
|
+
connectOptions
|
|
260
|
+
]);
|
|
239
261
|
(0, import_react3.useEffect)(() => {
|
|
240
262
|
if (adapter) {
|
|
241
263
|
adapter.on("connect", handleConnect);
|
|
@@ -264,7 +286,12 @@ var AleoWalletProvider = ({
|
|
|
264
286
|
isConnecting.current = true;
|
|
265
287
|
setConnecting(true);
|
|
266
288
|
try {
|
|
267
|
-
const account = await adapter.connect(
|
|
289
|
+
const account = await adapter.connect(
|
|
290
|
+
initialNetwork,
|
|
291
|
+
decryptPermission,
|
|
292
|
+
programs,
|
|
293
|
+
connectOptions
|
|
294
|
+
);
|
|
268
295
|
lastAuthorizedAccount.current = account.address ?? null;
|
|
269
296
|
} catch (error) {
|
|
270
297
|
setName(null);
|
|
@@ -274,7 +301,18 @@ var AleoWalletProvider = ({
|
|
|
274
301
|
isConnecting.current = false;
|
|
275
302
|
}
|
|
276
303
|
})();
|
|
277
|
-
}, [
|
|
304
|
+
}, [
|
|
305
|
+
isConnecting,
|
|
306
|
+
connected,
|
|
307
|
+
autoConnect,
|
|
308
|
+
adapter,
|
|
309
|
+
readyState,
|
|
310
|
+
setName,
|
|
311
|
+
initialNetwork,
|
|
312
|
+
decryptPermission,
|
|
313
|
+
programs,
|
|
314
|
+
connectOptions
|
|
315
|
+
]);
|
|
278
316
|
(0, import_react3.useEffect)(() => {
|
|
279
317
|
if (adapter && connected && adapter.network !== initialNetwork) {
|
|
280
318
|
try {
|
|
@@ -289,7 +327,7 @@ var AleoWalletProvider = ({
|
|
|
289
327
|
if (adapter && connected) {
|
|
290
328
|
disconnect();
|
|
291
329
|
}
|
|
292
|
-
}, [decryptPermission, programs]);
|
|
330
|
+
}, [decryptPermission, programs, connectOptions]);
|
|
293
331
|
const connect = (0, import_react3.useCallback)(async () => {
|
|
294
332
|
if (isConnecting.current || isDisconnecting.current || connected) return;
|
|
295
333
|
if (!adapter) throw handleError(new import_aleo_wallet_adaptor_core.WalletNotSelectedError());
|
|
@@ -303,7 +341,12 @@ var AleoWalletProvider = ({
|
|
|
303
341
|
isConnecting.current = true;
|
|
304
342
|
setConnecting(true);
|
|
305
343
|
try {
|
|
306
|
-
const account = await adapter.connect(
|
|
344
|
+
const account = await adapter.connect(
|
|
345
|
+
initialNetwork,
|
|
346
|
+
decryptPermission,
|
|
347
|
+
programs,
|
|
348
|
+
connectOptions
|
|
349
|
+
);
|
|
307
350
|
lastAuthorizedAccount.current = account.address ?? null;
|
|
308
351
|
} catch (error) {
|
|
309
352
|
setName(null);
|
|
@@ -313,7 +356,19 @@ var AleoWalletProvider = ({
|
|
|
313
356
|
setConnecting(false);
|
|
314
357
|
isConnecting.current = false;
|
|
315
358
|
}
|
|
316
|
-
}, [
|
|
359
|
+
}, [
|
|
360
|
+
isConnecting,
|
|
361
|
+
isDisconnecting,
|
|
362
|
+
connected,
|
|
363
|
+
adapter,
|
|
364
|
+
readyState,
|
|
365
|
+
handleError,
|
|
366
|
+
setName,
|
|
367
|
+
initialNetwork,
|
|
368
|
+
decryptPermission,
|
|
369
|
+
programs,
|
|
370
|
+
connectOptions
|
|
371
|
+
]);
|
|
317
372
|
const executeTransaction = (0, import_react3.useCallback)(
|
|
318
373
|
async (transaction) => {
|
|
319
374
|
if (!connected) throw handleError(new import_aleo_wallet_adaptor_core.WalletNotConnectedError());
|
|
@@ -413,6 +468,14 @@ var AleoWalletProvider = ({
|
|
|
413
468
|
},
|
|
414
469
|
[adapter, handleError, connected]
|
|
415
470
|
);
|
|
471
|
+
const algorithmsSupported = (0, import_react3.useCallback)(async () => {
|
|
472
|
+
if (!adapter || !("algorithmsSupported" in adapter)) return [];
|
|
473
|
+
try {
|
|
474
|
+
return await adapter.algorithmsSupported();
|
|
475
|
+
} catch {
|
|
476
|
+
return [];
|
|
477
|
+
}
|
|
478
|
+
}, [adapter]);
|
|
416
479
|
const checkNetwork = (0, import_react3.useCallback)(async () => {
|
|
417
480
|
if (adapter && adapter.network !== initialNetwork) {
|
|
418
481
|
const switchResult = await switchNetwork(initialNetwork);
|
|
@@ -445,7 +508,8 @@ var AleoWalletProvider = ({
|
|
|
445
508
|
requestRecords,
|
|
446
509
|
executeDeployment,
|
|
447
510
|
transitionViewKeys,
|
|
448
|
-
requestTransactionHistory
|
|
511
|
+
requestTransactionHistory,
|
|
512
|
+
algorithmsSupported
|
|
449
513
|
},
|
|
450
514
|
children
|
|
451
515
|
}
|
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 RecordStatusFilter,\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: (\n program: string,\n includePlaintext?: boolean,\n statusFilter?: RecordStatusFilter,\n ) => 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 RecordStatusFilter,\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.TESTNET,\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\n adapter.emit('error', error as WalletError);\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 adapter.emit('error', error as WalletError);\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, statusFilter?: RecordStatusFilter) => {\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, statusFilter);\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"]}
|
|
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 RecordStatusFilter,\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: (\n program: string,\n includePlaintext?: boolean,\n statusFilter?: RecordStatusFilter,\n ) => 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 * Return the algorithm names this wallet implements for `type: \"derived\"`\n * InputRequests. A dapp calls this before connect to pick which entries to\n * include in `algorithmsAllowed`. Wallets without derived-input support\n * return `[]`.\n */\n algorithmsSupported: () => Promise<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 AlgorithmGrant,\n WalletName,\n WalletReadyState,\n WalletAdapter,\n AleoDeployment,\n ConnectOptions,\n RecordAccessGrant,\n RecordStatusFilter,\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 * Opt-in record/field narrowing on top of `programs`. Forwarded to the\n * wallet's connect call. Only honored by wallets that support it (e.g. shield).\n */\n recordAccess?: RecordAccessGrant;\n /**\n * When `false`, the dapp transacts without learning the user's address.\n * Defaults to `true`. Only valid with `decryptPermission: NoDecrypt`.\n */\n readAddress?: boolean;\n /**\n * Strict opt-in allowlist for `type: \"derived\"` InputRequests. Each grant\n * authorizes exactly one (algorithm, program, function, inputPosition)\n * call site. Default undefined → every derived request is refused.\n */\n algorithmsAllowed?: AlgorithmGrant[];\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.TESTNET,\n onError,\n localStorageKey = 'walletName',\n decryptPermission = DecryptPermission.NoDecrypt,\n programs,\n recordAccess,\n readAddress,\n algorithmsAllowed,\n}) => {\n const connectOptions = useMemo<ConnectOptions | undefined>(() => {\n if (\n recordAccess === undefined &&\n readAddress === undefined &&\n (algorithmsAllowed === undefined || algorithmsAllowed.length === 0)\n ) {\n return undefined;\n }\n return { recordAccess, readAddress, algorithmsAllowed };\n }, [recordAccess, readAddress, algorithmsAllowed]);\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(\n initialNetwork,\n decryptPermission,\n programs,\n connectOptions,\n );\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 }, [\n adapter,\n disconnect,\n handleError,\n initialNetwork,\n decryptPermission,\n programs,\n connectOptions,\n ]);\n\n // Setup and teardown event listeners when the adapter changes\n useEffect(() => {\n if (adapter) {\n adapter.on('connect', handleConnect);\n adapter.on('disconnect', handleDisconnect);\n adapter.on('error', handleError);\n 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(\n initialNetwork,\n decryptPermission,\n programs,\n connectOptions,\n );\n lastAuthorizedAccount.current = account.address ?? null;\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n\n adapter.emit('error', error as WalletError);\n } finally {\n setConnecting(false);\n isConnecting.current = false;\n }\n })();\n }, [\n isConnecting,\n connected,\n autoConnect,\n adapter,\n readyState,\n setName,\n initialNetwork,\n decryptPermission,\n programs,\n connectOptions,\n ]);\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, connectOptions]);\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(\n initialNetwork,\n decryptPermission,\n programs,\n connectOptions,\n );\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 adapter.emit('error', error as WalletError);\n throw error;\n } finally {\n setConnecting(false);\n isConnecting.current = false;\n }\n }, [\n isConnecting,\n isDisconnecting,\n connected,\n adapter,\n readyState,\n handleError,\n setName,\n initialNetwork,\n decryptPermission,\n programs,\n connectOptions,\n ]);\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, statusFilter?: RecordStatusFilter) => {\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, statusFilter);\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 // Doesn't require a connection — dapps may call this before connect to discover\n // which algorithms a wallet supports and to populate `algorithmsAllowed`.\n const algorithmsSupported = useCallback(async () => {\n if (!adapter || !('algorithmsSupported' in adapter)) return [];\n try {\n return await adapter.algorithmsSupported();\n } catch {\n return [];\n }\n }, [adapter]);\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 algorithmsSupported,\n }}\n >\n {children}\n </WalletContext.Provider>\n );\n};\n","import type { Dispatch, SetStateAction } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nexport function useLocalStorage<T>(key: string, defaultState: T): [T, Dispatch<SetStateAction<T>>] {\n const state = useState<T>(() => {\n try {\n const value = localStorage.getItem(key);\n if (value) return JSON.parse(value) as T;\n } catch (error: unknown) {\n if (typeof window !== 'undefined') {\n console.error(error);\n }\n }\n\n return defaultState;\n });\n const value = state[0];\n\n const isFirstRender = useRef(true);\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n try {\n if (value === null) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, JSON.stringify(value));\n }\n } catch (error: unknown) {\n if (typeof window !== 'undefined') {\n console.error(error);\n }\n }\n }, [value, key]);\n\n return state;\n}\n","import { useWalletContext } from './context';\nimport type { WalletContextState } from './context';\n\n/**\n * Custom hook to use the wallet\n * @returns The wallet context state\n */\nexport function useWallet(): WalletContextState {\n return useWalletContext();\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAA0C;AAmJnC,IAAM,oBAAgB,4BAA8C,MAAS;AAM7E,SAAS,mBAAuC;AACrD,QAAM,UAAM,yBAAW,aAAa;AACpC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACA,SAAO;AACT;;;AC9JA,IAAAA,gBAAkE;AAClE,kCASO;AACP,wBAA4C;;;ACX5C,IAAAC,gBAA4C;AAErC,SAAS,gBAAmB,KAAa,cAAmD;AACjG,QAAM,YAAQ,wBAAY,MAAM;AAC9B,QAAI;AACF,YAAMC,SAAQ,aAAa,QAAQ,GAAG;AACtC,UAAIA,OAAO,QAAO,KAAK,MAAMA,MAAK;AAAA,IACpC,SAAS,OAAgB;AACvB,UAAI,OAAO,WAAW,aAAa;AACjC,gBAAQ,MAAM,KAAK;AAAA,MACrB;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC;AACD,QAAM,QAAQ,MAAM,CAAC;AAErB,QAAM,oBAAgB,sBAAO,IAAI;AACjC,+BAAU,MAAM;AACd,QAAI,cAAc,SAAS;AACzB,oBAAc,UAAU;AACxB;AAAA,IACF;AACA,QAAI;AACF,UAAI,UAAU,MAAM;AAClB,qBAAa,WAAW,GAAG;AAAA,MAC7B,OAAO;AACL,qBAAa,QAAQ,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,MACjD;AAAA,IACF,SAAS,OAAgB;AACvB,UAAI,OAAO,WAAW,aAAa;AACjC,gBAAQ,MAAM,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,GAAG,CAAC;AAEf,SAAO;AACT;;;ADvBA,sCAQO;AAmhBH;AAtfJ,IAAM,eAMF;AAAA,EACF,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AACX;AAEO,IAAM,qBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS,iBAAiB,0BAAQ;AAAA,EAClC;AAAA,EACA,kBAAkB;AAAA,EAClB,oBAAoB,kDAAkB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,qBAAiB,uBAAoC,MAAM;AAC/D,QACE,iBAAiB,UACjB,gBAAgB,WACf,sBAAsB,UAAa,kBAAkB,WAAW,IACjE;AACA,aAAO;AAAA,IACT;AACA,WAAO,EAAE,cAAc,aAAa,kBAAkB;AAAA,EACxD,GAAG,CAAC,cAAc,aAAa,iBAAiB,CAAC;AACjD,QAAM,CAAC,MAAM,OAAO,IAAI,gBAAmC,iBAAiB,IAAI;AAChF,QAAM,CAAC,EAAE,QAAQ,SAAS,WAAW,WAAW,QAAQ,GAAG,QAAQ,QAAI,wBAAS,YAAY;AAC5F,QAAM,aAAa,SAAS,cAAc,6CAAiB;AAC3D,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,KAAK;AAClD,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAS,KAAK;AACxD,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,KAAK;AACtD,QAAM,mBAAe,sBAAO,KAAK;AACjC,QAAM,sBAAkB,sBAAO,KAAK;AACpC,QAAM,qBAAiB,sBAAO,KAAK;AACnC,QAAM,kBAAc,sBAAO,KAAK;AAChC,QAAM,4BAAwB,sBAAsB,IAAI;AAGxD,QAAM,CAAC,SAAS,UAAU,QAAI;AAAA,IAAS,MACrC,SAAS,IAAI,CAAAC,cAAY;AAAA,MACvB,SAAAA;AAAA,MACA,YAAYA,SAAQ;AAAA,IACtB,EAAE;AAAA,EACJ;AAGA,+BAAU,MAAM;AAEd;AAAA,MAAW,CAAAC,aACT,SAAS,IAAI,CAACD,UAAS,UAAU;AAC/B,cAAME,UAASD,SAAQ,KAAK;AAE5B,eAAOC,WAAUA,QAAO,YAAYF,YAAWE,QAAO,eAAeF,SAAQ,aACzEE,UACA;AAAA,UACE,SAASF;AAAA,UACT,YAAYA,SAAQ;AAAA,QACtB;AAAA,MACN,CAAC;AAAA,IACH;AAEA,aAAS,uBAA4CG,aAAoC;AACvF,iBAAW,iBAAe;AACxB,cAAM,QAAQ,YAAY,UAAU,CAAC,EAAE,SAAAH,SAAQ,MAAMA,aAAY,IAAI;AACrE,YAAI,UAAU,GAAI,QAAO;AAGzB,cAAM,EAAE,SAAAA,SAAQ,IAAI,YAAY,KAAK;AACrC,eAAO;AAAA,UACL,GAAG,YAAY,MAAM,GAAG,KAAK;AAAA,UAC7B,EAAE,SAAAA,UAAS,YAAAG,YAAW;AAAA,UACtB,GAAG,YAAY,MAAM,QAAQ,CAAC;AAAA,QAChC;AAAA,MACF,CAAC;AAAA,IACH;AAEA,aAAS,oBAAyCC,UAAwB;AACxE,eAAS,YAAU;AAAA,QACjB,GAAG;AAAA,QACH,SAAAA;AAAA,MACF,EAAE;AAAA,IACJ;AAEA,aAAS,QAAQ,CAAAJ,aAAWA,SAAQ,GAAG,oBAAoB,wBAAwBA,QAAO,CAAC;AAC3F,aAAS,QAAQ,CAAAA,aAAWA,SAAQ,GAAG,iBAAiB,qBAAqBA,QAAO,CAAC;AACrF,WAAO,MAAM;AACX,eAAS,QAAQ,CAAAA,aAAWA,SAAQ,IAAI,oBAAoB,wBAAwBA,QAAO,CAAC;AAC5F,eAAS,QAAQ,CAAAA,aAAWA,SAAQ,IAAI,iBAAiB,qBAAqBA,QAAO,CAAC;AAAA,IACxF;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAGb,+BAAU,MAAM;AACd,UAAME,UAAS,QAAQ,QAAQ,KAAK,CAAC,EAAE,SAAAF,SAAQ,MAAMA,SAAQ,SAAS,IAAI;AAC1E,QAAIE,SAAQ;AACV,eAAS;AAAA,QACP,QAAAA;AAAA,QACA,SAASA,QAAO;AAAA,QAChB,WAAWA,QAAO,QAAQ;AAAA,QAC1B,WAAWA,QAAO,QAAQ,SAAS,WAAW;AAAA,QAC9C,SAASA,QAAO,QAAQ,WAAW;AAAA,MACrC,CAAC;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,+BAAU,MAAM;AACd,aAAS,WAAW;AAClB,kBAAY,UAAU;AAAA,IACxB;AAEA,WAAO,iBAAiB,gBAAgB,QAAQ;AAChD,WAAO,MAAM,OAAO,oBAAoB,gBAAgB,QAAQ;AAAA,EAClE,GAAG,CAAC,WAAW,CAAC;AAGhB,QAAM,oBAAgB,2BAAY,MAAM;AACtC,QAAI,CAAC,QAAS;AACd,aAAS,YAAU;AAAA,MACjB,GAAG;AAAA,MACH,WAAW,QAAQ;AAAA,MACnB,WAAW,QAAQ,SAAS,WAAW;AAAA,MACvC,SAAS,QAAQ,WAAW;AAAA,IAC9B,EAAE;AACF,0BAAsB,UAAU,QAAQ,SAAS,WAAW;AAAA,EAC9D,GAAG,CAAC,OAAO,CAAC;AAGZ,QAAM,uBAAmB,2BAAY,MAAM;AAEzC,QAAI,CAAC,YAAY,QAAS,SAAQ,IAAI;AACtC,0BAAsB,UAAU;AAAA,EAClC,GAAG,CAAC,aAAa,OAAO,CAAC;AAGzB,QAAM,iBAAa,2BAAY,YAAY;AACzC,QAAI,gBAAgB,QAAS;AAC7B,QAAI,CAAC,QAAS,QAAO,QAAQ,IAAI;AAEjC,oBAAgB,UAAU;AAC1B,qBAAiB,IAAI;AACrB,QAAI;AACF,YAAM,QAAQ,WAAW;AAAA,IAC3B,SAAS,OAAgB;AAEvB,cAAQ,IAAI;AAEZ,YAAM;AAAA,IACR,UAAE;AACA,uBAAiB,KAAK;AACtB,sBAAgB,UAAU;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,iBAAiB,SAAS,OAAO,CAAC;AAGtC,QAAM,kBAAc;AAAA,IAClB,CAAC,UAAuB;AAEtB,UAAI,CAAC,YAAY,QAAS,EAAC,WAAW,QAAQ,OAAO,KAAK;AAC1D,aAAO;AAAA,IACT;AAAA,IACA,CAAC,aAAa,OAAO;AAAA,EACvB;AAGA,QAAM,0BAAsB,2BAAY,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;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,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;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAGD,+BAAU,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,+BAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,WAAW,QAAQ,WAAW;AAChC,gBAAQ,WAAW;AAAA,MACrB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAGZ,+BAAU,MAAM;AACd,QACE,aAAa,WACb,eAAe,WACf,aACA,CAAC,eACD,CAAC,WACD,EAAE,eAAe,6CAAiB,aAAa,eAAe,6CAAiB;AAE/E;AAEF,KAAC,iBAAkB;AACjB,mBAAa,UAAU;AACvB,oBAAc,IAAI;AAClB,UAAI;AACF,cAAM,UAAU,MAAM,QAAQ;AAAA,UAC5B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,8BAAsB,UAAU,QAAQ,WAAW;AAAA,MACrD,SAAS,OAAgB;AAEvB,gBAAQ,IAAI;AAEZ,gBAAQ,KAAK,SAAS,KAAoB;AAAA,MAC5C,UAAE;AACA,sBAAc,KAAK;AACnB,qBAAa,UAAU;AAAA,MACzB;AAAA,IACF,GAAG;AAAA,EACL,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,+BAAU,MAAM;AACd,QAAI,WAAW,aAAa,QAAQ,YAAY,gBAAgB;AAC9D,UAAI;AACF,sBAAc,cAAc;AAAA,MAC9B,SAAS,OAAgB;AACvB,gBAAQ,MAAM,yCAAyC;AACvD,mBAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,+BAAU,MAAM;AACd,QAAI,WAAW,WAAW;AACxB,iBAAW;AAAA,IACb;AAAA,EACF,GAAG,CAAC,mBAAmB,UAAU,cAAc,CAAC;AAGhD,QAAM,cAAU,2BAAY,YAAY;AACtC,QAAI,aAAa,WAAW,gBAAgB,WAAW,UAAW;AAClE,QAAI,CAAC,QAAS,OAAM,YAAY,IAAI,uDAAuB,CAAC;AAE5D,QAAI,EAAE,eAAe,6CAAiB,aAAa,eAAe,6CAAiB,WAAW;AAE5F,cAAQ,IAAI;AAEZ,UAAI,OAAO,WAAW,aAAa;AACjC,eAAO,KAAK,QAAQ,KAAK,QAAQ;AAAA,MACnC;AAEA,YAAM,YAAY,IAAI,oDAAoB,CAAC;AAAA,IAC7C;AAEA,iBAAa,UAAU;AACvB,kBAAc,IAAI;AAClB,QAAI;AACF,YAAM,UAAU,MAAM,QAAQ;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,4BAAsB,UAAU,QAAQ,WAAW;AAAA,IACrD,SAAS,OAAgB;AAEvB,cAAQ,IAAI;AAEZ,cAAQ,KAAK,SAAS,KAAoB;AAC1C,YAAM;AAAA,IACR,UAAE;AACA,oBAAc,KAAK;AACnB,mBAAa,UAAU;AAAA,IACzB;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,yBAAqB;AAAA,IACzB,OAAO,gBAAoC;AACzC,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,wBAAwB;AACxC,cAAM,YAAY,IAAI,0DAA0B,oBAAoB,CAAC;AAEvE,YAAM,aAAa;AAEnB,aAAO,MAAM,QAAQ,mBAAmB,WAAW;AAAA,IACrD;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,wBAAoB;AAAA,IACxB,OAAO,kBAA0B;AAC/B,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,uBAAuB;AACvC,cAAM,YAAY,IAAI,0DAA0B,mBAAmB,CAAC;AAEtE,aAAO,MAAM,QAAQ,kBAAkB,aAAa;AAAA,IACtD;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAGA,QAAM,kBAAc;AAAA,IAClB,MACE,OAAO,YAAkE;AACvE,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,iBAAiB;AACjC,cAAM,YAAY,IAAI,0DAA0B,aAAa,CAAC;AAEhE,aAAO,MAAM,QAAQ;AAAA,QACnB,OAAO,YAAY,WAAW,IAAI,YAAY,EAAE,OAAO,OAAO,IAAI;AAAA,MACpE;AAAA,IACF;AAAA,IACF,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,oBAAgB;AAAA,IACpB,OAAOE,aAAqB;AAC1B,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,mBAAmB;AACnC,cAAM,YAAY,IAAI,0DAA0B,eAAe,CAAC;AAClE,UAAI,WAAW;AACf,UAAI;AACF,qBAAa,UAAU;AACvB,sBAAc,IAAI;AAClB,cAAM,QAAQ,cAAcA,QAAO;AACnC,mBAAW;AAAA,MACb,SAAS,OAAgB;AACvB,YAAI,iBAAiB,2DAA2B;AAC9C,gBAAM,WAAW;AAAA,QACnB;AAEA,gBAAQ,MAAM,0BAA0B;AAAA,MAC1C,UAAE;AACA,qBAAa,UAAU;AACvB,sBAAc,KAAK;AAAA,MACrB;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,cAAU;AAAA,IACd,OAAO,eAAuB;AAC5B,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,aAAa;AAC7B,cAAM,YAAY,IAAI,0DAA0B,SAAS,CAAC;AAE5D,aAAO,MAAM,QAAQ,QAAQ,UAAU;AAAA,IACzC;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,qBAAiB;AAAA,IACrB,OAAO,SAAiB,kBAA4B,iBAAsC;AACxF,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,oBAAoB;AACpC,cAAM,YAAY,IAAI,0DAA0B,gBAAgB,CAAC;AAEnE,aAAO,MAAM,QAAQ,eAAe,SAAS,kBAAkB,YAAY;AAAA,IAC7E;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,wBAAoB;AAAA,IACxB,OAAO,eAA+B;AACpC,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,uBAAuB;AACvC,cAAM,YAAY,IAAI,0DAA0B,mBAAmB,CAAC;AAEtE,aAAO,MAAM,QAAQ,kBAAkB,UAAU;AAAA,IACnD;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,yBAAqB;AAAA,IACzB,OAAO,kBAA0B;AAC/B,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,wBAAwB;AACxC,cAAM,YAAY,IAAI,0DAA0B,oBAAoB,CAAC;AAEvE,aAAO,MAAM,QAAQ,mBAAmB,aAAa;AAAA,IACvD;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAEA,QAAM,gCAA4B;AAAA,IAChC,OAAO,YAAoB;AACzB,UAAI,CAAC,UAAW,OAAM,YAAY,IAAI,wDAAwB,CAAC;AAC/D,UAAI,CAAC,WAAW,EAAE,+BAA+B;AAC/C,cAAM,YAAY,IAAI,0DAA0B,2BAA2B,CAAC;AAE9E,aAAO,MAAM,QAAQ,0BAA0B,OAAO;AAAA,IACxD;AAAA,IACA,CAAC,SAAS,aAAa,SAAS;AAAA,EAClC;AAIA,QAAM,0BAAsB,2BAAY,YAAY;AAClD,QAAI,CAAC,WAAW,EAAE,yBAAyB,SAAU,QAAO,CAAC;AAC7D,QAAI;AACF,aAAO,MAAM,QAAQ,oBAAoB;AAAA,IAC3C,QAAQ;AACN,aAAO,CAAC;AAAA,IACV;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,mBAAe,2BAAY,YAAY;AAC3C,QAAI,WAAW,QAAQ,YAAY,gBAAgB;AACjD,YAAM,eAAe,MAAM,cAAc,cAAc;AACvD,UAAI,CAAC,cAAc;AACjB,cAAM,YAAY,IAAI,yDAAyB,0BAA0B,CAAC;AAAA,MAC5E;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,gBAAgB,aAAa,CAAC;AAE3C,SACE;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACC,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,aAAa;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;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,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;AEhkBO,SAAS,YAAgC;AAC9C,SAAO,iBAAiB;AAC1B;","names":["import_react","import_react","value","adapter","wallets","wallet","readyState","network"]}
|
package/dist/index.mjs
CHANGED
|
@@ -77,8 +77,17 @@ var AleoWalletProvider = ({
|
|
|
77
77
|
onError,
|
|
78
78
|
localStorageKey = "walletName",
|
|
79
79
|
decryptPermission = DecryptPermission.NoDecrypt,
|
|
80
|
-
programs
|
|
80
|
+
programs,
|
|
81
|
+
recordAccess,
|
|
82
|
+
readAddress,
|
|
83
|
+
algorithmsAllowed
|
|
81
84
|
}) => {
|
|
85
|
+
const connectOptions = useMemo(() => {
|
|
86
|
+
if (recordAccess === void 0 && readAddress === void 0 && (algorithmsAllowed === void 0 || algorithmsAllowed.length === 0)) {
|
|
87
|
+
return void 0;
|
|
88
|
+
}
|
|
89
|
+
return { recordAccess, readAddress, algorithmsAllowed };
|
|
90
|
+
}, [recordAccess, readAddress, algorithmsAllowed]);
|
|
82
91
|
const [name, setName] = useLocalStorage(localStorageKey, null);
|
|
83
92
|
const [{ wallet, adapter, publicKey, connected, network }, setState] = useState2(initialState);
|
|
84
93
|
const readyState = adapter?.readyState || WalletReadyState.UNSUPPORTED;
|
|
@@ -200,7 +209,12 @@ var AleoWalletProvider = ({
|
|
|
200
209
|
connected: false
|
|
201
210
|
}));
|
|
202
211
|
try {
|
|
203
|
-
const account = await adapter.connect(
|
|
212
|
+
const account = await adapter.connect(
|
|
213
|
+
initialNetwork,
|
|
214
|
+
decryptPermission,
|
|
215
|
+
programs,
|
|
216
|
+
connectOptions
|
|
217
|
+
);
|
|
204
218
|
setState((state) => ({
|
|
205
219
|
...state,
|
|
206
220
|
publicKey: account.address,
|
|
@@ -215,7 +229,15 @@ var AleoWalletProvider = ({
|
|
|
215
229
|
setReconnecting(false);
|
|
216
230
|
isReconnecting.current = false;
|
|
217
231
|
}
|
|
218
|
-
}, [
|
|
232
|
+
}, [
|
|
233
|
+
adapter,
|
|
234
|
+
disconnect,
|
|
235
|
+
handleError,
|
|
236
|
+
initialNetwork,
|
|
237
|
+
decryptPermission,
|
|
238
|
+
programs,
|
|
239
|
+
connectOptions
|
|
240
|
+
]);
|
|
219
241
|
useEffect2(() => {
|
|
220
242
|
if (adapter) {
|
|
221
243
|
adapter.on("connect", handleConnect);
|
|
@@ -244,7 +266,12 @@ var AleoWalletProvider = ({
|
|
|
244
266
|
isConnecting.current = true;
|
|
245
267
|
setConnecting(true);
|
|
246
268
|
try {
|
|
247
|
-
const account = await adapter.connect(
|
|
269
|
+
const account = await adapter.connect(
|
|
270
|
+
initialNetwork,
|
|
271
|
+
decryptPermission,
|
|
272
|
+
programs,
|
|
273
|
+
connectOptions
|
|
274
|
+
);
|
|
248
275
|
lastAuthorizedAccount.current = account.address ?? null;
|
|
249
276
|
} catch (error) {
|
|
250
277
|
setName(null);
|
|
@@ -254,7 +281,18 @@ var AleoWalletProvider = ({
|
|
|
254
281
|
isConnecting.current = false;
|
|
255
282
|
}
|
|
256
283
|
})();
|
|
257
|
-
}, [
|
|
284
|
+
}, [
|
|
285
|
+
isConnecting,
|
|
286
|
+
connected,
|
|
287
|
+
autoConnect,
|
|
288
|
+
adapter,
|
|
289
|
+
readyState,
|
|
290
|
+
setName,
|
|
291
|
+
initialNetwork,
|
|
292
|
+
decryptPermission,
|
|
293
|
+
programs,
|
|
294
|
+
connectOptions
|
|
295
|
+
]);
|
|
258
296
|
useEffect2(() => {
|
|
259
297
|
if (adapter && connected && adapter.network !== initialNetwork) {
|
|
260
298
|
try {
|
|
@@ -269,7 +307,7 @@ var AleoWalletProvider = ({
|
|
|
269
307
|
if (adapter && connected) {
|
|
270
308
|
disconnect();
|
|
271
309
|
}
|
|
272
|
-
}, [decryptPermission, programs]);
|
|
310
|
+
}, [decryptPermission, programs, connectOptions]);
|
|
273
311
|
const connect = useCallback(async () => {
|
|
274
312
|
if (isConnecting.current || isDisconnecting.current || connected) return;
|
|
275
313
|
if (!adapter) throw handleError(new WalletNotSelectedError());
|
|
@@ -283,7 +321,12 @@ var AleoWalletProvider = ({
|
|
|
283
321
|
isConnecting.current = true;
|
|
284
322
|
setConnecting(true);
|
|
285
323
|
try {
|
|
286
|
-
const account = await adapter.connect(
|
|
324
|
+
const account = await adapter.connect(
|
|
325
|
+
initialNetwork,
|
|
326
|
+
decryptPermission,
|
|
327
|
+
programs,
|
|
328
|
+
connectOptions
|
|
329
|
+
);
|
|
287
330
|
lastAuthorizedAccount.current = account.address ?? null;
|
|
288
331
|
} catch (error) {
|
|
289
332
|
setName(null);
|
|
@@ -293,7 +336,19 @@ var AleoWalletProvider = ({
|
|
|
293
336
|
setConnecting(false);
|
|
294
337
|
isConnecting.current = false;
|
|
295
338
|
}
|
|
296
|
-
}, [
|
|
339
|
+
}, [
|
|
340
|
+
isConnecting,
|
|
341
|
+
isDisconnecting,
|
|
342
|
+
connected,
|
|
343
|
+
adapter,
|
|
344
|
+
readyState,
|
|
345
|
+
handleError,
|
|
346
|
+
setName,
|
|
347
|
+
initialNetwork,
|
|
348
|
+
decryptPermission,
|
|
349
|
+
programs,
|
|
350
|
+
connectOptions
|
|
351
|
+
]);
|
|
297
352
|
const executeTransaction = useCallback(
|
|
298
353
|
async (transaction) => {
|
|
299
354
|
if (!connected) throw handleError(new WalletNotConnectedError());
|
|
@@ -393,6 +448,14 @@ var AleoWalletProvider = ({
|
|
|
393
448
|
},
|
|
394
449
|
[adapter, handleError, connected]
|
|
395
450
|
);
|
|
451
|
+
const algorithmsSupported = useCallback(async () => {
|
|
452
|
+
if (!adapter || !("algorithmsSupported" in adapter)) return [];
|
|
453
|
+
try {
|
|
454
|
+
return await adapter.algorithmsSupported();
|
|
455
|
+
} catch {
|
|
456
|
+
return [];
|
|
457
|
+
}
|
|
458
|
+
}, [adapter]);
|
|
396
459
|
const checkNetwork = useCallback(async () => {
|
|
397
460
|
if (adapter && adapter.network !== initialNetwork) {
|
|
398
461
|
const switchResult = await switchNetwork(initialNetwork);
|
|
@@ -425,7 +488,8 @@ var AleoWalletProvider = ({
|
|
|
425
488
|
requestRecords,
|
|
426
489
|
executeDeployment,
|
|
427
490
|
transitionViewKeys,
|
|
428
|
-
requestTransactionHistory
|
|
491
|
+
requestTransactionHistory,
|
|
492
|
+
algorithmsSupported
|
|
429
493
|
},
|
|
430
494
|
children
|
|
431
495
|
}
|
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 RecordStatusFilter,\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: (\n program: string,\n includePlaintext?: boolean,\n statusFilter?: RecordStatusFilter,\n ) => 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 RecordStatusFilter,\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.TESTNET,\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\n adapter.emit('error', error as WalletError);\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 adapter.emit('error', error as WalletError);\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, statusFilter?: RecordStatusFilter) => {\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, statusFilter);\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;AA4InC,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;;;ACvJA,SAAS,aAAa,aAAAA,YAAW,SAAS,UAAAC,SAAQ,YAAAC,iBAAgB;AAClE;AAAA,EAEE;AAAA,OAIK;AACP,SAAS,eAAmC;;;ACR5C,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;;;AD1BA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA6bH;AAhbJ,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;AAEZ,gBAAQ,KAAK,SAAS,KAAoB;AAAA,MAC5C,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,cAAQ,KAAK,SAAS,KAAoB;AAC1C,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,kBAA4B,iBAAsC;AACxF,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,kBAAkB,YAAY;AAAA,IAC7E;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;;;AEteO,SAAS,YAAgC;AAC9C,SAAO,iBAAiB;AAC1B;","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 RecordStatusFilter,\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: (\n program: string,\n includePlaintext?: boolean,\n statusFilter?: RecordStatusFilter,\n ) => 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 * Return the algorithm names this wallet implements for `type: \"derived\"`\n * InputRequests. A dapp calls this before connect to pick which entries to\n * include in `algorithmsAllowed`. Wallets without derived-input support\n * return `[]`.\n */\n algorithmsSupported: () => Promise<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 AlgorithmGrant,\n WalletName,\n WalletReadyState,\n WalletAdapter,\n AleoDeployment,\n ConnectOptions,\n RecordAccessGrant,\n RecordStatusFilter,\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 * Opt-in record/field narrowing on top of `programs`. Forwarded to the\n * wallet's connect call. Only honored by wallets that support it (e.g. shield).\n */\n recordAccess?: RecordAccessGrant;\n /**\n * When `false`, the dapp transacts without learning the user's address.\n * Defaults to `true`. Only valid with `decryptPermission: NoDecrypt`.\n */\n readAddress?: boolean;\n /**\n * Strict opt-in allowlist for `type: \"derived\"` InputRequests. Each grant\n * authorizes exactly one (algorithm, program, function, inputPosition)\n * call site. Default undefined → every derived request is refused.\n */\n algorithmsAllowed?: AlgorithmGrant[];\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.TESTNET,\n onError,\n localStorageKey = 'walletName',\n decryptPermission = DecryptPermission.NoDecrypt,\n programs,\n recordAccess,\n readAddress,\n algorithmsAllowed,\n}) => {\n const connectOptions = useMemo<ConnectOptions | undefined>(() => {\n if (\n recordAccess === undefined &&\n readAddress === undefined &&\n (algorithmsAllowed === undefined || algorithmsAllowed.length === 0)\n ) {\n return undefined;\n }\n return { recordAccess, readAddress, algorithmsAllowed };\n }, [recordAccess, readAddress, algorithmsAllowed]);\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(\n initialNetwork,\n decryptPermission,\n programs,\n connectOptions,\n );\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 }, [\n adapter,\n disconnect,\n handleError,\n initialNetwork,\n decryptPermission,\n programs,\n connectOptions,\n ]);\n\n // Setup and teardown event listeners when the adapter changes\n useEffect(() => {\n if (adapter) {\n adapter.on('connect', handleConnect);\n adapter.on('disconnect', handleDisconnect);\n adapter.on('error', handleError);\n 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(\n initialNetwork,\n decryptPermission,\n programs,\n connectOptions,\n );\n lastAuthorizedAccount.current = account.address ?? null;\n } catch (error: unknown) {\n // Clear the selected wallet\n setName(null);\n\n adapter.emit('error', error as WalletError);\n } finally {\n setConnecting(false);\n isConnecting.current = false;\n }\n })();\n }, [\n isConnecting,\n connected,\n autoConnect,\n adapter,\n readyState,\n setName,\n initialNetwork,\n decryptPermission,\n programs,\n connectOptions,\n ]);\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, connectOptions]);\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(\n initialNetwork,\n decryptPermission,\n programs,\n connectOptions,\n );\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 adapter.emit('error', error as WalletError);\n throw error;\n } finally {\n setConnecting(false);\n isConnecting.current = false;\n }\n }, [\n isConnecting,\n isDisconnecting,\n connected,\n adapter,\n readyState,\n handleError,\n setName,\n initialNetwork,\n decryptPermission,\n programs,\n connectOptions,\n ]);\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, statusFilter?: RecordStatusFilter) => {\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, statusFilter);\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 // Doesn't require a connection — dapps may call this before connect to discover\n // which algorithms a wallet supports and to populate `algorithmsAllowed`.\n const algorithmsSupported = useCallback(async () => {\n if (!adapter || !('algorithmsSupported' in adapter)) return [];\n try {\n return await adapter.algorithmsSupported();\n } catch {\n return [];\n }\n }, [adapter]);\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 algorithmsSupported,\n }}\n >\n {children}\n </WalletContext.Provider>\n );\n};\n","import type { Dispatch, SetStateAction } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nexport function useLocalStorage<T>(key: string, defaultState: T): [T, Dispatch<SetStateAction<T>>] {\n const state = useState<T>(() => {\n try {\n const value = localStorage.getItem(key);\n if (value) return JSON.parse(value) as T;\n } catch (error: unknown) {\n if (typeof window !== 'undefined') {\n console.error(error);\n }\n }\n\n return defaultState;\n });\n const value = state[0];\n\n const isFirstRender = useRef(true);\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n try {\n if (value === null) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, JSON.stringify(value));\n }\n } catch (error: unknown) {\n if (typeof window !== 'undefined') {\n console.error(error);\n }\n }\n }, [value, key]);\n\n return state;\n}\n","import { useWalletContext } from './context';\nimport type { WalletContextState } from './context';\n\n/**\n * Custom hook to use the wallet\n * @returns The wallet context state\n */\nexport function useWallet(): WalletContextState {\n return useWalletContext();\n}\n"],"mappings":"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","names":["useEffect","useRef","useState","value","useState","useRef","adapter","useEffect","wallets","wallet","readyState","network"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@provablehq/aleo-wallet-adaptor-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
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-
|
|
15
|
-
"@provablehq/aleo-
|
|
16
|
-
"@provablehq/aleo-wallet-
|
|
14
|
+
"@provablehq/aleo-wallet-adaptor-core": "1.0.0",
|
|
15
|
+
"@provablehq/aleo-types": "1.0.0",
|
|
16
|
+
"@provablehq/aleo-wallet-standard": "1.0.0"
|
|
17
17
|
},
|
|
18
18
|
"repository": {
|
|
19
19
|
"type": "git",
|