@zama-fhe/sdk 3.7.0 → 3.7.2

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.
Files changed (53) hide show
  1. package/dist/cjs/base-signer.cjs +1 -1
  2. package/dist/cjs/base-signer.cjs.map +1 -1
  3. package/dist/cjs/chains/index.cjs +1 -1
  4. package/dist/cjs/chains.cjs +1 -1
  5. package/dist/cjs/chains.cjs.map +1 -1
  6. package/dist/cjs/index.cjs +1 -1
  7. package/dist/cjs/node/index.cjs +1 -1
  8. package/dist/cjs/query/index.cjs +1 -1
  9. package/dist/cjs/query/index.cjs.map +1 -1
  10. package/dist/cjs/telemetry.cjs +1 -1
  11. package/dist/esm/{base-signer-46j6PRq-.d.ts → base-signer-BxIDBDTF.d.ts} +2 -2
  12. package/dist/esm/base-signer-ClrhHzbm.js +2 -0
  13. package/dist/esm/{base-signer-b1ff2VPI.js.map → base-signer-ClrhHzbm.js.map} +1 -1
  14. package/dist/esm/chains/index.d.ts +2 -2
  15. package/dist/esm/chains/index.js +1 -1
  16. package/dist/esm/{chains-iPpnjXql.js → chains-BwlDI944.js} +2 -2
  17. package/dist/esm/chains-BwlDI944.js.map +1 -0
  18. package/dist/esm/cleartext/index.d.ts +2 -2
  19. package/dist/esm/cleartext/index.js +1 -1
  20. package/dist/esm/{cleartext-DInZ0vz-.d.ts → cleartext-BnTAN4-g.d.ts} +2 -2
  21. package/dist/esm/{cleartext-CiE1gO7Y.js → cleartext-Ck0gNKy1.js} +2 -2
  22. package/dist/esm/{cleartext-CiE1gO7Y.js.map → cleartext-Ck0gNKy1.js.map} +1 -1
  23. package/dist/esm/ethers/index.d.ts +4 -4
  24. package/dist/esm/ethers/index.js +1 -1
  25. package/dist/esm/{fhevm-relayer-DXLb4mIw.js → fhevm-relayer-DnAUqf3b.js} +2 -2
  26. package/dist/esm/{fhevm-relayer-DXLb4mIw.js.map → fhevm-relayer-DnAUqf3b.js.map} +1 -1
  27. package/dist/esm/{index-BKMce5ya.d.ts → index-BlY7CCPB.d.ts} +7 -7
  28. package/dist/esm/{index-CpQK8U4F.d.ts → index-CD2sMpst.d.ts} +2 -2
  29. package/dist/esm/{index-Cdbp_93f.d.ts → index-D1Wtji3m.d.ts} +4 -26
  30. package/dist/esm/{index-C1clixw5.d.ts → index-fsWBYM8S.d.ts} +4 -4
  31. package/dist/esm/index.d.ts +9 -9
  32. package/dist/esm/index.js +1 -1
  33. package/dist/esm/index.js.map +1 -1
  34. package/dist/esm/node/index.d.ts +5 -5
  35. package/dist/esm/node/index.js +1 -1
  36. package/dist/esm/node/index.js.map +1 -1
  37. package/dist/esm/query/index.d.ts +6 -6
  38. package/dist/esm/query/index.js +1 -1
  39. package/dist/esm/query/index.js.map +1 -1
  40. package/dist/esm/{telemetry-Dll0Swdj.js → telemetry-IaHYnoo4.js} +2 -2
  41. package/dist/esm/{telemetry-Dll0Swdj.js.map → telemetry-IaHYnoo4.js.map} +1 -1
  42. package/dist/esm/{types-Bz42Emet.d.ts → types-C2ccCjoA.d.ts} +3 -3
  43. package/dist/esm/{types-BIgPY1yI.d.ts → types-CHepK8MK.d.ts} +2 -2
  44. package/dist/esm/{types-I9lJwH20.d.ts → types-Dc1fpXWt.d.ts} +3 -3
  45. package/dist/esm/vaults/index.d.ts +2 -2
  46. package/dist/esm/vaults/index.js +1 -1
  47. package/dist/esm/viem/index.d.ts +4 -4
  48. package/dist/esm/viem/index.js +1 -1
  49. package/dist/esm/web/index.d.ts +1 -1
  50. package/dist/esm/web/index.js +1 -1
  51. package/package.json +1 -1
  52. package/dist/esm/base-signer-b1ff2VPI.js +0 -2
  53. package/dist/esm/chains-iPpnjXql.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["zamaQueryKeys","filterQueryOptions","nameContract","symbolContract","decimalsContract","zamaQueryKeys","filterQueryOptions","isConfidentialTokenContract","isContractCallError","isConfidentialWrapperContract","zamaQueryKeys","filterQueryOptions","inferredTotalSupplyContract","zamaQueryKeys","filterQueryOptions","zamaQueryKeys","filterQueryOptions","underlyingContract","allowanceContract","zamaQueryKeys","filterQueryOptions","zamaQueryKeys","filterQueryOptions","isOperatorContract","filterQueryOptions","zamaQueryKeys","filterQueryOptions","zamaQueryKeys","Token","zamaQueryKeys","zeroAddress","filterQueryOptions","getTokenPairsContract","getConfidentialTokenAddressContract","getTokenAddressContract","getTokenPairsLengthContract","getTokenPairsSliceContract","getTokenPairContract","isConfidentialTokenValidContract","zamaQueryKeys","filterQueryOptions","zamaQueryKeys","zamaQueryKeys","Token","filterQueryOptions","zamaQueryKeys"],"sources":["../../../src/query/token-metadata.ts","../../../src/query/is-confidential.ts","../../../src/query/total-supply.ts","../../../src/query/wrapper-discovery.ts","../../../src/query/underlying-allowance.ts","../../../src/query/pending-unshield.ts","../../../src/query/confidential-is-operator.ts","../../../src/query/confidential-balance.ts","../../../src/query/confidential-balances.ts","../../../src/query/wrappers-registry.ts","../../../src/query/shield.ts","../../../src/query/transfer.ts","../../../src/query/transfer-and-call.ts","../../../src/query/transfer-from.ts","../../../src/query/transfer-from-and-call.ts","../../../src/query/set-operator.ts","../../../src/query/approve-underlying.ts","../../../src/query/unshield.ts","../../../src/query/unshield-all.ts","../../../src/query/resume-unshield.ts","../../../src/query/unwrap.ts","../../../src/query/wrap.ts","../../../src/query/unwrap-all.ts","../../../src/query/finalize-unwrap.ts","../../../src/query/encrypt.ts","../../../src/query/delegated-decrypt.ts","../../../src/query/public-decrypt.ts","../../../src/query/grant-permit.ts","../../../src/query/prepare-permit.ts","../../../src/query/batch-prepare-permits.ts","../../../src/query/register-permit.ts","../../../src/query/batch-register-permits.ts","../../../src/query/has-permit.ts","../../../src/query/revoke-permits.ts","../../../src/query/clear-credentials.ts","../../../src/query/delegate-decryption.ts","../../../src/query/user-decrypt.ts","../../../src/query/decrypt-balance-as.ts","../../../src/query/batch-decrypt-balances-as.ts","../../../src/query/revoke-delegation.ts","../../../src/query/delegation-status.ts"],"sourcesContent":["import { decimalsContract, nameContract, symbolContract } from \"../contracts\";\n\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\nimport type { Address } from \"viem\";\n\n/** ERC-20 token metadata returned by {@link tokenMetadataQueryOptions}. */\nexport interface TokenMetadata {\n /** Human-readable token name. */\n name: string;\n /** Token ticker symbol. */\n symbol: string;\n /** Number of decimals the token uses. */\n decimals: number;\n}\n\n/** Configuration for {@link tokenMetadataQueryOptions}. */\nexport interface TokenMetadataQueryConfig {\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading an ERC-20 token's name, symbol, and decimals. */\nexport function tokenMetadataQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address,\n config?: TokenMetadataQueryConfig,\n): QueryFactoryOptions<\n TokenMetadata,\n Error,\n TokenMetadata,\n ReturnType<typeof zamaQueryKeys.tokenMetadata.token>\n> {\n const queryKey = zamaQueryKeys.tokenMetadata.token(tokenAddress);\n\n return {\n ...filterQueryOptions(config?.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n const [name, symbol, decimals] = await Promise.all([\n sdk.provider.readContract(nameContract(keyTokenAddress)),\n sdk.provider.readContract(symbolContract(keyTokenAddress)),\n sdk.provider.readContract(decimalsContract(keyTokenAddress)),\n ]);\n return { name, symbol, decimals };\n },\n staleTime: Infinity,\n enabled: config?.query?.enabled !== false,\n };\n}\n","import { isConfidentialTokenContract, isConfidentialWrapperContract } from \"../contracts\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport { isContractCallError } from \"../utils\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\nimport type { Address } from \"viem\";\n\n/** Configuration for {@link isConfidentialQueryOptions} and {@link isWrapperQueryOptions}. */\nexport interface IsConfidentialQueryConfig {\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading whether a token address implements the confidential (ERC-7984) token interface. */\nexport function isConfidentialQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address,\n config?: IsConfidentialQueryConfig,\n): QueryFactoryOptions<\n boolean,\n Error,\n boolean,\n ReturnType<typeof zamaQueryKeys.isConfidential.token>\n> {\n const queryKey = zamaQueryKeys.isConfidential.token(tokenAddress);\n return {\n ...filterQueryOptions(config?.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n try {\n return await sdk.provider.readContract(isConfidentialTokenContract(keyTokenAddress));\n } catch (err) {\n // Only suppress contract execution reverts (non-ERC-165 contracts).\n // Re-throw network/transport errors so TanStack Query's retry logic applies.\n if (isContractCallError(err)) {\n return false;\n }\n throw err;\n }\n },\n staleTime: Infinity,\n enabled: config?.query?.enabled !== false,\n };\n}\n\n/** Builds TanStack Query options for reading whether a token address is a confidential wrapper (ERC-7984 wrapper) contract. */\nexport function isWrapperQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address,\n config?: IsConfidentialQueryConfig,\n): QueryFactoryOptions<boolean, Error, boolean, ReturnType<typeof zamaQueryKeys.isWrapper.token>> {\n const queryKey = zamaQueryKeys.isWrapper.token(tokenAddress);\n return {\n ...filterQueryOptions(config?.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n try {\n return await sdk.provider.readContract(isConfidentialWrapperContract(keyTokenAddress));\n } catch (err) {\n // Only suppress contract execution reverts (non-ERC-165 contracts).\n // Re-throw network/transport errors so TanStack Query's retry logic applies.\n if (isContractCallError(err)) {\n return false;\n }\n throw err;\n }\n },\n staleTime: Infinity,\n enabled: config?.query?.enabled !== false,\n };\n}\n","import { inferredTotalSupplyContract } from \"../contracts\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\nimport type { Address } from \"viem\";\n\n/** Configuration for {@link totalSupplyQueryOptions}. */\nexport interface TotalSupplyQueryConfig {\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading a token's total supply. */\nexport function totalSupplyQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address,\n config?: TotalSupplyQueryConfig,\n): QueryFactoryOptions<bigint, Error, bigint, ReturnType<typeof zamaQueryKeys.totalSupply.token>> {\n const queryKey = zamaQueryKeys.totalSupply.token(tokenAddress);\n\n return {\n ...filterQueryOptions(config?.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n return sdk.provider.readContract(inferredTotalSupplyContract(keyTokenAddress));\n },\n staleTime: 30_000,\n enabled: config?.query?.enabled !== false,\n };\n}\n","import type { Address } from \"viem\";\nimport type { WrappersRegistry } from \"../wrappers-registry\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport { filterQueryOptions } from \"./utils\";\n\n/** Configuration for {@link wrapperDiscoveryQueryOptions}. */\nexport interface WrapperDiscoveryQueryConfig {\n /**\n * Address of any confidential token you control.\n * Used to scope the query cache key and to gate whether the query\n * is enabled — it does not affect which wrapper the registry returns.\n */\n tokenAddress?: Address;\n /**\n * The ERC-20 token address to discover the confidential wrapper for.\n * The registry is resolved automatically from chain config.\n */\n erc20Address?: Address;\n /**\n * The resolved registry contract address for the current chain.\n * Included in the query key so that switching chains invalidates\n * stale cached results. Pass `undefined` when the chain ID is not\n * yet known — the query will be disabled.\n */\n registryAddress?: Address;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for discovering the confidential wrapper address for a given ERC-20 token (resolves to `null` when none is registered). */\nexport function wrapperDiscoveryQueryOptions(\n registry: WrappersRegistry,\n config: WrapperDiscoveryQueryConfig,\n): QueryFactoryOptions<\n Address | null,\n Error,\n Address | null,\n ReturnType<typeof zamaQueryKeys.wrapperDiscovery.token>\n> {\n const queryKey = zamaQueryKeys.wrapperDiscovery.token(\n config.tokenAddress,\n config.erc20Address,\n config.registryAddress,\n );\n\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { erc20Address }] = context.queryKey;\n assertNonNullable(erc20Address, \"wrapperDiscoveryQueryOptions: erc20Address\");\n const result = await registry.getConfidentialToken(erc20Address);\n return result ? result.confidentialTokenAddress : null;\n },\n staleTime: Infinity,\n enabled:\n Boolean(config.tokenAddress && config.erc20Address && config.registryAddress) &&\n config.query?.enabled !== false,\n };\n}\n","import { allowanceContract, underlyingContract } from \"../contracts\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\nimport type { Address } from \"viem\";\n\n/** Configuration for {@link underlyingAllowanceQueryOptions}. */\nexport interface UnderlyingAllowanceQueryConfig {\n /** Owner whose underlying-token allowance to read; the query stays disabled until provided. */\n owner?: Address;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading the ERC-20 allowance the owner has granted a confidential wrapper on its underlying token. */\nexport function underlyingAllowanceQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address,\n config: UnderlyingAllowanceQueryConfig,\n): QueryFactoryOptions<\n bigint,\n Error,\n bigint,\n ReturnType<typeof zamaQueryKeys.underlyingAllowance.scope>\n> {\n const ownerKey = config.owner;\n const queryEnabled = config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.underlyingAllowance.scope(tokenAddress, ownerKey);\n\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress, owner: keyOwner }] = context.queryKey;\n assertNonNullable(keyOwner, \"underlyingAllowanceQueryOptions: owner\");\n const underlying = await sdk.provider.readContract(underlyingContract(keyTokenAddress));\n return sdk.provider.readContract(allowanceContract(underlying, keyOwner, keyTokenAddress));\n },\n staleTime: 30_000,\n enabled: Boolean(ownerKey) && queryEnabled,\n };\n}\n","import type { Address, Hex } from \"viem\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\n\n/** Configuration for {@link pendingUnshieldQueryOptions}. */\nexport interface PendingUnshieldQueryConfig {\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/**\n * Query options for reading the unwrap tx hash of an unshield that was\n * interrupted between its two phases (returns `null` if none is pending).\n *\n * Backed by {@link ZamaSDK} storage via `WrappedToken.getPendingUnshield()`.\n * `staleTime: 0` so the value reflects storage on mount; the unshield/unwrap\n * mutations also invalidate this key on success.\n */\nexport function pendingUnshieldQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address,\n config?: PendingUnshieldQueryConfig,\n): QueryFactoryOptions<\n Hex | null,\n Error,\n Hex | null,\n ReturnType<typeof zamaQueryKeys.pendingUnshield.token>\n> {\n const queryKey = zamaQueryKeys.pendingUnshield.token(tokenAddress);\n\n return {\n ...filterQueryOptions(config?.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n return sdk.createWrappedToken(keyTokenAddress).getPendingUnshield();\n },\n staleTime: 0,\n enabled: config?.query?.enabled !== false,\n };\n}\n","import { isOperatorContract } from \"../contracts\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { filterQueryOptions } from \"./utils\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { Address } from \"viem\";\n\n/** Configuration for {@link confidentialIsOperatorQueryOptions}. */\nexport interface ConfidentialIsOperatorQueryConfig {\n /** Token holder whose operator authorization to check; the query stays disabled until provided. */\n holder?: Address;\n /** Spender address to check for operator authorization; the query stays disabled until provided. */\n spender?: Address;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading whether a spender is an authorized operator of a holder on a confidential token. */\nexport function confidentialIsOperatorQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address | undefined,\n config: ConfidentialIsOperatorQueryConfig,\n): QueryFactoryOptions<\n boolean,\n Error,\n boolean,\n ReturnType<typeof zamaQueryKeys.confidentialIsOperator.scope>\n> {\n const holderKey = config.holder;\n const spenderKey = config.spender;\n const queryEnabled = config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.confidentialIsOperator.scope(tokenAddress, holderKey, spenderKey);\n\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress, holder: keyHolder, spender: keySpender }] =\n context.queryKey;\n assertNonNullable(keyTokenAddress, \"confidentialIsOperatorQueryOptions: tokenAddress\");\n assertNonNullable(keyHolder, \"confidentialIsOperatorQueryOptions: holder\");\n assertNonNullable(keySpender, \"confidentialIsOperatorQueryOptions: spender\");\n return sdk.provider.readContract(isOperatorContract(keyTokenAddress, keyHolder, keySpender));\n },\n staleTime: 30_000,\n enabled: Boolean(tokenAddress && holderKey && spenderKey) && queryEnabled,\n };\n}\n","import type { Address } from \"viem\";\nimport type { Token } from \"../token\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { SignerQueryContext } from \"./signer-query-context\";\nimport { filterQueryOptions } from \"./utils\";\n\n/** Configuration for {@link confidentialBalanceQueryOptions}. */\nexport interface ConfidentialBalanceQueryConfig {\n /** Address of the confidential token to read the balance of. */\n tokenAddress: Address;\n /** Account whose confidential balance to read; the query stays disabled until provided. */\n account?: Address;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Query options for a single confidential token balance. Auto-gated on `account`. */\nexport function confidentialBalanceQueryOptions(\n token: Token,\n config: ConfidentialBalanceQueryConfig,\n signerContext: SignerQueryContext = {},\n): QueryFactoryOptions<\n bigint,\n Error,\n bigint,\n ReturnType<typeof zamaQueryKeys.confidentialBalance.owner>\n> {\n const queryOpts = config.query ?? {};\n\n return {\n ...filterQueryOptions(queryOpts),\n queryKey: zamaQueryKeys.confidentialBalance.owner(\n config.tokenAddress,\n config.account,\n signerContext.walletAccount,\n ),\n queryFn: async (context) => {\n const [, { owner: keyOwner }] = context.queryKey;\n assertNonNullable(keyOwner, \"confidentialBalanceQueryOptions: owner\");\n return token.balanceOf(keyOwner);\n },\n enabled:\n Boolean(config.account) &&\n signerContext.walletAccount !== undefined &&\n queryOpts?.enabled !== false,\n };\n}\n","import type { Address } from \"viem\";\nimport { Token, type BatchBalancesResult } from \"../token/token\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { SignerQueryContext } from \"./signer-query-context\";\nimport { filterQueryOptions } from \"./utils\";\n\n/** Configuration for {@link confidentialBalancesQueryOptions}. */\nexport interface ConfidentialBalancesQueryConfig {\n /** Account whose confidential balances to read; the query stays disabled until provided. */\n account?: Address;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading the confidential balances of several tokens for one account in a single batch. */\nexport function confidentialBalancesQueryOptions(\n tokens: Token[],\n config?: ConfidentialBalancesQueryConfig,\n signerContext: SignerQueryContext = {},\n): QueryFactoryOptions<\n BatchBalancesResult,\n Error,\n BatchBalancesResult,\n ReturnType<typeof zamaQueryKeys.confidentialBalances.tokens>\n> {\n const accountKey = config?.account;\n const walletAccount = signerContext.walletAccount;\n const queryOpts = config?.query ?? {};\n const tokenAddresses = tokens.map((token) => token.address);\n\n return {\n ...filterQueryOptions(queryOpts),\n queryKey: zamaQueryKeys.confidentialBalances.tokens(tokenAddresses, accountKey, walletAccount),\n queryFn: async (signerContextQuery) => {\n const [, { owner: keyOwner }] = signerContextQuery.queryKey;\n assertNonNullable(keyOwner, \"confidentialBalancesQueryOptions: owner\");\n return Token.batchBalancesOf(tokens, keyOwner);\n },\n enabled:\n Boolean(accountKey) &&\n tokens.length > 0 &&\n walletAccount !== undefined &&\n queryOpts?.enabled !== false,\n };\n}\n","import { type Address, zeroAddress } from \"viem\";\nimport {\n getTokenPairsContract,\n getTokenPairsLengthContract,\n getTokenPairsSliceContract,\n getTokenPairContract,\n getConfidentialTokenAddressContract,\n getTokenAddressContract,\n isConfidentialTokenValidContract,\n} from \"../contracts\";\nimport type {\n TokenWrapperPair,\n TokenWrapperPairWithMetadata,\n PaginatedResult,\n} from \"../contracts/wrappers-registry\";\nimport type { WrappersRegistry } from \"../wrappers-registry\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\n\n/** Base configuration shared by the wrappers-registry query option factories. */\nexport interface WrappersRegistryQueryConfig {\n /** Registry contract address for the current chain; used as a query key discriminator. */\n registryAddress: Address | undefined;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading all token wrapper pairs registered in the wrappers registry. */\nexport function tokenPairsQueryOptions(\n sdk: ZamaSDK,\n config: WrappersRegistryQueryConfig,\n): QueryFactoryOptions<\n readonly TokenWrapperPair[],\n Error,\n readonly TokenWrapperPair[],\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenPairs>\n> {\n const enabled = Boolean(config.registryAddress) && config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.tokenPairs(config.registryAddress ?? zeroAddress);\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress }] = context.queryKey;\n return sdk.provider.readContract(getTokenPairsContract(registryAddress));\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Configuration for {@link confidentialTokenAddressQueryOptions}. */\nexport interface ConfidentialTokenAddressQueryConfig extends WrappersRegistryQueryConfig {\n /** Underlying ERC-20 token address whose confidential counterpart to look up. */\n tokenAddress?: Address;\n}\n\n/** Builds TanStack Query options for reading the confidential token address registered for a given underlying ERC-20 token. */\nexport function confidentialTokenAddressQueryOptions(\n sdk: ZamaSDK,\n config: ConfidentialTokenAddressQueryConfig,\n): QueryFactoryOptions<\n readonly [boolean, Address],\n Error,\n readonly [boolean, Address],\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.confidentialTokenAddress>\n> {\n const enabled =\n Boolean(config.registryAddress) &&\n Boolean(config.tokenAddress) &&\n config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.confidentialTokenAddress(\n config.registryAddress ?? zeroAddress,\n config.tokenAddress ?? zeroAddress,\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress, tokenAddress }] = context.queryKey;\n return sdk.provider.readContract(\n getConfidentialTokenAddressContract(registryAddress, tokenAddress),\n );\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Configuration for {@link tokenAddressQueryOptions}. */\nexport interface TokenAddressQueryConfig extends WrappersRegistryQueryConfig {\n /** Confidential token address whose underlying ERC-20 counterpart to look up. */\n confidentialTokenAddress?: Address;\n}\n\n/** Builds TanStack Query options for reading the underlying ERC-20 token address registered for a given confidential token. */\nexport function tokenAddressQueryOptions(\n sdk: ZamaSDK,\n config: TokenAddressQueryConfig,\n): QueryFactoryOptions<\n readonly [boolean, Address],\n Error,\n readonly [boolean, Address],\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenAddress>\n> {\n const enabled =\n Boolean(config.registryAddress) &&\n Boolean(config.confidentialTokenAddress) &&\n config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.tokenAddress(\n config.registryAddress ?? zeroAddress,\n config.confidentialTokenAddress ?? zeroAddress,\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress, confidentialTokenAddress }] = context.queryKey;\n return sdk.provider.readContract(\n getTokenAddressContract(registryAddress, confidentialTokenAddress),\n );\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Builds TanStack Query options for reading the total number of token wrapper pairs in the registry. */\nexport function tokenPairsLengthQueryOptions(\n sdk: ZamaSDK,\n config: WrappersRegistryQueryConfig,\n): QueryFactoryOptions<\n bigint,\n Error,\n bigint,\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenPairsLength>\n> {\n const enabled = Boolean(config.registryAddress) && config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.tokenPairsLength(\n config.registryAddress ?? zeroAddress,\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress }] = context.queryKey;\n return sdk.provider.readContract(getTokenPairsLengthContract(registryAddress));\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Configuration for {@link tokenPairsSliceQueryOptions}. */\nexport interface TokenPairsSliceQueryConfig extends WrappersRegistryQueryConfig {\n /** Zero-based index of the first pair in the slice (inclusive). */\n fromIndex?: bigint;\n /** Index bounding the end of the slice. */\n toIndex?: bigint;\n}\n\n/** Builds TanStack Query options for reading a contiguous slice of the registry's token wrapper pairs. */\nexport function tokenPairsSliceQueryOptions(\n sdk: ZamaSDK,\n config: TokenPairsSliceQueryConfig,\n): QueryFactoryOptions<\n readonly TokenWrapperPair[],\n Error,\n readonly TokenWrapperPair[],\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenPairsSlice>\n> {\n const enabled =\n Boolean(config.registryAddress) &&\n config.fromIndex !== undefined &&\n config.toIndex !== undefined &&\n config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.tokenPairsSlice(\n config.registryAddress ?? zeroAddress,\n String(config.fromIndex ?? 0n),\n String(config.toIndex ?? 0n),\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress, fromIndex, toIndex }] = context.queryKey;\n return sdk.provider.readContract(\n getTokenPairsSliceContract(registryAddress, BigInt(fromIndex), BigInt(toIndex)),\n );\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Configuration for {@link tokenPairQueryOptions}. */\nexport interface TokenPairQueryConfig extends WrappersRegistryQueryConfig {\n /** Zero-based index of the token wrapper pair to read. */\n index?: bigint;\n}\n\n/** Builds TanStack Query options for reading a single token wrapper pair by its index in the registry. */\nexport function tokenPairQueryOptions(\n sdk: ZamaSDK,\n config: TokenPairQueryConfig,\n): QueryFactoryOptions<\n TokenWrapperPair,\n Error,\n TokenWrapperPair,\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenPair>\n> {\n const enabled =\n Boolean(config.registryAddress) &&\n config.index !== undefined &&\n config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.tokenPair(\n config.registryAddress ?? zeroAddress,\n String(config.index ?? 0n),\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress, index }] = context.queryKey;\n return sdk.provider.readContract(getTokenPairContract(registryAddress, BigInt(index)));\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Configuration for {@link isConfidentialTokenValidQueryOptions}. */\nexport interface IsConfidentialTokenValidQueryConfig extends WrappersRegistryQueryConfig {\n /** Confidential token address to validate against the registry. */\n confidentialTokenAddress?: Address;\n}\n\n/** Builds TanStack Query options for checking whether a confidential token is registered and valid in the registry. */\nexport function isConfidentialTokenValidQueryOptions(\n sdk: ZamaSDK,\n config: IsConfidentialTokenValidQueryConfig,\n): QueryFactoryOptions<\n boolean,\n Error,\n boolean,\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.isConfidentialTokenValid>\n> {\n const enabled =\n Boolean(config.registryAddress) &&\n Boolean(config.confidentialTokenAddress) &&\n config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.isConfidentialTokenValid(\n config.registryAddress ?? zeroAddress,\n config.confidentialTokenAddress ?? zeroAddress,\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress, confidentialTokenAddress }] = context.queryKey;\n return sdk.provider.readContract(\n isConfidentialTokenValidContract(registryAddress, confidentialTokenAddress),\n );\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Configuration for {@link listPairsQueryOptions}. */\nexport interface ListPairsQueryConfig {\n /**\n * The registry address for this chain — used as a query key discriminator.\n * The registry instance already knows how to resolve the address for the\n * current chain; this field just keeps the TanStack Query cache isolated\n * per registry contract.\n */\n registryAddress: Address | undefined;\n /** 1-based page number to fetch; defaults to `1`. */\n page?: number;\n /** Number of pairs per page; defaults to `100`. */\n pageSize?: number;\n /** When `true`, resolve each pair's on-chain metadata; defaults to `false`. */\n metadata?: boolean;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/**\n * Query options for paginated listing of token wrapper pairs.\n *\n * Accepts a {@link WrappersRegistry} instance rather than a raw provider so that the\n * class-level TTL cache is shared across multiple `queryFn` executions. Pass\n * `sdk.registry` (the ZamaSDK lazy singleton) to ensure a single shared cache.\n */\nexport function listPairsQueryOptions(\n registry: WrappersRegistry,\n config: ListPairsQueryConfig,\n): QueryFactoryOptions<\n PaginatedResult<TokenWrapperPair | TokenWrapperPairWithMetadata>,\n Error,\n PaginatedResult<TokenWrapperPair | TokenWrapperPairWithMetadata>,\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.listPairs>\n> {\n const enabled = Boolean(config.registryAddress) && config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.listPairs(\n config.registryAddress ?? zeroAddress,\n config.page ?? 1,\n config.pageSize ?? 100,\n config.metadata ?? false,\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { page, pageSize, metadata }] = context.queryKey;\n return registry.listPairs({ page, pageSize, metadata });\n },\n // Use the registry's own TTL so TanStack Query and the class-level cache\n // operate under the same freshness contract.\n staleTime: registry.ttlMs,\n enabled,\n };\n}\n","import type { Address } from \"viem\";\nimport type { WrappedToken } from \"../token/wrapped-token\";\nimport type { ShieldOptions, TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link shieldMutationOptions}. */\nexport interface ShieldParams extends ShieldOptions {\n /** Amount of the public ERC-20 to shield, in the token's base units. */\n amount: bigint;\n}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.shield | shielding} a public ERC-20 into its confidential form. @see {@link ShieldParams} */\nexport function shieldMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.shield\", Address], ShieldParams, TransactionResult> {\n return {\n mutationKey: [\"zama.shield\", token.address] as const,\n mutationFn: async ({ amount, ...rest }) => token.shield(amount, rest),\n };\n}\n","import type { Token } from \"../token/token\";\nimport type { TransactionResult, TransferOptions } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link confidentialTransferMutationOptions}. */\nexport interface ConfidentialTransferParams extends TransferOptions {\n /** Recipient address. */\n to: Address;\n /** Amount of tokens to transfer, in the token's base units. */\n amount: bigint;\n}\n\n/** Builds TanStack Query mutation options for {@link Token.confidentialTransfer | transferring} confidential tokens. @see {@link ConfidentialTransferParams} */\nexport function confidentialTransferMutationOptions(\n token: Token,\n): MutationFactoryOptions<\n readonly [\"zama.confidentialTransfer\", Address],\n ConfidentialTransferParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.confidentialTransfer\", token.address] as const,\n mutationFn: async ({ to, amount, ...options }) =>\n token.confidentialTransfer(to, amount, options),\n };\n}\n","import type { Token } from \"../token/token\";\nimport type { TransactionResult, TransferOptions } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address, Hex } from \"viem\";\n\n/** Variables for {@link confidentialTransferAndCallMutationOptions}. */\nexport interface ConfidentialTransferAndCallParams extends TransferOptions {\n /** Recipient address. */\n to: Address;\n /** Amount of tokens to transfer, in the token's base units. */\n amount: bigint;\n /** Opaque bytes forwarded to the recipient's ERC-7984 receiver hook. */\n data: Hex;\n}\n\n/** Builds TanStack Query mutation options for {@link Token.confidentialTransferAndCall | transferring} confidential tokens and invoking the recipient's receiver hook. @see {@link ConfidentialTransferAndCallParams} */\nexport function confidentialTransferAndCallMutationOptions(\n token: Token,\n): MutationFactoryOptions<\n readonly [\"zama.confidentialTransferAndCall\", Address],\n ConfidentialTransferAndCallParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.confidentialTransferAndCall\", token.address] as const,\n mutationFn: async ({ to, amount, data, ...options }) =>\n token.confidentialTransferAndCall(to, amount, data, options),\n };\n}\n","import type { Token } from \"../token/token\";\nimport type { TransferCallbacks, TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link confidentialTransferFromMutationOptions}. */\nexport interface ConfidentialTransferFromParams {\n /** Address to transfer from. */\n from: Address;\n /** Recipient address. */\n to: Address;\n /** Amount of tokens to transfer, in the token's base units. */\n amount: bigint;\n /** Optional progress callbacks for the multi-step transfer flow. */\n callbacks?: TransferCallbacks;\n}\n\n/** Builds TanStack Query mutation options for {@link Token.confidentialTransferFrom | transferring} confidential tokens from another account (operator flow). @see {@link ConfidentialTransferFromParams} */\nexport function confidentialTransferFromMutationOptions(\n token: Token,\n): MutationFactoryOptions<\n readonly [\"zama.confidentialTransferFrom\", Address],\n ConfidentialTransferFromParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.confidentialTransferFrom\", token.address] as const,\n mutationFn: async ({ from, to, amount, callbacks }) =>\n token.confidentialTransferFrom(from, to, amount, callbacks),\n };\n}\n","import type { Token } from \"../token/token\";\nimport type { TransferCallbacks, TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address, Hex } from \"viem\";\n\n/** Variables for {@link confidentialTransferFromAndCallMutationOptions}. */\nexport interface ConfidentialTransferFromAndCallParams {\n /** Address to transfer from. */\n from: Address;\n /** Recipient address. */\n to: Address;\n /** Amount of tokens to transfer, in the token's base units. */\n amount: bigint;\n /** Opaque bytes forwarded to the recipient's ERC-7984 receiver hook. */\n data: Hex;\n /** Optional progress callbacks for the multi-step transfer flow. */\n callbacks?: TransferCallbacks;\n}\n\n/** Builds TanStack Query mutation options for {@link Token.confidentialTransferFromAndCall | transferring} confidential tokens from another account and invoking the recipient's receiver hook. @see {@link ConfidentialTransferFromAndCallParams} */\nexport function confidentialTransferFromAndCallMutationOptions(\n token: Token,\n): MutationFactoryOptions<\n readonly [\"zama.confidentialTransferFromAndCall\", Address],\n ConfidentialTransferFromAndCallParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.confidentialTransferFromAndCall\", token.address] as const,\n mutationFn: async ({ from, to, amount, data, callbacks }) =>\n token.confidentialTransferFromAndCall(from, to, amount, data, callbacks),\n };\n}\n","import type { Token } from \"../token/token\";\nimport type { TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link confidentialSetOperatorMutationOptions}. */\nexport interface ConfidentialSetOperatorParams {\n /** Operator address to authorize. */\n operator: Address;\n /** Unix timestamp (seconds) when the operator authorization expires; defaults to one hour from now. */\n until?: number;\n}\n\n/** Builds TanStack Query mutation options for {@link Token.setOperator | authorizing} an operator on a confidential token. @see {@link ConfidentialSetOperatorParams} */\nexport function confidentialSetOperatorMutationOptions(\n token: Token,\n): MutationFactoryOptions<\n readonly [\"zama.confidentialSetOperator\", Address],\n ConfidentialSetOperatorParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.confidentialSetOperator\", token.address] as const,\n mutationFn: async ({ operator, until }) => token.setOperator(operator, until),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link approveUnderlyingMutationOptions}. */\nexport interface ApproveUnderlyingParams {\n /** Amount of the underlying ERC-20 to approve, in its base units; omit for a max approval. */\n amount?: bigint;\n}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.approveUnderlying | approving} the wrapper to spend the underlying ERC-20. @see {@link ApproveUnderlyingParams} */\nexport function approveUnderlyingMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<\n readonly [\"zama.approveUnderlying\", Address],\n ApproveUnderlyingParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.approveUnderlying\", token.address] as const,\n mutationFn: async ({ amount }) => token.approveUnderlying(amount),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult, UnshieldOptions } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link unshieldMutationOptions}. */\nexport interface UnshieldParams extends UnshieldOptions {\n /** Amount of tokens to unshield, in the token's base units. */\n amount: bigint;\n}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.unshield | unshielding} a confidential token back into its public ERC-20. @see {@link UnshieldParams} */\nexport function unshieldMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.unshield\", Address], UnshieldParams, TransactionResult> {\n return {\n mutationKey: [\"zama.unshield\", token.address] as const,\n mutationFn: async ({ amount, ...options }) => token.unshield(amount, options),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult, UnshieldCallbacks } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link unshieldAllMutationOptions}. */\nexport interface UnshieldAllParams extends UnshieldCallbacks {}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.unshieldAll | unshielding} the entire confidential balance back into the public ERC-20. @see {@link UnshieldAllParams} */\nexport function unshieldAllMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<\n readonly [\"zama.unshieldAll\", Address],\n UnshieldAllParams | void,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.unshieldAll\", token.address] as const,\n mutationFn: async (params) => token.unshieldAll(params || undefined),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult, UnshieldCallbacks } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address, Hex } from \"viem\";\n\n/** Variables for {@link resumeUnshieldMutationOptions}. */\nexport interface ResumeUnshieldParams extends UnshieldCallbacks {\n /** Hash of the earlier unwrap request transaction to resume from. */\n unwrapTxHash: Hex;\n}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.resumeUnshield | resuming} an interrupted unshield from its unwrap request transaction. @see {@link ResumeUnshieldParams} */\nexport function resumeUnshieldMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<\n readonly [\"zama.resumeUnshield\", Address],\n ResumeUnshieldParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.resumeUnshield\", token.address] as const,\n mutationFn: async ({ unwrapTxHash, ...callbacks }) =>\n token.resumeUnshield(unwrapTxHash, callbacks),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { UnwrapResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link unwrapMutationOptions}. */\nexport interface UnwrapParams {\n /** Amount of tokens to unwrap, in the token's base units. */\n amount: bigint;\n}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.unwrap | unwrapping} a confidential token (request phase of the two-phase unwrap). @see {@link UnwrapParams} */\nexport function unwrapMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.unwrap\", Address], UnwrapParams, UnwrapResult> {\n return {\n mutationKey: [\"zama.unwrap\", token.address] as const,\n mutationFn: async ({ amount }) => token.unwrap(amount),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult, WrapOptions } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link wrapMutationOptions}. */\nexport interface WrapParams extends WrapOptions {\n /** Amount of the public ERC-20 to wrap, in the token's base units. */\n amount: bigint;\n}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.wrap | wrapping} a public ERC-20 into its confidential form. @see {@link WrapParams} */\nexport function wrapMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.wrap\", Address], WrapParams, TransactionResult> {\n return {\n mutationKey: [\"zama.wrap\", token.address] as const,\n mutationFn: async ({ amount, ...rest }) => token.wrap(amount, rest),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { UnwrapResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.unwrapAll | unwrapping} the entire confidential balance. */\nexport function unwrapAllMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.unwrapAll\", Address], void, UnwrapResult> {\n return {\n mutationKey: [\"zama.unwrapAll\", token.address] as const,\n mutationFn: async () => token.unwrapAll(),\n };\n}\n","import type { EncryptedValue } from \"../relayer/types\";\nimport type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n/** Variables for {@link finalizeUnwrapMutationOptions}. */\nexport type FinalizeUnwrapParams = {\n /** Identifier from an `UnwrapRequested` event. */\n unwrapRequestId: EncryptedValue;\n};\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.finalizeUnwrap | finalizing} a previously requested unwrap. @see {@link FinalizeUnwrapParams} */\nexport function finalizeUnwrapMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<\n readonly [\"zama.finalizeUnwrap\", Address],\n FinalizeUnwrapParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.finalizeUnwrap\", token.address] as const,\n mutationFn: async ({ unwrapRequestId }) => token.finalizeUnwrap(unwrapRequestId),\n };\n}\n","import type { EncryptParams } from \"../node\";\nimport type { EncryptResult } from \"../relayer/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Builds TanStack Query mutation options for {@link ZamaSDK.encrypt | encrypting} plaintext inputs into an encrypted payload. */\nexport function encryptMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.encrypt\"], EncryptParams, EncryptResult> {\n return { mutationKey: [\"zama.encrypt\"], mutationFn: async (params) => sdk.encrypt(params) };\n}\n","import type { Address } from \"viem\";\nimport type { ClearValue, EncryptedValue } from \"../relayer/types\";\nimport type { EncryptedInput } from \"./user-decrypt\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link delegatedDecryptValuesMutationOptions}. */\nexport interface DelegatedDecryptValuesMutationParams {\n /** Encrypted values (with their contract addresses) to decrypt. */\n encryptedInputs: EncryptedInput[];\n /** Address of the account that delegated decryption rights to the connected wallet. */\n delegatorAddress: Address;\n}\n\n/** Builds TanStack Query mutation options for {@link Decryption.delegatedDecryptValues | decrypting} encrypted values via delegated decryption credentials. @see {@link DelegatedDecryptValuesMutationParams} */\nexport function delegatedDecryptValuesMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<\n readonly [\"zama.delegatedDecryptValues\"],\n DelegatedDecryptValuesMutationParams,\n Readonly<Record<EncryptedValue, ClearValue>>\n> {\n return {\n mutationKey: [\"zama.delegatedDecryptValues\"],\n mutationFn: async (params) =>\n sdk.decryption.delegatedDecryptValues(params.encryptedInputs, params.delegatorAddress),\n };\n}\n","import type { ClearValue, EncryptedValue, DecryptPublicValuesResult } from \"../relayer/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\n\n/** Builds TanStack Query mutation options for {@link Decryption.decryptPublicValues | publicly decrypting} encrypted values, caching each clear result. */\nexport function decryptPublicValuesMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<\n readonly [\"zama.decryptPublicValues\"],\n EncryptedValue[],\n DecryptPublicValuesResult\n> {\n return {\n mutationKey: [\"zama.decryptPublicValues\"],\n mutationFn: async (handles) => sdk.decryption.decryptPublicValues(handles),\n onSuccess: (data, _variables, _onMutateResult, context) => {\n for (const [handle, value] of Object.entries(data.clearValues) as [\n EncryptedValue,\n ClearValue,\n ][]) {\n context.client.setQueryData(zamaQueryKeys.decryption.encryptedValue(handle), value);\n }\n },\n };\n}\n","import type { Address } from \"viem\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Builds TanStack Query mutation options for {@link Permits.grantPermit | granting} decryption permits for the given contract addresses. */\nexport function grantPermitMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.grantPermit\"], Address[], void> {\n return {\n mutationKey: [\"zama.grantPermit\"],\n mutationFn: (contractAddresses) => sdk.permits.grantPermit(contractAddresses),\n };\n}\n","import type { PreparedPermit, PreparePermitRequest } from \"../credentials/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Builds TanStack Query mutation options for {@link Offline.preparePermit | preparing} an offline decryption permit. */\nexport function preparePermitMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.preparePermit\"], PreparePermitRequest, PreparedPermit> {\n return {\n mutationKey: [\"zama.preparePermit\"],\n mutationFn: (request) => sdk.offline.preparePermit(request),\n };\n}\n","import type { PreparedPermit, PreparePermitRequest } from \"../credentials/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Builds TanStack Query mutation options for {@link Offline.batchPreparePermits | preparing} a batch of offline decryption permits. */\nexport function batchPreparePermitsMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<\n readonly [\"zama.batchPreparePermits\"],\n PreparePermitRequest,\n PreparedPermit[]\n> {\n return {\n mutationKey: [\"zama.batchPreparePermits\"],\n mutationFn: (request) => sdk.offline.batchPreparePermits(request),\n };\n}\n","import type { SignedPreparedPermit } from \"../credentials/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Parameters for {@link registerPermitMutationOptions}. */\nexport type RegisterPermitParams = SignedPreparedPermit;\n\n/** Builds TanStack Query mutation options for {@link Permits.registerPermit | registering} a signed offline permit. */\nexport function registerPermitMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.registerPermit\"], RegisterPermitParams, void> {\n return {\n mutationKey: [\"zama.registerPermit\"],\n mutationFn: ({ prepared, signature }) => sdk.permits.registerPermit(prepared, signature),\n };\n}\n","import type { SignedPreparedPermit } from \"../credentials/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Builds TanStack Query mutation options for {@link Permits.batchRegisterPermits | registering} a list of signed offline permits. */\nexport function batchRegisterPermitsMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<\n readonly [\"zama.batchRegisterPermits\"],\n readonly SignedPreparedPermit[],\n void\n> {\n return {\n mutationKey: [\"zama.batchRegisterPermits\"],\n mutationFn: (permits) => sdk.permits.batchRegisterPermits(permits),\n };\n}\n","import type { Address } from \"viem\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { SignerQueryContext } from \"./signer-query-context\";\nimport { filterQueryOptions } from \"./utils\";\n\n/** Configuration for {@link hasPermitQueryOptions}. */\nexport interface HasPermitQueryConfig {\n /** Contract addresses to check credentials against. */\n contractAddresses: Address[];\n /**\n * Standard TanStack query options. `hasPermit` intentionally overrides cache\n * timing because permit state is wallet-local, not server state: every fetch\n * should read the SDK credential service directly.\n */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading whether the connected wallet holds a valid decryption permit for the given contracts. */\nexport function hasPermitQueryOptions(\n sdk: ZamaSDK,\n config: HasPermitQueryConfig,\n signerContext: SignerQueryContext = {},\n): QueryFactoryOptions<boolean, Error, boolean, ReturnType<typeof zamaQueryKeys.hasPermit.scope>> {\n const callerEnabled = config.query?.enabled !== false;\n return {\n ...filterQueryOptions(config?.query ?? {}),\n queryKey: zamaQueryKeys.hasPermit.scope(config.contractAddresses, signerContext.walletAccount),\n queryFn: (context) => {\n const [, { contractAddresses }] = context.queryKey;\n return sdk.permits.hasPermit(contractAddresses as Address[]);\n },\n staleTime: 0,\n gcTime: 0,\n refetchOnMount: \"always\",\n refetchOnWindowFocus: false,\n enabled:\n callerEnabled &&\n signerContext.walletAccount !== undefined &&\n config.contractAddresses.length > 0,\n } as const;\n}\n","import type { Address } from \"viem\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** TanStack Query mutation factory for {@link Permits.revokePermits}. */\nexport function revokePermitsMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.revokePermits\"], Address[] | void, void> {\n return {\n mutationKey: [\"zama.revokePermits\"],\n mutationFn: (contracts: Address[] | void) =>\n contracts === undefined ? sdk.permits.revokePermits() : sdk.permits.revokePermits(contracts),\n };\n}\n","import type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** TanStack Query mutation factory for {@link Permits.clear}. */\nexport function clearCredentialsMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.clearCredentials\"], void, void> {\n return { mutationKey: [\"zama.clearCredentials\"], mutationFn: () => sdk.permits.clear() };\n}\n","import type { Address } from \"viem\";\nimport type { TransactionResult } from \"../types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link delegateDecryptionMutationOptions}. */\nexport interface DelegateDecryptionParams {\n /** Address to grant delegated decryption rights to. */\n delegateAddress: Address;\n /** When the delegation expires; omit for no expiry. */\n expirationDate?: Date;\n}\n\n/** Builds TanStack Query mutation options for {@link Delegations.delegateDecryption | granting} delegated decryption rights on a contract. @see {@link DelegateDecryptionParams} */\nexport function delegateDecryptionMutationOptions(\n sdk: ZamaSDK,\n contractAddress: Address,\n): MutationFactoryOptions<\n readonly [\"zama.delegateDecryption\", Address],\n DelegateDecryptionParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.delegateDecryption\", contractAddress] as const,\n mutationFn: async ({ delegateAddress, expirationDate }) =>\n sdk.delegations.delegateDecryption({ contractAddress, delegateAddress, expirationDate }),\n };\n}\n","import type { Address } from \"viem\";\nimport type { ClearValue, EncryptedValue } from \"../relayer/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { SignerQueryContext } from \"./signer-query-context\";\n\n/** A single encrypted value to decrypt, paired with the contract that owns it. */\nexport interface EncryptedInput {\n /** Encrypted handle to decrypt. */\n encryptedValue: EncryptedValue;\n /** Address of the contract the encrypted value belongs to. */\n contractAddress: Address;\n}\n\n/** Decrypted clear values keyed by encrypted handle. */\nexport type DecryptResult = Readonly<Record<EncryptedValue, ClearValue>>;\n\n/** Builds TanStack Query options for decrypting a batch of encrypted handles into their clear values. */\nexport function decryptValuesQueryOptions(\n sdk: ZamaSDK,\n encryptedInputs: EncryptedInput[],\n signerContext: SignerQueryContext = {},\n): QueryFactoryOptions<\n DecryptResult,\n Error,\n DecryptResult,\n ReturnType<typeof zamaQueryKeys.decryption.encryptedInputs>\n> {\n return {\n queryKey: zamaQueryKeys.decryption.encryptedInputs(\n encryptedInputs,\n signerContext.walletAccount,\n ),\n queryFn: (context) => {\n const [, { encryptedInputs: keyedInputs }] = context.queryKey;\n return sdk.decryption.decryptValues(keyedInputs);\n },\n staleTime: Infinity,\n enabled: encryptedInputs.length > 0 && signerContext.walletAccount !== undefined,\n };\n}\n","import type { Address } from \"viem\";\nimport type { Token } from \"../token/token\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link decryptBalanceAsMutationOptions}. */\nexport interface DecryptBalanceAsParams {\n /** Address of the account that delegated decryption rights to the connected wallet. */\n delegatorAddress: Address;\n /** Account whose on-chain balance to read; defaults to the delegator address. */\n accountAddress?: Address;\n}\n\n/** Builds TanStack Query mutation options for {@link Token.decryptBalanceAs | decrypting} a balance via delegated decryption credentials. @see {@link DecryptBalanceAsParams} */\nexport function decryptBalanceAsMutationOptions(\n token: Token,\n): MutationFactoryOptions<\n readonly [\"zama.decryptBalanceAs\", Address],\n DecryptBalanceAsParams,\n bigint\n> {\n return {\n mutationKey: [\"zama.decryptBalanceAs\", token.address] as const,\n mutationFn: async ({ delegatorAddress, accountAddress }) =>\n token.decryptBalanceAs({ delegatorAddress, accountAddress }),\n };\n}\n","import { Token, type BatchDecryptAsOptions } from \"../token/token\";\nimport type { Address } from \"viem\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link batchDecryptBalancesAsMutationOptions}. */\nexport type BatchDecryptBalancesAsParams = BatchDecryptAsOptions;\n\n/** Builds TanStack Query mutation options for {@link Token.batchDecryptBalancesAs | decrypting} multiple token balances via delegated decryption credentials. @see {@link BatchDecryptBalancesAsParams} */\nexport function batchDecryptBalancesAsMutationOptions(\n tokens: Token[],\n): MutationFactoryOptions<\n readonly [\"zama.batchDecryptBalancesAs\", ...Address[]],\n BatchDecryptBalancesAsParams,\n Map<Address, bigint>\n> {\n return {\n mutationKey: [\"zama.batchDecryptBalancesAs\", ...tokens.map((t) => t.address)] as const,\n mutationFn: async (params) => Token.batchDecryptBalancesAs(tokens, params),\n };\n}\n","import type { Address } from \"viem\";\nimport type { TransactionResult } from \"../types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link revokeDelegationMutationOptions}. */\nexport interface RevokeDelegationParams {\n /** Address whose delegated decryption rights to revoke. */\n delegateAddress: Address;\n}\n\n/** Builds TanStack Query mutation options for {@link Delegations.revokeDelegation | revoking} delegated decryption rights on a contract. @see {@link RevokeDelegationParams} */\nexport function revokeDelegationMutationOptions(\n sdk: ZamaSDK,\n contractAddress: Address,\n): MutationFactoryOptions<\n readonly [\"zama.revokeDelegation\", Address],\n RevokeDelegationParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.revokeDelegation\", contractAddress] as const,\n mutationFn: async ({ delegateAddress }) =>\n sdk.delegations.revokeDelegation({ contractAddress, delegateAddress }),\n };\n}\n","import type { Address } from \"viem\";\nimport type { DelegationStatus } from \"../services/delegation-service\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { filterQueryOptions } from \"./utils\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { assertNonNullable } from \"../utils\";\n\nexport type { DelegationStatus } from \"../services/delegation-service\";\n\n/** Configuration for {@link delegationStatusQueryOptions}. */\nexport interface DelegationStatusQueryConfig {\n /** Contract the delegation applies to; pass `undefined` to keep the query disabled. */\n contractAddress: Address | undefined;\n /** Address granting the delegated decryption rights; the query stays disabled until provided. */\n delegatorAddress?: Address;\n /** Address receiving the delegated decryption rights; the query stays disabled until provided. */\n delegateAddress?: Address;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading the decryption-delegation status between a delegator and a delegate on a contract. */\nexport function delegationStatusQueryOptions(\n sdk: ZamaSDK,\n config: DelegationStatusQueryConfig,\n): QueryFactoryOptions<\n DelegationStatus,\n Error,\n DelegationStatus,\n ReturnType<typeof zamaQueryKeys.delegationStatus.scope>\n> {\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey: zamaQueryKeys.delegationStatus.scope(\n config.contractAddress,\n config.delegatorAddress,\n config.delegateAddress,\n ),\n queryFn: async (context) => {\n const [, { contractAddress, delegatorAddress, delegateAddress }] = context.queryKey;\n assertNonNullable(contractAddress, \"delegationStatusQueryOptions: contractAddress\");\n assertNonNullable(delegatorAddress, \"delegationStatusQueryOptions: delegatorAddress\");\n assertNonNullable(delegateAddress, \"delegationStatusQueryOptions: delegateAddress\");\n return sdk.delegations.getStatus({ contractAddress, delegatorAddress, delegateAddress });\n },\n enabled:\n Boolean(config.contractAddress && config.delegatorAddress && config.delegateAddress) &&\n config.query?.enabled !== false,\n } as const;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["zamaQueryKeys","filterQueryOptions","nameContract","symbolContract","decimalsContract","zamaQueryKeys","filterQueryOptions","isConfidentialTokenContract","isContractCallError","isConfidentialWrapperContract","zamaQueryKeys","filterQueryOptions","inferredTotalSupplyContract","zamaQueryKeys","filterQueryOptions","zamaQueryKeys","filterQueryOptions","underlyingContract","allowanceContract","zamaQueryKeys","filterQueryOptions","zamaQueryKeys","filterQueryOptions","isOperatorContract","filterQueryOptions","zamaQueryKeys","filterQueryOptions","zamaQueryKeys","Token","zamaQueryKeys","zeroAddress","filterQueryOptions","getTokenPairsContract","getConfidentialTokenAddressContract","getTokenAddressContract","getTokenPairsLengthContract","getTokenPairsSliceContract","getTokenPairContract","isConfidentialTokenValidContract","zamaQueryKeys","filterQueryOptions","zamaQueryKeys","zamaQueryKeys","Token","filterQueryOptions","zamaQueryKeys"],"sources":["../../../src/query/token-metadata.ts","../../../src/query/is-confidential.ts","../../../src/query/total-supply.ts","../../../src/query/wrapper-discovery.ts","../../../src/query/underlying-allowance.ts","../../../src/query/pending-unshield.ts","../../../src/query/confidential-is-operator.ts","../../../src/query/confidential-balance.ts","../../../src/query/confidential-balances.ts","../../../src/query/wrappers-registry.ts","../../../src/query/shield.ts","../../../src/query/transfer.ts","../../../src/query/transfer-and-call.ts","../../../src/query/transfer-from.ts","../../../src/query/transfer-from-and-call.ts","../../../src/query/set-operator.ts","../../../src/query/approve-underlying.ts","../../../src/query/unshield.ts","../../../src/query/unshield-all.ts","../../../src/query/resume-unshield.ts","../../../src/query/unwrap.ts","../../../src/query/wrap.ts","../../../src/query/unwrap-all.ts","../../../src/query/finalize-unwrap.ts","../../../src/query/encrypt.ts","../../../src/query/delegated-decrypt.ts","../../../src/query/public-decrypt.ts","../../../src/query/grant-permit.ts","../../../src/query/prepare-permit.ts","../../../src/query/batch-prepare-permits.ts","../../../src/query/register-permit.ts","../../../src/query/batch-register-permits.ts","../../../src/query/has-permit.ts","../../../src/query/revoke-permits.ts","../../../src/query/clear-credentials.ts","../../../src/query/delegate-decryption.ts","../../../src/query/user-decrypt.ts","../../../src/query/decrypt-balance-as.ts","../../../src/query/batch-decrypt-balances-as.ts","../../../src/query/revoke-delegation.ts","../../../src/query/delegation-status.ts"],"sourcesContent":["import { decimalsContract, nameContract, symbolContract } from \"../contracts\";\n\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\nimport type { Address } from \"viem\";\n\n/** ERC-20 token metadata returned by {@link tokenMetadataQueryOptions}. */\nexport interface TokenMetadata {\n /** Human-readable token name. */\n name: string;\n /** Token ticker symbol. */\n symbol: string;\n /** Number of decimals the token uses. */\n decimals: number;\n}\n\n/** Configuration for {@link tokenMetadataQueryOptions}. */\nexport interface TokenMetadataQueryConfig {\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading an ERC-20 token's name, symbol, and decimals. */\nexport function tokenMetadataQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address,\n config?: TokenMetadataQueryConfig,\n): QueryFactoryOptions<\n TokenMetadata,\n Error,\n TokenMetadata,\n ReturnType<typeof zamaQueryKeys.tokenMetadata.token>\n> {\n const queryKey = zamaQueryKeys.tokenMetadata.token(tokenAddress);\n\n return {\n ...filterQueryOptions(config?.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n const [name, symbol, decimals] = await Promise.all([\n sdk.provider.readContract(nameContract(keyTokenAddress)),\n sdk.provider.readContract(symbolContract(keyTokenAddress)),\n sdk.provider.readContract(decimalsContract(keyTokenAddress)),\n ]);\n return { name, symbol, decimals };\n },\n staleTime: Infinity,\n enabled: config?.query?.enabled !== false,\n };\n}\n","import { isConfidentialTokenContract, isConfidentialWrapperContract } from \"../contracts\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport { isContractCallError } from \"../utils\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\nimport type { Address } from \"viem\";\n\n/** Configuration for {@link isConfidentialQueryOptions} and {@link isWrapperQueryOptions}. */\nexport interface IsConfidentialQueryConfig {\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading whether a token address implements the confidential (ERC-7984) token interface. */\nexport function isConfidentialQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address,\n config?: IsConfidentialQueryConfig,\n): QueryFactoryOptions<\n boolean,\n Error,\n boolean,\n ReturnType<typeof zamaQueryKeys.isConfidential.token>\n> {\n const queryKey = zamaQueryKeys.isConfidential.token(tokenAddress);\n return {\n ...filterQueryOptions(config?.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n try {\n return await sdk.provider.readContract(isConfidentialTokenContract(keyTokenAddress));\n } catch (err) {\n // Only suppress contract execution reverts (non-ERC-165 contracts).\n // Re-throw network/transport errors so TanStack Query's retry logic applies.\n if (isContractCallError(err)) {\n return false;\n }\n throw err;\n }\n },\n staleTime: Infinity,\n enabled: config?.query?.enabled !== false,\n };\n}\n\n/** Builds TanStack Query options for reading whether a token address is a confidential wrapper (ERC-7984 wrapper) contract. */\nexport function isWrapperQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address,\n config?: IsConfidentialQueryConfig,\n): QueryFactoryOptions<boolean, Error, boolean, ReturnType<typeof zamaQueryKeys.isWrapper.token>> {\n const queryKey = zamaQueryKeys.isWrapper.token(tokenAddress);\n return {\n ...filterQueryOptions(config?.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n try {\n return await sdk.provider.readContract(isConfidentialWrapperContract(keyTokenAddress));\n } catch (err) {\n // Only suppress contract execution reverts (non-ERC-165 contracts).\n // Re-throw network/transport errors so TanStack Query's retry logic applies.\n if (isContractCallError(err)) {\n return false;\n }\n throw err;\n }\n },\n staleTime: Infinity,\n enabled: config?.query?.enabled !== false,\n };\n}\n","import { inferredTotalSupplyContract } from \"../contracts\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\nimport type { Address } from \"viem\";\n\n/** Configuration for {@link totalSupplyQueryOptions}. */\nexport interface TotalSupplyQueryConfig {\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading a token's total supply. */\nexport function totalSupplyQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address,\n config?: TotalSupplyQueryConfig,\n): QueryFactoryOptions<bigint, Error, bigint, ReturnType<typeof zamaQueryKeys.totalSupply.token>> {\n const queryKey = zamaQueryKeys.totalSupply.token(tokenAddress);\n\n return {\n ...filterQueryOptions(config?.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n return sdk.provider.readContract(inferredTotalSupplyContract(keyTokenAddress));\n },\n staleTime: 30_000,\n enabled: config?.query?.enabled !== false,\n };\n}\n","import type { Address } from \"viem\";\nimport type { WrappersRegistry } from \"../wrappers-registry\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport { filterQueryOptions } from \"./utils\";\n\n/** Configuration for {@link wrapperDiscoveryQueryOptions}. */\nexport interface WrapperDiscoveryQueryConfig {\n /**\n * Address of any confidential token you control.\n * Used to scope the query cache key and to gate whether the query\n * is enabled — it does not affect which wrapper the registry returns.\n */\n tokenAddress?: Address;\n /**\n * The ERC-20 token address to discover the confidential wrapper for.\n * The registry is resolved automatically from chain config.\n */\n erc20Address?: Address;\n /**\n * The resolved registry contract address for the current chain.\n * Included in the query key so that switching chains invalidates\n * stale cached results. Pass `undefined` when the chain ID is not\n * yet known — the query will be disabled.\n */\n registryAddress?: Address;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for discovering the confidential wrapper address for a given ERC-20 token (resolves to `null` when none is registered or the registered wrapper has been revoked). */\nexport function wrapperDiscoveryQueryOptions(\n registry: WrappersRegistry,\n config: WrapperDiscoveryQueryConfig,\n): QueryFactoryOptions<\n Address | null,\n Error,\n Address | null,\n ReturnType<typeof zamaQueryKeys.wrapperDiscovery.token>\n> {\n const queryKey = zamaQueryKeys.wrapperDiscovery.token(\n config.tokenAddress,\n config.erc20Address,\n config.registryAddress,\n );\n\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { erc20Address }] = context.queryKey;\n assertNonNullable(erc20Address, \"wrapperDiscoveryQueryOptions: erc20Address\");\n const result = await registry.getConfidentialToken(erc20Address);\n // A revoked pair keeps its non-zero wrapper address with `isValid: false`.\n return result?.isValid ? result.confidentialTokenAddress : null;\n },\n staleTime: registry.ttlMs,\n enabled:\n Boolean(config.tokenAddress && config.erc20Address && config.registryAddress) &&\n config.query?.enabled !== false,\n };\n}\n","import { allowanceContract, underlyingContract } from \"../contracts\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\nimport type { Address } from \"viem\";\n\n/** Configuration for {@link underlyingAllowanceQueryOptions}. */\nexport interface UnderlyingAllowanceQueryConfig {\n /** Owner whose underlying-token allowance to read; the query stays disabled until provided. */\n owner?: Address;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading the ERC-20 allowance the owner has granted a confidential wrapper on its underlying token. */\nexport function underlyingAllowanceQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address,\n config: UnderlyingAllowanceQueryConfig,\n): QueryFactoryOptions<\n bigint,\n Error,\n bigint,\n ReturnType<typeof zamaQueryKeys.underlyingAllowance.scope>\n> {\n const ownerKey = config.owner;\n const queryEnabled = config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.underlyingAllowance.scope(tokenAddress, ownerKey);\n\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress, owner: keyOwner }] = context.queryKey;\n assertNonNullable(keyOwner, \"underlyingAllowanceQueryOptions: owner\");\n const underlying = await sdk.provider.readContract(underlyingContract(keyTokenAddress));\n return sdk.provider.readContract(allowanceContract(underlying, keyOwner, keyTokenAddress));\n },\n staleTime: 30_000,\n enabled: Boolean(ownerKey) && queryEnabled,\n };\n}\n","import type { Address, Hex } from \"viem\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\n\n/** Configuration for {@link pendingUnshieldQueryOptions}. */\nexport interface PendingUnshieldQueryConfig {\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/**\n * Query options for reading the unwrap tx hash of an unshield that was\n * interrupted between its two phases (returns `null` if none is pending).\n *\n * Backed by {@link ZamaSDK} storage via `WrappedToken.getPendingUnshield()`.\n * `staleTime: 0` so the value reflects storage on mount; the unshield/unwrap\n * mutations also invalidate this key on success.\n */\nexport function pendingUnshieldQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address,\n config?: PendingUnshieldQueryConfig,\n): QueryFactoryOptions<\n Hex | null,\n Error,\n Hex | null,\n ReturnType<typeof zamaQueryKeys.pendingUnshield.token>\n> {\n const queryKey = zamaQueryKeys.pendingUnshield.token(tokenAddress);\n\n return {\n ...filterQueryOptions(config?.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n return sdk.createWrappedToken(keyTokenAddress).getPendingUnshield();\n },\n staleTime: 0,\n enabled: config?.query?.enabled !== false,\n };\n}\n","import { isOperatorContract } from \"../contracts\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { filterQueryOptions } from \"./utils\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { Address } from \"viem\";\n\n/** Configuration for {@link confidentialIsOperatorQueryOptions}. */\nexport interface ConfidentialIsOperatorQueryConfig {\n /** Token holder whose operator authorization to check; the query stays disabled until provided. */\n holder?: Address;\n /** Spender address to check for operator authorization; the query stays disabled until provided. */\n spender?: Address;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading whether a spender is an authorized operator of a holder on a confidential token. */\nexport function confidentialIsOperatorQueryOptions(\n sdk: ZamaSDK,\n tokenAddress: Address | undefined,\n config: ConfidentialIsOperatorQueryConfig,\n): QueryFactoryOptions<\n boolean,\n Error,\n boolean,\n ReturnType<typeof zamaQueryKeys.confidentialIsOperator.scope>\n> {\n const holderKey = config.holder;\n const spenderKey = config.spender;\n const queryEnabled = config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.confidentialIsOperator.scope(tokenAddress, holderKey, spenderKey);\n\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { tokenAddress: keyTokenAddress, holder: keyHolder, spender: keySpender }] =\n context.queryKey;\n assertNonNullable(keyTokenAddress, \"confidentialIsOperatorQueryOptions: tokenAddress\");\n assertNonNullable(keyHolder, \"confidentialIsOperatorQueryOptions: holder\");\n assertNonNullable(keySpender, \"confidentialIsOperatorQueryOptions: spender\");\n return sdk.provider.readContract(isOperatorContract(keyTokenAddress, keyHolder, keySpender));\n },\n staleTime: 30_000,\n enabled: Boolean(tokenAddress && holderKey && spenderKey) && queryEnabled,\n };\n}\n","import type { Address } from \"viem\";\nimport type { Token } from \"../token\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { SignerQueryContext } from \"./signer-query-context\";\nimport { filterQueryOptions } from \"./utils\";\n\n/** Configuration for {@link confidentialBalanceQueryOptions}. */\nexport interface ConfidentialBalanceQueryConfig {\n /** Address of the confidential token to read the balance of. */\n tokenAddress: Address;\n /** Account whose confidential balance to read; the query stays disabled until provided. */\n account?: Address;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Query options for a single confidential token balance. Auto-gated on `account`. */\nexport function confidentialBalanceQueryOptions(\n token: Token,\n config: ConfidentialBalanceQueryConfig,\n signerContext: SignerQueryContext = {},\n): QueryFactoryOptions<\n bigint,\n Error,\n bigint,\n ReturnType<typeof zamaQueryKeys.confidentialBalance.owner>\n> {\n const queryOpts = config.query ?? {};\n\n return {\n ...filterQueryOptions(queryOpts),\n queryKey: zamaQueryKeys.confidentialBalance.owner(\n config.tokenAddress,\n config.account,\n signerContext.walletAccount,\n ),\n queryFn: async (context) => {\n const [, { owner: keyOwner }] = context.queryKey;\n assertNonNullable(keyOwner, \"confidentialBalanceQueryOptions: owner\");\n return token.balanceOf(keyOwner);\n },\n enabled:\n Boolean(config.account) &&\n signerContext.walletAccount !== undefined &&\n queryOpts?.enabled !== false,\n };\n}\n","import type { Address } from \"viem\";\nimport { Token, type BatchBalancesResult } from \"../token/token\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { SignerQueryContext } from \"./signer-query-context\";\nimport { filterQueryOptions } from \"./utils\";\n\n/** Configuration for {@link confidentialBalancesQueryOptions}. */\nexport interface ConfidentialBalancesQueryConfig {\n /** Account whose confidential balances to read; the query stays disabled until provided. */\n account?: Address;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading the confidential balances of several tokens for one account in a single batch. */\nexport function confidentialBalancesQueryOptions(\n tokens: Token[],\n config?: ConfidentialBalancesQueryConfig,\n signerContext: SignerQueryContext = {},\n): QueryFactoryOptions<\n BatchBalancesResult,\n Error,\n BatchBalancesResult,\n ReturnType<typeof zamaQueryKeys.confidentialBalances.tokens>\n> {\n const accountKey = config?.account;\n const walletAccount = signerContext.walletAccount;\n const queryOpts = config?.query ?? {};\n const tokenAddresses = tokens.map((token) => token.address);\n\n return {\n ...filterQueryOptions(queryOpts),\n queryKey: zamaQueryKeys.confidentialBalances.tokens(tokenAddresses, accountKey, walletAccount),\n queryFn: async (signerContextQuery) => {\n const [, { owner: keyOwner }] = signerContextQuery.queryKey;\n assertNonNullable(keyOwner, \"confidentialBalancesQueryOptions: owner\");\n return Token.batchBalancesOf(tokens, keyOwner);\n },\n enabled:\n Boolean(accountKey) &&\n tokens.length > 0 &&\n walletAccount !== undefined &&\n queryOpts?.enabled !== false,\n };\n}\n","import { type Address, zeroAddress } from \"viem\";\nimport {\n getTokenPairsContract,\n getTokenPairsLengthContract,\n getTokenPairsSliceContract,\n getTokenPairContract,\n getConfidentialTokenAddressContract,\n getTokenAddressContract,\n isConfidentialTokenValidContract,\n} from \"../contracts\";\nimport type {\n TokenWrapperPair,\n TokenWrapperPairWithMetadata,\n PaginatedResult,\n} from \"../contracts/wrappers-registry\";\nimport type { WrappersRegistry } from \"../wrappers-registry\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\n\n/** Base configuration shared by the wrappers-registry query option factories. */\nexport interface WrappersRegistryQueryConfig {\n /** Registry contract address for the current chain; used as a query key discriminator. */\n registryAddress: Address | undefined;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading all token wrapper pairs registered in the wrappers registry. */\nexport function tokenPairsQueryOptions(\n sdk: ZamaSDK,\n config: WrappersRegistryQueryConfig,\n): QueryFactoryOptions<\n readonly TokenWrapperPair[],\n Error,\n readonly TokenWrapperPair[],\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenPairs>\n> {\n const enabled = Boolean(config.registryAddress) && config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.tokenPairs(config.registryAddress ?? zeroAddress);\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress }] = context.queryKey;\n return sdk.provider.readContract(getTokenPairsContract(registryAddress));\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Configuration for {@link confidentialTokenAddressQueryOptions}. */\nexport interface ConfidentialTokenAddressQueryConfig extends WrappersRegistryQueryConfig {\n /** Underlying ERC-20 token address whose confidential counterpart to look up. */\n tokenAddress?: Address;\n}\n\n/** Builds TanStack Query options for reading the confidential token address registered for a given underlying ERC-20 token. */\nexport function confidentialTokenAddressQueryOptions(\n sdk: ZamaSDK,\n config: ConfidentialTokenAddressQueryConfig,\n): QueryFactoryOptions<\n readonly [boolean, Address],\n Error,\n readonly [boolean, Address],\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.confidentialTokenAddress>\n> {\n const enabled =\n Boolean(config.registryAddress) &&\n Boolean(config.tokenAddress) &&\n config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.confidentialTokenAddress(\n config.registryAddress ?? zeroAddress,\n config.tokenAddress ?? zeroAddress,\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress, tokenAddress }] = context.queryKey;\n return sdk.provider.readContract(\n getConfidentialTokenAddressContract(registryAddress, tokenAddress),\n );\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Configuration for {@link tokenAddressQueryOptions}. */\nexport interface TokenAddressQueryConfig extends WrappersRegistryQueryConfig {\n /** Confidential token address whose underlying ERC-20 counterpart to look up. */\n confidentialTokenAddress?: Address;\n}\n\n/** Builds TanStack Query options for reading the underlying ERC-20 token address registered for a given confidential token. */\nexport function tokenAddressQueryOptions(\n sdk: ZamaSDK,\n config: TokenAddressQueryConfig,\n): QueryFactoryOptions<\n readonly [boolean, Address],\n Error,\n readonly [boolean, Address],\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenAddress>\n> {\n const enabled =\n Boolean(config.registryAddress) &&\n Boolean(config.confidentialTokenAddress) &&\n config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.tokenAddress(\n config.registryAddress ?? zeroAddress,\n config.confidentialTokenAddress ?? zeroAddress,\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress, confidentialTokenAddress }] = context.queryKey;\n return sdk.provider.readContract(\n getTokenAddressContract(registryAddress, confidentialTokenAddress),\n );\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Builds TanStack Query options for reading the total number of token wrapper pairs in the registry. */\nexport function tokenPairsLengthQueryOptions(\n sdk: ZamaSDK,\n config: WrappersRegistryQueryConfig,\n): QueryFactoryOptions<\n bigint,\n Error,\n bigint,\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenPairsLength>\n> {\n const enabled = Boolean(config.registryAddress) && config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.tokenPairsLength(\n config.registryAddress ?? zeroAddress,\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress }] = context.queryKey;\n return sdk.provider.readContract(getTokenPairsLengthContract(registryAddress));\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Configuration for {@link tokenPairsSliceQueryOptions}. */\nexport interface TokenPairsSliceQueryConfig extends WrappersRegistryQueryConfig {\n /** Zero-based index of the first pair in the slice (inclusive). */\n fromIndex?: bigint;\n /** Index bounding the end of the slice. */\n toIndex?: bigint;\n}\n\n/** Builds TanStack Query options for reading a contiguous slice of the registry's token wrapper pairs. */\nexport function tokenPairsSliceQueryOptions(\n sdk: ZamaSDK,\n config: TokenPairsSliceQueryConfig,\n): QueryFactoryOptions<\n readonly TokenWrapperPair[],\n Error,\n readonly TokenWrapperPair[],\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenPairsSlice>\n> {\n const enabled =\n Boolean(config.registryAddress) &&\n config.fromIndex !== undefined &&\n config.toIndex !== undefined &&\n config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.tokenPairsSlice(\n config.registryAddress ?? zeroAddress,\n String(config.fromIndex ?? 0n),\n String(config.toIndex ?? 0n),\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress, fromIndex, toIndex }] = context.queryKey;\n return sdk.provider.readContract(\n getTokenPairsSliceContract(registryAddress, BigInt(fromIndex), BigInt(toIndex)),\n );\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Configuration for {@link tokenPairQueryOptions}. */\nexport interface TokenPairQueryConfig extends WrappersRegistryQueryConfig {\n /** Zero-based index of the token wrapper pair to read. */\n index?: bigint;\n}\n\n/** Builds TanStack Query options for reading a single token wrapper pair by its index in the registry. */\nexport function tokenPairQueryOptions(\n sdk: ZamaSDK,\n config: TokenPairQueryConfig,\n): QueryFactoryOptions<\n TokenWrapperPair,\n Error,\n TokenWrapperPair,\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenPair>\n> {\n const enabled =\n Boolean(config.registryAddress) &&\n config.index !== undefined &&\n config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.tokenPair(\n config.registryAddress ?? zeroAddress,\n String(config.index ?? 0n),\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress, index }] = context.queryKey;\n return sdk.provider.readContract(getTokenPairContract(registryAddress, BigInt(index)));\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Configuration for {@link isConfidentialTokenValidQueryOptions}. */\nexport interface IsConfidentialTokenValidQueryConfig extends WrappersRegistryQueryConfig {\n /** Confidential token address to validate against the registry. */\n confidentialTokenAddress?: Address;\n}\n\n/** Builds TanStack Query options for checking whether a confidential token is registered and valid in the registry. */\nexport function isConfidentialTokenValidQueryOptions(\n sdk: ZamaSDK,\n config: IsConfidentialTokenValidQueryConfig,\n): QueryFactoryOptions<\n boolean,\n Error,\n boolean,\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.isConfidentialTokenValid>\n> {\n const enabled =\n Boolean(config.registryAddress) &&\n Boolean(config.confidentialTokenAddress) &&\n config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.isConfidentialTokenValid(\n config.registryAddress ?? zeroAddress,\n config.confidentialTokenAddress ?? zeroAddress,\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { registryAddress, confidentialTokenAddress }] = context.queryKey;\n return sdk.provider.readContract(\n isConfidentialTokenValidContract(registryAddress, confidentialTokenAddress),\n );\n },\n staleTime: sdk.registry.ttlMs,\n enabled,\n };\n}\n\n/** Configuration for {@link listPairsQueryOptions}. */\nexport interface ListPairsQueryConfig {\n /**\n * The registry address for this chain — used as a query key discriminator.\n * The registry instance already knows how to resolve the address for the\n * current chain; this field just keeps the TanStack Query cache isolated\n * per registry contract.\n */\n registryAddress: Address | undefined;\n /** 1-based page number to fetch; defaults to `1`. */\n page?: number;\n /** Number of pairs per page; defaults to `100`. */\n pageSize?: number;\n /** When `true`, resolve each pair's on-chain metadata; defaults to `false`. */\n metadata?: boolean;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/**\n * Query options for paginated listing of token wrapper pairs.\n *\n * Accepts a {@link WrappersRegistry} instance rather than a raw provider so that the\n * class-level TTL cache is shared across multiple `queryFn` executions. Pass\n * `sdk.registry` (the ZamaSDK lazy singleton) to ensure a single shared cache.\n */\nexport function listPairsQueryOptions(\n registry: WrappersRegistry,\n config: ListPairsQueryConfig,\n): QueryFactoryOptions<\n PaginatedResult<TokenWrapperPair | TokenWrapperPairWithMetadata>,\n Error,\n PaginatedResult<TokenWrapperPair | TokenWrapperPairWithMetadata>,\n ReturnType<typeof zamaQueryKeys.wrappersRegistry.listPairs>\n> {\n const enabled = Boolean(config.registryAddress) && config.query?.enabled !== false;\n const queryKey = zamaQueryKeys.wrappersRegistry.listPairs(\n config.registryAddress ?? zeroAddress,\n config.page ?? 1,\n config.pageSize ?? 100,\n config.metadata ?? false,\n );\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey,\n queryFn: async (context) => {\n const [, { page, pageSize, metadata }] = context.queryKey;\n return registry.listPairs({ page, pageSize, metadata });\n },\n // Use the registry's own TTL so TanStack Query and the class-level cache\n // operate under the same freshness contract.\n staleTime: registry.ttlMs,\n enabled,\n };\n}\n","import type { Address } from \"viem\";\nimport type { WrappedToken } from \"../token/wrapped-token\";\nimport type { ShieldOptions, TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link shieldMutationOptions}. */\nexport interface ShieldParams extends ShieldOptions {\n /** Amount of the public ERC-20 to shield, in the token's base units. */\n amount: bigint;\n}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.shield | shielding} a public ERC-20 into its confidential form. @see {@link ShieldParams} */\nexport function shieldMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.shield\", Address], ShieldParams, TransactionResult> {\n return {\n mutationKey: [\"zama.shield\", token.address] as const,\n mutationFn: async ({ amount, ...rest }) => token.shield(amount, rest),\n };\n}\n","import type { Token } from \"../token/token\";\nimport type { TransactionResult, TransferOptions } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link confidentialTransferMutationOptions}. */\nexport interface ConfidentialTransferParams extends TransferOptions {\n /** Recipient address. */\n to: Address;\n /** Amount of tokens to transfer, in the token's base units. */\n amount: bigint;\n}\n\n/** Builds TanStack Query mutation options for {@link Token.confidentialTransfer | transferring} confidential tokens. @see {@link ConfidentialTransferParams} */\nexport function confidentialTransferMutationOptions(\n token: Token,\n): MutationFactoryOptions<\n readonly [\"zama.confidentialTransfer\", Address],\n ConfidentialTransferParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.confidentialTransfer\", token.address] as const,\n mutationFn: async ({ to, amount, ...options }) =>\n token.confidentialTransfer(to, amount, options),\n };\n}\n","import type { Token } from \"../token/token\";\nimport type { TransactionResult, TransferOptions } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address, Hex } from \"viem\";\n\n/** Variables for {@link confidentialTransferAndCallMutationOptions}. */\nexport interface ConfidentialTransferAndCallParams extends TransferOptions {\n /** Recipient address. */\n to: Address;\n /** Amount of tokens to transfer, in the token's base units. */\n amount: bigint;\n /** Opaque bytes forwarded to the recipient's ERC-7984 receiver hook. */\n data: Hex;\n}\n\n/** Builds TanStack Query mutation options for {@link Token.confidentialTransferAndCall | transferring} confidential tokens and invoking the recipient's receiver hook. @see {@link ConfidentialTransferAndCallParams} */\nexport function confidentialTransferAndCallMutationOptions(\n token: Token,\n): MutationFactoryOptions<\n readonly [\"zama.confidentialTransferAndCall\", Address],\n ConfidentialTransferAndCallParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.confidentialTransferAndCall\", token.address] as const,\n mutationFn: async ({ to, amount, data, ...options }) =>\n token.confidentialTransferAndCall(to, amount, data, options),\n };\n}\n","import type { Token } from \"../token/token\";\nimport type { TransferCallbacks, TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link confidentialTransferFromMutationOptions}. */\nexport interface ConfidentialTransferFromParams {\n /** Address to transfer from. */\n from: Address;\n /** Recipient address. */\n to: Address;\n /** Amount of tokens to transfer, in the token's base units. */\n amount: bigint;\n /** Optional progress callbacks for the multi-step transfer flow. */\n callbacks?: TransferCallbacks;\n}\n\n/** Builds TanStack Query mutation options for {@link Token.confidentialTransferFrom | transferring} confidential tokens from another account (operator flow). @see {@link ConfidentialTransferFromParams} */\nexport function confidentialTransferFromMutationOptions(\n token: Token,\n): MutationFactoryOptions<\n readonly [\"zama.confidentialTransferFrom\", Address],\n ConfidentialTransferFromParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.confidentialTransferFrom\", token.address] as const,\n mutationFn: async ({ from, to, amount, callbacks }) =>\n token.confidentialTransferFrom(from, to, amount, callbacks),\n };\n}\n","import type { Token } from \"../token/token\";\nimport type { TransferCallbacks, TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address, Hex } from \"viem\";\n\n/** Variables for {@link confidentialTransferFromAndCallMutationOptions}. */\nexport interface ConfidentialTransferFromAndCallParams {\n /** Address to transfer from. */\n from: Address;\n /** Recipient address. */\n to: Address;\n /** Amount of tokens to transfer, in the token's base units. */\n amount: bigint;\n /** Opaque bytes forwarded to the recipient's ERC-7984 receiver hook. */\n data: Hex;\n /** Optional progress callbacks for the multi-step transfer flow. */\n callbacks?: TransferCallbacks;\n}\n\n/** Builds TanStack Query mutation options for {@link Token.confidentialTransferFromAndCall | transferring} confidential tokens from another account and invoking the recipient's receiver hook. @see {@link ConfidentialTransferFromAndCallParams} */\nexport function confidentialTransferFromAndCallMutationOptions(\n token: Token,\n): MutationFactoryOptions<\n readonly [\"zama.confidentialTransferFromAndCall\", Address],\n ConfidentialTransferFromAndCallParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.confidentialTransferFromAndCall\", token.address] as const,\n mutationFn: async ({ from, to, amount, data, callbacks }) =>\n token.confidentialTransferFromAndCall(from, to, amount, data, callbacks),\n };\n}\n","import type { Token } from \"../token/token\";\nimport type { TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link confidentialSetOperatorMutationOptions}. */\nexport interface ConfidentialSetOperatorParams {\n /** Operator address to authorize. */\n operator: Address;\n /** Unix timestamp (seconds) when the operator authorization expires; defaults to one hour from now. */\n until?: number;\n}\n\n/** Builds TanStack Query mutation options for {@link Token.setOperator | authorizing} an operator on a confidential token. @see {@link ConfidentialSetOperatorParams} */\nexport function confidentialSetOperatorMutationOptions(\n token: Token,\n): MutationFactoryOptions<\n readonly [\"zama.confidentialSetOperator\", Address],\n ConfidentialSetOperatorParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.confidentialSetOperator\", token.address] as const,\n mutationFn: async ({ operator, until }) => token.setOperator(operator, until),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link approveUnderlyingMutationOptions}. */\nexport interface ApproveUnderlyingParams {\n /** Amount of the underlying ERC-20 to approve, in its base units; omit for a max approval. */\n amount?: bigint;\n}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.approveUnderlying | approving} the wrapper to spend the underlying ERC-20. @see {@link ApproveUnderlyingParams} */\nexport function approveUnderlyingMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<\n readonly [\"zama.approveUnderlying\", Address],\n ApproveUnderlyingParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.approveUnderlying\", token.address] as const,\n mutationFn: async ({ amount }) => token.approveUnderlying(amount),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult, UnshieldOptions } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link unshieldMutationOptions}. */\nexport interface UnshieldParams extends UnshieldOptions {\n /** Amount of tokens to unshield, in the token's base units. */\n amount: bigint;\n}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.unshield | unshielding} a confidential token back into its public ERC-20. @see {@link UnshieldParams} */\nexport function unshieldMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.unshield\", Address], UnshieldParams, TransactionResult> {\n return {\n mutationKey: [\"zama.unshield\", token.address] as const,\n mutationFn: async ({ amount, ...options }) => token.unshield(amount, options),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult, UnshieldCallbacks } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link unshieldAllMutationOptions}. */\nexport interface UnshieldAllParams extends UnshieldCallbacks {}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.unshieldAll | unshielding} the entire confidential balance back into the public ERC-20. @see {@link UnshieldAllParams} */\nexport function unshieldAllMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<\n readonly [\"zama.unshieldAll\", Address],\n UnshieldAllParams | void,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.unshieldAll\", token.address] as const,\n mutationFn: async (params) => token.unshieldAll(params || undefined),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult, UnshieldCallbacks } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address, Hex } from \"viem\";\n\n/** Variables for {@link resumeUnshieldMutationOptions}. */\nexport interface ResumeUnshieldParams extends UnshieldCallbacks {\n /** Hash of the earlier unwrap request transaction to resume from. */\n unwrapTxHash: Hex;\n}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.resumeUnshield | resuming} an interrupted unshield from its unwrap request transaction. @see {@link ResumeUnshieldParams} */\nexport function resumeUnshieldMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<\n readonly [\"zama.resumeUnshield\", Address],\n ResumeUnshieldParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.resumeUnshield\", token.address] as const,\n mutationFn: async ({ unwrapTxHash, ...callbacks }) =>\n token.resumeUnshield(unwrapTxHash, callbacks),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { UnwrapResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link unwrapMutationOptions}. */\nexport interface UnwrapParams {\n /** Amount of tokens to unwrap, in the token's base units. */\n amount: bigint;\n}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.unwrap | unwrapping} a confidential token (request phase of the two-phase unwrap). @see {@link UnwrapParams} */\nexport function unwrapMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.unwrap\", Address], UnwrapParams, UnwrapResult> {\n return {\n mutationKey: [\"zama.unwrap\", token.address] as const,\n mutationFn: async ({ amount }) => token.unwrap(amount),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult, WrapOptions } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link wrapMutationOptions}. */\nexport interface WrapParams extends WrapOptions {\n /** Amount of the public ERC-20 to wrap, in the token's base units. */\n amount: bigint;\n}\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.wrap | wrapping} a public ERC-20 into its confidential form. @see {@link WrapParams} */\nexport function wrapMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.wrap\", Address], WrapParams, TransactionResult> {\n return {\n mutationKey: [\"zama.wrap\", token.address] as const,\n mutationFn: async ({ amount, ...rest }) => token.wrap(amount, rest),\n };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { UnwrapResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.unwrapAll | unwrapping} the entire confidential balance. */\nexport function unwrapAllMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.unwrapAll\", Address], void, UnwrapResult> {\n return {\n mutationKey: [\"zama.unwrapAll\", token.address] as const,\n mutationFn: async () => token.unwrapAll(),\n };\n}\n","import type { EncryptedValue } from \"../relayer/types\";\nimport type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n/** Variables for {@link finalizeUnwrapMutationOptions}. */\nexport type FinalizeUnwrapParams = {\n /** Identifier from an `UnwrapRequested` event. */\n unwrapRequestId: EncryptedValue;\n};\n\n/** Builds TanStack Query mutation options for {@link WrappedToken.finalizeUnwrap | finalizing} a previously requested unwrap. @see {@link FinalizeUnwrapParams} */\nexport function finalizeUnwrapMutationOptions(\n token: WrappedToken,\n): MutationFactoryOptions<\n readonly [\"zama.finalizeUnwrap\", Address],\n FinalizeUnwrapParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.finalizeUnwrap\", token.address] as const,\n mutationFn: async ({ unwrapRequestId }) => token.finalizeUnwrap(unwrapRequestId),\n };\n}\n","import type { EncryptParams } from \"../node\";\nimport type { EncryptResult } from \"../relayer/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Builds TanStack Query mutation options for {@link ZamaSDK.encrypt | encrypting} plaintext inputs into an encrypted payload. */\nexport function encryptMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.encrypt\"], EncryptParams, EncryptResult> {\n return { mutationKey: [\"zama.encrypt\"], mutationFn: async (params) => sdk.encrypt(params) };\n}\n","import type { Address } from \"viem\";\nimport type { ClearValue, EncryptedValue } from \"../relayer/types\";\nimport type { EncryptedInput } from \"./user-decrypt\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link delegatedDecryptValuesMutationOptions}. */\nexport interface DelegatedDecryptValuesMutationParams {\n /** Encrypted values (with their contract addresses) to decrypt. */\n encryptedInputs: EncryptedInput[];\n /** Address of the account that delegated decryption rights to the connected wallet. */\n delegatorAddress: Address;\n}\n\n/** Builds TanStack Query mutation options for {@link Decryption.delegatedDecryptValues | decrypting} encrypted values via delegated decryption credentials. @see {@link DelegatedDecryptValuesMutationParams} */\nexport function delegatedDecryptValuesMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<\n readonly [\"zama.delegatedDecryptValues\"],\n DelegatedDecryptValuesMutationParams,\n Readonly<Record<EncryptedValue, ClearValue>>\n> {\n return {\n mutationKey: [\"zama.delegatedDecryptValues\"],\n mutationFn: async (params) =>\n sdk.decryption.delegatedDecryptValues(params.encryptedInputs, params.delegatorAddress),\n };\n}\n","import type { ClearValue, EncryptedValue, DecryptPublicValuesResult } from \"../relayer/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\n\n/** Builds TanStack Query mutation options for {@link Decryption.decryptPublicValues | publicly decrypting} encrypted values, caching each clear result. */\nexport function decryptPublicValuesMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<\n readonly [\"zama.decryptPublicValues\"],\n EncryptedValue[],\n DecryptPublicValuesResult\n> {\n return {\n mutationKey: [\"zama.decryptPublicValues\"],\n mutationFn: async (handles) => sdk.decryption.decryptPublicValues(handles),\n onSuccess: (data, _variables, _onMutateResult, context) => {\n for (const [handle, value] of Object.entries(data.clearValues) as [\n EncryptedValue,\n ClearValue,\n ][]) {\n context.client.setQueryData(zamaQueryKeys.decryption.encryptedValue(handle), value);\n }\n },\n };\n}\n","import type { Address } from \"viem\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Builds TanStack Query mutation options for {@link Permits.grantPermit | granting} decryption permits for the given contract addresses. */\nexport function grantPermitMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.grantPermit\"], Address[], void> {\n return {\n mutationKey: [\"zama.grantPermit\"],\n mutationFn: (contractAddresses) => sdk.permits.grantPermit(contractAddresses),\n };\n}\n","import type { PreparedPermit, PreparePermitRequest } from \"../credentials/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Builds TanStack Query mutation options for {@link Offline.preparePermit | preparing} an offline decryption permit. */\nexport function preparePermitMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.preparePermit\"], PreparePermitRequest, PreparedPermit> {\n return {\n mutationKey: [\"zama.preparePermit\"],\n mutationFn: (request) => sdk.offline.preparePermit(request),\n };\n}\n","import type { PreparedPermit, PreparePermitRequest } from \"../credentials/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Builds TanStack Query mutation options for {@link Offline.batchPreparePermits | preparing} a batch of offline decryption permits. */\nexport function batchPreparePermitsMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<\n readonly [\"zama.batchPreparePermits\"],\n PreparePermitRequest,\n PreparedPermit[]\n> {\n return {\n mutationKey: [\"zama.batchPreparePermits\"],\n mutationFn: (request) => sdk.offline.batchPreparePermits(request),\n };\n}\n","import type { SignedPreparedPermit } from \"../credentials/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Parameters for {@link registerPermitMutationOptions}. */\nexport type RegisterPermitParams = SignedPreparedPermit;\n\n/** Builds TanStack Query mutation options for {@link Permits.registerPermit | registering} a signed offline permit. */\nexport function registerPermitMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.registerPermit\"], RegisterPermitParams, void> {\n return {\n mutationKey: [\"zama.registerPermit\"],\n mutationFn: ({ prepared, signature }) => sdk.permits.registerPermit(prepared, signature),\n };\n}\n","import type { SignedPreparedPermit } from \"../credentials/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Builds TanStack Query mutation options for {@link Permits.batchRegisterPermits | registering} a list of signed offline permits. */\nexport function batchRegisterPermitsMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<\n readonly [\"zama.batchRegisterPermits\"],\n readonly SignedPreparedPermit[],\n void\n> {\n return {\n mutationKey: [\"zama.batchRegisterPermits\"],\n mutationFn: (permits) => sdk.permits.batchRegisterPermits(permits),\n };\n}\n","import type { Address } from \"viem\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { SignerQueryContext } from \"./signer-query-context\";\nimport { filterQueryOptions } from \"./utils\";\n\n/** Configuration for {@link hasPermitQueryOptions}. */\nexport interface HasPermitQueryConfig {\n /** Contract addresses to check credentials against. */\n contractAddresses: Address[];\n /**\n * Standard TanStack query options. `hasPermit` intentionally overrides cache\n * timing because permit state is wallet-local, not server state: every fetch\n * should read the SDK credential service directly.\n */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading whether the connected wallet holds a valid decryption permit for the given contracts. */\nexport function hasPermitQueryOptions(\n sdk: ZamaSDK,\n config: HasPermitQueryConfig,\n signerContext: SignerQueryContext = {},\n): QueryFactoryOptions<boolean, Error, boolean, ReturnType<typeof zamaQueryKeys.hasPermit.scope>> {\n const callerEnabled = config.query?.enabled !== false;\n return {\n ...filterQueryOptions(config?.query ?? {}),\n queryKey: zamaQueryKeys.hasPermit.scope(config.contractAddresses, signerContext.walletAccount),\n queryFn: (context) => {\n const [, { contractAddresses }] = context.queryKey;\n return sdk.permits.hasPermit(contractAddresses as Address[]);\n },\n staleTime: 0,\n gcTime: 0,\n refetchOnMount: \"always\",\n refetchOnWindowFocus: false,\n enabled:\n callerEnabled &&\n signerContext.walletAccount !== undefined &&\n config.contractAddresses.length > 0,\n } as const;\n}\n","import type { Address } from \"viem\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** TanStack Query mutation factory for {@link Permits.revokePermits}. */\nexport function revokePermitsMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.revokePermits\"], Address[] | void, void> {\n return {\n mutationKey: [\"zama.revokePermits\"],\n mutationFn: (contracts: Address[] | void) =>\n contracts === undefined ? sdk.permits.revokePermits() : sdk.permits.revokePermits(contracts),\n };\n}\n","import type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** TanStack Query mutation factory for {@link Permits.clear}. */\nexport function clearCredentialsMutationOptions(\n sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.clearCredentials\"], void, void> {\n return { mutationKey: [\"zama.clearCredentials\"], mutationFn: () => sdk.permits.clear() };\n}\n","import type { Address } from \"viem\";\nimport type { TransactionResult } from \"../types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link delegateDecryptionMutationOptions}. */\nexport interface DelegateDecryptionParams {\n /** Address to grant delegated decryption rights to. */\n delegateAddress: Address;\n /** When the delegation expires; omit for no expiry. */\n expirationDate?: Date;\n}\n\n/** Builds TanStack Query mutation options for {@link Delegations.delegateDecryption | granting} delegated decryption rights on a contract. @see {@link DelegateDecryptionParams} */\nexport function delegateDecryptionMutationOptions(\n sdk: ZamaSDK,\n contractAddress: Address,\n): MutationFactoryOptions<\n readonly [\"zama.delegateDecryption\", Address],\n DelegateDecryptionParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.delegateDecryption\", contractAddress] as const,\n mutationFn: async ({ delegateAddress, expirationDate }) =>\n sdk.delegations.delegateDecryption({ contractAddress, delegateAddress, expirationDate }),\n };\n}\n","import type { Address } from \"viem\";\nimport type { ClearValue, EncryptedValue } from \"../relayer/types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { SignerQueryContext } from \"./signer-query-context\";\n\n/** A single encrypted value to decrypt, paired with the contract that owns it. */\nexport interface EncryptedInput {\n /** Encrypted handle to decrypt. */\n encryptedValue: EncryptedValue;\n /** Address of the contract the encrypted value belongs to. */\n contractAddress: Address;\n}\n\n/** Decrypted clear values keyed by encrypted handle. */\nexport type DecryptResult = Readonly<Record<EncryptedValue, ClearValue>>;\n\n/** Builds TanStack Query options for decrypting a batch of encrypted handles into their clear values. */\nexport function decryptValuesQueryOptions(\n sdk: ZamaSDK,\n encryptedInputs: EncryptedInput[],\n signerContext: SignerQueryContext = {},\n): QueryFactoryOptions<\n DecryptResult,\n Error,\n DecryptResult,\n ReturnType<typeof zamaQueryKeys.decryption.encryptedInputs>\n> {\n return {\n queryKey: zamaQueryKeys.decryption.encryptedInputs(\n encryptedInputs,\n signerContext.walletAccount,\n ),\n queryFn: (context) => {\n const [, { encryptedInputs: keyedInputs }] = context.queryKey;\n return sdk.decryption.decryptValues(keyedInputs);\n },\n staleTime: Infinity,\n enabled: encryptedInputs.length > 0 && signerContext.walletAccount !== undefined,\n };\n}\n","import type { Address } from \"viem\";\nimport type { Token } from \"../token/token\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link decryptBalanceAsMutationOptions}. */\nexport interface DecryptBalanceAsParams {\n /** Address of the account that delegated decryption rights to the connected wallet. */\n delegatorAddress: Address;\n /** Account whose on-chain balance to read; defaults to the delegator address. */\n accountAddress?: Address;\n}\n\n/** Builds TanStack Query mutation options for {@link Token.decryptBalanceAs | decrypting} a balance via delegated decryption credentials. @see {@link DecryptBalanceAsParams} */\nexport function decryptBalanceAsMutationOptions(\n token: Token,\n): MutationFactoryOptions<\n readonly [\"zama.decryptBalanceAs\", Address],\n DecryptBalanceAsParams,\n bigint\n> {\n return {\n mutationKey: [\"zama.decryptBalanceAs\", token.address] as const,\n mutationFn: async ({ delegatorAddress, accountAddress }) =>\n token.decryptBalanceAs({ delegatorAddress, accountAddress }),\n };\n}\n","import { Token, type BatchDecryptAsOptions } from \"../token/token\";\nimport type { Address } from \"viem\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link batchDecryptBalancesAsMutationOptions}. */\nexport type BatchDecryptBalancesAsParams = BatchDecryptAsOptions;\n\n/** Builds TanStack Query mutation options for {@link Token.batchDecryptBalancesAs | decrypting} multiple token balances via delegated decryption credentials. @see {@link BatchDecryptBalancesAsParams} */\nexport function batchDecryptBalancesAsMutationOptions(\n tokens: Token[],\n): MutationFactoryOptions<\n readonly [\"zama.batchDecryptBalancesAs\", ...Address[]],\n BatchDecryptBalancesAsParams,\n Map<Address, bigint>\n> {\n return {\n mutationKey: [\"zama.batchDecryptBalancesAs\", ...tokens.map((t) => t.address)] as const,\n mutationFn: async (params) => Token.batchDecryptBalancesAs(tokens, params),\n };\n}\n","import type { Address } from \"viem\";\nimport type { TransactionResult } from \"../types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link revokeDelegationMutationOptions}. */\nexport interface RevokeDelegationParams {\n /** Address whose delegated decryption rights to revoke. */\n delegateAddress: Address;\n}\n\n/** Builds TanStack Query mutation options for {@link Delegations.revokeDelegation | revoking} delegated decryption rights on a contract. @see {@link RevokeDelegationParams} */\nexport function revokeDelegationMutationOptions(\n sdk: ZamaSDK,\n contractAddress: Address,\n): MutationFactoryOptions<\n readonly [\"zama.revokeDelegation\", Address],\n RevokeDelegationParams,\n TransactionResult\n> {\n return {\n mutationKey: [\"zama.revokeDelegation\", contractAddress] as const,\n mutationFn: async ({ delegateAddress }) =>\n sdk.delegations.revokeDelegation({ contractAddress, delegateAddress }),\n };\n}\n","import type { Address } from \"viem\";\nimport type { DelegationStatus } from \"../services/delegation-service\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { filterQueryOptions } from \"./utils\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { assertNonNullable } from \"../utils\";\n\nexport type { DelegationStatus } from \"../services/delegation-service\";\n\n/** Configuration for {@link delegationStatusQueryOptions}. */\nexport interface DelegationStatusQueryConfig {\n /** Contract the delegation applies to; pass `undefined` to keep the query disabled. */\n contractAddress: Address | undefined;\n /** Address granting the delegated decryption rights; the query stays disabled until provided. */\n delegatorAddress?: Address;\n /** Address receiving the delegated decryption rights; the query stays disabled until provided. */\n delegateAddress?: Address;\n /** Additional TanStack Query options merged into the generated query (e.g. `staleTime`, `enabled`). */\n query?: Record<string, unknown>;\n}\n\n/** Builds TanStack Query options for reading the decryption-delegation status between a delegator and a delegate on a contract. */\nexport function delegationStatusQueryOptions(\n sdk: ZamaSDK,\n config: DelegationStatusQueryConfig,\n): QueryFactoryOptions<\n DelegationStatus,\n Error,\n DelegationStatus,\n ReturnType<typeof zamaQueryKeys.delegationStatus.scope>\n> {\n return {\n ...filterQueryOptions(config.query ?? {}),\n queryKey: zamaQueryKeys.delegationStatus.scope(\n config.contractAddress,\n config.delegatorAddress,\n config.delegateAddress,\n ),\n queryFn: async (context) => {\n const [, { contractAddress, delegatorAddress, delegateAddress }] = context.queryKey;\n assertNonNullable(contractAddress, \"delegationStatusQueryOptions: contractAddress\");\n assertNonNullable(delegatorAddress, \"delegationStatusQueryOptions: delegatorAddress\");\n assertNonNullable(delegateAddress, \"delegationStatusQueryOptions: delegateAddress\");\n return sdk.delegations.getStatus({ contractAddress, delegatorAddress, delegateAddress });\n },\n enabled:\n Boolean(config.contractAddress && config.delegatorAddress && config.delegateAddress) &&\n config.query?.enabled !== false,\n } as const;\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- function e(e,t){return{"x-zama-sdk-version":`3.7.0`,"x-zama-sdk-layer":e.state.layer,"x-zama-sdk-runtime":e.runtime,...t!==void 0&&{"x-zama-sdk-operation":t}}}function t(e,t){return Object.assign({},e,{operation:e?.operation??t})}function n(e){let t=e.ZAMA_SDK_TELEMETRY?.trim().toLowerCase();return t===`0`||t===`false`}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return n}});
1
+ function e(e,t){return{"x-zama-sdk-version":`3.7.2`,"x-zama-sdk-layer":e.state.layer,"x-zama-sdk-runtime":e.runtime,...t!==void 0&&{"x-zama-sdk-operation":t}}}function t(e,t){return Object.assign({},e,{operation:e?.operation??t})}function n(e){let t=e.ZAMA_SDK_TELEMETRY?.trim().toLowerCase();return t===`0`||t===`false`}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return n}});
2
2
  //# sourceMappingURL=telemetry.cjs.map
