{"version":3,"file":"index.cjs","names":["#readProvider","BrowserProvider","BaseSigner","#browserProvider","#directSigner","#eip1193","#unsubscribeProvider","BrowserProvider","eip1193Subscribe","#loadBrowserWalletAccount","swallow","WalletAccountNotReadyError","WalletNotConnectedError","#refreshFromEthereum","#refreshFromSigner","#resolveSigner","SignerNotConfiguredError","#walletAccountFromSigner","Contract","#accountPromise","buildZamaConfig","confidentialBalanceOfContract","underlyingContract","supportsInterfaceContract","confidentialTransferContract","unwrapContract","unwrapFromBalanceContract","finalizeUnwrapContract","setOperatorContract","wrapContract","getTokenPairsContract","getTokenPairsLengthContract","getTokenPairsSliceContract","getTokenPairContract","getConfidentialTokenAddressContract","getTokenAddressContract","isConfidentialTokenValidContract"],"sources":["../../../src/ethers/ethers-provider.ts","../../../src/ethers/ethers-signer.ts","../../../src/ethers/config.ts","../../../src/ethers/contracts.ts"],"sourcesContent":["import { ethers, BrowserProvider } from \"ethers\";\nimport type {\n  Abi,\n  ContractFunctionArgs,\n  ContractFunctionName,\n  ContractFunctionReturnType,\n  EIP1193Provider,\n  Hex,\n} from \"viem\";\nimport type { GenericProvider, ReadContractConfig, TransactionReceipt } from \"../types\";\n\n/**\n * Configuration for {@link EthersProvider}.\n *\n * Two variants:\n *\n * - **EIP-1193** — `{ ethereum }`: pass the raw EIP-1193 provider (e.g. `window.ethereum`).\n *   A `BrowserProvider` is created internally.\n *\n * - **Pre-built** — `{ provider }`: pass any ethers `Provider`\n *   (e.g. `JsonRpcProvider`, `WebSocketProvider`).\n */\nexport type EthersProviderConfig = { ethereum: EIP1193Provider } | { provider: ethers.Provider };\n\n/**\n * Read-only {@link GenericProvider} backed by ethers v6.\n *\n * Use this for integrations that only need public chain reads before the user has connected their\n * wallet.\n *\n * @example\n * ```ts\n * // Dedicated RPC\n * const provider = new EthersProvider({\n *   provider: new ethers.JsonRpcProvider(ALCHEMY_URL),\n * });\n *\n * // Wallet-sourced RPC (shares transport with EthersSigner)\n * const provider = new EthersProvider({ ethereum: window.ethereum });\n * ```\n */\nexport class EthersProvider implements GenericProvider {\n  readonly #readProvider: ethers.Provider;\n\n  constructor(config: EthersProviderConfig) {\n    if (\"ethereum\" in config) {\n      this.#readProvider = new BrowserProvider(config.ethereum);\n    } else {\n      this.#readProvider = config.provider;\n    }\n  }\n\n  async getChainId(): Promise<number> {\n    const network = await this.#readProvider.getNetwork();\n    return Number(network.chainId);\n  }\n\n  async readContract<\n    const TAbi extends Abi | readonly unknown[],\n    TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\">,\n    const TArgs extends ContractFunctionArgs<TAbi, \"pure\" | \"view\", TFunctionName>,\n  >(\n    config: ReadContractConfig<TAbi, TFunctionName, TArgs>,\n  ): Promise<ContractFunctionReturnType<TAbi, \"pure\" | \"view\", TFunctionName, TArgs>> {\n    const contract = new ethers.Contract(\n      config.address,\n      config.abi as ethers.InterfaceAbi,\n      this.#readProvider,\n    );\n    const fn = contract.getFunction(config.functionName);\n    return fn(...(config.args as readonly unknown[])) as Promise<\n      ContractFunctionReturnType<TAbi, \"pure\" | \"view\", TFunctionName, TArgs>\n    >;\n  }\n\n  async getBlockTimestamp(): Promise<bigint> {\n    const block = await this.#readProvider.getBlock(\"latest\");\n    if (!block) {\n      throw new Error(\"Failed to fetch latest block\");\n    }\n    if (block.timestamp === null) {\n      throw new Error(\"Latest block has no timestamp\");\n    }\n    return BigInt(block.timestamp);\n  }\n\n  async waitForTransactionReceipt(hash: Hex): Promise<TransactionReceipt> {\n    const receipt = await this.#readProvider.waitForTransaction(hash);\n    if (!receipt) {\n      throw new Error(\"Transaction receipt not found\");\n    }\n    return {\n      logs: receipt.logs.map((log) => ({\n        topics: log.topics.filter((t): t is Hex => t !== null),\n        data: log.data as Hex,\n      })),\n    };\n  }\n}\n","import { BrowserProvider, Contract, type InterfaceAbi, type Signer } from \"ethers\";\nimport {\n  getAddress,\n  isHex,\n  type Abi,\n  type ContractFunctionArgs,\n  type ContractFunctionName,\n  type EIP1193Provider,\n  type Hex,\n} from \"viem\";\nimport {\n  SignerNotConfiguredError,\n  WalletAccountNotReadyError,\n  WalletNotConnectedError,\n} from \"../errors\";\nimport type { EIP712TypedData } from \"../relayer/relayer-sdk.types\";\nimport { BaseSigner } from \"../signer/base-signer\";\nimport { eip1193Subscribe } from \"../signer/eip1193-subscribe\";\nimport type { WalletAccount, WriteContractConfig } from \"../types\";\nimport { swallow } from \"../utils\";\n\n/**\n * Configuration for {@link EthersSigner}.\n *\n * Two variants:\n *\n * - **Browser** — `{ ethereum }`: pass the raw EIP-1193 provider (e.g. `window.ethereum`).\n *   A `BrowserProvider` is created internally and wallet events update `walletAccount`.\n *\n * - **Node / direct signer** — `{ signer }`: pass an ethers `Signer` (e.g. `Wallet`).\n *   The initial wallet account is discovered asynchronously and emitted through\n *   `walletAccount` once available.\n *\n * For public chain reads, construct a separate {@link EthersProvider}.\n */\nexport type EthersSignerConfig = { ethereum: EIP1193Provider } | { signer: Signer };\n\n/**\n * GenericSigner backed by ethers.\n *\n * Accepts either a raw EIP-1193 provider (`{ ethereum }`) which creates a\n * `BrowserProvider` internally, or a `Signer` directly (`{ signer }`)\n * for Node.js scripts.\n *\n * @param config - {@link EthersSignerConfig}\n */\nexport class EthersSigner extends BaseSigner {\n  readonly #browserProvider?: BrowserProvider;\n  readonly #directSigner?: Signer;\n  readonly #eip1193?: EIP1193Provider;\n  readonly #unsubscribeProvider: () => void;\n  #accountPromise: Promise<WalletAccount | undefined> | undefined;\n\n  constructor(config: EthersSignerConfig) {\n    super();\n    if (\"ethereum\" in config) {\n      this.#browserProvider = new BrowserProvider(config.ethereum);\n      this.#eip1193 = config.ethereum;\n      this.#unsubscribeProvider = eip1193Subscribe({\n        provider: config.ethereum,\n        getInitialWalletAccount: () => this.#loadBrowserWalletAccount(),\n        onWalletAccountChange: ({ next }) => {\n          this.walletAccount.setSnapshot(next);\n        },\n      });\n    } else {\n      this.#directSigner = config.signer;\n      this.#unsubscribeProvider = () => {};\n      // The signer is constructed before `createConfig`, so it cannot reach the\n      // SDK-wide logger; this best-effort refresh stays silent. A failed refresh\n      // still surfaces via the typed WalletAccountNotReadyError on next use.\n      void swallow(\"refresh wallet account\", async () => {\n        await this.refreshWalletAccount();\n      });\n    }\n  }\n\n  override requireWalletAccount(operation: string): WalletAccount {\n    const account = this.walletAccount.getSnapshot();\n    if (!account && !this.walletAccount.isReady()) {\n      throw new WalletAccountNotReadyError(operation);\n    }\n    if (!account) {\n      throw new WalletNotConnectedError(operation);\n    }\n    return account;\n  }\n\n  refreshWalletAccount(): Promise<WalletAccount | undefined> {\n    if (this.#eip1193) {\n      return this.#refreshFromEthereum();\n    }\n    if (this.#directSigner) {\n      return this.#refreshFromSigner(this.#directSigner);\n    }\n    return Promise.resolve(undefined);\n  }\n\n  protected override onDispose(): void {\n    this.#unsubscribeProvider();\n  }\n\n  async #resolveSigner(): Promise<Signer> {\n    if (this.#directSigner) {\n      return this.#directSigner;\n    }\n    if (!this.#browserProvider) {\n      throw new SignerNotConfiguredError(\"resolveSigner\");\n    }\n    return this.#browserProvider.getSigner();\n  }\n\n  async #walletAccountFromSigner(signer: Signer): Promise<WalletAccount | undefined> {\n    const provider = signer.provider;\n    if (!provider) {\n      return undefined;\n    }\n    const [address, network] = await Promise.all([signer.getAddress(), provider.getNetwork()]);\n    return { address: getAddress(address), chainId: Number(network.chainId) };\n  }\n\n  async signTypedData(typedData: EIP712TypedData): Promise<Hex> {\n    const signer = await this.#resolveSigner();\n    const { domain, types, message } = typedData;\n    const { EIP712Domain: _, ...sigTypes } = types;\n    const mutableSigTypes = Object.fromEntries(\n      Object.entries(sigTypes).map(([key, fields]) => [key, [...fields]]),\n    );\n    const sig = await signer.signTypedData(domain, mutableSigTypes, message);\n    if (!isHex(sig)) {\n      throw new TypeError(`Expected hex string, got: ${sig}`);\n    }\n    return sig;\n  }\n\n  async writeContract<\n    const TAbi extends Abi | readonly unknown[],\n    TFunctionName extends ContractFunctionName<TAbi, \"nonpayable\" | \"payable\">,\n    const TArgs extends ContractFunctionArgs<TAbi, \"nonpayable\" | \"payable\", TFunctionName>,\n  >(config: WriteContractConfig<TAbi, TFunctionName, TArgs>): Promise<Hex> {\n    const signer = await this.#resolveSigner();\n    const contract = new Contract(config.address, config.abi as InterfaceAbi, signer);\n    const overrides: { gasLimit?: bigint; value?: bigint } = {};\n    if (config.value !== undefined) {\n      overrides.value = config.value;\n    }\n    if (config.gas !== undefined) {\n      overrides.gasLimit = config.gas;\n    }\n    const fn = contract.getFunction(config.functionName);\n    const tx = await fn(...(config.args as readonly unknown[]), overrides);\n    if (!isHex(tx.hash)) {\n      throw new TypeError(`Expected hex string, got: ${tx.hash}`);\n    }\n    return tx.hash;\n  }\n\n  async #refreshFromSigner(signer: Signer): Promise<WalletAccount | undefined> {\n    this.#accountPromise ??= this.#walletAccountFromSigner(signer)\n      .then((account) => {\n        this.walletAccount.setSnapshot(account);\n        return account;\n      })\n      .finally(() => {\n        this.#accountPromise = undefined;\n      });\n    return this.#accountPromise;\n  }\n\n  async #refreshFromEthereum(): Promise<WalletAccount | undefined> {\n    const account = await this.#loadBrowserWalletAccount();\n    this.walletAccount.setSnapshot(account);\n    return account;\n  }\n\n  async #loadBrowserWalletAccount(): Promise<WalletAccount | undefined> {\n    const ethereum = this.#eip1193;\n    if (!ethereum) {\n      return undefined;\n    }\n    const [accounts, chainIdValue] = await Promise.all([\n      ethereum.request({ method: \"eth_accounts\" }),\n      ethereum.request({ method: \"eth_chainId\" }),\n    ]);\n    if (!Array.isArray(accounts) || typeof accounts[0] !== \"string\") {\n      return undefined;\n    }\n    const chainId = Number(chainIdValue);\n    if (!Number.isSafeInteger(chainId) || chainId <= 0) {\n      return undefined;\n    }\n    return { address: getAddress(accounts[0]), chainId };\n  }\n}\n","import type { FheChain } from \"../chains\";\nimport { buildZamaConfig } from \"../config/build\";\nimport type { ZamaConfig } from \"../config/types\";\nimport { EthersProvider } from \"./ethers-provider\";\nimport { EthersSigner } from \"./ethers-signer\";\nimport type { ZamaConfigEthers } from \"./types\";\n\n/** Create a {@link ZamaConfig} from ethers types. */\nexport function createConfig<const TChains extends readonly [FheChain, ...FheChain[]]>(\n  params: ZamaConfigEthers<TChains>,\n): ZamaConfig {\n  if (\"signer\" in params && params.signer) {\n    const signer = new EthersSigner({ signer: params.signer });\n    if (!params.signer.provider) {\n      throw new Error(\"createConfig requires a Signer with an attached provider for chain reads\");\n    }\n    const provider = new EthersProvider({ provider: params.signer.provider });\n    return buildZamaConfig(signer, provider, params);\n  }\n\n  const signer = new EthersSigner({ ethereum: params.ethereum });\n  const provider =\n    \"provider\" in params && params.provider\n      ? new EthersProvider({ provider: params.provider })\n      : new EthersProvider({ ethereum: params.ethereum });\n  return buildZamaConfig(signer, provider, params);\n}\n","import {\n  decodeFunctionResult,\n  encodeFunctionData,\n  isHex,\n  type Abi,\n  type Address,\n  type Hex,\n} from \"viem\";\n\nimport type { EncryptedValue } from \"../relayer/relayer-sdk.types\";\n\nimport {\n  confidentialBalanceOfContract,\n  confidentialTransferContract,\n  finalizeUnwrapContract,\n  setOperatorContract,\n  supportsInterfaceContract,\n  underlyingContract,\n  unwrapContract,\n  unwrapFromBalanceContract,\n  wrapContract,\n  getTokenPairsContract,\n  getTokenPairsLengthContract,\n  getTokenPairsSliceContract,\n  getTokenPairContract,\n  getConfidentialTokenAddressContract,\n  getTokenAddressContract,\n  isConfidentialTokenValidContract,\n} from \"../contracts\";\n\ninterface TransactionRequestConfig {\n  address: Address;\n  abi: readonly unknown[];\n  functionName: string;\n  args: readonly unknown[];\n  gas?: bigint;\n  value?: bigint;\n}\n\ninterface EthersTransactionRequest {\n  to: Address;\n  data: Hex;\n  gasLimit?: bigint;\n  value?: bigint;\n}\n\ninterface EthersTransactionResponse {\n  hash: string;\n}\n\ninterface EthersCallProvider {\n  call(tx: EthersTransactionRequest): Promise<string>;\n}\n\ninterface EthersTransactionSigner extends EthersCallProvider {\n  sendTransaction(tx: EthersTransactionRequest): Promise<EthersTransactionResponse>;\n}\n\nfunction toTransactionRequest(config: TransactionRequestConfig): EthersTransactionRequest {\n  return {\n    to: config.address,\n    data: encodeFunctionData({\n      abi: config.abi as Abi,\n      functionName: config.functionName as never,\n      args: config.args as never,\n    }),\n    ...(config.gas !== undefined ? { gasLimit: config.gas } : {}),\n    ...(config.value !== undefined ? { value: config.value } : {}),\n  };\n}\n\nasync function ethersRead<T>(\n  provider: EthersCallProvider,\n  config: TransactionRequestConfig,\n): Promise<T> {\n  const data = await provider.call(toTransactionRequest(config));\n  if (!isHex(data)) {\n    throw new TypeError(`Expected hex string, got: ${data}`);\n  }\n  return decodeFunctionResult({\n    abi: config.abi as Abi,\n    functionName: config.functionName as never,\n    data,\n  }) as T;\n}\n\nasync function ethersWrite(\n  signer: EthersTransactionSigner,\n  config: TransactionRequestConfig,\n): Promise<Hex> {\n  const tx = await signer.sendTransaction(toTransactionRequest(config));\n  if (!isHex(tx.hash)) {\n    throw new TypeError(`Expected hex string, got: ${tx.hash}`);\n  }\n  return tx.hash;\n}\n\n// ── Read helpers ────────────────────────────────────────────\n\nexport function readConfidentialBalanceOfContract(\n  provider: EthersCallProvider,\n  tokenAddress: Address,\n  userAddress: Address,\n) {\n  return ethersRead(provider, confidentialBalanceOfContract(tokenAddress, userAddress));\n}\n\nexport function readUnderlyingTokenContract(provider: EthersCallProvider, wrapperAddress: Address) {\n  return ethersRead(provider, underlyingContract(wrapperAddress));\n}\n\nexport function readSupportsInterfaceContract(\n  provider: EthersCallProvider,\n  tokenAddress: Address,\n  interfaceId: Address,\n) {\n  return ethersRead(provider, supportsInterfaceContract(tokenAddress, interfaceId));\n}\n\n// ── Write helpers ───────────────────────────────────────────\n\nexport function writeConfidentialTransferContract(\n  signer: EthersTransactionSigner,\n  tokenAddress: Address,\n  to: Address,\n  encryptedAmount: EncryptedValue,\n  inputProof: Hex,\n) {\n  return ethersWrite(\n    signer,\n    confidentialTransferContract(tokenAddress, to, encryptedAmount, inputProof),\n  );\n}\n\nexport function writeUnwrapContract(\n  signer: EthersTransactionSigner,\n  encryptedErc20: Address,\n  from: Address,\n  to: Address,\n  encryptedAmount: EncryptedValue,\n  inputProof: Hex,\n) {\n  return ethersWrite(signer, unwrapContract(encryptedErc20, from, to, encryptedAmount, inputProof));\n}\n\nexport function writeUnwrapFromBalanceContract(\n  signer: EthersTransactionSigner,\n  encryptedErc20: Address,\n  from: Address,\n  to: Address,\n  encryptedBalance: EncryptedValue,\n) {\n  return ethersWrite(signer, unwrapFromBalanceContract(encryptedErc20, from, to, encryptedBalance));\n}\n\nexport function writeFinalizeUnwrapContract(\n  signer: EthersTransactionSigner,\n  wrapper: Address,\n  unwrapRequestId: EncryptedValue,\n  unwrapAmountCleartext: bigint,\n  decryptionProof: Hex,\n) {\n  return ethersWrite(\n    signer,\n    finalizeUnwrapContract(wrapper, unwrapRequestId, unwrapAmountCleartext, decryptionProof),\n  );\n}\n\nexport function writeSetOperatorContract(\n  signer: EthersTransactionSigner,\n  tokenAddress: Address,\n  operator: Address,\n  until?: number,\n) {\n  return ethersWrite(signer, setOperatorContract(tokenAddress, operator, until));\n}\n\nexport function writeWrapContract(\n  signer: EthersTransactionSigner,\n  wrapperAddress: Address,\n  to: Address,\n  amount: bigint,\n) {\n  return ethersWrite(signer, wrapContract(wrapperAddress, to, amount));\n}\n\n// ── Registry read helpers ──────────────────────────────────\n\nexport function readTokenPairsContract(provider: EthersCallProvider, registry: Address) {\n  return ethersRead(provider, getTokenPairsContract(registry));\n}\n\nexport function readTokenPairsLengthContract(provider: EthersCallProvider, registry: Address) {\n  return ethersRead(provider, getTokenPairsLengthContract(registry));\n}\n\nexport function readTokenPairsSliceContract(\n  provider: EthersCallProvider,\n  registry: Address,\n  fromIndex: bigint,\n  toIndex: bigint,\n) {\n  return ethersRead(provider, getTokenPairsSliceContract(registry, fromIndex, toIndex));\n}\n\nexport function readTokenPairContract(\n  provider: EthersCallProvider,\n  registry: Address,\n  index: bigint,\n) {\n  return ethersRead(provider, getTokenPairContract(registry, index));\n}\n\nexport function readConfidentialTokenAddressContract(\n  provider: EthersCallProvider,\n  registry: Address,\n  tokenAddress: Address,\n) {\n  return ethersRead(provider, getConfidentialTokenAddressContract(registry, tokenAddress));\n}\n\nexport function readTokenAddressContract(\n  provider: EthersCallProvider,\n  registry: Address,\n  confidentialTokenAddress: Address,\n) {\n  return ethersRead(provider, getTokenAddressContract(registry, confidentialTokenAddress));\n}\n\nexport function readIsConfidentialTokenValidContract(\n  provider: EthersCallProvider,\n  registry: Address,\n  confidentialTokenAddress: Address,\n) {\n  return ethersRead(provider, isConfidentialTokenValidContract(registry, confidentialTokenAddress));\n}\n"],"mappings":"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"}