{"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"]}