@@ -1,4 +1,4 @@
1
- import { A as WalletAccountListener, D as GenericSigner, L as WriteContractArgs, M as ContractAbi, O as WalletAccount, R as WriteContractConfig, in as EIP712TypedData, j as WalletAccountStore, z as WriteFunctionName } from "./types-BIgPY1yI.js";
1
+ import { A as WalletAccountListener, D as GenericSigner, L as WriteContractArgs, M as ContractAbi, O as WalletAccount, R as WriteContractConfig, in as EIP712TypedData, j as WalletAccountStore, z as WriteFunctionName } from "./types-CHepK8MK.js";
2
2
  import { Hex } from "viem";
3
3
  //#region src/signer/wallet-account-store.d.ts
4
4
  /**
@@ -73,4 +73,4 @@ declare abstract class BaseSigner implements GenericSigner, Disposable {
73
73
  }
74
74
  //#endregion
75
75
  export { MutableWalletAccountStore as n, createWalletAccountStore as r, BaseSigner as t };
76
- //# sourceMappingURL=base-signer-46j6PRq-.d.ts.map
76
+ //# sourceMappingURL=base-signer-BxIDBDTF.d.ts.map
@@ -0,0 +1,2 @@
1
+ import{p as e,r as t,t as n}from"./relayer-C3jVhqSK.js";import{B as r,F as i,G as a,L as o,P as s,Q as c,X as l,Y as u,d,f,j as p,m,p as h,q as g}from"./erc165-BAd2z3ay.js";import{r as _}from"./applied-runtime-3fzqBC2V.js";import{a as v,i as ee,n as y,o as te,r as b,s as x,t as S}from"./primitives-Cym-3HKa.js";import{t as C}from"./validation-ClSvPh6P.js";import{a as ne,i as re,n as w,o as T,r as ie,s as ae,t as E}from"./wrappers-registry-Cm3JJeqx.js";import{a as D,c as O,l as k,n as oe,o as se,s as ce,u as le}from"./chains-BwlDI944.js";import{getAddress as A,toBytes as j,toHex as M,zeroAddress as ue}from"viem";import{hasFhevmRuntimeConfig as de,setFhevmRuntimeConfig as fe}from"@fhevm/sdk/viem";import{z as N}from"zod/mini";var P=class{#e=null;#t=null;#n;#r;#i;constructor(e=`CredentialStore`,t=1,n=`credentials`){this.#n=e,this.#r=t,this.#i=n}#a(){return this.#e?Promise.resolve(this.#e):(this.#t||=new Promise((e,t)=>{let n=indexedDB.open(this.#n,this.#r);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(this.#i)||e.createObjectStore(this.#i,{keyPath:`key`})},n.onsuccess=()=>{this.#e=n.result,this.#t=null,this.#e.onversionchange=()=>{this.#e?.close(),this.#e=null,this.#t=null},this.#e.onclose=()=>{this.#e=null,this.#t=null},e(this.#e)},n.onerror=()=>{this.#e=null,this.#t=null,t(n.error)}}),this.#t)}async#o(e,t){let n=await this.#a();return new Promise((r,i)=>{let a=n.transaction(this.#i,e);a.onabort=()=>i(a.error??Error(`Transaction aborted`));let o=t(a.objectStore(this.#i));e===`readonly`?o.onsuccess=()=>r(o.result):a.oncomplete=()=>r(o.result),o.onerror=()=>i(o.error)})}async get(e){return(await this.#o(`readonly`,t=>t.get(e)))?.value??null}async set(e,t){await this.#o(`readwrite`,n=>n.put({key:e,value:t}))}async delete(e){await this.#o(`readwrite`,t=>t.delete(e))}async clear(){await this.#o(`readwrite`,e=>e.clear())}};const pe=new P;var F=class{#e=new Map;async get(e){return this.#e.get(e)??null}async set(e,t){this.#e.set(e,t)}async delete(e){this.#e.delete(e)}};const me=new F;function he(){return typeof window<`u`?new P(`CredentialStore`):new F}function ge(e=he(),t=e){return{storage:e,permitStorage:t}}function _e(e,t,r){let i=e.map(e=>e.id),a=[...new Set(i.filter((e,t)=>i.indexOf(e)!==t))];if(a.length>0)throw new n(`Duplicate chain id(s) [${a.join(`, `)}] in the chains array. Each chain id must appear only once. Note: hardhat and anvil are aliases (both use 31337).`);let o=Object.keys(t).map(Number).filter(e=>!i.includes(e));o.length>0&&r.warn(`Relayer entries for chain(s) [${o.join(`, `)}] are ignored: those chains are not in the chains array. Add the chain config to use them, or drop the relayer entries.`);let s=new Map;for(let r of e){let e=t[r.id];if(!e)throw new n(`Chain ${r.id} has no relayer configured. Add a relayer entry: relayers: { [${r.id}]: web() }`);s.set(r.id,{chain:r,relayerConfig:e})}return s}var ve=class{#e;#t;#n;constructor(e,t,r,i){if(e.length===0)throw new n(`At least one chain is required.`);this.#e=new Map(e.map(e=>[e.id,e])),this.#n=e[0].id;let a=new Map;for(let[n,{relayerConfig:o,chain:s}]of _e(e,t,r))a.set(n,o.createRelayer(s,r,i));this.#t=a}get chains(){return[...this.#e.values()]}get chain(){let e=this.#e.get(this.#n);if(e===void 0)throw new n(`Chain ${this.#n} is not configured. Add it to the chains array.`);return e}switchChain(e){this.#n=e}dispose(){for(let e of new Set(this.#t.values()))e.dispose?.()}get relayer(){let e=this.#t.get(this.chain.id);if(e===void 0)throw new n(`No relayer configured for chain ${this.#n}. Add it to the relayers object.`);return e}};const I={version:1,info:`zama-sdk-keypair-wrapping-v1`,ivLengthBytes:12,tagLengthBytes:16};function L(e){return new Uint8Array(e)}function R(e){return L(new TextEncoder().encode(JSON.stringify([e.publicKey,e.createdAt,e.expiresAt,e.tkmsVersion??null])))}function ye(e){return typeof e==`string`?new TextEncoder().encode(e):L(e)}var be=class{#e;#t;constructor(e){this.#e=e}async baseKey(){return this.#t??=this.#n(this.#e),this.#t}async#n(e){let t=ye(e),n=await crypto.subtle.importKey(`raw`,t,`HKDF`,!1,[`deriveKey`]);return t.fill(0),e instanceof Uint8Array&&e.fill(0),this.#e=void 0,n}};async function z(e,t){let n=await e.baseKey();return crypto.subtle.deriveKey({name:`HKDF`,hash:`SHA-256`,salt:new TextEncoder().encode(t),info:new TextEncoder().encode(I.info)},n,{name:`AES-GCM`,length:256},!1,[`encrypt`,`decrypt`])}async function xe(e,t,n,r){let i=await z(t,n),a=crypto.getRandomValues(new Uint8Array(I.ivLengthBytes)),o=await crypto.subtle.encrypt({name:`AES-GCM`,iv:a,additionalData:R(r)},i,L(j(e)));return{wrappedPrivateKey:M(new Uint8Array(o)),iv:M(a)}}async function Se(e,t,n,r){let i=await z(t,n),a=await crypto.subtle.decrypt({name:`AES-GCM`,iv:L(j(e.iv)),additionalData:R(r)},i,L(j(e.wrappedPrivateKey)));return M(new Uint8Array(a))}function Ce(e){return typeof e==`object`&&!!e&&`name`in e&&e.name===`OperationError`}const B=86400;function V(){return Math.floor(Date.now()/1e3)}function H(e){return[...new Set(e.map(S))].sort()}function we(e){let{chainId:t}=e.domain;return typeof t==`bigint`?{...e,domain:{...e.domain,chainId:t.toString()}}:e}const U=`transportKeyPairTTL must be a positive integer number of seconds`,Te=`permitTTL must be a positive integer number of days`,Ee=`transportKeyPairScope must be a non-empty string`,W=`transportKeyPairDerivationSecret must be a Uint8Array of at least 32 bytes or a string of at least 64 characters (256 bits of entropy): source it from a CSPRNG or secrets manager, not a human-memorable passphrase`,De=365*B,Oe=N.int({error:U}).check(N.positive({error:U}),N.maximum(De,`transportKeyPairTTL must not exceed the fhevm ACL maximum of ${De}s (365 days)`)),ke=N.int({error:Te}).check(N.positive({error:Te}),N.maximum(365,`permitTTL must not exceed the V1 permit maximum of 365 days`)),Ae=N.string({error:Ee}).check(N.minLength(1,Ee)),je=N.union([N.string({error:W}).check(N.minLength(64,W)),N.instanceof(Uint8Array,{error:W}).check(N.refine(e=>e.byteLength>=32,{error:W}))],{error:W}),Me=N.object({publicKey:b,privateKey:b,createdAt:x,expiresAt:te,tkmsVersion:N.optional(N.string())}),G=N.object({domain:N.record(N.string(),N.unknown()),primaryType:N.optional(N.string()),types:N.record(N.string(),N.array(N.object({name:N.string(),type:N.string()}))),message:N.record(N.string(),N.unknown())}),K=N.object({version:N.int().check(N.positive()),eip712:G,signature:b,signerAddress:y}),q=N.object({keypairPublicKey:b,contractAddresses:N.array(y).check(N.maxLength(10)),serializedPermit:K,startTimestamp:x,durationDays:v}),Ne=N.array(q),Pe=N.array(N.string()),Fe=N.object({version:N.literal(1),eip712:G,signerAddress:y}),Ie=`iv must be a ${I.ivLengthBytes}-byte hex string`,Le=`wrappedPrivateKey must be a whole number of bytes and at least ${I.tagLengthBytes} bytes (the AES-GCM authentication tag)`;function Re(e){return(e.length-2)/2}const ze=N.object({wrappingVersion:N.literal(I.version,{error:`wrappingVersion must be a wrapping scheme this SDK can read`}),publicKey:b,wrappedPrivateKey:b.check(N.refine(e=>e.length%2==0&&Re(e)>=I.tagLengthBytes,{error:Le})),iv:b.check(N.refine(e=>Re(e)===I.ivLengthBytes,{error:Ie})),createdAt:x,expiresAt:te,tkmsVersion:N.optional(N.string())});function Be(e){let t={publicKey:e.publicKey,createdAt:e.createdAt,expiresAt:e.expiresAt};return e.tkmsVersion&&(t.tkmsVersion=e.tkmsVersion),t}const J={version:I.version,schema:ze,async encode(e,t,n){let{wrappedPrivateKey:r,iv:i}=await xe(e.privateKey,t,n,Be(e)),a={wrappingVersion:I.version,publicKey:e.publicKey,wrappedPrivateKey:r,iv:i,createdAt:e.createdAt,expiresAt:e.expiresAt};return e.tkmsVersion&&(a.tkmsVersion=e.tkmsVersion),a},async decode(e,t,n){let r=await Se({wrappedPrivateKey:e.wrappedPrivateKey,iv:e.iv},t,n,Be(e)),i={publicKey:e.publicKey,privateKey:r,createdAt:e.createdAt,expiresAt:e.expiresAt};return e.tkmsVersion&&(i.tkmsVersion=e.tkmsVersion),i}},Ve=new Map([[J.version,J]]),He=J;function Ue(e){let t=e;return t.wrappingVersion!==void 0||t.wrappedPrivateKey!==void 0&&t.iv!==void 0}function We(e){if(typeof e!=`object`||!e||!Ue(e)){let t=Me.safeParse(e);return t.success?{kind:`plaintext`,keyPair:t.data}:{kind:`unrecognized`}}let t=e.wrappingVersion,n=typeof t==`number`?Ve.get(t):void 0;if(n===void 0)return{kind:`unsupported-version`,version:t};let r=n.schema.safeParse(e);if(!r.success)return{kind:`corrupt-wrapped`};let i=r.data;return{kind:`wrapped`,expiresAt:i.expiresAt,decode:(e,t)=>n.decode(i,e,t)}}function Ge(e,t,n){return He.encode(e,t,n)}function Ke(e){return`keypair:${e}`}function Y(e){return`keypair:scope:${e}`}function X(e){return`permits:${e.signerAddress}:${e.chainId}:${e.delegatorAddress}`}function Z(e){return`permits-index:${e}`}function qe(e){return`scope:${e}`}function Je(e,t){return{"wrapped-without-secret":`Transport key pair for scope "${t}" is wrapped, but this instance has no transportKeyPairDerivationSecret configured. Every instance sharing this scope must use the same transportKeyPairDerivationSecret; once they do, call permits.revokeTransportKeyPair() to rotate the entry.`,"unwrapped-under-secret":`Transport key pair for scope "${t}" is stored unwrapped, but this instance is configured with a transportKeyPairDerivationSecret. A peer instance sharing this scope is running without the secret: configure the same transportKeyPairDerivationSecret everywhere, then call permits.revokeTransportKeyPair() to migrate the scope to a wrapped entry.`,"unwrap-failed":`Transport key pair for scope "${t}" failed to unwrap. This usually means another instance created it with a different transportKeyPairDerivationSecret: every instance sharing this scope must use the same secret. It can also mean the stored entry is corrupted.`,"corrupt-wrapped":`Transport key pair for scope "${t}" is wrapped but structurally invalid: the stored iv or ciphertext is not a shape this wrapping scheme can produce. This usually means the stored entry is corrupted, or instances sharing this scope are running mismatched wrapping-scheme versions.`}[e]}const Ye={"unwrapped-under-secret":`unwrapped transport key pair entry found while a transportKeyPairDerivationSecret is configured`,"unwrap-failed":`transport key pair entry failed to unwrap (wrong transportKeyPairDerivationSecret?)`,"corrupt-wrapped":`structurally invalid wrapped transport key pair entry`};function Xe(e,t){let n=typeof e==`number`?`wrappingVersion ${e}`:`no wrappingVersion this build recognizes`;return`Transport key pair ${t===void 0?`for this signer`:`for scope "${t}"`} was written under a wrapping scheme this SDK build cannot read (${n}). The entry is preserved instead of regenerated, since an instance that understands the scheme may still be using it: ${t===void 0?`run a build that supports it, or call permits.clear() to discard the entry deliberately`:`run a build that supports it everywhere, or call permits.revokeTransportKeyPair() to rotate the scope`}.`}var Ze=class{#e;#t;#n;#r;#i;#a;#o=new Map;#s=new Map;constructor(e){this.#e=e.generator,this.#t=e.storage,this.#n=e.ttl,this.#r=e.logger,this.#i=e.scope,this.#a=e.derivationSecret}#c(e){return this.#i===void 0?`signer:${e}`:qe(this.#i)}#l(e){return this.#i===void 0?Ke(e):Y(this.#i)}async readStored(e){return this.#u(this.#l(e),this.#c(e))}async#u(e,t){let n=await this.#t.get(e);if(n==null)return null;let r=We(n);if(r.kind===`unsupported-version`)throw this.#f(e,Xe(r.version,this.#i));if(r.kind===`unrecognized`)return await this.#m(e,`malformed transport key pair entry`),null;let i=this.#a;if(i===void 0)return r.kind===`plaintext`?await this.#p(e,r.keyPair.expiresAt)?null:r.keyPair:this.#d(e,`wrapped-without-secret`);if(r.kind===`plaintext`)return this.#d(e,`unwrapped-under-secret`);if(r.kind===`corrupt-wrapped`)return this.#d(e,`corrupt-wrapped`);if(await this.#p(e,r.expiresAt))return null;try{return await r.decode(i,t)}catch(t){if(!Ce(t))throw this.#r.error(`transport key pair unwrap failed unexpectedly`,{key:e,error:t}),new g(`Transport key pair unwrap failed unexpectedly.`,{cause:t});return this.#d(e,`unwrap-failed`,t)}}async#d(e,t,n){if(this.#i!==void 0)throw this.#f(e,Je(t,this.#i),n);if(t===`wrapped-without-secret`)throw this.#f(e,`Transport key pair for this signer is wrapped, but this instance has no transportKeyPairDerivationSecret configured. Configure the same transportKeyPairDerivationSecret the entry was written with. To downgrade to plaintext at rest on purpose, discard the stored entry first by calling permits.clear(), then run without the secret.`,n);let r=Ye[t];return this.#r.warn(r,{key:e}),await this.#m(e,r),null}#f(e,t,n){return this.#r.error(t,{key:e}),new g(t,{cause:n})}async#p(e,t){return V()<t?!1:(await this.#m(e,`expired transport key pair entry`),!0)}async#m(e,t){this.#r.debug(`discarding transport key pair entry`,{key:e,reason:t}),await p(`delete transport key pair entry`,()=>this.#t.delete(e),this.#r)}async getOrCreate(e,t){return this.#h(this.#l(e),this.#c(e),{strict:t?.strict})}async#h(e,t,n){let r=n?.strict??!1,i=`${e}::${r}`,a=this.#o.get(i);if(a)return a;let o=this.#s.get(e)??0,s=(async()=>{let n=await this.#u(e,t);if(n!==null)return n;let i=await this.#e(),a=V(),s=a+this.#n,l={publicKey:i.publicKey,privateKey:i.privateKey,createdAt:a,expiresAt:s};i.tkmsVersion&&(l.tkmsVersion=i.tkmsVersion);let u=l;if(this.#a!==void 0)try{u=await Ge(l,this.#a,t)}catch(t){let n=`Failed to wrap the transport private key for at-rest storage.`;throw this.#r.error(n,{key:e,error:t}),new g(n,{cause:t})}if((this.#s.get(e)??0)===o)r?await this.#t.set(e,u):await p(`persist transport key pair`,()=>this.#t.set(e,u),this.#r);else if(r)throw new c(`The transport key pair was rotated while it was being generated, so the freshly generated key pair could not be persisted. Retry.`);return l})().finally(()=>{this.#o.delete(i)});return this.#o.set(i,s),s}async clear(e){let t=Ke(e);await p(`delete transport key pair entry`,()=>this.#t.delete(t),this.#r)}async evict(e){let t=this.#l(e);await p(`evict transport key pair entry`,()=>this.#t.delete(t),this.#r)}async clearScope(){if(this.#i===void 0)return;let e=Y(this.#i);this.#s.set(e,(this.#s.get(e)??0)+1),await this.#t.delete(e)}async warmScope(){this.#i!==void 0&&await this.#h(Y(this.#i),qe(this.#i),{strict:!0})}};function Qe(e,t){let n=new Set(e.flatMap(e=>e.contractAddresses));return t.filter(e=>!n.has(e))}function $e(e){let t=[];for(let n=0;n<e.length;n+=10)t.push(e.slice(n,n+10));return t}function et(e,t,n){return e.filter(e=>e.keypairPublicKey===t&&n<e.startTimestamp+e.durationDays*86400)}function tt(e,t){let n=new Set(t);return e.filter(e=>!e.contractAddresses.some(e=>n.has(e)))}function nt(e,t){return[...new Set([...e,...t])].sort()}function rt(e,t,n){let r=new Set(n),i=e.filter(e=>new Set([...e.contractAddresses,...t]).size<=10);if(i.length===0)return null;function a(e){return e.contractAddresses.reduce((e,t)=>e+ +!!r.has(t),0)}let o=Math.max(...i.map(a));return i.filter(e=>a(e)===o).reduce((e,t)=>t.startTimestamp>e.startTimestamp?t:e)}var it=class{#e;#t;constructor(e){this.#e=e.storage,this.#t=e.logger}async list(e){let t=X(e),n=await this.#e.get(t);if(n==null)return[];let r=Ne.safeParse(n);return r.success?r.data:(await this.clearScope(e),[])}async listUsableAndPrune(e,t){let n=await this.list(e),r=et(n,t,Math.floor(Date.now()/1e3));return r.length!==n.length&&(r.length===0?await this.clearScope(e):await p(`update permit entry`,()=>this.#e.set(X(e),r),this.#t)),r}async append(e,t){if(t.length===0)return;let n=t.map(e=>q.parse(e)),r=await this.list(e);await this.#e.set(X(e),[...r,...n]),await this.#r(e)}async replace(e,t,n){let r=q.parse(n),i=(await this.list(e)).filter(e=>e.serializedPermit.signature!==t);await this.#e.set(X(e),[...i,r]),await this.#r(e)}async deletePermitsTouching(e,t){let n=await this.list(e);if(n.length===0)return;let r=tt(n,t);r.length===0?await this.clearScope(e):await this.#e.set(X(e),r)}async clearScope(e){await this.#a(X(e)),await this.#i(e)}async clearAllForSigner(e){let t=Z(e),n=await this.#n(t);await Promise.all(n.map(e=>this.#a(e))),await p(`delete permit index`,()=>this.#e.delete(t),this.#t)}async#n(e){let t=await this.#e.get(e);if(t==null)return[];let n=Pe.safeParse(t);return n.success?n.data:(await p(`delete permit index`,()=>this.#e.delete(e),this.#t),[])}async#r(e){let t=Z(e.signerAddress),n=X(e),r=await this.#n(t);r.includes(n)||await this.#e.set(t,[...r,n])}async#i(e){let t=Z(e.signerAddress),n=X(e),r=await this.#n(t),i=r.filter(e=>e!==n);i.length!==r.length&&(i.length===0?await p(`delete permit index`,()=>this.#e.delete(t),this.#t):await p(`update permit index`,()=>this.#e.set(t,i),this.#t))}async#a(e){await p(`delete permit entry`,()=>this.#e.delete(e),this.#t)}};async function at(e,t,n){let r=e.get(t);if(r!==void 0)return r;let i=await n();return e.set(t,i),i}var ot=class{#e;#t;#n;#r;#i;#a;#o;#s;#c=new Map;constructor(e){this.#e=new Ze({generator:async()=>{let t=e.router.relayer,n=await t.generateTransportKeyPair();return t.serializeTransportKeyPair({transportKeyPair:n})},storage:e.storage,ttl:e.transportKeyPairTTL,logger:e.logger,scope:e.scope,derivationSecret:e.derivationSecret}),this.#t=new it({storage:e.permitStorage??e.storage,logger:e.logger}),this.#n=e.router,this.#r=e.signer,this.#i=e.permitTTL,this.#a=e.logger,this.#o=e.emitEvent,this.#s=e.scope}#l(e){if(!this.#r)throw new o(e);return this.#r}#u(e,t,n=``){let r=a(t,{operation:e});return n&&(r.message=n+r.message),this.#o({type:i.PermitError,operation:e,error:r}),r}async grantPermit(e,t){let n=t===void 0?`grantPermit`:`grantDelegationPermit`,r,i,a;try{r=S(this.#l(`grantPermit`).requireWalletAccount(`grantPermit`).address),i=H(e),a=this.#f(r,t)}catch(e){throw this.#u(n,e)}let o=await this.#e.getOrCreate(r);if(i.length===0)return{keypair:o,permissions:[]};let s;try{s=await this.#t.listUsableAndPrune(a,o.publicKey)}catch(e){throw this.#u(n,e)}let c=Qe(s,i);if(c.length>0){let e=rt(s,c,i);if(e!==null){let t=nt(e.contractAddresses,c),n=await this.#p({chunk:t,keypair:o,scope:a});await p(`replace permit`,()=>this.#t.replace(a,e.serializedPermit.signature,n),this.#a),s[s.indexOf(e)]=n}else for(let e of $e(c)){let t=await this.#p({chunk:e,keypair:o,scope:a});s.push(t),await p(`persist permit`,()=>this.#t.append(a,[t]),this.#a)}}let l=new Set(i);return{keypair:o,permissions:s.filter(e=>e.contractAddresses.some(e=>l.has(e)))}}async preparePermit(e){let t=H(e.contracts).length;if(t>10)throw new n(`preparePermit: request.contracts must not exceed 10 addresses (got ${t}). Use batchPreparePermits to split them across permits.`);let[r]=await this.batchPreparePermits(e);return s(r,`batchPreparePermits result`),r}async batchPreparePermits(e){let t=S(e.signer),r=H(e.contracts);if(r.length===0)throw new n(`request.contracts must not be empty.`);let i=e.delegator?S(e.delegator):void 0;if(i!==void 0&&i===t)throw new n(`request.delegator must differ from request.signer: self-delegation is not allowed.`);let a=e.durationDays===void 0?this.#i:C(ke,e.durationDays),o=this.#n.relayer,s=await this.#e.getOrCreate(t,{strict:!0}),c=await o.parseTransportKeyPair(s),l=V();return Promise.all($e(r).map(async e=>({version:1,eip712:we(G.parse(await o.createUnsignedLegacyDecryptionPermitEip712({transportKeyPair:c,contractAddresses:e,startTimestamp:l,durationSeconds:a*B,...i&&{delegatorAddress:i}}))),signerAddress:t})))}async batchRegisterPermits(e){if(e.length===0)throw new n(`permits must not be empty.`);let t={relayer:this.#n.relayer,activeChainId:this.#n.chain.id,storedKeyPairs:new Map,transportKeyPairs:new Map},r=[];for(let[n,{prepared:i,signature:a}]of e.entries()){let o=e.length>1?`permits[${n}]: `:``;r.push(await this.#d(i,a,t,o))}for(let{scope:e,permission:t}of r)await p(`replace permit`,()=>this.#t.replace(e,t.serializedPermit.signature,t),this.#a)}async#d(e,t,{relayer:r,activeChainId:i,storedKeyPairs:a,transportKeyPairs:o},s){let d;try{d=C(Fe,e)}catch(e){throw this.#u(`registerPermit`,e,s)}let{domain:f,message:p}=d.eip712,m=Number(f.chainId);if(m!==i)throw this.#u(`registerPermit`,new u({preparedChainId:m,activeChainId:i}),s);let h=Number(p.startTimestamp),g=Number(p.durationDays);if(V()>=h+g*86400)throw this.#u(`registerPermit`,new l(`registerPermit: the prepared permit's validity window (starting ${h}, ${g}d) has already elapsed. Prepare the permit again.`),s);let _=d.signerAddress,v=await at(a,_,()=>this.#e.readStored(_));if(v===null||v.publicKey!==p.publicKey)throw new c(`${s}registerPermit: the transport key pair changed since the permit was prepared. Prepare it again to rebind the signature request to the current key pair.`);try{let e=await at(o,_,()=>r.parseTransportKeyPair(v)),a=await r.parseSignedDecryptionPermit({serializedPermit:{version:d.version,eip712:d.eip712,signature:t,signerAddress:_},transportKeyPair:e});if(a.version!==1)throw new n(`registerPermit: expected a V1 signed permit, got version ${a.version}.`);let s=C(K,await r.serializeSignedDecryptionPermit({signedPermit:a})),c={keypairPublicKey:v.publicKey,contractAddresses:H(a.eip712.message.contractAddresses),serializedPermit:s,startTimestamp:Number(a.eip712.message.startTimestamp),durationDays:Number(a.eip712.message.durationDays)};return{scope:{signerAddress:_,chainId:i,delegatorAddress:S(a.encryptedDataOwnerAddress)},permission:c}}catch(e){throw this.#u(`registerPermit`,e,s)}}async hasPermit(e,t){if(e.length===0)return!0;let n=this.#r?.walletAccount.getSnapshot();if(!n)return!1;let r=S(n.address),i;try{i=await this.#e.readStored(r)}catch(e){if(!(e instanceof g))throw e;return!1}if(i===null)return!1;let a=this.#f(r,t);return Qe(await this.#t.listUsableAndPrune(a,i.publicKey),H(e)).length===0}async revokePermits(e){let t=S(this.#l(`revokePermits`).requireWalletAccount(`revokePermits`).address);if(e===void 0){await this.#t.clearAllForSigner(t);return}let n=H(e);n.length!==0&&await this.#t.deletePermitsTouching(this.#f(t),n)}#f(e,t){return{signerAddress:e,chainId:this.#n.chain.id,delegatorAddress:t?S(t):e}}async clearCredentials(){let e=S(this.#l(`clearCredentials`).requireWalletAccount(`clearCredentials`).address);await this.#e.clear(e),await this.#t.clearAllForSigner(e)}async revokeTransportKeyPair(e){if(this.#s===void 0)throw new n(`revokeTransportKeyPair() requires a transportKeyPairScope to be configured on this SDK instance — there is no shared key pair to revoke.`);if(e!==this.#s)throw new n(`revokeTransportKeyPair("${e}") does not match the configured scope ("${this.#s}").`);await this.#e.clearScope()}async warmTransportKeyPair(e){await this.#e.getOrCreate(S(e))}async warmTransportKeyPairScope(e){if(this.#s===void 0)throw new n(`warmTransportKeyPairScope() requires a transportKeyPairScope to be configured on this SDK instance — there is no shared key pair to warm.`);if(e!==this.#s)throw new n(`warmTransportKeyPairScope("${e}") does not match the configured scope ("${this.#s}").`);await this.#e.warmScope()}async handleWalletAccountChange(e,t){let n=e?S(e.address):void 0;n!==(t?S(t.address):void 0)&&n&&(await this.#e.clear(n),await this.#t.clearAllForSigner(n))}async#p(n){let{chunk:r,keypair:i,scope:a}=n,o=V(),s=a.delegatorAddress!==a.signerAddress,c=this.#n.relayer;try{let e={transportKeyPair:await c.parseTransportKeyPair(i),contractAddresses:r,startTimestamp:o,durationSeconds:this.#i*B,signerAddress:a.signerAddress,signer:this.#l(`signPermit`)},t=s?await c.signDecryptionPermit({...e,delegatorAddress:a.delegatorAddress}):await c.signDecryptionPermit(e),n=C(K,await c.serializeSignedDecryptionPermit({signedPermit:t}));return{keypairPublicKey:i.publicKey,contractAddresses:r,serializedPermit:n,startTimestamp:o,durationDays:this.#i}}catch(n){let r=s?`grantDelegationPermit`:`grantPermit`;throw!(n instanceof t)&&n instanceof Error&&e(n.message)&&await this.#e.evict(a.signerAddress),this.#u(r,n)}}async evictTransportKeyPair(){let e=this.#r?.walletAccount.getSnapshot();e&&await this.#e.evict(S(e.address))}async recoverPermits(e,t,n){let r=this.#l(`recoverPermits`).requireWalletAccount(`recoverPermits`),i=this.#f(S(r.address),t),a=X(i),o=this.#c.get(a);if(o)return await o,this.grantPermit(e,t);let s=await this.#m(i),c=this.#c.get(a);if(c)return await c,this.grantPermit(e,t);if(s===null)return this.grantPermit(e,t);let l=new Set(n??[]);if(l.size>0&&!s.some(e=>l.has(e.serializedPermit.signature)))return this.grantPermit(e,t);let u=s.filter(e=>!l.has(e.serializedPermit.signature)),d=s.flatMap(e=>e.contractAddresses),f=this.#h(i,d,e,u,t).finally(()=>{this.#c.delete(a)});return this.#c.set(a,f),await f,this.grantPermit(e,t)}async#m(e){try{return await this.#t.list(e)}catch(e){return this.#a.warn(`read permits for recovery failed`,{error:e}),null}}async#h(e,t,n,r,i){await p(`evict revoked permits`,()=>this.#t.clearScope(e),this.#a);try{await this.grantPermit(nt(t,H(n)),i)}catch(t){throw r.length>0&&await p(`restore surviving permits`,async()=>{let t=await this.#t.list(e),n=new Set(t.map(e=>e.serializedPermit.signature)),i=r.filter(e=>!n.has(e.serializedPermit.signature));i.length>0&&await this.#t.append(e,i)},this.#a),t}}},st=class{#e;#t=`[zama-sdk]`;constructor(e){this.#e=e}error(e,t){this.#e?.error(`${this.#t} ${e}`,t)}warn(e,t){this.#e?.warn(`${this.#t} ${e}`,t)}info(e,t){this.#e?.info(`${this.#t} ${e}`,t)}debug(e,t){this.#e?.debug(`${this.#t} ${e}`,t)}warnAlways(e){console.warn(`${this.#t} ${e}`),this.warn(e)}};const ct={[se.id]:se.registryAddress,[ce.id]:ce.registryAddress,[k.id]:k.registryAddress,[O.id]:O.registryAddress,[D.id]:D.registryAddress,[le.id]:le.registryAddress,[oe.id]:oe.registryAddress},lt=N.record(N.string().check(N.regex(/^\d+$/,`expected numeric chain id key`)),y),ut=ee,Q=300*1e3;var dt=class{provider;#e;#t;#n=new Map;constructor(e){this.provider=e.provider,this.#e=Object.assign({},ct,C(N.optional(lt),e.registryAddresses)),this.#t=C(ut,e.registryTTL??86400)*1e3}getAddress(e){return this.#e[e]}#r(e){let t=this.#n.get(e);if(t){if(Date.now()>=t.expiresAt){this.#n.delete(e);return}return t.data}}#i(e,t,n=this.#t){return this.#n.set(e,{data:t,expiresAt:Date.now()+n}),t}refresh(){this.#n.clear()}get ttlMs(){return this.#t}async getRegistryAddress(){let e=await this.provider.getChainId(),t=this.#e[e];if(!t)throw new n(`No wrappers registry address configured for chain ${e}.\nPass a registryAddresses entry for this chain.`);return A(t)}async listPairs(e={}){let t=e.page??1,r=e.pageSize??100,i=e.metadata??!1;if(t<1)throw new n(`page must be >= 1, got ${t}`);if(r<1)throw new n(`pageSize must be >= 1, got ${r}`);let a=await this.getRegistryAddress(),o=`total:${a}`,s=this.#r(o);if(s===void 0){let e=await this.provider.readContract(ne(a));s=this.#i(o,Number(e))}let c=BigInt((t-1)*r),l=c+BigInt(r)>BigInt(s)?BigInt(s):c+BigInt(r);if(c>=BigInt(s))return{items:[],total:s,page:t,pageSize:r};let u=`slice:${a}:${c}:${l}`,d=this.#r(u);if(d===void 0){let e=await this.provider.readContract(T(a,c,l));d=this.#i(u,[...e])}if(!i)return{items:d,total:s,page:t,pageSize:r};let f=`metadata:${a}:${c}:${l}`,p=this.#r(f);if(p===void 0){let e=await Promise.allSettled(d.map(e=>this.#a(e))),t=e.some(e=>e.status===`rejected`),n=e.map((e,t)=>e.status===`fulfilled`?e.value:Object.assign({},d[t],{metadataFailed:!0,underlying:{name:`Unknown`,symbol:`???`,decimals:0,totalSupply:0n},confidential:{name:`Unknown`,symbol:`???`,decimals:0}}));p=this.#i(f,n,t?Q:void 0)}return{items:p,total:s,page:t,pageSize:r}}async#a(e){let[t,n,r,i,a,o,s]=await Promise.all([this.provider.readContract(h(e.tokenAddress)),this.provider.readContract(m(e.tokenAddress)),this.provider.readContract(d(e.tokenAddress)),this.provider.readContract(f(e.tokenAddress)),this.provider.readContract(h(e.confidentialTokenAddress)),this.provider.readContract(m(e.confidentialTokenAddress)),this.provider.readContract(d(e.confidentialTokenAddress))]);return{...e,underlying:{name:t,symbol:n,decimals:r,totalSupply:i},confidential:{name:a,symbol:o,decimals:s}}}async getConfidentialToken(e){let t=await this.getRegistryAddress(),n=A(e),r=`ct:${t}:${n}`,i=this.#r(r);if(i!==void 0)return i;let[a,o]=await this.provider.readContract(E(t,n));return o===ue?this.#i(r,null,Q):this.#i(r,{confidentialTokenAddress:o,isValid:a})}async getUnderlyingToken(e){let t=await this.getRegistryAddress(),n=A(e),r=`ut:${t}:${n}`,i=this.#r(r);if(i!==void 0)return i;let[a,o]=await this.provider.readContract(w(t,n));return o===ue?this.#i(r,null,Q):this.#i(r,{tokenAddress:o,isValid:a})}async getTokenPairs(){let e=await this.getRegistryAddress();return this.provider.readContract(re(e))}async getTokenPairsLength(){let e=await this.getRegistryAddress();return this.provider.readContract(ne(e))}async getTokenPairsSlice(e,t){let n=await this.getRegistryAddress();return this.provider.readContract(T(n,e,t))}async getTokenPair(e){let t=await this.getRegistryAddress();return this.provider.readContract(ie(t,e))}async getConfidentialTokenAddress(e){let t=await this.getRegistryAddress();return this.provider.readContract(E(t,A(e)))}async getTokenAddress(e){let t=await this.getRegistryAddress();return this.provider.readContract(w(t,A(e)))}async isConfidentialTokenValid(e){let t=await this.getRegistryAddress();return this.provider.readContract(ae(t,A(e)))}};function ft(e,t,n){let r=new st(n.logger),i=n.logger,a={wasmAssetLoadMode:`auto`,moduleVersions:`auto`,logger:{error:(e,t)=>i?.error(e,{cause:t}),warn:e=>i?.warn(e),debug:e=>i?.debug(e)},...n.runtime};if(de()){let e=`runtime configuration is already set and cannot be changed.`;n.runtime===void 0?r.debug(e):r.warn(e)}else fe(a),_(a);let{storage:o,permitStorage:s}=ge(n.storage,n.permitStorage),c=n.telemetry===!1?void 0:{layer:`core`},l=new ve(n.chains,n.relayers,r,c);return{chains:n.chains,router:l,provider:t,signer:e,storage:o,permitStorage:s,transportKeyPairTTL:C(Oe,n.transportKeyPairTTL??2592e3),permitTTL:C(ke,n.permitTTL??30),transportKeyPairScope:n.transportKeyPairScope===void 0?void 0:C(Ae,n.transportKeyPairScope),registryTTL:C(ut,n.registryTTL??86400),logger:r,onEvent:n.onEvent,telemetry:c}}function pt(e,t){return e?.address===t?.address&&e?.chainId===t?.chainId}var $=class{#e=new Set;#t;#n;constructor(e){this.#t=e,this.#n=e!==void 0}getSnapshot(){return this.#t}isReady(){return this.#n}setSnapshot(e){this.#n=!0;let t=this.#t;pt(t,e)||(this.#t=e,this.#r({previous:t,next:e}))}subscribe(e){this.#e.add(e);let t=this.#t;return t&&e({previous:void 0,next:t}),()=>{this.#e.delete(e)}}#r(e){for(let t of this.#e)t(e)}};function mt(e){return new $(e)}var ht=class{walletAccount;#e=!1;constructor(e){this.walletAccount=new $(e)}requireWalletAccount(e){let t=this.walletAccount.getSnapshot();if(!t)throw new r(e);return t}dispose(){this.#e||(this.#e=!0,this.onDispose())}[Symbol.dispose](){this.dispose()}onDispose(){}};export{ct as a,je as c,me as d,P as f,ft as i,be as l,$ as n,dt as o,pe as p,mt as r,ot as s,ht as t,F as u};
2
+ //# sourceMappingURL=base-signer-ClrhHzbm.js.map