@zama-fhe/react-sdk 3.0.0-alpha.41 → 3.0.0-alpha.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,13 +1,10 @@
1
1
  "use client";
2
2
 
3
- import * as _$_zama_fhe_sdk0 from "@zama-fhe/sdk";
4
- import { Address, BatchBalancesResult, ClearValueType, EncryptParams, PaginatedResult, Token, TokenWrapperPair, TokenWrapperPairWithMetadata, TransactionResult, WrappedToken, ZamaConfig, ZamaSDK } from "@zama-fhe/sdk";
5
- import { ApproveUnderlyingParams, BatchDecryptBalancesAsParams, ConfidentialSetOperatorParams, ConfidentialTransferFromParams, ConfidentialTransferParams, DecryptBalanceAsParams, DecryptResult, DelegateDecryptionParams, DelegatedDecryptMutationParams, DelegationStatusData, FinalizeUnwrapParams, ResumeUnshieldParams, RevokeDelegationParams, ShieldParams, TokenMetadata, UnshieldAllParams, UnshieldParams, UnwrapParams, UserDecryptQueryConfig } from "@zama-fhe/sdk/query";
6
- import * as _$_tanstack_react_query0 from "@tanstack/react-query";
3
+ import { Address, BatchBalancesResult, EncryptParams, PaginatedResult, Token, TokenWrapperPair, TokenWrapperPairWithMetadata, TransactionResult, WrappedToken, ZamaConfig, ZamaSDK } from "@zama-fhe/sdk";
4
+ import { ApproveUnderlyingParams, BatchDecryptBalancesAsParams, ConfidentialSetOperatorParams, ConfidentialTransferFromParams, ConfidentialTransferParams, DecryptBalanceAsParams, DecryptResult, DelegateDecryptionParams, DelegatedDecryptMutationParams, DelegationStatusData, FinalizeUnwrapParams, ResumeUnshieldParams, RevokeDelegationParams, ShieldParams, TokenMetadata, UnshieldAllParams, UnshieldParams, UnwrapParams } from "@zama-fhe/sdk/query";
7
5
  import { UseMutationOptions, UseMutationResult, UseQueryOptions } from "@tanstack/react-query";
8
6
  import { PropsWithChildren } from "react";
9
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
10
- import * as _$_zama_fhe_relayer_sdk_web0 from "@zama-fhe/relayer-sdk/web";
7
+ import { EncryptedInput } from "@zama-fhe/sdk/query/user-decrypt";
11
8
 
12
9
  //#region src/provider.d.ts
13
10
  /** Props for {@link ZamaProvider}. */
@@ -28,7 +25,7 @@ interface ZamaProviderProps extends PropsWithChildren {
28
25
  declare function ZamaProvider({
29
26
  children,
30
27
  config
31
- }: ZamaProviderProps): _$react_jsx_runtime0.JSX.Element;
28
+ }: ZamaProviderProps): import("react/jsx-runtime").JSX.Element;
32
29
  /**
33
30
  * Access the {@link ZamaSDK} instance from context.
34
31
  * Throws if called outside a {@link ZamaProvider}.
@@ -57,7 +54,7 @@ declare function useZamaSDK(): ZamaSDK;
57
54
  * encrypt.mutate({ values: [{ value: 1000n, type: "euint64" }], contractAddress: "0x...", userAddress: "0x..." });
58
55
  * ```
59
56
  */
60
- declare function useEncrypt(): _$_tanstack_react_query0.UseMutationResult<Readonly<{
57
+ declare function useEncrypt(): import("@tanstack/react-query").UseMutationResult<Readonly<{
61
58
  handles: Uint8Array[];
62
59
  inputProof: Uint8Array;
63
60
  }>, Error, EncryptParams, unknown>;
@@ -67,7 +64,7 @@ declare function useEncrypt(): _$_tanstack_react_query0.UseMutationResult<Readon
67
64
  * React hook for FHE user decryption. Thin wrapper around
68
65
  * `userDecryptQueryOptions` with `useQuery` semantics.
69
66
  */
70
- declare function useUserDecrypt(config: UserDecryptQueryConfig, options?: Omit<UseQueryOptions<DecryptResult>, "queryKey" | "queryFn">): _$_tanstack_react_query0.UseQueryResult<Readonly<Record<`0x${string}`, _$_zama_fhe_sdk0.ClearValueType>>, Error>;
67
+ declare function useUserDecrypt(encryptedInputs: EncryptedInput[], options?: Omit<UseQueryOptions<DecryptResult>, "queryKey" | "queryFn">): import("@tanstack/react-query").UseQueryResult<Readonly<Record<`0x${string}`, import("@zama-fhe/relayer-sdk/web").ClearValueType>>, Error>;
71
68
  /** Return type of {@link useUserDecrypt}. */
72
69
  type UseUserDecryptResult = ReturnType<typeof useUserDecrypt>;
73
70
  //#endregion
@@ -86,8 +83,8 @@ type UseUserDecryptResult = ReturnType<typeof useUserDecrypt>;
86
83
  * // publicDecrypt.data?.clearValues => { "0xHandle1": 500n, ... }
87
84
  * ```
88
85
  */
89
- declare function usePublicDecrypt(): _$_tanstack_react_query0.UseMutationResult<Readonly<{
90
- clearValues: _$_zama_fhe_relayer_sdk_web0.ClearValues;
86
+ declare function usePublicDecrypt(): import("@tanstack/react-query").UseMutationResult<Readonly<{
87
+ clearValues: import("@zama-fhe/relayer-sdk/web").ClearValues;
91
88
  abiEncodedClearValues: `0x${string}`;
92
89
  decryptionProof: `0x${string}`;
93
90
  }>, Error, `0x${string}`[], unknown>;
@@ -102,11 +99,11 @@ declare function usePublicDecrypt(): _$_tanstack_react_query0.UseMutationResult<
102
99
  * @example
103
100
  * ```tsx
104
101
  * const decrypt = useDelegatedDecrypt();
105
- * decrypt.mutate({ handles: [{ handle: "0xHandle1", contractAddress: "0x..." }], delegatorAddress: "0x..." });
102
+ * decrypt.mutate({ encryptedInputs: [{ encryptedValue: "0xHandle1", contractAddress: "0x..." }], delegatorAddress: "0x..." });
106
103
  * // decrypt.data => { "0xHandle1": 1000n }
107
104
  * ```
108
105
  */
109
- declare function useDelegatedDecrypt(): _$_tanstack_react_query0.UseMutationResult<Record<`0x${string}`, ClearValueType>, Error, DelegatedDecryptMutationParams, unknown>;
106
+ declare function useDelegatedDecrypt(): import("@tanstack/react-query").UseMutationResult<Record<`0x${string}`, import("@zama-fhe/relayer-sdk/web").ClearValueType>, Error, DelegatedDecryptMutationParams, unknown>;
110
107
  //#endregion
111
108
  //#region src/permits/use-grant-permit.d.ts
112
109
  /**
@@ -129,7 +126,7 @@ declare function useDelegatedDecrypt(): _$_tanstack_react_query0.UseMutationResu
129
126
  * await grantPermit([tokenAddress, auctionAddress, governanceAddress]);
130
127
  * ```
131
128
  */
132
- declare function useGrantPermit(options?: UseMutationOptions<void, Error, Address[]>): _$_tanstack_react_query0.UseMutationResult<void, Error, `0x${string}`[], unknown>;
129
+ declare function useGrantPermit(options?: UseMutationOptions<void, Error, Address[]>): import("@tanstack/react-query").UseMutationResult<void, Error, `0x${string}`[], unknown>;
133
130
  //#endregion
134
131
  //#region src/permits/use-has-permit.d.ts
135
132
  /** Configuration for {@link useHasPermit}. */
@@ -153,7 +150,7 @@ interface UseHasPermitConfig {
153
150
  * const { data: hasPermit } = useHasPermit({ contractAddresses: ["0xToken"] });
154
151
  * ```
155
152
  */
156
- declare function useHasPermit(config: UseHasPermitConfig): _$_tanstack_react_query0.UseQueryResult<boolean, Error>;
153
+ declare function useHasPermit(config: UseHasPermitConfig): import("@tanstack/react-query").UseQueryResult<boolean, Error>;
157
154
  //#endregion
158
155
  //#region src/permits/use-revoke-permits.d.ts
159
156
  /**
@@ -173,7 +170,7 @@ declare function useHasPermit(config: UseHasPermitConfig): _$_tanstack_react_que
173
170
  * revokePermits(); // every permit, all chains, all delegators
174
171
  * ```
175
172
  */
176
- declare function useRevokePermits(options?: UseMutationOptions<void, Error, Address[] | void>): _$_tanstack_react_query0.UseMutationResult<void, Error, void | `0x${string}`[], unknown>;
173
+ declare function useRevokePermits(options?: UseMutationOptions<void, Error, Address[] | void>): import("@tanstack/react-query").UseMutationResult<void, Error, void | `0x${string}`[], unknown>;
177
174
  //#endregion
178
175
  //#region src/permits/use-clear-credentials.d.ts
179
176
  /**
@@ -187,7 +184,7 @@ declare function useRevokePermits(options?: UseMutationOptions<void, Error, Addr
187
184
  * clearCredentials();
188
185
  * ```
189
186
  */
190
- declare function useClearCredentials(options?: UseMutationOptions<void>): _$_tanstack_react_query0.UseMutationResult<void, Error, void, unknown>;
187
+ declare function useClearCredentials(options?: UseMutationOptions<void>): import("@tanstack/react-query").UseMutationResult<void, Error, void, unknown>;
191
188
  //#endregion
192
189
  //#region src/token/use-token.d.ts
193
190
  /**
@@ -239,9 +236,9 @@ interface UseConfidentialBalanceOptions extends Omit<UseQueryOptions<bigint>, "q
239
236
  enabled?: boolean;
240
237
  }
241
238
  /**
242
- * Hook for fetching a confidential token balance. Reads the on-chain handle and
243
- * decrypts via the SDK; cached values are returned instantly and the relayer is
244
- * only hit when the handle changes.
239
+ * Hook for fetching a confidential token balance. Reads the on-chain encrypted
240
+ * value and decrypts via the SDK; cached clear values are returned instantly
241
+ * and the relayer is only hit when the encrypted value changes.
245
242
  *
246
243
  * @example
247
244
  * ```tsx
@@ -251,7 +248,7 @@ interface UseConfidentialBalanceOptions extends Omit<UseQueryOptions<bigint>, "q
251
248
  * });
252
249
  * ```
253
250
  */
254
- declare function useConfidentialBalance(config: UseConfidentialBalanceConfig, options?: UseConfidentialBalanceOptions): _$_tanstack_react_query0.UseQueryResult<bigint, Error>;
251
+ declare function useConfidentialBalance(config: UseConfidentialBalanceConfig, options?: UseConfidentialBalanceOptions): import("@tanstack/react-query").UseQueryResult<bigint, Error>;
255
252
  //#endregion
256
253
  //#region src/balance/use-confidential-balances.d.ts
257
254
  interface UseConfidentialBalancesConfig {
@@ -285,7 +282,7 @@ interface UseConfidentialBalancesOptions extends Omit<UseQueryOptions<BatchBalan
285
282
  * }
286
283
  * ```
287
284
  */
288
- declare function useConfidentialBalances(config: UseConfidentialBalancesConfig, options?: UseConfidentialBalancesOptions): _$_tanstack_react_query0.UseQueryResult<BatchBalancesResult, Error>;
285
+ declare function useConfidentialBalances(config: UseConfidentialBalancesConfig, options?: UseConfidentialBalancesOptions): import("@tanstack/react-query").UseQueryResult<BatchBalancesResult, Error>;
289
286
  //#endregion
290
287
  //#region src/transfer/use-confidential-transfer.d.ts
291
288
  /** Configuration for {@link useConfidentialTransfer}. */
@@ -350,7 +347,7 @@ declare function useConfidentialTransfer<TContext = unknown>(config: UseConfiden
350
347
  * transferFrom.mutate({ from: "0xOwner", to: "0xRecipient", amount: 500n });
351
348
  * ```
352
349
  */
353
- declare function useConfidentialTransferFrom(address: Address, options?: UseMutationOptions<TransactionResult, Error, ConfidentialTransferFromParams, Address>): _$_tanstack_react_query0.UseMutationResult<TransactionResult, Error, ConfidentialTransferFromParams, `0x${string}`>;
350
+ declare function useConfidentialTransferFrom(address: Address, options?: UseMutationOptions<TransactionResult, Error, ConfidentialTransferFromParams, Address>): import("@tanstack/react-query").UseMutationResult<TransactionResult, Error, ConfidentialTransferFromParams, `0x${string}`>;
354
351
  //#endregion
355
352
  //#region src/operator/use-confidential-set-operator.d.ts
356
353
  /**
@@ -369,7 +366,7 @@ declare function useConfidentialTransferFrom(address: Address, options?: UseMuta
369
366
  * setOperator.mutate({ operator: "0xOperator" });
370
367
  * ```
371
368
  */
372
- declare function useConfidentialSetOperator(address: Address, options?: UseMutationOptions<TransactionResult, Error, ConfidentialSetOperatorParams, Address>): _$_tanstack_react_query0.UseMutationResult<TransactionResult, Error, ConfidentialSetOperatorParams, `0x${string}`>;
369
+ declare function useConfidentialSetOperator(address: Address, options?: UseMutationOptions<TransactionResult, Error, ConfidentialSetOperatorParams, Address>): import("@tanstack/react-query").UseMutationResult<TransactionResult, Error, ConfidentialSetOperatorParams, `0x${string}`>;
373
370
  //#endregion
374
371
  //#region src/operator/use-confidential-is-operator.d.ts
375
372
  interface UseConfidentialIsOperatorConfig {
@@ -404,7 +401,7 @@ interface UseConfidentialIsOperatorSuspenseConfig {
404
401
  * });
405
402
  * ```
406
403
  */
407
- declare function useConfidentialIsOperator(config: UseConfidentialIsOperatorConfig, options?: Omit<UseQueryOptions<boolean>, "queryKey" | "queryFn">): _$_tanstack_react_query0.UseQueryResult<boolean, Error>;
404
+ declare function useConfidentialIsOperator(config: UseConfidentialIsOperatorConfig, options?: Omit<UseQueryOptions<boolean>, "queryKey" | "queryFn">): import("@tanstack/react-query").UseQueryResult<boolean, Error>;
408
405
  /**
409
406
  * Suspense variant of {@link useConfidentialIsOperator}. Suspends rendering
410
407
  * until the operator check resolves.
@@ -418,7 +415,7 @@ declare function useConfidentialIsOperator(config: UseConfidentialIsOperatorConf
418
415
  * });
419
416
  * ```
420
417
  */
421
- declare function useConfidentialIsOperatorSuspense(config: UseConfidentialIsOperatorSuspenseConfig): _$_tanstack_react_query0.UseSuspenseQueryResult<boolean, Error>;
418
+ declare function useConfidentialIsOperatorSuspense(config: UseConfidentialIsOperatorSuspenseConfig): import("@tanstack/react-query").UseSuspenseQueryResult<boolean, Error>;
422
419
  //#endregion
423
420
  //#region src/shield/use-shield.d.ts
424
421
  /** Configuration for {@link useShield}. */
@@ -471,7 +468,7 @@ declare function useShield<TContext = unknown>(config: UseShieldConfig, options?
471
468
  * unwrap.mutate({ amount: 500n });
472
469
  * ```
473
470
  */
474
- declare function useUnwrap(address: Address, options?: UseMutationOptions<TransactionResult, Error, UnwrapParams, Address>): _$_tanstack_react_query0.UseMutationResult<TransactionResult, Error, UnwrapParams, `0x${string}`>;
471
+ declare function useUnwrap(address: Address, options?: UseMutationOptions<TransactionResult, Error, UnwrapParams, Address>): import("@tanstack/react-query").UseMutationResult<TransactionResult, Error, UnwrapParams, `0x${string}`>;
475
472
  //#endregion
476
473
  //#region src/unwrap/use-unwrap-all.d.ts
477
474
  /**
@@ -492,7 +489,7 @@ declare function useUnwrap(address: Address, options?: UseMutationOptions<Transa
492
489
  * unwrapAll.mutate();
493
490
  * ```
494
491
  */
495
- declare function useUnwrapAll(address: Address, options?: UseMutationOptions<TransactionResult, Error, void, Address>): _$_tanstack_react_query0.UseMutationResult<TransactionResult, Error, void, `0x${string}`>;
492
+ declare function useUnwrapAll(address: Address, options?: UseMutationOptions<TransactionResult, Error, void, Address>): import("@tanstack/react-query").UseMutationResult<TransactionResult, Error, void, `0x${string}`>;
496
493
  //#endregion
497
494
  //#region src/unwrap/use-finalize-unwrap.d.ts
498
495
  /**
@@ -519,7 +516,7 @@ declare function useUnwrapAll(address: Address, options?: UseMutationOptions<Tra
519
516
  * );
520
517
  * ```
521
518
  */
522
- declare function useFinalizeUnwrap(address: Address, options?: UseMutationOptions<TransactionResult, Error, FinalizeUnwrapParams, Address>): _$_tanstack_react_query0.UseMutationResult<TransactionResult, Error, FinalizeUnwrapParams, `0x${string}`>;
519
+ declare function useFinalizeUnwrap(address: Address, options?: UseMutationOptions<TransactionResult, Error, FinalizeUnwrapParams, Address>): import("@tanstack/react-query").UseMutationResult<TransactionResult, Error, FinalizeUnwrapParams, `0x${string}`>;
523
520
  //#endregion
524
521
  //#region src/unshield/use-unshield.d.ts
525
522
  /**
@@ -541,7 +538,7 @@ declare function useFinalizeUnwrap(address: Address, options?: UseMutationOption
541
538
  * unshield.mutate({ amount: 500n });
542
539
  * ```
543
540
  */
544
- declare function useUnshield(address: Address, options?: UseMutationOptions<TransactionResult, Error, UnshieldParams, Address>): _$_tanstack_react_query0.UseMutationResult<TransactionResult, Error, UnshieldParams, `0x${string}`>;
541
+ declare function useUnshield(address: Address, options?: UseMutationOptions<TransactionResult, Error, UnshieldParams, Address>): import("@tanstack/react-query").UseMutationResult<TransactionResult, Error, UnshieldParams, `0x${string}`>;
545
542
  //#endregion
546
543
  //#region src/unshield/use-unshield-all.d.ts
547
544
  /**
@@ -562,7 +559,7 @@ declare function useUnshield(address: Address, options?: UseMutationOptions<Tran
562
559
  * unshieldAll.mutate();
563
560
  * ```
564
561
  */
565
- declare function useUnshieldAll(address: Address, options?: UseMutationOptions<TransactionResult, Error, UnshieldAllParams | void, Address>): _$_tanstack_react_query0.UseMutationResult<TransactionResult, Error, void | UnshieldAllParams, `0x${string}`>;
562
+ declare function useUnshieldAll(address: Address, options?: UseMutationOptions<TransactionResult, Error, UnshieldAllParams | void, Address>): import("@tanstack/react-query").UseMutationResult<TransactionResult, Error, void | UnshieldAllParams, `0x${string}`>;
566
563
  //#endregion
567
564
  //#region src/unshield/use-resume-unshield.d.ts
568
565
  /**
@@ -583,7 +580,7 @@ declare function useUnshieldAll(address: Address, options?: UseMutationOptions<T
583
580
  * resumeUnshield.mutate({ unwrapTxHash: "0xabc..." });
584
581
  * ```
585
582
  */
586
- declare function useResumeUnshield(address: Address, options?: UseMutationOptions<TransactionResult, Error, ResumeUnshieldParams, Address>): _$_tanstack_react_query0.UseMutationResult<TransactionResult, Error, ResumeUnshieldParams, `0x${string}`>;
583
+ declare function useResumeUnshield(address: Address, options?: UseMutationOptions<TransactionResult, Error, ResumeUnshieldParams, Address>): import("@tanstack/react-query").UseMutationResult<TransactionResult, Error, ResumeUnshieldParams, `0x${string}`>;
587
584
  //#endregion
588
585
  //#region src/shield/use-underlying-allowance.d.ts
589
586
  interface UseUnderlyingAllowanceConfig {
@@ -610,7 +607,7 @@ interface UseUnderlyingAllowanceSuspenseConfig {
610
607
  * });
611
608
  * ```
612
609
  */
613
- declare function useUnderlyingAllowance(config: UseUnderlyingAllowanceConfig, options?: Omit<UseQueryOptions<bigint>, "queryKey" | "queryFn">): _$_tanstack_react_query0.UseQueryResult<bigint, Error>;
610
+ declare function useUnderlyingAllowance(config: UseUnderlyingAllowanceConfig, options?: Omit<UseQueryOptions<bigint>, "queryKey" | "queryFn">): import("@tanstack/react-query").UseQueryResult<bigint, Error>;
614
611
  /**
615
612
  * Suspense variant of {@link useUnderlyingAllowance}. Suspends rendering until
616
613
  * the allowance resolves.
@@ -623,7 +620,7 @@ declare function useUnderlyingAllowance(config: UseUnderlyingAllowanceConfig, op
623
620
  * });
624
621
  * ```
625
622
  */
626
- declare function useUnderlyingAllowanceSuspense(config: UseUnderlyingAllowanceSuspenseConfig): _$_tanstack_react_query0.UseSuspenseQueryResult<bigint, Error>;
623
+ declare function useUnderlyingAllowanceSuspense(config: UseUnderlyingAllowanceSuspenseConfig): import("@tanstack/react-query").UseSuspenseQueryResult<bigint, Error>;
627
624
  //#endregion
628
625
  //#region src/token/use-wrapper-discovery.d.ts
629
626
  /** Configuration for {@link useWrapperDiscovery}. */
@@ -665,7 +662,7 @@ interface UseWrapperDiscoverySuspenseConfig {
665
662
  * });
666
663
  * ```
667
664
  */
668
- declare function useWrapperDiscovery(config: UseWrapperDiscoveryConfig, options?: Omit<UseQueryOptions<Address | null>, "queryKey" | "queryFn">): _$_tanstack_react_query0.UseQueryResult<`0x${string}` | null, Error>;
665
+ declare function useWrapperDiscovery(config: UseWrapperDiscoveryConfig, options?: Omit<UseQueryOptions<Address | null>, "queryKey" | "queryFn">): import("@tanstack/react-query").UseQueryResult<`0x${string}` | null, Error>;
669
666
  /**
670
667
  * Suspense variant of {@link useWrapperDiscovery}.
671
668
  * Suspends rendering until the wrapper address is resolved.
@@ -681,7 +678,7 @@ declare function useWrapperDiscovery(config: UseWrapperDiscoveryConfig, options?
681
678
  * });
682
679
  * ```
683
680
  */
684
- declare function useWrapperDiscoverySuspense(config: UseWrapperDiscoverySuspenseConfig): _$_tanstack_react_query0.UseSuspenseQueryResult<`0x${string}` | null, Error>;
681
+ declare function useWrapperDiscoverySuspense(config: UseWrapperDiscoverySuspenseConfig): import("@tanstack/react-query").UseSuspenseQueryResult<`0x${string}` | null, Error>;
685
682
  //#endregion
686
683
  //#region src/token/use-metadata.d.ts
687
684
  /**
@@ -698,7 +695,7 @@ declare function useWrapperDiscoverySuspense(config: UseWrapperDiscoverySuspense
698
695
  * // metadata?.name, metadata?.symbol, metadata?.decimals
699
696
  * ```
700
697
  */
701
- declare function useMetadata(tokenAddress: Address, options?: Omit<UseQueryOptions<TokenMetadata>, "queryKey" | "queryFn">): _$_tanstack_react_query0.UseQueryResult<TokenMetadata, Error>;
698
+ declare function useMetadata(tokenAddress: Address, options?: Omit<UseQueryOptions<TokenMetadata>, "queryKey" | "queryFn">): import("@tanstack/react-query").UseQueryResult<TokenMetadata, Error>;
702
699
  /**
703
700
  * Suspense variant of {@link useMetadata}.
704
701
  * Suspends rendering until metadata is loaded.
@@ -711,7 +708,7 @@ declare function useMetadata(tokenAddress: Address, options?: Omit<UseQueryOptio
711
708
  * const { data: metadata } = useMetadataSuspense("0xToken");
712
709
  * ```
713
710
  */
714
- declare function useMetadataSuspense(tokenAddress: Address): _$_tanstack_react_query0.UseSuspenseQueryResult<TokenMetadata, Error>;
711
+ declare function useMetadataSuspense(tokenAddress: Address): import("@tanstack/react-query").UseSuspenseQueryResult<TokenMetadata, Error>;
715
712
  //#endregion
716
713
  //#region src/delegations/use-delegate-decryption.d.ts
717
714
  /**
@@ -727,7 +724,7 @@ declare function useMetadataSuspense(tokenAddress: Address): _$_tanstack_react_q
727
724
  * delegate.mutate({ delegateAddress: "0xDelegate" });
728
725
  * ```
729
726
  */
730
- declare function useDelegateDecryption(address: Address, options?: UseMutationOptions<TransactionResult, Error, DelegateDecryptionParams>): _$_tanstack_react_query0.UseMutationResult<TransactionResult, Error, DelegateDecryptionParams, unknown>;
727
+ declare function useDelegateDecryption(address: Address, options?: UseMutationOptions<TransactionResult, Error, DelegateDecryptionParams>): import("@tanstack/react-query").UseMutationResult<TransactionResult, Error, DelegateDecryptionParams, unknown>;
731
728
  //#endregion
732
729
  //#region src/delegations/use-revoke-delegation.d.ts
733
730
  /**
@@ -742,7 +739,7 @@ declare function useDelegateDecryption(address: Address, options?: UseMutationOp
742
739
  * revoke.mutate({ delegateAddress: "0xDelegate" });
743
740
  * ```
744
741
  */
745
- declare function useRevokeDelegation(address: Address, options?: UseMutationOptions<TransactionResult, Error, RevokeDelegationParams>): _$_tanstack_react_query0.UseMutationResult<TransactionResult, Error, RevokeDelegationParams, unknown>;
742
+ declare function useRevokeDelegation(address: Address, options?: UseMutationOptions<TransactionResult, Error, RevokeDelegationParams>): import("@tanstack/react-query").UseMutationResult<TransactionResult, Error, RevokeDelegationParams, unknown>;
746
743
  //#endregion
747
744
  //#region src/delegations/use-delegation-status.d.ts
748
745
  interface UseDelegationStatusConfig {
@@ -770,7 +767,7 @@ interface UseDelegationStatusConfig {
770
767
  * // data?.isActive, data?.expiryTimestamp
771
768
  * ```
772
769
  */
773
- declare function useDelegationStatus(config: UseDelegationStatusConfig, options?: Omit<UseQueryOptions<DelegationStatusData>, "queryKey" | "queryFn">): _$_tanstack_react_query0.UseQueryResult<DelegationStatusData, Error>;
770
+ declare function useDelegationStatus(config: UseDelegationStatusConfig, options?: Omit<UseQueryOptions<DelegationStatusData>, "queryKey" | "queryFn">): import("@tanstack/react-query").UseQueryResult<DelegationStatusData, Error>;
774
771
  //#endregion
775
772
  //#region src/delegations/use-decrypt-balance-as.d.ts
776
773
  /**
@@ -786,7 +783,7 @@ declare function useDelegationStatus(config: UseDelegationStatusConfig, options?
786
783
  * // decryptAs.data => 1000n
787
784
  * ```
788
785
  */
789
- declare function useDecryptBalanceAs(address: Address, options?: UseMutationOptions<bigint, Error, DecryptBalanceAsParams>): _$_tanstack_react_query0.UseMutationResult<bigint, Error, DecryptBalanceAsParams, unknown>;
786
+ declare function useDecryptBalanceAs(address: Address, options?: UseMutationOptions<bigint, Error, DecryptBalanceAsParams>): import("@tanstack/react-query").UseMutationResult<bigint, Error, DecryptBalanceAsParams, unknown>;
790
787
  //#endregion
791
788
  //#region src/delegations/use-batch-decrypt-balances-as.d.ts
792
789
  /**
@@ -804,7 +801,7 @@ declare function useDecryptBalanceAs(address: Address, options?: UseMutationOpti
804
801
  * // batchDecryptAs.data => Map { "0xTokenA" => 100n, "0xTokenB" => 200n }
805
802
  * ```
806
803
  */
807
- declare function useBatchDecryptBalancesAs(tokens: Token[], options?: UseMutationOptions<Map<Address, bigint>, Error, BatchDecryptBalancesAsParams>): _$_tanstack_react_query0.UseMutationResult<Map<`0x${string}`, bigint>, Error, _$_zama_fhe_sdk0.BatchDecryptAsOptions, unknown>;
804
+ declare function useBatchDecryptBalancesAs(tokens: Token[], options?: UseMutationOptions<Map<Address, bigint>, Error, BatchDecryptBalancesAsParams>): import("@tanstack/react-query").UseMutationResult<Map<`0x${string}`, bigint>, Error, import("@zama-fhe/sdk").BatchDecryptAsOptions, unknown>;
808
805
  //#endregion
809
806
  //#region src/shield/use-approve-underlying.d.ts
810
807
  /**
@@ -826,7 +823,7 @@ declare function useBatchDecryptBalancesAs(tokens: Token[], options?: UseMutatio
826
823
  * approve.mutate({ amount: 1000n }); // exact amount
827
824
  * ```
828
825
  */
829
- declare function useApproveUnderlying(address: Address, options?: UseMutationOptions<TransactionResult, Error, ApproveUnderlyingParams, Address>): _$_tanstack_react_query0.UseMutationResult<TransactionResult, Error, ApproveUnderlyingParams, `0x${string}`>;
826
+ declare function useApproveUnderlying(address: Address, options?: UseMutationOptions<TransactionResult, Error, ApproveUnderlyingParams, Address>): import("@tanstack/react-query").UseMutationResult<TransactionResult, Error, ApproveUnderlyingParams, `0x${string}`>;
830
827
  //#endregion
831
828
  //#region src/token/use-is-confidential.d.ts
832
829
  /**
@@ -842,7 +839,7 @@ declare function useApproveUnderlying(address: Address, options?: UseMutationOpt
842
839
  * const { data: isConfidential } = useIsConfidential("0xToken");
843
840
  * ```
844
841
  */
845
- declare function useIsConfidential(tokenAddress: Address, options?: Omit<UseQueryOptions<boolean>, "queryKey" | "queryFn">): _$_tanstack_react_query0.UseQueryResult<boolean, Error>;
842
+ declare function useIsConfidential(tokenAddress: Address, options?: Omit<UseQueryOptions<boolean>, "queryKey" | "queryFn">): import("@tanstack/react-query").UseQueryResult<boolean, Error>;
846
843
  /**
847
844
  * Suspense variant of {@link useIsConfidential}.
848
845
  * Suspends rendering until the ERC-165 check resolves.
@@ -855,7 +852,7 @@ declare function useIsConfidential(tokenAddress: Address, options?: Omit<UseQuer
855
852
  * const { data: isConfidential } = useIsConfidentialSuspense("0xToken");
856
853
  * ```
857
854
  */
858
- declare function useIsConfidentialSuspense(tokenAddress: Address): _$_tanstack_react_query0.UseSuspenseQueryResult<boolean, Error>;
855
+ declare function useIsConfidentialSuspense(tokenAddress: Address): import("@tanstack/react-query").UseSuspenseQueryResult<boolean, Error>;
859
856
  /**
860
857
  * Check if a token supports the ERC-7984 wrapper interface via ERC-165.
861
858
  * Result is cached indefinitely since interface support does not change.
@@ -869,7 +866,7 @@ declare function useIsConfidentialSuspense(tokenAddress: Address): _$_tanstack_r
869
866
  * const { data: isWrapper } = useIsWrapper("0xToken");
870
867
  * ```
871
868
  */
872
- declare function useIsWrapper(tokenAddress: Address, options?: Omit<UseQueryOptions<boolean>, "queryKey" | "queryFn">): _$_tanstack_react_query0.UseQueryResult<boolean, Error>;
869
+ declare function useIsWrapper(tokenAddress: Address, options?: Omit<UseQueryOptions<boolean>, "queryKey" | "queryFn">): import("@tanstack/react-query").UseQueryResult<boolean, Error>;
873
870
  /**
874
871
  * Suspense variant of {@link useIsWrapper}.
875
872
  * Suspends rendering until the ERC-165 check resolves.
@@ -882,7 +879,7 @@ declare function useIsWrapper(tokenAddress: Address, options?: Omit<UseQueryOpti
882
879
  * const { data: isWrapper } = useIsWrapperSuspense("0xToken");
883
880
  * ```
884
881
  */
885
- declare function useIsWrapperSuspense(tokenAddress: Address): _$_tanstack_react_query0.UseSuspenseQueryResult<boolean, Error>;
882
+ declare function useIsWrapperSuspense(tokenAddress: Address): import("@tanstack/react-query").UseSuspenseQueryResult<boolean, Error>;
886
883
  //#endregion
887
884
  //#region src/token/use-total-supply.d.ts
888
885
  /**
@@ -900,7 +897,7 @@ declare function useIsWrapperSuspense(tokenAddress: Address): _$_tanstack_react_
900
897
  * const { data: totalSupply } = useTotalSupply("0xToken");
901
898
  * ```
902
899
  */
903
- declare function useTotalSupply(tokenAddress: Address, options?: Omit<UseQueryOptions<bigint>, "queryKey" | "queryFn">): _$_tanstack_react_query0.UseQueryResult<bigint, Error>;
900
+ declare function useTotalSupply(tokenAddress: Address, options?: Omit<UseQueryOptions<bigint>, "queryKey" | "queryFn">): import("@tanstack/react-query").UseQueryResult<bigint, Error>;
904
901
  /**
905
902
  * Suspense variant of {@link useTotalSupply}.
906
903
  * Suspends rendering until the total supply is loaded.
@@ -915,7 +912,7 @@ declare function useTotalSupply(tokenAddress: Address, options?: Omit<UseQueryOp
915
912
  * const { data: totalSupply } = useTotalSupplySuspense("0xToken");
916
913
  * ```
917
914
  */
918
- declare function useTotalSupplySuspense(tokenAddress: Address): _$_tanstack_react_query0.UseSuspenseQueryResult<bigint, Error>;
915
+ declare function useTotalSupplySuspense(tokenAddress: Address): import("@tanstack/react-query").UseSuspenseQueryResult<bigint, Error>;
919
916
  //#endregion
920
917
  //#region src/wrappers-registry/use-wrappers-registry-address.d.ts
921
918
  /**
@@ -935,13 +932,13 @@ declare function useWrappersRegistryAddress(): Address | undefined;
935
932
  * Fetches all token wrapper pairs from the ConfidentialTokenWrappersRegistry
936
933
  * contract on the current chain.
937
934
  */
938
- declare function useTokenPairsRegistry(): _$_tanstack_react_query0.UseQueryResult<readonly TokenWrapperPair[], Error>;
935
+ declare function useTokenPairsRegistry(): import("@tanstack/react-query").UseQueryResult<readonly TokenWrapperPair[], Error>;
939
936
  //#endregion
940
937
  //#region src/wrappers-registry/use-token-pairs-length.d.ts
941
938
  /**
942
939
  * Returns the total number of token wrapper pairs in the registry.
943
940
  */
944
- declare function useTokenPairsLength(): _$_tanstack_react_query0.UseQueryResult<bigint, Error>;
941
+ declare function useTokenPairsLength(): import("@tanstack/react-query").UseQueryResult<bigint, Error>;
945
942
  //#endregion
946
943
  //#region src/wrappers-registry/use-token-pairs-slice.d.ts
947
944
  /**
@@ -956,7 +953,7 @@ declare function useTokenPairsSlice({
956
953
  }: {
957
954
  fromIndex: bigint | undefined;
958
955
  toIndex: bigint | undefined;
959
- }): _$_tanstack_react_query0.UseQueryResult<readonly TokenWrapperPair[], Error>;
956
+ }): import("@tanstack/react-query").UseQueryResult<readonly TokenWrapperPair[], Error>;
960
957
  //#endregion
961
958
  //#region src/wrappers-registry/use-token-pair.d.ts
962
959
  /**
@@ -968,7 +965,7 @@ declare function useTokenPair({
968
965
  index
969
966
  }: {
970
967
  index: bigint | undefined;
971
- }): _$_tanstack_react_query0.UseQueryResult<TokenWrapperPair, Error>;
968
+ }): import("@tanstack/react-query").UseQueryResult<TokenWrapperPair, Error>;
972
969
  //#endregion
973
970
  //#region src/wrappers-registry/use-confidential-token-address.d.ts
974
971
  /**
@@ -978,7 +975,7 @@ declare function useConfidentialTokenAddress({
978
975
  tokenAddress
979
976
  }: {
980
977
  tokenAddress: Address | undefined;
981
- }): _$_tanstack_react_query0.UseQueryResult<readonly [boolean, `0x${string}`], Error>;
978
+ }): import("@tanstack/react-query").UseQueryResult<readonly [boolean, `0x${string}`], Error>;
982
979
  //#endregion
983
980
  //#region src/wrappers-registry/use-token-address.d.ts
984
981
  /**
@@ -988,7 +985,7 @@ declare function useTokenAddress({
988
985
  confidentialTokenAddress
989
986
  }: {
990
987
  confidentialTokenAddress: Address | undefined;
991
- }): _$_tanstack_react_query0.UseQueryResult<readonly [boolean, `0x${string}`], Error>;
988
+ }): import("@tanstack/react-query").UseQueryResult<readonly [boolean, `0x${string}`], Error>;
992
989
  //#endregion
993
990
  //#region src/wrappers-registry/use-is-confidential-token-valid.d.ts
994
991
  /**
@@ -1001,7 +998,7 @@ declare function useIsConfidentialTokenValid({
1001
998
  confidentialTokenAddress
1002
999
  }: {
1003
1000
  confidentialTokenAddress: Address | undefined;
1004
- }): _$_tanstack_react_query0.UseQueryResult<boolean, Error>;
1001
+ }): import("@tanstack/react-query").UseQueryResult<boolean, Error>;
1005
1002
  //#endregion
1006
1003
  //#region src/wrappers-registry/use-list-pairs.d.ts
1007
1004
  /**
@@ -1025,7 +1022,7 @@ declare function useListPairs({
1025
1022
  page?: number;
1026
1023
  pageSize?: number;
1027
1024
  metadata?: boolean;
1028
- }): _$_tanstack_react_query0.UseQueryResult<PaginatedResult<TokenWrapperPair | TokenWrapperPairWithMetadata>, Error>;
1025
+ }): import("@tanstack/react-query").UseQueryResult<PaginatedResult<TokenWrapperPair | TokenWrapperPairWithMetadata>, Error>;
1029
1026
  //#endregion
1030
1027
  export { type UseConfidentialBalanceConfig, type UseConfidentialBalanceOptions, type UseConfidentialBalancesConfig, type UseConfidentialBalancesOptions, type UseConfidentialIsOperatorConfig, type UseConfidentialIsOperatorSuspenseConfig, type UseConfidentialTransferConfig, type UseDelegationStatusConfig, type UseHasPermitConfig, type UseShieldConfig, type UseUnderlyingAllowanceConfig, type UseUnderlyingAllowanceSuspenseConfig, type UseUserDecryptResult, type UseWrapperDiscoveryConfig, type UseWrapperDiscoverySuspenseConfig, ZamaProvider, type ZamaProviderProps, useApproveUnderlying, useBatchDecryptBalancesAs, useClearCredentials, useConfidentialBalance, useConfidentialBalances, useConfidentialIsOperator, useConfidentialIsOperatorSuspense, useConfidentialSetOperator, useConfidentialTokenAddress, useConfidentialTransfer, useConfidentialTransferFrom, useDecryptBalanceAs, useDelegateDecryption, useDelegatedDecrypt, useDelegationStatus, useEncrypt, useFinalizeUnwrap, useGrantPermit, useHasPermit, useIsConfidential, useIsConfidentialSuspense, useIsConfidentialTokenValid, useIsWrapper, useIsWrapperSuspense, useListPairs, useMetadata, useMetadataSuspense, usePublicDecrypt, useResumeUnshield, useRevokeDelegation, useRevokePermits, useShield, useToken, useTokenAddress, useTokenPair, useTokenPairsLength, useTokenPairsRegistry, useTokenPairsSlice, useTotalSupply, useTotalSupplySuspense, useUnderlyingAllowance, useUnderlyingAllowanceSuspense, useUnshield, useUnshieldAll, useUnwrap, useUnwrapAll, useUserDecrypt, useWrappedToken, useWrapperDiscovery, useWrapperDiscoverySuspense, useWrappersRegistryAddress, useZamaSDK };
1031
1028
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useQuery","tanstack_useQuery","useSuspenseQuery","tanstack_useSuspenseQuery","useQuery","useQuery","useQuery","useQuery","typed","useQuery","useSuspenseQuery","useQuery","useSuspenseQuery","useQuery","useQuery","useSuspenseQuery","useQuery","useSuspenseQuery","useQuery","useQuery","useSuspenseQuery","useQuery","useSuspenseQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery"],"sources":["../src/provider.tsx","../src/relayer/use-encrypt.ts","../src/utils/query.ts","../src/utils/wallet-account.ts","../src/decrypt/use-user-decrypt.ts","../src/decrypt/use-public-decrypt.ts","../src/decrypt/use-delegated-decrypt.ts","../src/permits/use-grant-permit.ts","../src/permits/use-has-permit.ts","../src/permits/use-revoke-permits.ts","../src/permits/use-clear-credentials.ts","../src/token/use-token.ts","../src/token/use-wrapped-token.ts","../src/balance/use-confidential-balance.ts","../src/balance/use-confidential-balances.ts","../src/balance/optimistic-balance-update.ts","../src/transfer/use-confidential-transfer.ts","../src/transfer/use-confidential-transfer-from.ts","../src/operator/use-confidential-set-operator.ts","../src/operator/use-confidential-is-operator.ts","../src/shield/use-shield.ts","../src/unwrap/use-unwrap.ts","../src/unwrap/use-unwrap-all.ts","../src/unwrap/use-finalize-unwrap.ts","../src/unshield/use-unshield.ts","../src/unshield/use-unshield-all.ts","../src/unshield/use-resume-unshield.ts","../src/shield/use-underlying-allowance.ts","../src/wrappers-registry/use-wrappers-registry-address.ts","../src/token/use-wrapper-discovery.ts","../src/token/use-metadata.ts","../src/delegations/use-delegate-decryption.ts","../src/delegations/use-revoke-delegation.ts","../src/delegations/use-delegation-status.ts","../src/delegations/use-decrypt-balance-as.ts","../src/delegations/use-batch-decrypt-balances-as.ts","../src/shield/use-approve-underlying.ts","../src/token/use-is-confidential.ts","../src/token/use-total-supply.ts","../src/wrappers-registry/use-token-pairs-registry.ts","../src/wrappers-registry/use-token-pairs-length.ts","../src/wrappers-registry/use-token-pairs-slice.ts","../src/wrappers-registry/use-token-pair.ts","../src/wrappers-registry/use-confidential-token-address.ts","../src/wrappers-registry/use-token-address.ts","../src/wrappers-registry/use-is-confidential-token-valid.ts","../src/wrappers-registry/use-list-pairs.ts"],"sourcesContent":["\"use client\";\n\nimport type { ZamaConfig } from \"@zama-fhe/sdk\";\nimport { ZamaSDK } from \"@zama-fhe/sdk\";\nimport { invalidateWalletLifecycleQueries } from \"@zama-fhe/sdk/query\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport {\n createContext,\n type PropsWithChildren,\n useContext,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\n\n/** Props for {@link ZamaProvider}. */\nexport interface ZamaProviderProps extends PropsWithChildren {\n /** Configuration object created by {@link createConfig}. */\n config: ZamaConfig;\n}\n\nconst ZamaSDKContext = createContext<ZamaSDK | null>(null);\n\n/**\n * Provides a {@link ZamaSDK} instance to all descendant hooks.\n *\n * @example\n * ```tsx\n * <ZamaProvider config={zamaConfig}>\n * <App />\n * </ZamaProvider>\n * ```\n */\nexport function ZamaProvider({ children, config }: ZamaProviderProps) {\n const queryClient = useQueryClient();\n\n // Stabilize onEvent so an inline arrow doesn't recreate the SDK every render.\n const onEventRef = useRef(config.onEvent);\n\n useEffect(() => {\n onEventRef.current = config.onEvent;\n });\n\n const sdk = useMemo(() => new ZamaSDK({ ...config, onEvent: onEventRef.current }), [config]);\n\n // SDK internally does credential/cache cleanup. React layer clears the\n // wallet-lifecycle query state.\n useEffect(\n () =>\n sdk.onWalletAccountChange(({ previous }) => {\n if (previous) {\n invalidateWalletLifecycleQueries(queryClient);\n }\n }),\n [sdk, queryClient],\n );\n\n // Clean up SDK-owned signer subscriptions on unmount without terminating\n // the caller-owned relayer. dispose() is idempotent.\n useEffect(() => () => sdk.dispose(), [sdk]);\n\n return <ZamaSDKContext.Provider value={sdk}>{children}</ZamaSDKContext.Provider>;\n}\n\n/**\n * Access the {@link ZamaSDK} instance from context.\n * Throws if called outside a {@link ZamaProvider}.\n *\n * @example\n * ```tsx\n * const sdk = useZamaSDK();\n * const token = sdk.createToken(\"0x...\");\n * ```\n */\nexport function useZamaSDK(): ZamaSDK {\n const context = useContext(ZamaSDKContext);\n\n if (!context) {\n throw new Error(\n \"useZamaSDK must be used within a <ZamaProvider>. \" +\n \"Wrap your component tree in <ZamaProvider config={createConfig(...)}>.\",\n );\n }\n return context;\n}\n","\"use client\";\n\nimport type { EncryptParams, EncryptResult } from \"@zama-fhe/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { encryptMutationOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Encrypt a plaintext value using FHE.\n * Calls the relayer's `encrypt` method via a mutation.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link EncryptionFailedError} — FHE encryption failed\n *\n * @returns A mutation whose `mutate` accepts {@link EncryptParams}.\n *\n * @example\n * ```tsx\n * const encrypt = useEncrypt();\n * encrypt.mutate({ values: [{ value: 1000n, type: \"euint64\" }], contractAddress: \"0x...\", userAddress: \"0x...\" });\n * ```\n */\nexport function useEncrypt() {\n const sdk = useZamaSDK();\n return useMutation<EncryptResult, Error, EncryptParams>(encryptMutationOptions(sdk));\n}\n","import {\n type DefaultError,\n type QueriesOptions,\n type QueriesResults,\n useQueries as tanstack_useQueries,\n useQuery as tanstack_useQuery,\n useSuspenseQuery as tanstack_useSuspenseQuery,\n type UseQueryOptions,\n type UseQueryResult,\n type UseSuspenseQueryOptions,\n type UseSuspenseQueryResult,\n} from \"@tanstack/react-query\";\nimport { hashFn } from \"@zama-fhe/sdk/query\";\n\n/**\n * Thin wrapper around TanStack's useQuery that injects our custom queryKeyHashFn.\n * Mirrors the wagmi pattern — the type safety boundary is at the factory and hook levels.\n *\n * Callers typically specify only `<TData>` (e.g. `useQuery<PublicKeyData>(...)`) while\n * factory options carry specific tuple keys (e.g. `readonly [\"zama.publicKey\"]`).\n * We erase the QueryKey param via `AnyKeyQueryOptions` so callers don't need to\n * spell out the key type — any QueryKey subtype is accepted.\n */\ntype AnyKeyQueryOptions<TData, TError> = UseQueryOptions<\n TData,\n TError,\n TData,\n // oxlint-disable-next-line typescript/no-explicit-any\n any\n>;\ntype AnyKeySuspenseOptions<TData, TError> = UseSuspenseQueryOptions<\n TData,\n TError,\n TData,\n // oxlint-disable-next-line typescript/no-explicit-any\n any\n>;\n\nexport function useQuery<TData = unknown, TError = DefaultError>(\n options: AnyKeyQueryOptions<TData, TError>,\n): UseQueryResult<TData, TError> {\n return tanstack_useQuery({\n ...options,\n queryKeyHashFn: hashFn,\n });\n}\n\nexport function useSuspenseQuery<TData = unknown, TError = DefaultError>(\n options: AnyKeySuspenseOptions<TData, TError>,\n): UseSuspenseQueryResult<TData, TError> {\n return tanstack_useSuspenseQuery({\n ...options,\n queryKeyHashFn: hashFn,\n });\n}\n\n/**\n * Thin wrapper around TanStack's useQueries that injects our custom queryKeyHashFn\n * on every query in the array.\n */\nexport function useQueries<\n // oxlint-disable-next-line typescript/no-explicit-any\n T extends Array<any>,\n TCombinedResult = QueriesResults<T>,\n>({\n queries,\n ...options\n}: {\n queries: readonly [...QueriesOptions<T>];\n combine?: (result: QueriesResults<T>) => TCombinedResult;\n subscribed?: boolean;\n}): TCombinedResult {\n return tanstack_useQueries({\n ...options,\n queries: queries.map((q) => ({\n ...q,\n queryKeyHashFn: hashFn,\n })) as [...QueriesOptions<T>],\n });\n}\n","\"use client\";\n\nimport { useSyncExternalStore } from \"react\";\nimport type { WalletAccount, ZamaSDK } from \"@zama-fhe/sdk\";\n\nexport function useWalletAccount(sdk: ZamaSDK): WalletAccount | undefined {\n return useSyncExternalStore(\n (listener) => sdk.onWalletAccountChange(listener),\n () => sdk.signer?.walletAccount.getSnapshot(),\n () => undefined,\n );\n}\n","\"use client\";\n\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { DecryptResult, UserDecryptQueryConfig } from \"@zama-fhe/sdk/query\";\nimport { userDecryptQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWalletAccount } from \"../utils/wallet-account\";\n\n/**\n * React hook for FHE user decryption. Thin wrapper around\n * `userDecryptQueryOptions` with `useQuery` semantics.\n */\nexport function useUserDecrypt(\n config: UserDecryptQueryConfig,\n options?: Omit<UseQueryOptions<DecryptResult>, \"queryKey\" | \"queryFn\">,\n) {\n const sdk = useZamaSDK();\n const walletAccount = useWalletAccount(sdk);\n const queryOpts = userDecryptQueryOptions(sdk, config, { walletAccount });\n return useQuery<DecryptResult>({\n ...queryOpts,\n ...options,\n enabled: queryOpts.enabled && (options?.enabled ?? false),\n });\n}\n\n/** Return type of {@link useUserDecrypt}. */\nexport type UseUserDecryptResult = ReturnType<typeof useUserDecrypt>;\n","\"use client\";\n\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Handle, PublicDecryptResult } from \"@zama-fhe/sdk\";\nimport { publicDecryptMutationOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Decrypt FHE ciphertext handles using the network public key (no credential needed).\n * On success, results are available via `data.clearValues` and written to the\n * persistent decrypt cache.\n *\n * @returns A mutation whose `mutate` accepts an array of handle strings.\n *\n * @example\n * ```tsx\n * const publicDecrypt = usePublicDecrypt();\n * publicDecrypt.mutate([\"0xHandle1\", \"0xHandle2\"]);\n * // publicDecrypt.data?.clearValues => { \"0xHandle1\": 500n, ... }\n * ```\n */\nexport function usePublicDecrypt() {\n const sdk = useZamaSDK();\n return useMutation<PublicDecryptResult, Error, Handle[]>(publicDecryptMutationOptions(sdk));\n}\n","\"use client\";\n\nimport type { ClearValueType, Handle } from \"@zama-fhe/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport {\n delegatedDecryptMutationOptions,\n type DelegatedDecryptMutationParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Decrypt FHE ciphertext handles using delegated user credentials.\n * Returns a map of handle → plaintext bigint.\n *\n * @returns A mutation whose `mutate` accepts {@link DelegatedDecryptMutationParams}.\n *\n * @example\n * ```tsx\n * const decrypt = useDelegatedDecrypt();\n * decrypt.mutate({ handles: [{ handle: \"0xHandle1\", contractAddress: \"0x...\" }], delegatorAddress: \"0x...\" });\n * // decrypt.data => { \"0xHandle1\": 1000n }\n * ```\n */\nexport function useDelegatedDecrypt() {\n const sdk = useZamaSDK();\n return useMutation<Record<Handle, ClearValueType>, Error, DelegatedDecryptMutationParams>(\n delegatedDecryptMutationOptions(sdk),\n );\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { grantPermitMutationOptions, zamaQueryKeys } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Sign an EIP-712 message authorizing decryption of confidential handles\n * for a list of contract addresses. This is not token-specific — any\n * contract that uses FHE-encrypted values (tokens, DeFi vaults, games, etc.)\n * can be authorized in a single wallet signature. Subsequent decrypt\n * operations on any of these contracts reuse cached credentials.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link KeypairExpiredError} — the re-encryption keypair has expired\n *\n * @example\n * ```tsx\n * const { mutateAsync: grantPermit, isPending } = useGrantPermit();\n *\n * // Authorize decryption for any contracts with encrypted state:\n * // confidential tokens, auction contracts, governance contracts, etc.\n * await grantPermit([tokenAddress, auctionAddress, governanceAddress]);\n * ```\n */\nexport function useGrantPermit(options?: UseMutationOptions<void, Error, Address[]>) {\n const sdk = useZamaSDK();\n\n return useMutation<void, Error, Address[]>({\n ...grantPermitMutationOptions(sdk),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n context.client.removeQueries({ queryKey: zamaQueryKeys.hasPermit.all });\n },\n });\n}\n","\"use client\";\n\nimport { useQuery } from \"../utils/query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { hasPermitQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useWalletAccount } from \"../utils/wallet-account\";\n\n/** Configuration for {@link useHasPermit}. */\nexport interface UseHasPermitConfig {\n /** Contract addresses to check credentials against (at least one required). */\n contractAddresses: [Address, ...Address[]];\n}\n\n/**\n * Check whether stored permits cover the given contract addresses for the\n * connected signer. Returns `true` if decrypt operations can proceed without\n * a wallet prompt.\n *\n * @returns Query result with `data: boolean` — `true` if a stored permit covers\n * every entry in `contractAddresses`. The query auto-disables when no signer is configured\n * (`data` stays `undefined`, `status` stays `\"pending\"`).\n * @throws if the query runs without a signer configured (the `enabled` guard normally\n * prevents this; only reachable if the caller forces `query: { enabled: true }`). {@link SignerNotConfiguredError}\n *\n * @example\n * ```tsx\n * const { data: hasPermit } = useHasPermit({ contractAddresses: [\"0xToken\"] });\n * ```\n */\nexport function useHasPermit(config: UseHasPermitConfig) {\n const sdk = useZamaSDK();\n const walletAccount = useWalletAccount(sdk);\n return useQuery<boolean>(hasPermitQueryOptions(sdk, config, { walletAccount }));\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { revokePermitsMutationOptions, zamaQueryKeys } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Revoke FHE permits for the current signer.\n *\n * - Called with no arguments: every permit is removed across all chains and\n * delegators. The keypair survives — use {@link useClearCredentials} to also\n * wipe the keypair.\n * - Called with a contract list: only direct-decrypt permits on the current\n * chain whose payload touches a listed address are removed. Delegated\n * permits are not touched in this mode.\n *\n * @example\n * ```tsx\n * const { mutate: revokePermits } = useRevokePermits();\n * revokePermits([tokenAddress]); // direct-decrypt scope, current chain\n * revokePermits(); // every permit, all chains, all delegators\n * ```\n */\nexport function useRevokePermits(options?: UseMutationOptions<void, Error, Address[] | void>) {\n const sdk = useZamaSDK();\n\n return useMutation<void, Error, Address[] | void>({\n ...revokePermitsMutationOptions(sdk),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n context.client.removeQueries({ queryKey: zamaQueryKeys.hasPermit.all });\n context.client.removeQueries({ queryKey: zamaQueryKeys.decryption.all });\n },\n });\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { clearCredentialsMutationOptions, zamaQueryKeys } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Wipe the keypair for the current signer and cascade-delete every permit\n * (across chains and delegators) referencing it. Useful for \"log out\"\n * handlers that should leave no trace.\n *\n * @example\n * ```tsx\n * const { mutate: clearCredentials } = useClearCredentials();\n * clearCredentials();\n * ```\n */\nexport function useClearCredentials(options?: UseMutationOptions<void>) {\n const sdk = useZamaSDK();\n\n return useMutation<void>({\n ...clearCredentialsMutationOptions(sdk),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n context.client.removeQueries({ queryKey: zamaQueryKeys.hasPermit.all });\n context.client.removeQueries({ queryKey: zamaQueryKeys.decryption.all });\n },\n });\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { Address, Token } from \"@zama-fhe/sdk\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Get a {@link Token} instance for an ERC-7984 confidential token, memoized by address.\n * Supports balance queries, transfers, and operator approval.\n *\n * For ERC-7984 wrappers (shield/unshield), use {@link useWrappedToken} instead.\n *\n * @param address - The confidential token contract address.\n * @returns A memoized `Token` instance.\n *\n * @example\n * ```tsx\n * const token = useToken(\"0xToken\");\n * // token.balanceOf(), token.confidentialTransfer(), etc.\n * ```\n */\nexport function useToken(address: Address): Token {\n const sdk = useZamaSDK();\n return useMemo<Token>(() => sdk.createToken(address), [sdk, address]);\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { Address, WrappedToken } from \"@zama-fhe/sdk\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Get a {@link WrappedToken} instance for an ERC-7984 ERC-20 wrapper,\n * memoized by address. Adds wrapper-specific operations (shield, unshield,\n * underlying, allowance) on top of the base {@link useToken} API.\n *\n * The address is the wrapper contract address itself — the wrapper IS the\n * confidential token.\n *\n * @param address - The confidential wrapper contract address.\n * @returns A memoized `WrappedToken` instance.\n *\n * @example\n * ```tsx\n * const wrapped = useWrappedToken(\"0xWrapper\");\n * // wrapped.shield(1000n), wrapped.unshield(500n), etc.\n * ```\n */\nexport function useWrappedToken(address: Address): WrappedToken {\n const sdk = useZamaSDK();\n return useMemo<WrappedToken>(() => sdk.createWrappedToken(address), [sdk, address]);\n}\n","\"use client\";\n\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { confidentialBalanceQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useToken } from \"../token/use-token\";\nimport { useQuery } from \"../utils/query\";\nimport { useWalletAccount } from \"../utils/wallet-account\";\n\nexport interface UseConfidentialBalanceConfig {\n /** Address of the confidential token contract. */\n address: Address;\n /** Account to fetch balance for. The query is disabled while `undefined`. */\n account: Address | undefined;\n}\n\nexport interface UseConfidentialBalanceOptions extends Omit<\n UseQueryOptions<bigint>,\n \"queryKey\" | \"queryFn\" | \"enabled\"\n> {\n /** Set this to `false` to disable this query from automatically running. */\n enabled?: boolean;\n}\n\n/**\n * Hook for fetching a confidential token balance. Reads the on-chain handle and\n * decrypts via the SDK; cached values are returned instantly and the relayer is\n * only hit when the handle changes.\n *\n * @example\n * ```tsx\n * const { data: balance } = useConfidentialBalance({\n * address: \"0xToken\",\n * account: \"0xAccount\",\n * });\n * ```\n */\nexport function useConfidentialBalance(\n config: UseConfidentialBalanceConfig,\n options?: UseConfidentialBalanceOptions,\n) {\n const { address, account } = config;\n const { enabled = true } = options ?? {};\n const token = useToken(address);\n const walletAccount = useWalletAccount(token.sdk);\n\n const baseOptions = confidentialBalanceQueryOptions(\n token,\n {\n tokenAddress: address,\n account,\n },\n { walletAccount },\n );\n\n return useQuery<bigint>({\n ...baseOptions,\n ...options,\n enabled: Boolean(baseOptions.enabled) && enabled,\n });\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport { useQuery } from \"../utils/query\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address, BatchBalancesResult } from \"@zama-fhe/sdk\";\nimport { confidentialBalancesQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useWalletAccount } from \"../utils/wallet-account\";\n\nexport interface UseConfidentialBalancesConfig {\n /** Addresses of the confidential token contracts to batch-query. The query is disabled while empty. */\n addresses: Address[];\n /** Account to fetch balances for. The query is disabled while `undefined`. */\n account: Address | undefined;\n}\n\nexport interface UseConfidentialBalancesOptions extends Omit<\n UseQueryOptions<BatchBalancesResult>,\n \"queryKey\" | \"queryFn\" | \"enabled\"\n> {\n /** Set this to `false` to disable this query from automatically running. */\n enabled?: boolean;\n}\n\n/**\n * Hook for fetching multiple confidential token balances in batch. Returns\n * partial results when some tokens fail — successful balances are available\n * alongside per-token error information.\n *\n * @param config - Token addresses configuration.\n * @param options - React Query options forwarded to the balance query.\n * @returns The balance query result.\n *\n * @example\n * ```tsx\n * const { data } = useConfidentialBalances({\n * addresses: [\"0xTokenA\", \"0xTokenB\"],\n * account: \"0xAccount\",\n * });\n * const balance = data?.results.get(\"0xTokenA\");\n * if (data && data.errors.size > 0) {\n * // some tokens failed — check data.errors\n * }\n * ```\n */\nexport function useConfidentialBalances(\n config: UseConfidentialBalancesConfig,\n options?: UseConfidentialBalancesOptions,\n) {\n const { addresses, account } = config;\n const { enabled = true } = options ?? {};\n const sdk = useZamaSDK();\n const walletAccount = useWalletAccount(sdk);\n\n const tokens = useMemo(() => addresses.map((addr) => sdk.createToken(addr)), [sdk, addresses]);\n\n const baseOptions = confidentialBalancesQueryOptions(\n tokens,\n {\n account,\n },\n { walletAccount },\n );\n\n return useQuery<BatchBalancesResult>({\n ...baseOptions,\n ...options,\n enabled: Boolean(baseOptions.enabled) && enabled,\n });\n}\n","import type { QueryClient, QueryKey, UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport { invalidateAfterShield, zamaQueryKeys } from \"@zama-fhe/sdk/query\";\n\ntype BalanceDeltaMode = \"add\" | \"subtract\";\nexport type OptimisticBalanceSnapshot = [QueryKey, bigint | undefined][];\n\n/** Combined context returned by optimistic `onMutate`. */\nexport interface OptimisticMutateContext {\n snapshot: OptimisticBalanceSnapshot;\n callerContext?: unknown;\n}\n\nexport function unwrapOptimisticCallerContext(\n optimistic: boolean | undefined,\n rawContext: unknown,\n): {\n wrappedContext: OptimisticMutateContext | undefined;\n callerContext: OptimisticMutateContext | undefined;\n} {\n const typed = rawContext as OptimisticMutateContext | undefined;\n const wrappedContext = optimistic ? typed : undefined;\n const callerContext = (optimistic ? wrappedContext?.callerContext : rawContext) as\n | OptimisticMutateContext\n | undefined;\n return { wrappedContext, callerContext };\n}\n\nexport async function applyOptimisticBalanceDelta({\n queryClient,\n tokenAddress,\n amount,\n mode,\n}: {\n queryClient: QueryClient;\n tokenAddress: Address;\n amount: bigint;\n mode: BalanceDeltaMode;\n}): Promise<OptimisticBalanceSnapshot> {\n const balanceKey = zamaQueryKeys.confidentialBalance.token(tokenAddress);\n await queryClient.cancelQueries({ queryKey: balanceKey });\n const previous = queryClient.getQueriesData<bigint>({ queryKey: balanceKey });\n for (const [key, value] of previous) {\n if (value === undefined) {\n continue;\n }\n // Temporary optimistic underflow (`amount > value`) is acceptable because\n // settlement invalidates and rewrites this cache entry.\n queryClient.setQueryData(key, mode === \"add\" ? value + amount : value - amount);\n }\n return previous;\n}\n\nexport function rollbackOptimisticBalanceDelta(\n queryClient: QueryClient,\n snapshot: OptimisticBalanceSnapshot,\n) {\n for (const [key, value] of snapshot) {\n queryClient.setQueryData(key, value);\n }\n}\n\n/**\n * Build optimistic mutation callbacks for shield operations.\n * Wraps the caller's `onMutate`/`onError`/`onSuccess`/`onSettled` with snapshot/rollback logic\n * and returns overrides ready to spread into `useMutation`.\n */\nexport function optimisticBalanceCallbacks<TParams extends { amount: bigint }>({\n optimistic,\n tokenAddress,\n queryClient,\n options,\n}: {\n optimistic: boolean | undefined;\n tokenAddress: Address;\n queryClient: QueryClient;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: UseMutationOptions<TransactionResult, Error, TParams, any> | undefined;\n}): Pick<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n UseMutationOptions<TransactionResult, Error, TParams, any>,\n \"onMutate\" | \"onError\" | \"onSuccess\" | \"onSettled\"\n> {\n return {\n onMutate: optimistic\n ? async (variables, mutationContext) => {\n const snapshot = await applyOptimisticBalanceDelta({\n queryClient,\n tokenAddress,\n amount: variables.amount,\n mode: \"add\",\n });\n const callerContext = await options?.onMutate?.(variables, mutationContext);\n return { snapshot, callerContext };\n }\n : options?.onMutate,\n onError: (error, variables, rawContext, context) => {\n const { wrappedContext, callerContext } = unwrapOptimisticCallerContext(\n optimistic,\n rawContext,\n );\n try {\n if (wrappedContext) {\n rollbackOptimisticBalanceDelta(queryClient, wrappedContext.snapshot);\n }\n } finally {\n options?.onError?.(error, variables, callerContext, context);\n }\n },\n onSuccess: (data, variables, rawContext, context) => {\n const { callerContext } = unwrapOptimisticCallerContext(optimistic, rawContext);\n options?.onSuccess?.(data, variables, callerContext, context);\n invalidateAfterShield(context.client, tokenAddress);\n },\n onSettled: (data, error, variables, rawContext, context) => {\n const { callerContext } = unwrapOptimisticCallerContext(optimistic, rawContext);\n options?.onSettled?.(data, error, variables, callerContext, context);\n },\n };\n}\n","\"use client\";\n\nimport {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n type UseMutationResult,\n} from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n confidentialTransferMutationOptions,\n invalidateAfterTransfer,\n type ConfidentialTransferParams,\n} from \"@zama-fhe/sdk/query\";\nimport {\n applyOptimisticBalanceDelta,\n rollbackOptimisticBalanceDelta,\n unwrapOptimisticCallerContext,\n} from \"../balance/optimistic-balance-update\";\nimport { useToken } from \"../token/use-token\";\n\n/** Configuration for {@link useConfidentialTransfer}. */\nexport interface UseConfidentialTransferConfig {\n /** Address of the confidential token contract. */\n address: Address;\n /**\n * When `true`, optimistically subtracts the transfer amount from cached balance\n * before the transaction confirms. Rolls back on error.\n * @defaultValue false\n */\n optimistic?: boolean;\n}\n\n/**\n * Encrypt and send a confidential transfer. Invalidates balance caches on success.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link EncryptionFailedError} — FHE encryption failed\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param config - Token address (and optional wrapper) identifying the token.\n * Set `optimistic: true` to subtract the amount from the cached balance immediately.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const transfer = useConfidentialTransfer({\n * address: \"0xToken\",\n * optimistic: true,\n * });\n * transfer.mutate(\n * { to: \"0xRecipient\", amount: 1000n },\n * {\n * onError: (error) => {\n * if (error instanceof SigningRejectedError) {\n * // user cancelled — no action needed\n * }\n * },\n * },\n * );\n * ```\n */\nexport function useConfidentialTransfer<TContext = unknown>(\n config: UseConfidentialTransferConfig,\n options?: UseMutationOptions<TransactionResult, Error, ConfidentialTransferParams, TContext>,\n): UseMutationResult<TransactionResult, Error, ConfidentialTransferParams, TContext> {\n const token = useToken(config.address);\n const queryClient = useQueryClient();\n\n // Internal mutation uses `any` for TContext because optimistic mode wraps\n // the caller's context in OptimisticMutateContext; the public return type\n // is cast back to the caller's TContext.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return useMutation<TransactionResult, Error, ConfidentialTransferParams, any>({\n ...confidentialTransferMutationOptions(token),\n ...options,\n onMutate: config.optimistic\n ? async (variables, mutationContext) => {\n const snapshot = await applyOptimisticBalanceDelta({\n queryClient,\n tokenAddress: token.address,\n amount: variables.amount,\n mode: \"subtract\",\n });\n const callerContext = await options?.onMutate?.(variables, mutationContext);\n return { snapshot, callerContext };\n }\n : options?.onMutate,\n onError: (error, variables, rawContext, context) => {\n const { wrappedContext, callerContext } = unwrapOptimisticCallerContext(\n config.optimistic,\n rawContext,\n );\n try {\n if (wrappedContext) {\n rollbackOptimisticBalanceDelta(queryClient, wrappedContext.snapshot);\n }\n } finally {\n options?.onError?.(error, variables, callerContext as TContext, context);\n }\n },\n onSuccess: (data, variables, rawContext, context) => {\n const { callerContext } = unwrapOptimisticCallerContext(config.optimistic, rawContext);\n options?.onSuccess?.(data, variables, callerContext as TContext, context);\n invalidateAfterTransfer(context.client, token.address);\n },\n onSettled: (data, error, variables, rawContext, context) => {\n const { callerContext } = unwrapOptimisticCallerContext(config.optimistic, rawContext);\n options?.onSettled?.(data, error, variables, callerContext as TContext, context);\n },\n }) as UseMutationResult<TransactionResult, Error, ConfidentialTransferParams, TContext>;\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n confidentialTransferFromMutationOptions,\n invalidateAfterTransfer,\n type ConfidentialTransferFromParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useToken } from \"../token/use-token\";\n\n/**\n * Operator transfer on behalf of another address. Caller must be an approved operator.\n * Invalidates balance caches on success.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link EncryptionFailedError} — FHE encryption of the transfer amount failed\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential token contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const transferFrom = useConfidentialTransferFrom(\"0xToken\");\n * transferFrom.mutate({ from: \"0xOwner\", to: \"0xRecipient\", amount: 500n });\n * ```\n */\nexport function useConfidentialTransferFrom(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, ConfidentialTransferFromParams, Address>,\n) {\n const token = useToken(address);\n\n return useMutation<TransactionResult, Error, ConfidentialTransferFromParams, Address>({\n ...confidentialTransferFromMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterTransfer(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n confidentialSetOperatorMutationOptions,\n invalidateAfterSetOperator,\n type ConfidentialSetOperatorParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useToken } from \"../token/use-token\";\n\n/**\n * Set operator approval for a confidential token. Defaults to 1 hour.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential token contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const setOperator = useConfidentialSetOperator(\"0xToken\");\n * setOperator.mutate({ operator: \"0xOperator\" });\n * ```\n */\nexport function useConfidentialSetOperator(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, ConfidentialSetOperatorParams, Address>,\n) {\n const token = useToken(address);\n\n return useMutation<TransactionResult, Error, ConfidentialSetOperatorParams, Address>({\n ...confidentialSetOperatorMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterSetOperator(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport { useQuery, useSuspenseQuery } from \"../utils/query\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { confidentialIsOperatorQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\nexport interface UseConfidentialIsOperatorConfig {\n /** Address of the confidential token contract. The query is disabled while `undefined`. */\n address: Address | undefined;\n /** Address to check operator status for. The query is disabled while `undefined`. */\n spender: Address | undefined;\n /** Token holder address. The query is disabled while `undefined`. */\n holder: Address | undefined;\n}\n\nexport interface UseConfidentialIsOperatorSuspenseConfig {\n /** Address of the confidential token contract. */\n address: Address;\n /** Address to check operator status for. */\n spender: Address;\n /** Token holder address. */\n holder: Address;\n}\n\n/**\n * Check if a spender is an approved operator for a holder.\n *\n * @param config - Token address, spender, and holder to check.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns Query result with `data: boolean`.\n *\n * @example\n * ```tsx\n * const { data: isOperator } = useConfidentialIsOperator({\n * address: \"0xToken\",\n * spender: \"0xSpender\",\n * holder: \"0xHolder\",\n * });\n * ```\n */\nexport function useConfidentialIsOperator(\n config: UseConfidentialIsOperatorConfig,\n options?: Omit<UseQueryOptions<boolean>, \"queryKey\" | \"queryFn\">,\n) {\n const { address, spender, holder } = config;\n const sdk = useZamaSDK();\n const baseOpts = confidentialIsOperatorQueryOptions(sdk, address, {\n holder,\n spender,\n });\n\n return useQuery({\n ...baseOpts,\n ...options,\n enabled: (baseOpts.enabled ?? true) && (options?.enabled ?? true),\n });\n}\n\n/**\n * Suspense variant of {@link useConfidentialIsOperator}. Suspends rendering\n * until the operator check resolves.\n *\n * @example\n * ```tsx\n * const { data: isOperator } = useConfidentialIsOperatorSuspense({\n * address: \"0xToken\",\n * spender: \"0xSpender\",\n * holder: \"0xHolder\",\n * });\n * ```\n */\nexport function useConfidentialIsOperatorSuspense(config: UseConfidentialIsOperatorSuspenseConfig) {\n const { spender, holder, address } = config;\n const sdk = useZamaSDK();\n\n return useSuspenseQuery<boolean>(\n confidentialIsOperatorQueryOptions(sdk, address, {\n holder,\n spender,\n }),\n );\n}\n","\"use client\";\n\nimport {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n type UseMutationResult,\n} from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport { shieldMutationOptions, type ShieldParams } from \"@zama-fhe/sdk/query\";\nimport { optimisticBalanceCallbacks } from \"../balance/optimistic-balance-update\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/** Configuration for {@link useShield}. */\nexport interface UseShieldConfig {\n /** Address of the confidential wrapper contract. */\n address: Address;\n /**\n * When `true`, optimistically adds the wrap amount to the cached confidential balance\n * before the transaction confirms. Rolls back on error.\n * @defaultValue false\n */\n optimistic?: boolean;\n}\n\n/**\n * Shield public ERC-20 tokens into confidential tokens.\n * Handles ERC-20 approval automatically. Invalidates balance caches on success.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link TransactionRevertedError} — approval or shield transaction reverted\n *\n * @param config - Wrapper address (and optional `optimistic` flag).\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const shield = useShield({ address: \"0xWrapper\", optimistic: true });\n * shield.mutate({ amount: 1000n });\n * ```\n */\nexport function useShield<TContext = unknown>(\n config: UseShieldConfig,\n options?: UseMutationOptions<TransactionResult, Error, ShieldParams, TContext>,\n): UseMutationResult<TransactionResult, Error, ShieldParams, TContext> {\n const token = useWrappedToken(config.address);\n const queryClient = useQueryClient();\n\n return useMutation({\n ...shieldMutationOptions(token),\n ...options,\n ...optimisticBalanceCallbacks({\n optimistic: config.optimistic,\n tokenAddress: token.address,\n queryClient,\n options,\n }),\n }) as UseMutationResult<TransactionResult, Error, ShieldParams, TContext>;\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n invalidateAfterUnwrap,\n type UnwrapParams,\n unwrapMutationOptions,\n} from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Request an unwrap for a specific amount. Encrypts the amount first.\n * Call {@link useFinalizeUnwrap} after the request is processed on-chain,\n * or use {@link useUnshield} for a single-call orchestration.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link EncryptionFailedError} — FHE encryption of the unwrap amount failed\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unwrap = useUnwrap(\"0xWrapper\");\n * unwrap.mutate({ amount: 500n });\n * ```\n */\nexport function useUnwrap(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, UnwrapParams, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, UnwrapParams, Address>({\n ...unwrapMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterUnwrap(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport { invalidateAfterUnwrap, unwrapAllMutationOptions } from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Request an unwrap for the entire confidential balance.\n * Uses the on-chain balance handle directly (no encryption needed).\n * Call {@link useFinalizeUnwrap} after processing, or use {@link useUnshieldAll} for single-call orchestration.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unwrapAll = useUnwrapAll(\"0xWrapper\");\n * unwrapAll.mutate();\n * ```\n */\nexport function useUnwrapAll(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, void, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, void, Address>({\n ...unwrapAllMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterUnwrap(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n finalizeUnwrapMutationOptions,\n invalidateAfterUnshield,\n type FinalizeUnwrapParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Complete an unwrap by providing the public decryption proof.\n * Call this after an unwrap request has been processed on-chain.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link DecryptionFailedError} — public decryption of the burn amount failed\n * - {@link TransactionRevertedError} — on-chain finalize transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const finalize = useFinalizeUnwrap(\"0xWrapper\");\n * const event = findUnwrapRequested(receipt.logs);\n * // Pass unwrapRequestId from upgraded events, or fall back to encryptedAmount for legacy ones.\n * finalize.mutate(\n * event.unwrapRequestId\n * ? { unwrapRequestId: event.unwrapRequestId }\n * : { burnAmountHandle: event.encryptedAmount },\n * );\n * ```\n */\nexport function useFinalizeUnwrap(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, FinalizeUnwrapParams, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, FinalizeUnwrapParams, Address>({\n ...finalizeUnwrapMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterUnshield(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n invalidateAfterUnshield,\n type UnshieldParams,\n unshieldMutationOptions,\n} from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Unshield a specific amount and finalize in one call.\n * Orchestrates: unwrap → wait for receipt → parse event → finalize.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link EncryptionFailedError} — FHE encryption failed during unwrap\n * - {@link DecryptionFailedError} — public decryption failed during finalize\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unshield = useUnshield(\"0xWrapper\");\n * unshield.mutate({ amount: 500n });\n * ```\n */\nexport function useUnshield(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, UnshieldParams, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, UnshieldParams, Address>({\n ...unshieldMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterUnshield(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n invalidateAfterUnshield,\n type UnshieldAllParams,\n unshieldAllMutationOptions,\n} from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Unshield the entire balance and finalize in one call.\n * Orchestrates: unwrapAll → wait for receipt → parse event → finalize.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link DecryptionFailedError} — public decryption failed during finalize\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unshieldAll = useUnshieldAll(\"0xWrapper\");\n * unshieldAll.mutate();\n * ```\n */\nexport function useUnshieldAll(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, UnshieldAllParams | void, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, UnshieldAllParams | void, Address>({\n ...unshieldAllMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterUnshield(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n invalidateAfterUnshield,\n type ResumeUnshieldParams,\n resumeUnshieldMutationOptions,\n} from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Resume an interrupted unshield from an existing unwrap tx hash.\n * Useful when the user submitted the unwrap but the finalize step was\n * interrupted (e.g. page reload, network error).\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link DecryptionFailedError} — public decryption failed during finalize\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const resumeUnshield = useResumeUnshield(\"0xWrapper\");\n * resumeUnshield.mutate({ unwrapTxHash: \"0xabc...\" });\n * ```\n */\nexport function useResumeUnshield(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, ResumeUnshieldParams, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, ResumeUnshieldParams, Address>({\n ...resumeUnshieldMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterUnshield(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport { useQuery, useSuspenseQuery } from \"../utils/query\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { underlyingAllowanceQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\nexport { underlyingAllowanceQueryOptions };\n\nexport interface UseUnderlyingAllowanceConfig {\n /** Address of the confidential wrapper contract. */\n address: Address;\n /** Owner to fetch allowance for. The query is disabled while `undefined`. */\n owner: Address | undefined;\n}\n\nexport interface UseUnderlyingAllowanceSuspenseConfig {\n /** Address of the confidential wrapper contract. */\n address: Address;\n /** Owner to fetch allowance for. */\n owner: Address;\n}\n\n/**\n * Hook for fetching the underlying ERC-20 allowance granted to the wrapper\n * contract. Useful to check if an approval is needed before shielding.\n *\n * @example\n * ```tsx\n * const { data: allowance } = useUnderlyingAllowance({\n * address: \"0xWrapper\",\n * owner: \"0xOwner\",\n * });\n * ```\n */\nexport function useUnderlyingAllowance(\n config: UseUnderlyingAllowanceConfig,\n options?: Omit<UseQueryOptions<bigint>, \"queryKey\" | \"queryFn\">,\n) {\n const { address, owner } = config;\n const sdk = useZamaSDK();\n\n const baseOpts = underlyingAllowanceQueryOptions(sdk, address, { owner });\n\n return useQuery<bigint>({\n ...baseOpts,\n ...options,\n enabled: (baseOpts.enabled ?? true) && (options?.enabled ?? true),\n });\n}\n\n/**\n * Suspense variant of {@link useUnderlyingAllowance}. Suspends rendering until\n * the allowance resolves.\n *\n * @example\n * ```tsx\n * const { data: allowance } = useUnderlyingAllowanceSuspense({\n * address: \"0xWrapper\",\n * owner: \"0xOwner\",\n * });\n * ```\n */\nexport function useUnderlyingAllowanceSuspense(config: UseUnderlyingAllowanceSuspenseConfig) {\n const { address, owner } = config;\n const sdk = useZamaSDK();\n\n return useSuspenseQuery<bigint>(underlyingAllowanceQueryOptions(sdk, address, { owner }));\n}\n","\"use client\";\n\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { zamaQueryKeys } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\n\n/**\n * Resolves the wrappers registry address for the current chain.\n * Uses the registry addresses from `sdk.registry` (built-in defaults from chain configs).\n *\n * Returns `undefined` when the chain ID hasn't been fetched yet\n * or when no registry is configured for the connected chain.\n *\n * The chain ID is cached for 30 seconds (`staleTime`), so chain\n * switches may take up to 30s to reflect.\n */\nexport function useWrappersRegistryAddress(): Address | undefined {\n const sdk = useZamaSDK();\n\n const { data: chainId } = useQuery<number>({\n queryKey: zamaQueryKeys.wrappersRegistry.chainId(),\n queryFn: () => sdk.provider.getChainId(),\n staleTime: 30_000,\n });\n\n return chainId !== undefined ? sdk.registry.getAddress(chainId) : undefined;\n}\n","\"use client\";\n\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { wrapperDiscoveryQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery, useSuspenseQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"../wrappers-registry/use-wrappers-registry-address\";\n\nexport { wrapperDiscoveryQueryOptions };\n\n/** Configuration for {@link useWrapperDiscovery}. */\nexport interface UseWrapperDiscoveryConfig {\n /**\n * Address of any confidential token you control.\n * Used only to derive the signer context and to scope the query cache key —\n * it does not affect which wrapper the registry returns.\n */\n tokenAddress: Address;\n /** ERC-20 address to discover the wrapper for. Pass `undefined` to disable the query. */\n erc20Address: Address | undefined;\n}\n\n/** Configuration for {@link useWrapperDiscoverySuspense}. */\nexport interface UseWrapperDiscoverySuspenseConfig {\n /**\n * Address of any confidential token you control.\n * Used only to derive the signer context and to scope the query cache key —\n * it does not affect which wrapper the registry returns.\n */\n tokenAddress: Address;\n /** ERC-20 address to discover the wrapper for. */\n erc20Address: Address;\n}\n\n/**\n * Discover the confidential wrapper for an ERC-20 token via the on-chain registry.\n * Returns the wrapper address if one exists, or `null` if not.\n * Cached indefinitely since wrapper mappings are immutable.\n *\n * @param config - Token and ERC-20 addresses.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns Query result with `data: Address | null`.\n *\n * @example\n * ```tsx\n * const { data: wrapperAddress } = useWrapperDiscovery({\n * tokenAddress: \"0xConfidentialToken\",\n * erc20Address: \"0xUSDC\",\n * });\n * ```\n */\nexport function useWrapperDiscovery(\n config: UseWrapperDiscoveryConfig,\n options?: Omit<UseQueryOptions<Address | null>, \"queryKey\" | \"queryFn\">,\n) {\n const { tokenAddress, erc20Address } = config;\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n const baseOpts = wrapperDiscoveryQueryOptions(sdk.registry, {\n tokenAddress,\n erc20Address,\n registryAddress,\n });\n\n return useQuery<Address | null>({\n ...baseOpts,\n ...options,\n enabled: (baseOpts.enabled ?? true) && (options?.enabled ?? true),\n });\n}\n\n/**\n * Suspense variant of {@link useWrapperDiscovery}.\n * Suspends rendering until the wrapper address is resolved.\n *\n * @param config - Token and ERC-20 addresses.\n * @returns Suspense query result with `data: Address | null`.\n *\n * @example\n * ```tsx\n * const { data: wrapperAddress } = useWrapperDiscoverySuspense({\n * tokenAddress: \"0xConfidentialToken\",\n * erc20Address: \"0xUSDC\",\n * });\n * ```\n */\nexport function useWrapperDiscoverySuspense(config: UseWrapperDiscoverySuspenseConfig) {\n const { tokenAddress, erc20Address } = config;\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useSuspenseQuery<Address | null>(\n wrapperDiscoveryQueryOptions(sdk.registry, {\n tokenAddress,\n erc20Address,\n registryAddress,\n }),\n );\n}\n","\"use client\";\n\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { tokenMetadataQueryOptions, type TokenMetadata } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery, useSuspenseQuery } from \"../utils/query\";\n\n/**\n * Read ERC-20 token metadata (name, symbol, decimals).\n * Fetches all three in parallel. Cached indefinitely since metadata is immutable.\n *\n * @param tokenAddress - Address of the token contract.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns Query result with `data: TokenMetadata`.\n *\n * @example\n * ```tsx\n * const { data: metadata } = useMetadata(\"0xToken\");\n * // metadata?.name, metadata?.symbol, metadata?.decimals\n * ```\n */\nexport function useMetadata(\n tokenAddress: Address,\n options?: Omit<UseQueryOptions<TokenMetadata>, \"queryKey\" | \"queryFn\">,\n) {\n const sdk = useZamaSDK();\n return useQuery<TokenMetadata>({\n ...tokenMetadataQueryOptions(sdk, tokenAddress),\n ...options,\n });\n}\n\n/**\n * Suspense variant of {@link useMetadata}.\n * Suspends rendering until metadata is loaded.\n *\n * @param tokenAddress - Address of the token contract.\n * @returns Suspense query result with `data: TokenMetadata`.\n *\n * @example\n * ```tsx\n * const { data: metadata } = useMetadataSuspense(\"0xToken\");\n * ```\n */\nexport function useMetadataSuspense(tokenAddress: Address) {\n const sdk = useZamaSDK();\n return useSuspenseQuery<TokenMetadata>(tokenMetadataQueryOptions(sdk, tokenAddress));\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n delegateDecryptionMutationOptions,\n zamaQueryKeys,\n type DelegateDecryptionParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Delegate FHE decryption rights for a confidential contract to another address\n * via the on-chain ACL.\n *\n * @param address - Confidential contract address to delegate on.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const delegate = useDelegateDecryption(\"0xToken\");\n * delegate.mutate({ delegateAddress: \"0xDelegate\" });\n * ```\n */\nexport function useDelegateDecryption(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, DelegateDecryptionParams>,\n) {\n const sdk = useZamaSDK();\n\n return useMutation<TransactionResult, Error, DelegateDecryptionParams>({\n ...delegateDecryptionMutationOptions(sdk, address),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n try {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n } finally {\n void context.client.invalidateQueries({ queryKey: zamaQueryKeys.delegationStatus.all });\n }\n },\n });\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n revokeDelegationMutationOptions,\n zamaQueryKeys,\n type RevokeDelegationParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Revoke FHE decryption delegation for a confidential contract from a delegate address.\n *\n * @param address - Confidential contract address to revoke delegation on.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const revoke = useRevokeDelegation(\"0xToken\");\n * revoke.mutate({ delegateAddress: \"0xDelegate\" });\n * ```\n */\nexport function useRevokeDelegation(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, RevokeDelegationParams>,\n) {\n const sdk = useZamaSDK();\n\n return useMutation<TransactionResult, Error, RevokeDelegationParams>({\n ...revokeDelegationMutationOptions(sdk, address),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n try {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n } finally {\n void context.client.invalidateQueries({ queryKey: zamaQueryKeys.delegationStatus.all });\n }\n },\n });\n}\n","\"use client\";\n\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { delegationStatusQueryOptions, type DelegationStatusData } from \"@zama-fhe/sdk/query\";\nimport { useQuery } from \"../utils/query\";\nimport { useZamaSDK } from \"../provider\";\n\nexport interface UseDelegationStatusConfig {\n /** Address of the confidential contract. Pass `undefined` to disable the query. */\n contractAddress: Address | undefined;\n /** The address that granted the delegation. */\n delegatorAddress?: Address;\n /** The address that received delegation rights. */\n delegateAddress?: Address;\n}\n\n/**\n * Query delegation status between a delegator and delegate for a token.\n *\n * @param config - Token address, delegator, and delegate addresses.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns `{ isActive, expiryTimestamp, isLoading, error }`.\n *\n * @example\n * ```tsx\n * const { data } = useDelegationStatus({\n * contractAddress: \"0xToken\",\n * delegatorAddress: \"0xDelegator\",\n * delegateAddress: \"0xDelegate\",\n * });\n * // data?.isActive, data?.expiryTimestamp\n * ```\n */\nexport function useDelegationStatus(\n config: UseDelegationStatusConfig,\n options?: Omit<UseQueryOptions<DelegationStatusData>, \"queryKey\" | \"queryFn\">,\n) {\n const sdk = useZamaSDK();\n const baseOpts = delegationStatusQueryOptions(sdk, config);\n\n return useQuery<DelegationStatusData>({\n ...baseOpts,\n ...options,\n enabled: (baseOpts.enabled ?? true) && (options?.enabled ?? true),\n });\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { decryptBalanceAsMutationOptions, type DecryptBalanceAsParams } from \"@zama-fhe/sdk/query\";\nimport { useToken } from \"../token/use-token\";\n\n/**\n * Decrypt another user's confidential balance as a delegate.\n *\n * @param address - Address of the confidential token contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const decryptAs = useDecryptBalanceAs(\"0xToken\");\n * decryptAs.mutate({ delegatorAddress: \"0xDelegator\" });\n * // decryptAs.data => 1000n\n * ```\n */\nexport function useDecryptBalanceAs(\n address: Address,\n options?: UseMutationOptions<bigint, Error, DecryptBalanceAsParams>,\n) {\n const token = useToken(address);\n\n return useMutation<bigint, Error, DecryptBalanceAsParams>({\n ...decryptBalanceAsMutationOptions(token),\n ...options,\n });\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address, Token } from \"@zama-fhe/sdk\";\nimport {\n batchDecryptBalancesAsMutationOptions,\n type BatchDecryptBalancesAsParams,\n} from \"@zama-fhe/sdk/query\";\n\n/**\n * Batch decrypt confidential balances as a delegate across multiple tokens.\n *\n * @param tokens - {@link Token} instances to decrypt balances for.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const batchDecryptAs = useBatchDecryptBalancesAs(tokens);\n * batchDecryptAs.mutate({\n * delegatorAddress: \"0xDelegator\",\n * });\n * // batchDecryptAs.data => Map { \"0xTokenA\" => 100n, \"0xTokenB\" => 200n }\n * ```\n */\nexport function useBatchDecryptBalancesAs(\n tokens: Token[],\n options?: UseMutationOptions<Map<Address, bigint>, Error, BatchDecryptBalancesAsParams>,\n) {\n return useMutation<Map<Address, bigint>, Error, BatchDecryptBalancesAsParams>({\n ...batchDecryptBalancesAsMutationOptions(tokens),\n ...options,\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n approveUnderlyingMutationOptions,\n invalidateAfterApproveUnderlying,\n type ApproveUnderlyingParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Approve the wrapper contract to spend the underlying ERC-20.\n * Defaults to max uint256. Resets to zero first if there's an existing\n * non-zero allowance (required by tokens like USDT).\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link TransactionRevertedError} — approval transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const approve = useApproveUnderlying(\"0xWrapper\");\n * approve.mutate({}); // max approval\n * approve.mutate({ amount: 1000n }); // exact amount\n * ```\n */\nexport function useApproveUnderlying(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, ApproveUnderlyingParams, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, ApproveUnderlyingParams, Address>({\n ...approveUnderlyingMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterApproveUnderlying(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport { useQuery, useSuspenseQuery } from \"../utils/query\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { isConfidentialQueryOptions, isWrapperQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\nexport { isConfidentialQueryOptions, isWrapperQueryOptions };\n\n/**\n * Check if a token supports the ERC-7984 confidential interface via ERC-165.\n * Result is cached indefinitely since interface support does not change.\n *\n * @param tokenAddress - Address of the token contract to check.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns Query result with `data: boolean`.\n *\n * @example\n * ```tsx\n * const { data: isConfidential } = useIsConfidential(\"0xToken\");\n * ```\n */\nexport function useIsConfidential(\n tokenAddress: Address,\n options?: Omit<UseQueryOptions<boolean>, \"queryKey\" | \"queryFn\">,\n) {\n const sdk = useZamaSDK();\n\n return useQuery<boolean>({\n ...isConfidentialQueryOptions(sdk, tokenAddress),\n ...options,\n });\n}\n\n/**\n * Suspense variant of {@link useIsConfidential}.\n * Suspends rendering until the ERC-165 check resolves.\n *\n * @param tokenAddress - Address of the token contract to check.\n * @returns Suspense query result with `data: boolean`.\n *\n * @example\n * ```tsx\n * const { data: isConfidential } = useIsConfidentialSuspense(\"0xToken\");\n * ```\n */\nexport function useIsConfidentialSuspense(tokenAddress: Address) {\n const sdk = useZamaSDK();\n\n return useSuspenseQuery<boolean>(isConfidentialQueryOptions(sdk, tokenAddress));\n}\n\n/**\n * Check if a token supports the ERC-7984 wrapper interface via ERC-165.\n * Result is cached indefinitely since interface support does not change.\n *\n * @param tokenAddress - Address of the token contract to check.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns Query result with `data: boolean`.\n *\n * @example\n * ```tsx\n * const { data: isWrapper } = useIsWrapper(\"0xToken\");\n * ```\n */\nexport function useIsWrapper(\n tokenAddress: Address,\n options?: Omit<UseQueryOptions<boolean>, \"queryKey\" | \"queryFn\">,\n) {\n const sdk = useZamaSDK();\n\n return useQuery<boolean>({\n ...isWrapperQueryOptions(sdk, tokenAddress),\n ...options,\n });\n}\n\n/**\n * Suspense variant of {@link useIsWrapper}.\n * Suspends rendering until the ERC-165 check resolves.\n *\n * @param tokenAddress - Address of the token contract to check.\n * @returns Suspense query result with `data: boolean`.\n *\n * @example\n * ```tsx\n * const { data: isWrapper } = useIsWrapperSuspense(\"0xToken\");\n * ```\n */\nexport function useIsWrapperSuspense(tokenAddress: Address) {\n const sdk = useZamaSDK();\n\n return useSuspenseQuery<boolean>(isWrapperQueryOptions(sdk, tokenAddress));\n}\n","\"use client\";\n\nimport { useQuery, useSuspenseQuery } from \"../utils/query\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { totalSupplyQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\nexport { totalSupplyQueryOptions };\n\n/**\n * Read the total supply of a token.\n * Stale after 30 seconds to balance freshness and RPC cost.\n *\n * @param tokenAddress - Address of the token contract.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns Query result with `data: bigint`.\n * Uses ERC-165 to call `inferredTotalSupply()` on upgraded wrappers and\n * legacy `totalSupply()` on pre-upgrade wrappers.\n *\n * @example\n * ```tsx\n * const { data: totalSupply } = useTotalSupply(\"0xToken\");\n * ```\n */\nexport function useTotalSupply(\n tokenAddress: Address,\n options?: Omit<UseQueryOptions<bigint>, \"queryKey\" | \"queryFn\">,\n) {\n const sdk = useZamaSDK();\n\n return useQuery<bigint>({\n ...totalSupplyQueryOptions(sdk, tokenAddress),\n ...options,\n });\n}\n\n/**\n * Suspense variant of {@link useTotalSupply}.\n * Suspends rendering until the total supply is loaded.\n *\n * @param tokenAddress - Address of the token contract.\n * @returns Suspense query result with `data: bigint`.\n * Uses ERC-165 to call `inferredTotalSupply()` on upgraded wrappers and\n * legacy `totalSupply()` on pre-upgrade wrappers.\n *\n * @example\n * ```tsx\n * const { data: totalSupply } = useTotalSupplySuspense(\"0xToken\");\n * ```\n */\nexport function useTotalSupplySuspense(tokenAddress: Address) {\n const sdk = useZamaSDK();\n\n return useSuspenseQuery<bigint>(totalSupplyQueryOptions(sdk, tokenAddress));\n}\n","\"use client\";\n\nimport type { TokenWrapperPair } from \"@zama-fhe/sdk\";\nimport { tokenPairsQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Fetches all token wrapper pairs from the ConfidentialTokenWrappersRegistry\n * contract on the current chain.\n */\nexport function useTokenPairsRegistry() {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<readonly TokenWrapperPair[]>(\n tokenPairsQueryOptions(sdk, {\n registryAddress,\n }),\n );\n}\n","\"use client\";\n\nimport { tokenPairsLengthQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Returns the total number of token wrapper pairs in the registry.\n */\nexport function useTokenPairsLength() {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<bigint>(\n tokenPairsLengthQueryOptions(sdk, {\n registryAddress,\n }),\n );\n}\n","\"use client\";\n\nimport type { TokenWrapperPair } from \"@zama-fhe/sdk\";\nimport { tokenPairsSliceQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Fetches a range of token wrapper pairs from the registry (paginated).\n *\n * @param fromIndex - Start index (inclusive). Pass `undefined` to disable.\n * @param toIndex - End index (exclusive). Pass `undefined` to disable.\n */\nexport function useTokenPairsSlice({\n fromIndex,\n toIndex,\n}: {\n fromIndex: bigint | undefined;\n toIndex: bigint | undefined;\n}) {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<readonly TokenWrapperPair[]>(\n tokenPairsSliceQueryOptions(sdk, {\n registryAddress,\n fromIndex,\n toIndex,\n }),\n );\n}\n","\"use client\";\n\nimport type { TokenWrapperPair } from \"@zama-fhe/sdk\";\nimport { tokenPairQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Fetches a single token wrapper pair by index from the registry.\n *\n * @param index - Zero-based pair index. Pass `undefined` to disable.\n */\nexport function useTokenPair({ index }: { index: bigint | undefined }) {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<TokenWrapperPair>(\n tokenPairQueryOptions(sdk, {\n registryAddress,\n index,\n }),\n );\n}\n","\"use client\";\n\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { confidentialTokenAddressQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Looks up the confidential token address for a given plain token address.\n */\nexport function useConfidentialTokenAddress({\n tokenAddress,\n}: {\n tokenAddress: Address | undefined;\n}) {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<readonly [boolean, Address]>(\n confidentialTokenAddressQueryOptions(sdk, {\n registryAddress,\n tokenAddress,\n }),\n );\n}\n","\"use client\";\n\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { tokenAddressQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Looks up the plain token address for a given confidential token address.\n */\nexport function useTokenAddress({\n confidentialTokenAddress,\n}: {\n confidentialTokenAddress: Address | undefined;\n}) {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<readonly [boolean, Address]>(\n tokenAddressQueryOptions(sdk, {\n registryAddress,\n confidentialTokenAddress,\n }),\n );\n}\n","\"use client\";\n\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { isConfidentialTokenValidQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Checks whether a confidential token is registered and valid in the\n * on-chain wrappers registry.\n *\n * @param confidentialTokenAddress - The confidential token to check. Pass `undefined` to disable.\n */\nexport function useIsConfidentialTokenValid({\n confidentialTokenAddress,\n}: {\n confidentialTokenAddress: Address | undefined;\n}) {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<boolean>(\n isConfidentialTokenValidQueryOptions(sdk, {\n registryAddress,\n confidentialTokenAddress,\n }),\n );\n}\n","\"use client\";\n\nimport type {\n TokenWrapperPair,\n TokenWrapperPairWithMetadata,\n PaginatedResult,\n} from \"@zama-fhe/sdk\";\nimport { listPairsQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Fetches paginated token wrapper pairs from the registry.\n *\n * @param options - Query options: `page` (1-indexed, default `1`), `pageSize` (default `100`), `metadata` (fetch on-chain metadata for both tokens, default `false`).\n *\n * @example\n * ```tsx\n * const { data, isLoading } = useListPairs({ page: 1, pageSize: 20 });\n * if (data) {\n * console.log(`${data.total} pairs, showing page ${data.page}`);\n * }\n * ```\n */\nexport function useListPairs({\n page = 1,\n pageSize = 100,\n metadata = false,\n}: {\n page?: number;\n pageSize?: number;\n metadata?: boolean;\n} = {}) {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n // Pass sdk.registry (a lazy singleton) so the class-level TTL cache is shared\n // across all queryFn executions — rather than constructing a new instance each time.\n return useQuery<PaginatedResult<TokenWrapperPair | TokenWrapperPairWithMetadata>>(\n listPairsQueryOptions(sdk.registry, {\n registryAddress,\n page,\n pageSize,\n metadata,\n }),\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["useQuery","tanstack_useQuery","useSuspenseQuery","tanstack_useSuspenseQuery","useQuery","useQuery","useQuery","useQuery","typed","useQuery","useSuspenseQuery","useQuery","useSuspenseQuery","useQuery","useQuery","useSuspenseQuery","useQuery","useSuspenseQuery","useQuery","useQuery","useSuspenseQuery","useQuery","useSuspenseQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery"],"sources":["../src/provider.tsx","../src/relayer/use-encrypt.ts","../src/utils/query.ts","../src/utils/wallet-account.ts","../src/decrypt/use-user-decrypt.ts","../src/decrypt/use-public-decrypt.ts","../src/decrypt/use-delegated-decrypt.ts","../src/permits/use-grant-permit.ts","../src/permits/use-has-permit.ts","../src/permits/use-revoke-permits.ts","../src/permits/use-clear-credentials.ts","../src/token/use-token.ts","../src/token/use-wrapped-token.ts","../src/balance/use-confidential-balance.ts","../src/balance/use-confidential-balances.ts","../src/balance/optimistic-balance-update.ts","../src/transfer/use-confidential-transfer.ts","../src/transfer/use-confidential-transfer-from.ts","../src/operator/use-confidential-set-operator.ts","../src/operator/use-confidential-is-operator.ts","../src/shield/use-shield.ts","../src/unwrap/use-unwrap.ts","../src/unwrap/use-unwrap-all.ts","../src/unwrap/use-finalize-unwrap.ts","../src/unshield/use-unshield.ts","../src/unshield/use-unshield-all.ts","../src/unshield/use-resume-unshield.ts","../src/shield/use-underlying-allowance.ts","../src/wrappers-registry/use-wrappers-registry-address.ts","../src/token/use-wrapper-discovery.ts","../src/token/use-metadata.ts","../src/delegations/use-delegate-decryption.ts","../src/delegations/use-revoke-delegation.ts","../src/delegations/use-delegation-status.ts","../src/delegations/use-decrypt-balance-as.ts","../src/delegations/use-batch-decrypt-balances-as.ts","../src/shield/use-approve-underlying.ts","../src/token/use-is-confidential.ts","../src/token/use-total-supply.ts","../src/wrappers-registry/use-token-pairs-registry.ts","../src/wrappers-registry/use-token-pairs-length.ts","../src/wrappers-registry/use-token-pairs-slice.ts","../src/wrappers-registry/use-token-pair.ts","../src/wrappers-registry/use-confidential-token-address.ts","../src/wrappers-registry/use-token-address.ts","../src/wrappers-registry/use-is-confidential-token-valid.ts","../src/wrappers-registry/use-list-pairs.ts"],"sourcesContent":["\"use client\";\n\nimport type { ZamaConfig } from \"@zama-fhe/sdk\";\nimport { ZamaSDK } from \"@zama-fhe/sdk\";\nimport { invalidateWalletLifecycleQueries } from \"@zama-fhe/sdk/query\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport {\n createContext,\n type PropsWithChildren,\n useContext,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\n\n/** Props for {@link ZamaProvider}. */\nexport interface ZamaProviderProps extends PropsWithChildren {\n /** Configuration object created by {@link createConfig}. */\n config: ZamaConfig;\n}\n\nconst ZamaSDKContext = createContext<ZamaSDK | null>(null);\n\n/**\n * Provides a {@link ZamaSDK} instance to all descendant hooks.\n *\n * @example\n * ```tsx\n * <ZamaProvider config={zamaConfig}>\n * <App />\n * </ZamaProvider>\n * ```\n */\nexport function ZamaProvider({ children, config }: ZamaProviderProps) {\n const queryClient = useQueryClient();\n\n // Stabilize onEvent so an inline arrow doesn't recreate the SDK every render.\n const onEventRef = useRef(config.onEvent);\n\n useEffect(() => {\n onEventRef.current = config.onEvent;\n });\n\n const sdk = useMemo(() => new ZamaSDK({ ...config, onEvent: onEventRef.current }), [config]);\n\n // SDK internally does credential/cache cleanup. React layer clears the\n // wallet-lifecycle query state.\n useEffect(\n () =>\n sdk.onWalletAccountChange(({ previous }) => {\n if (previous) {\n invalidateWalletLifecycleQueries(queryClient);\n }\n }),\n [sdk, queryClient],\n );\n\n // Clean up SDK-owned signer subscriptions on unmount without terminating\n // the caller-owned relayer. dispose() is idempotent.\n useEffect(() => () => sdk.dispose(), [sdk]);\n\n return <ZamaSDKContext.Provider value={sdk}>{children}</ZamaSDKContext.Provider>;\n}\n\n/**\n * Access the {@link ZamaSDK} instance from context.\n * Throws if called outside a {@link ZamaProvider}.\n *\n * @example\n * ```tsx\n * const sdk = useZamaSDK();\n * const token = sdk.createToken(\"0x...\");\n * ```\n */\nexport function useZamaSDK(): ZamaSDK {\n const context = useContext(ZamaSDKContext);\n\n if (!context) {\n throw new Error(\n \"useZamaSDK must be used within a <ZamaProvider>. \" +\n \"Wrap your component tree in <ZamaProvider config={createConfig(...)}>.\",\n );\n }\n return context;\n}\n","\"use client\";\n\nimport type { EncryptParams, EncryptResult } from \"@zama-fhe/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { encryptMutationOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Encrypt a plaintext value using FHE.\n * Calls the relayer's `encrypt` method via a mutation.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link EncryptionFailedError} — FHE encryption failed\n *\n * @returns A mutation whose `mutate` accepts {@link EncryptParams}.\n *\n * @example\n * ```tsx\n * const encrypt = useEncrypt();\n * encrypt.mutate({ values: [{ value: 1000n, type: \"euint64\" }], contractAddress: \"0x...\", userAddress: \"0x...\" });\n * ```\n */\nexport function useEncrypt() {\n const sdk = useZamaSDK();\n return useMutation<EncryptResult, Error, EncryptParams>(encryptMutationOptions(sdk));\n}\n","import {\n type DefaultError,\n type QueriesOptions,\n type QueriesResults,\n useQueries as tanstack_useQueries,\n useQuery as tanstack_useQuery,\n useSuspenseQuery as tanstack_useSuspenseQuery,\n type UseQueryOptions,\n type UseQueryResult,\n type UseSuspenseQueryOptions,\n type UseSuspenseQueryResult,\n} from \"@tanstack/react-query\";\nimport { hashFn } from \"@zama-fhe/sdk/query\";\n\n/**\n * Thin wrapper around TanStack's useQuery that injects our custom queryKeyHashFn.\n * Mirrors the wagmi pattern — the type safety boundary is at the factory and hook levels.\n *\n * Callers typically specify only `<TData>` (e.g. `useQuery<PublicKeyData>(...)`) while\n * factory options carry specific tuple keys (e.g. `readonly [\"zama.publicKey\"]`).\n * We erase the QueryKey param via `AnyKeyQueryOptions` so callers don't need to\n * spell out the key type — any QueryKey subtype is accepted.\n */\ntype AnyKeyQueryOptions<TData, TError> = UseQueryOptions<\n TData,\n TError,\n TData,\n // oxlint-disable-next-line typescript/no-explicit-any\n any\n>;\ntype AnyKeySuspenseOptions<TData, TError> = UseSuspenseQueryOptions<\n TData,\n TError,\n TData,\n // oxlint-disable-next-line typescript/no-explicit-any\n any\n>;\n\nexport function useQuery<TData = unknown, TError = DefaultError>(\n options: AnyKeyQueryOptions<TData, TError>,\n): UseQueryResult<TData, TError> {\n return tanstack_useQuery({\n ...options,\n queryKeyHashFn: hashFn,\n });\n}\n\nexport function useSuspenseQuery<TData = unknown, TError = DefaultError>(\n options: AnyKeySuspenseOptions<TData, TError>,\n): UseSuspenseQueryResult<TData, TError> {\n return tanstack_useSuspenseQuery({\n ...options,\n queryKeyHashFn: hashFn,\n });\n}\n\n/**\n * Thin wrapper around TanStack's useQueries that injects our custom queryKeyHashFn\n * on every query in the array.\n */\nexport function useQueries<\n // oxlint-disable-next-line typescript/no-explicit-any\n T extends Array<any>,\n TCombinedResult = QueriesResults<T>,\n>({\n queries,\n ...options\n}: {\n queries: readonly [...QueriesOptions<T>];\n combine?: (result: QueriesResults<T>) => TCombinedResult;\n subscribed?: boolean;\n}): TCombinedResult {\n return tanstack_useQueries({\n ...options,\n queries: queries.map((q) => ({\n ...q,\n queryKeyHashFn: hashFn,\n })) as [...QueriesOptions<T>],\n });\n}\n","\"use client\";\n\nimport { useSyncExternalStore } from \"react\";\nimport type { WalletAccount, ZamaSDK } from \"@zama-fhe/sdk\";\n\nexport function useWalletAccount(sdk: ZamaSDK): WalletAccount | undefined {\n return useSyncExternalStore(\n (listener) => sdk.onWalletAccountChange(listener),\n () => sdk.signer?.walletAccount.getSnapshot(),\n () => undefined,\n );\n}\n","\"use client\";\n\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { DecryptResult } from \"@zama-fhe/sdk/query\";\nimport { userDecryptQueryOptions } from \"@zama-fhe/sdk/query\";\nimport type { EncryptedInput } from \"@zama-fhe/sdk/query/user-decrypt\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWalletAccount } from \"../utils/wallet-account\";\n\n/**\n * React hook for FHE user decryption. Thin wrapper around\n * `userDecryptQueryOptions` with `useQuery` semantics.\n */\nexport function useUserDecrypt(\n encryptedInputs: EncryptedInput[],\n options?: Omit<UseQueryOptions<DecryptResult>, \"queryKey\" | \"queryFn\">,\n) {\n const sdk = useZamaSDK();\n const walletAccount = useWalletAccount(sdk);\n const queryOpts = userDecryptQueryOptions(sdk, encryptedInputs, {\n walletAccount,\n });\n return useQuery<DecryptResult>({\n ...queryOpts,\n ...options,\n enabled: queryOpts.enabled && (options?.enabled ?? false),\n });\n}\n\n/** Return type of {@link useUserDecrypt}. */\nexport type UseUserDecryptResult = ReturnType<typeof useUserDecrypt>;\n","\"use client\";\n\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { EncryptedValue, PublicDecryptResult } from \"@zama-fhe/sdk\";\nimport { publicDecryptMutationOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Decrypt FHE ciphertext handles using the network public key (no credential needed).\n * On success, results are available via `data.clearValues` and written to the\n * persistent decrypt cache.\n *\n * @returns A mutation whose `mutate` accepts an array of handle strings.\n *\n * @example\n * ```tsx\n * const publicDecrypt = usePublicDecrypt();\n * publicDecrypt.mutate([\"0xHandle1\", \"0xHandle2\"]);\n * // publicDecrypt.data?.clearValues => { \"0xHandle1\": 500n, ... }\n * ```\n */\nexport function usePublicDecrypt() {\n const sdk = useZamaSDK();\n return useMutation<PublicDecryptResult, Error, EncryptedValue[]>(\n publicDecryptMutationOptions(sdk),\n );\n}\n","\"use client\";\n\nimport type { ClearValue, EncryptedValue } from \"@zama-fhe/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport {\n delegatedDecryptMutationOptions,\n type DelegatedDecryptMutationParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Decrypt FHE ciphertext handles using delegated user credentials.\n * Returns a map of handle → plaintext bigint.\n *\n * @returns A mutation whose `mutate` accepts {@link DelegatedDecryptMutationParams}.\n *\n * @example\n * ```tsx\n * const decrypt = useDelegatedDecrypt();\n * decrypt.mutate({ encryptedInputs: [{ encryptedValue: \"0xHandle1\", contractAddress: \"0x...\" }], delegatorAddress: \"0x...\" });\n * // decrypt.data => { \"0xHandle1\": 1000n }\n * ```\n */\nexport function useDelegatedDecrypt() {\n const sdk = useZamaSDK();\n return useMutation<Record<EncryptedValue, ClearValue>, Error, DelegatedDecryptMutationParams>(\n delegatedDecryptMutationOptions(sdk),\n );\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { grantPermitMutationOptions, zamaQueryKeys } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Sign an EIP-712 message authorizing decryption of confidential handles\n * for a list of contract addresses. This is not token-specific — any\n * contract that uses FHE-encrypted values (tokens, DeFi vaults, games, etc.)\n * can be authorized in a single wallet signature. Subsequent decrypt\n * operations on any of these contracts reuse cached credentials.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link KeypairExpiredError} — the re-encryption keypair has expired\n *\n * @example\n * ```tsx\n * const { mutateAsync: grantPermit, isPending } = useGrantPermit();\n *\n * // Authorize decryption for any contracts with encrypted state:\n * // confidential tokens, auction contracts, governance contracts, etc.\n * await grantPermit([tokenAddress, auctionAddress, governanceAddress]);\n * ```\n */\nexport function useGrantPermit(options?: UseMutationOptions<void, Error, Address[]>) {\n const sdk = useZamaSDK();\n\n return useMutation<void, Error, Address[]>({\n ...grantPermitMutationOptions(sdk),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n context.client.removeQueries({ queryKey: zamaQueryKeys.hasPermit.all });\n },\n });\n}\n","\"use client\";\n\nimport { useQuery } from \"../utils/query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { hasPermitQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useWalletAccount } from \"../utils/wallet-account\";\n\n/** Configuration for {@link useHasPermit}. */\nexport interface UseHasPermitConfig {\n /** Contract addresses to check credentials against (at least one required). */\n contractAddresses: [Address, ...Address[]];\n}\n\n/**\n * Check whether stored permits cover the given contract addresses for the\n * connected signer. Returns `true` if decrypt operations can proceed without\n * a wallet prompt.\n *\n * @returns Query result with `data: boolean` — `true` if a stored permit covers\n * every entry in `contractAddresses`. The query auto-disables when no signer is configured\n * (`data` stays `undefined`, `status` stays `\"pending\"`).\n * @throws if the query runs without a signer configured (the `enabled` guard normally\n * prevents this; only reachable if the caller forces `query: { enabled: true }`). {@link SignerNotConfiguredError}\n *\n * @example\n * ```tsx\n * const { data: hasPermit } = useHasPermit({ contractAddresses: [\"0xToken\"] });\n * ```\n */\nexport function useHasPermit(config: UseHasPermitConfig) {\n const sdk = useZamaSDK();\n const walletAccount = useWalletAccount(sdk);\n return useQuery<boolean>(hasPermitQueryOptions(sdk, config, { walletAccount }));\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { revokePermitsMutationOptions, zamaQueryKeys } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Revoke FHE permits for the current signer.\n *\n * - Called with no arguments: every permit is removed across all chains and\n * delegators. The keypair survives — use {@link useClearCredentials} to also\n * wipe the keypair.\n * - Called with a contract list: only direct-decrypt permits on the current\n * chain whose payload touches a listed address are removed. Delegated\n * permits are not touched in this mode.\n *\n * @example\n * ```tsx\n * const { mutate: revokePermits } = useRevokePermits();\n * revokePermits([tokenAddress]); // direct-decrypt scope, current chain\n * revokePermits(); // every permit, all chains, all delegators\n * ```\n */\nexport function useRevokePermits(options?: UseMutationOptions<void, Error, Address[] | void>) {\n const sdk = useZamaSDK();\n\n return useMutation<void, Error, Address[] | void>({\n ...revokePermitsMutationOptions(sdk),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n context.client.removeQueries({ queryKey: zamaQueryKeys.hasPermit.all });\n context.client.removeQueries({ queryKey: zamaQueryKeys.decryption.all });\n },\n });\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { clearCredentialsMutationOptions, zamaQueryKeys } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Wipe the keypair for the current signer and cascade-delete every permit\n * (across chains and delegators) referencing it. Useful for \"log out\"\n * handlers that should leave no trace.\n *\n * @example\n * ```tsx\n * const { mutate: clearCredentials } = useClearCredentials();\n * clearCredentials();\n * ```\n */\nexport function useClearCredentials(options?: UseMutationOptions<void>) {\n const sdk = useZamaSDK();\n\n return useMutation<void>({\n ...clearCredentialsMutationOptions(sdk),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n context.client.removeQueries({ queryKey: zamaQueryKeys.hasPermit.all });\n context.client.removeQueries({ queryKey: zamaQueryKeys.decryption.all });\n },\n });\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { Address, Token } from \"@zama-fhe/sdk\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Get a {@link Token} instance for an ERC-7984 confidential token, memoized by address.\n * Supports balance queries, transfers, and operator approval.\n *\n * For ERC-7984 wrappers (shield/unshield), use {@link useWrappedToken} instead.\n *\n * @param address - The confidential token contract address.\n * @returns A memoized `Token` instance.\n *\n * @example\n * ```tsx\n * const token = useToken(\"0xToken\");\n * // token.balanceOf(), token.confidentialTransfer(), etc.\n * ```\n */\nexport function useToken(address: Address): Token {\n const sdk = useZamaSDK();\n return useMemo<Token>(() => sdk.createToken(address), [sdk, address]);\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { Address, WrappedToken } from \"@zama-fhe/sdk\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Get a {@link WrappedToken} instance for an ERC-7984 ERC-20 wrapper,\n * memoized by address. Adds wrapper-specific operations (shield, unshield,\n * underlying, allowance) on top of the base {@link useToken} API.\n *\n * The address is the wrapper contract address itself — the wrapper IS the\n * confidential token.\n *\n * @param address - The confidential wrapper contract address.\n * @returns A memoized `WrappedToken` instance.\n *\n * @example\n * ```tsx\n * const wrapped = useWrappedToken(\"0xWrapper\");\n * // wrapped.shield(1000n), wrapped.unshield(500n), etc.\n * ```\n */\nexport function useWrappedToken(address: Address): WrappedToken {\n const sdk = useZamaSDK();\n return useMemo<WrappedToken>(() => sdk.createWrappedToken(address), [sdk, address]);\n}\n","\"use client\";\n\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { confidentialBalanceQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useToken } from \"../token/use-token\";\nimport { useQuery } from \"../utils/query\";\nimport { useWalletAccount } from \"../utils/wallet-account\";\n\nexport interface UseConfidentialBalanceConfig {\n /** Address of the confidential token contract. */\n address: Address;\n /** Account to fetch balance for. The query is disabled while `undefined`. */\n account: Address | undefined;\n}\n\nexport interface UseConfidentialBalanceOptions extends Omit<\n UseQueryOptions<bigint>,\n \"queryKey\" | \"queryFn\" | \"enabled\"\n> {\n /** Set this to `false` to disable this query from automatically running. */\n enabled?: boolean;\n}\n\n/**\n * Hook for fetching a confidential token balance. Reads the on-chain encrypted\n * value and decrypts via the SDK; cached clear values are returned instantly\n * and the relayer is only hit when the encrypted value changes.\n *\n * @example\n * ```tsx\n * const { data: balance } = useConfidentialBalance({\n * address: \"0xToken\",\n * account: \"0xAccount\",\n * });\n * ```\n */\nexport function useConfidentialBalance(\n config: UseConfidentialBalanceConfig,\n options?: UseConfidentialBalanceOptions,\n) {\n const { address, account } = config;\n const { enabled = true } = options ?? {};\n const token = useToken(address);\n const walletAccount = useWalletAccount(token.sdk);\n\n const baseOptions = confidentialBalanceQueryOptions(\n token,\n {\n tokenAddress: address,\n account,\n },\n { walletAccount },\n );\n\n return useQuery<bigint>({\n ...baseOptions,\n ...options,\n enabled: Boolean(baseOptions.enabled) && enabled,\n });\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport { useQuery } from \"../utils/query\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address, BatchBalancesResult } from \"@zama-fhe/sdk\";\nimport { confidentialBalancesQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useWalletAccount } from \"../utils/wallet-account\";\n\nexport interface UseConfidentialBalancesConfig {\n /** Addresses of the confidential token contracts to batch-query. The query is disabled while empty. */\n addresses: Address[];\n /** Account to fetch balances for. The query is disabled while `undefined`. */\n account: Address | undefined;\n}\n\nexport interface UseConfidentialBalancesOptions extends Omit<\n UseQueryOptions<BatchBalancesResult>,\n \"queryKey\" | \"queryFn\" | \"enabled\"\n> {\n /** Set this to `false` to disable this query from automatically running. */\n enabled?: boolean;\n}\n\n/**\n * Hook for fetching multiple confidential token balances in batch. Returns\n * partial results when some tokens fail — successful balances are available\n * alongside per-token error information.\n *\n * @param config - Token addresses configuration.\n * @param options - React Query options forwarded to the balance query.\n * @returns The balance query result.\n *\n * @example\n * ```tsx\n * const { data } = useConfidentialBalances({\n * addresses: [\"0xTokenA\", \"0xTokenB\"],\n * account: \"0xAccount\",\n * });\n * const balance = data?.results.get(\"0xTokenA\");\n * if (data && data.errors.size > 0) {\n * // some tokens failed — check data.errors\n * }\n * ```\n */\nexport function useConfidentialBalances(\n config: UseConfidentialBalancesConfig,\n options?: UseConfidentialBalancesOptions,\n) {\n const { addresses, account } = config;\n const { enabled = true } = options ?? {};\n const sdk = useZamaSDK();\n const walletAccount = useWalletAccount(sdk);\n\n const tokens = useMemo(() => addresses.map((addr) => sdk.createToken(addr)), [sdk, addresses]);\n\n const baseOptions = confidentialBalancesQueryOptions(\n tokens,\n {\n account,\n },\n { walletAccount },\n );\n\n return useQuery<BatchBalancesResult>({\n ...baseOptions,\n ...options,\n enabled: Boolean(baseOptions.enabled) && enabled,\n });\n}\n","import type { QueryClient, QueryKey, UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport { invalidateAfterShield, zamaQueryKeys } from \"@zama-fhe/sdk/query\";\n\ntype BalanceDeltaMode = \"add\" | \"subtract\";\nexport type OptimisticBalanceSnapshot = [QueryKey, bigint | undefined][];\n\n/** Combined context returned by optimistic `onMutate`. */\nexport interface OptimisticMutateContext {\n snapshot: OptimisticBalanceSnapshot;\n callerContext?: unknown;\n}\n\nexport function unwrapOptimisticCallerContext(\n optimistic: boolean | undefined,\n rawContext: unknown,\n): {\n wrappedContext: OptimisticMutateContext | undefined;\n callerContext: OptimisticMutateContext | undefined;\n} {\n const typed = rawContext as OptimisticMutateContext | undefined;\n const wrappedContext = optimistic ? typed : undefined;\n const callerContext = (optimistic ? wrappedContext?.callerContext : rawContext) as\n | OptimisticMutateContext\n | undefined;\n return { wrappedContext, callerContext };\n}\n\nexport async function applyOptimisticBalanceDelta({\n queryClient,\n tokenAddress,\n amount,\n mode,\n}: {\n queryClient: QueryClient;\n tokenAddress: Address;\n amount: bigint;\n mode: BalanceDeltaMode;\n}): Promise<OptimisticBalanceSnapshot> {\n const balanceKey = zamaQueryKeys.confidentialBalance.token(tokenAddress);\n await queryClient.cancelQueries({ queryKey: balanceKey });\n const previous = queryClient.getQueriesData<bigint>({ queryKey: balanceKey });\n for (const [key, value] of previous) {\n if (value === undefined) {\n continue;\n }\n // Temporary optimistic underflow (`amount > value`) is acceptable because\n // settlement invalidates and rewrites this cache entry.\n queryClient.setQueryData(key, mode === \"add\" ? value + amount : value - amount);\n }\n return previous;\n}\n\nexport function rollbackOptimisticBalanceDelta(\n queryClient: QueryClient,\n snapshot: OptimisticBalanceSnapshot,\n) {\n for (const [key, value] of snapshot) {\n queryClient.setQueryData(key, value);\n }\n}\n\n/**\n * Build optimistic mutation callbacks for shield operations.\n * Wraps the caller's `onMutate`/`onError`/`onSuccess`/`onSettled` with snapshot/rollback logic\n * and returns overrides ready to spread into `useMutation`.\n */\nexport function optimisticBalanceCallbacks<TParams extends { amount: bigint }>({\n optimistic,\n tokenAddress,\n queryClient,\n options,\n}: {\n optimistic: boolean | undefined;\n tokenAddress: Address;\n queryClient: QueryClient;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: UseMutationOptions<TransactionResult, Error, TParams, any> | undefined;\n}): Pick<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n UseMutationOptions<TransactionResult, Error, TParams, any>,\n \"onMutate\" | \"onError\" | \"onSuccess\" | \"onSettled\"\n> {\n return {\n onMutate: optimistic\n ? async (variables, mutationContext) => {\n const snapshot = await applyOptimisticBalanceDelta({\n queryClient,\n tokenAddress,\n amount: variables.amount,\n mode: \"add\",\n });\n const callerContext = await options?.onMutate?.(variables, mutationContext);\n return { snapshot, callerContext };\n }\n : options?.onMutate,\n onError: (error, variables, rawContext, context) => {\n const { wrappedContext, callerContext } = unwrapOptimisticCallerContext(\n optimistic,\n rawContext,\n );\n try {\n if (wrappedContext) {\n rollbackOptimisticBalanceDelta(queryClient, wrappedContext.snapshot);\n }\n } finally {\n options?.onError?.(error, variables, callerContext, context);\n }\n },\n onSuccess: (data, variables, rawContext, context) => {\n const { callerContext } = unwrapOptimisticCallerContext(optimistic, rawContext);\n options?.onSuccess?.(data, variables, callerContext, context);\n invalidateAfterShield(context.client, tokenAddress);\n },\n onSettled: (data, error, variables, rawContext, context) => {\n const { callerContext } = unwrapOptimisticCallerContext(optimistic, rawContext);\n options?.onSettled?.(data, error, variables, callerContext, context);\n },\n };\n}\n","\"use client\";\n\nimport {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n type UseMutationResult,\n} from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n confidentialTransferMutationOptions,\n invalidateAfterTransfer,\n type ConfidentialTransferParams,\n} from \"@zama-fhe/sdk/query\";\nimport {\n applyOptimisticBalanceDelta,\n rollbackOptimisticBalanceDelta,\n unwrapOptimisticCallerContext,\n} from \"../balance/optimistic-balance-update\";\nimport { useToken } from \"../token/use-token\";\n\n/** Configuration for {@link useConfidentialTransfer}. */\nexport interface UseConfidentialTransferConfig {\n /** Address of the confidential token contract. */\n address: Address;\n /**\n * When `true`, optimistically subtracts the transfer amount from cached balance\n * before the transaction confirms. Rolls back on error.\n * @defaultValue false\n */\n optimistic?: boolean;\n}\n\n/**\n * Encrypt and send a confidential transfer. Invalidates balance caches on success.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link EncryptionFailedError} — FHE encryption failed\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param config - Token address (and optional wrapper) identifying the token.\n * Set `optimistic: true` to subtract the amount from the cached balance immediately.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const transfer = useConfidentialTransfer({\n * address: \"0xToken\",\n * optimistic: true,\n * });\n * transfer.mutate(\n * { to: \"0xRecipient\", amount: 1000n },\n * {\n * onError: (error) => {\n * if (error instanceof SigningRejectedError) {\n * // user cancelled — no action needed\n * }\n * },\n * },\n * );\n * ```\n */\nexport function useConfidentialTransfer<TContext = unknown>(\n config: UseConfidentialTransferConfig,\n options?: UseMutationOptions<TransactionResult, Error, ConfidentialTransferParams, TContext>,\n): UseMutationResult<TransactionResult, Error, ConfidentialTransferParams, TContext> {\n const token = useToken(config.address);\n const queryClient = useQueryClient();\n\n // Internal mutation uses `any` for TContext because optimistic mode wraps\n // the caller's context in OptimisticMutateContext; the public return type\n // is cast back to the caller's TContext.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return useMutation<TransactionResult, Error, ConfidentialTransferParams, any>({\n ...confidentialTransferMutationOptions(token),\n ...options,\n onMutate: config.optimistic\n ? async (variables, mutationContext) => {\n const snapshot = await applyOptimisticBalanceDelta({\n queryClient,\n tokenAddress: token.address,\n amount: variables.amount,\n mode: \"subtract\",\n });\n const callerContext = await options?.onMutate?.(variables, mutationContext);\n return { snapshot, callerContext };\n }\n : options?.onMutate,\n onError: (error, variables, rawContext, context) => {\n const { wrappedContext, callerContext } = unwrapOptimisticCallerContext(\n config.optimistic,\n rawContext,\n );\n try {\n if (wrappedContext) {\n rollbackOptimisticBalanceDelta(queryClient, wrappedContext.snapshot);\n }\n } finally {\n options?.onError?.(error, variables, callerContext as TContext, context);\n }\n },\n onSuccess: (data, variables, rawContext, context) => {\n const { callerContext } = unwrapOptimisticCallerContext(config.optimistic, rawContext);\n options?.onSuccess?.(data, variables, callerContext as TContext, context);\n invalidateAfterTransfer(context.client, token.address);\n },\n onSettled: (data, error, variables, rawContext, context) => {\n const { callerContext } = unwrapOptimisticCallerContext(config.optimistic, rawContext);\n options?.onSettled?.(data, error, variables, callerContext as TContext, context);\n },\n }) as UseMutationResult<TransactionResult, Error, ConfidentialTransferParams, TContext>;\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n confidentialTransferFromMutationOptions,\n invalidateAfterTransfer,\n type ConfidentialTransferFromParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useToken } from \"../token/use-token\";\n\n/**\n * Operator transfer on behalf of another address. Caller must be an approved operator.\n * Invalidates balance caches on success.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link EncryptionFailedError} — FHE encryption of the transfer amount failed\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential token contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const transferFrom = useConfidentialTransferFrom(\"0xToken\");\n * transferFrom.mutate({ from: \"0xOwner\", to: \"0xRecipient\", amount: 500n });\n * ```\n */\nexport function useConfidentialTransferFrom(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, ConfidentialTransferFromParams, Address>,\n) {\n const token = useToken(address);\n\n return useMutation<TransactionResult, Error, ConfidentialTransferFromParams, Address>({\n ...confidentialTransferFromMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterTransfer(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n confidentialSetOperatorMutationOptions,\n invalidateAfterSetOperator,\n type ConfidentialSetOperatorParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useToken } from \"../token/use-token\";\n\n/**\n * Set operator approval for a confidential token. Defaults to 1 hour.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential token contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const setOperator = useConfidentialSetOperator(\"0xToken\");\n * setOperator.mutate({ operator: \"0xOperator\" });\n * ```\n */\nexport function useConfidentialSetOperator(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, ConfidentialSetOperatorParams, Address>,\n) {\n const token = useToken(address);\n\n return useMutation<TransactionResult, Error, ConfidentialSetOperatorParams, Address>({\n ...confidentialSetOperatorMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterSetOperator(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport { useQuery, useSuspenseQuery } from \"../utils/query\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { confidentialIsOperatorQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\nexport interface UseConfidentialIsOperatorConfig {\n /** Address of the confidential token contract. The query is disabled while `undefined`. */\n address: Address | undefined;\n /** Address to check operator status for. The query is disabled while `undefined`. */\n spender: Address | undefined;\n /** Token holder address. The query is disabled while `undefined`. */\n holder: Address | undefined;\n}\n\nexport interface UseConfidentialIsOperatorSuspenseConfig {\n /** Address of the confidential token contract. */\n address: Address;\n /** Address to check operator status for. */\n spender: Address;\n /** Token holder address. */\n holder: Address;\n}\n\n/**\n * Check if a spender is an approved operator for a holder.\n *\n * @param config - Token address, spender, and holder to check.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns Query result with `data: boolean`.\n *\n * @example\n * ```tsx\n * const { data: isOperator } = useConfidentialIsOperator({\n * address: \"0xToken\",\n * spender: \"0xSpender\",\n * holder: \"0xHolder\",\n * });\n * ```\n */\nexport function useConfidentialIsOperator(\n config: UseConfidentialIsOperatorConfig,\n options?: Omit<UseQueryOptions<boolean>, \"queryKey\" | \"queryFn\">,\n) {\n const { address, spender, holder } = config;\n const sdk = useZamaSDK();\n const baseOpts = confidentialIsOperatorQueryOptions(sdk, address, {\n holder,\n spender,\n });\n\n return useQuery({\n ...baseOpts,\n ...options,\n enabled: (baseOpts.enabled ?? true) && (options?.enabled ?? true),\n });\n}\n\n/**\n * Suspense variant of {@link useConfidentialIsOperator}. Suspends rendering\n * until the operator check resolves.\n *\n * @example\n * ```tsx\n * const { data: isOperator } = useConfidentialIsOperatorSuspense({\n * address: \"0xToken\",\n * spender: \"0xSpender\",\n * holder: \"0xHolder\",\n * });\n * ```\n */\nexport function useConfidentialIsOperatorSuspense(config: UseConfidentialIsOperatorSuspenseConfig) {\n const { spender, holder, address } = config;\n const sdk = useZamaSDK();\n\n return useSuspenseQuery<boolean>(\n confidentialIsOperatorQueryOptions(sdk, address, {\n holder,\n spender,\n }),\n );\n}\n","\"use client\";\n\nimport {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n type UseMutationResult,\n} from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport { shieldMutationOptions, type ShieldParams } from \"@zama-fhe/sdk/query\";\nimport { optimisticBalanceCallbacks } from \"../balance/optimistic-balance-update\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/** Configuration for {@link useShield}. */\nexport interface UseShieldConfig {\n /** Address of the confidential wrapper contract. */\n address: Address;\n /**\n * When `true`, optimistically adds the wrap amount to the cached confidential balance\n * before the transaction confirms. Rolls back on error.\n * @defaultValue false\n */\n optimistic?: boolean;\n}\n\n/**\n * Shield public ERC-20 tokens into confidential tokens.\n * Handles ERC-20 approval automatically. Invalidates balance caches on success.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link TransactionRevertedError} — approval or shield transaction reverted\n *\n * @param config - Wrapper address (and optional `optimistic` flag).\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const shield = useShield({ address: \"0xWrapper\", optimistic: true });\n * shield.mutate({ amount: 1000n });\n * ```\n */\nexport function useShield<TContext = unknown>(\n config: UseShieldConfig,\n options?: UseMutationOptions<TransactionResult, Error, ShieldParams, TContext>,\n): UseMutationResult<TransactionResult, Error, ShieldParams, TContext> {\n const token = useWrappedToken(config.address);\n const queryClient = useQueryClient();\n\n return useMutation({\n ...shieldMutationOptions(token),\n ...options,\n ...optimisticBalanceCallbacks({\n optimistic: config.optimistic,\n tokenAddress: token.address,\n queryClient,\n options,\n }),\n }) as UseMutationResult<TransactionResult, Error, ShieldParams, TContext>;\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n invalidateAfterUnwrap,\n type UnwrapParams,\n unwrapMutationOptions,\n} from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Request an unwrap for a specific amount. Encrypts the amount first.\n * Call {@link useFinalizeUnwrap} after the request is processed on-chain,\n * or use {@link useUnshield} for a single-call orchestration.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link EncryptionFailedError} — FHE encryption of the unwrap amount failed\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unwrap = useUnwrap(\"0xWrapper\");\n * unwrap.mutate({ amount: 500n });\n * ```\n */\nexport function useUnwrap(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, UnwrapParams, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, UnwrapParams, Address>({\n ...unwrapMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterUnwrap(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport { invalidateAfterUnwrap, unwrapAllMutationOptions } from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Request an unwrap for the entire confidential balance.\n * Uses the on-chain balance handle directly (no encryption needed).\n * Call {@link useFinalizeUnwrap} after processing, or use {@link useUnshieldAll} for single-call orchestration.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unwrapAll = useUnwrapAll(\"0xWrapper\");\n * unwrapAll.mutate();\n * ```\n */\nexport function useUnwrapAll(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, void, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, void, Address>({\n ...unwrapAllMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterUnwrap(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n finalizeUnwrapMutationOptions,\n invalidateAfterUnshield,\n type FinalizeUnwrapParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Complete an unwrap by providing the public decryption proof.\n * Call this after an unwrap request has been processed on-chain.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link DecryptionFailedError} — public decryption of the burn amount failed\n * - {@link TransactionRevertedError} — on-chain finalize transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const finalize = useFinalizeUnwrap(\"0xWrapper\");\n * const event = findUnwrapRequested(receipt.logs);\n * // Pass unwrapRequestId from upgraded events, or fall back to encryptedAmount for legacy ones.\n * finalize.mutate(\n * event.unwrapRequestId\n * ? { unwrapRequestId: event.unwrapRequestId }\n * : { burnAmountHandle: event.encryptedAmount },\n * );\n * ```\n */\nexport function useFinalizeUnwrap(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, FinalizeUnwrapParams, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, FinalizeUnwrapParams, Address>({\n ...finalizeUnwrapMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterUnshield(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n invalidateAfterUnshield,\n type UnshieldParams,\n unshieldMutationOptions,\n} from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Unshield a specific amount and finalize in one call.\n * Orchestrates: unwrap → wait for receipt → parse event → finalize.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link EncryptionFailedError} — FHE encryption failed during unwrap\n * - {@link DecryptionFailedError} — public decryption failed during finalize\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unshield = useUnshield(\"0xWrapper\");\n * unshield.mutate({ amount: 500n });\n * ```\n */\nexport function useUnshield(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, UnshieldParams, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, UnshieldParams, Address>({\n ...unshieldMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterUnshield(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n invalidateAfterUnshield,\n type UnshieldAllParams,\n unshieldAllMutationOptions,\n} from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Unshield the entire balance and finalize in one call.\n * Orchestrates: unwrapAll → wait for receipt → parse event → finalize.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link DecryptionFailedError} — public decryption failed during finalize\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unshieldAll = useUnshieldAll(\"0xWrapper\");\n * unshieldAll.mutate();\n * ```\n */\nexport function useUnshieldAll(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, UnshieldAllParams | void, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, UnshieldAllParams | void, Address>({\n ...unshieldAllMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterUnshield(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n invalidateAfterUnshield,\n type ResumeUnshieldParams,\n resumeUnshieldMutationOptions,\n} from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Resume an interrupted unshield from an existing unwrap tx hash.\n * Useful when the user submitted the unwrap but the finalize step was\n * interrupted (e.g. page reload, network error).\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link DecryptionFailedError} — public decryption failed during finalize\n * - {@link TransactionRevertedError} — on-chain transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const resumeUnshield = useResumeUnshield(\"0xWrapper\");\n * resumeUnshield.mutate({ unwrapTxHash: \"0xabc...\" });\n * ```\n */\nexport function useResumeUnshield(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, ResumeUnshieldParams, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, ResumeUnshieldParams, Address>({\n ...resumeUnshieldMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterUnshield(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport { useQuery, useSuspenseQuery } from \"../utils/query\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { underlyingAllowanceQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\nexport { underlyingAllowanceQueryOptions };\n\nexport interface UseUnderlyingAllowanceConfig {\n /** Address of the confidential wrapper contract. */\n address: Address;\n /** Owner to fetch allowance for. The query is disabled while `undefined`. */\n owner: Address | undefined;\n}\n\nexport interface UseUnderlyingAllowanceSuspenseConfig {\n /** Address of the confidential wrapper contract. */\n address: Address;\n /** Owner to fetch allowance for. */\n owner: Address;\n}\n\n/**\n * Hook for fetching the underlying ERC-20 allowance granted to the wrapper\n * contract. Useful to check if an approval is needed before shielding.\n *\n * @example\n * ```tsx\n * const { data: allowance } = useUnderlyingAllowance({\n * address: \"0xWrapper\",\n * owner: \"0xOwner\",\n * });\n * ```\n */\nexport function useUnderlyingAllowance(\n config: UseUnderlyingAllowanceConfig,\n options?: Omit<UseQueryOptions<bigint>, \"queryKey\" | \"queryFn\">,\n) {\n const { address, owner } = config;\n const sdk = useZamaSDK();\n\n const baseOpts = underlyingAllowanceQueryOptions(sdk, address, { owner });\n\n return useQuery<bigint>({\n ...baseOpts,\n ...options,\n enabled: (baseOpts.enabled ?? true) && (options?.enabled ?? true),\n });\n}\n\n/**\n * Suspense variant of {@link useUnderlyingAllowance}. Suspends rendering until\n * the allowance resolves.\n *\n * @example\n * ```tsx\n * const { data: allowance } = useUnderlyingAllowanceSuspense({\n * address: \"0xWrapper\",\n * owner: \"0xOwner\",\n * });\n * ```\n */\nexport function useUnderlyingAllowanceSuspense(config: UseUnderlyingAllowanceSuspenseConfig) {\n const { address, owner } = config;\n const sdk = useZamaSDK();\n\n return useSuspenseQuery<bigint>(underlyingAllowanceQueryOptions(sdk, address, { owner }));\n}\n","\"use client\";\n\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { zamaQueryKeys } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\n\n/**\n * Resolves the wrappers registry address for the current chain.\n * Uses the registry addresses from `sdk.registry` (built-in defaults from chain configs).\n *\n * Returns `undefined` when the chain ID hasn't been fetched yet\n * or when no registry is configured for the connected chain.\n *\n * The chain ID is cached for 30 seconds (`staleTime`), so chain\n * switches may take up to 30s to reflect.\n */\nexport function useWrappersRegistryAddress(): Address | undefined {\n const sdk = useZamaSDK();\n\n const { data: chainId } = useQuery<number>({\n queryKey: zamaQueryKeys.wrappersRegistry.chainId(),\n queryFn: () => sdk.provider.getChainId(),\n staleTime: 30_000,\n });\n\n return chainId !== undefined ? sdk.registry.getAddress(chainId) : undefined;\n}\n","\"use client\";\n\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { wrapperDiscoveryQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery, useSuspenseQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"../wrappers-registry/use-wrappers-registry-address\";\n\nexport { wrapperDiscoveryQueryOptions };\n\n/** Configuration for {@link useWrapperDiscovery}. */\nexport interface UseWrapperDiscoveryConfig {\n /**\n * Address of any confidential token you control.\n * Used only to derive the signer context and to scope the query cache key —\n * it does not affect which wrapper the registry returns.\n */\n tokenAddress: Address;\n /** ERC-20 address to discover the wrapper for. Pass `undefined` to disable the query. */\n erc20Address: Address | undefined;\n}\n\n/** Configuration for {@link useWrapperDiscoverySuspense}. */\nexport interface UseWrapperDiscoverySuspenseConfig {\n /**\n * Address of any confidential token you control.\n * Used only to derive the signer context and to scope the query cache key —\n * it does not affect which wrapper the registry returns.\n */\n tokenAddress: Address;\n /** ERC-20 address to discover the wrapper for. */\n erc20Address: Address;\n}\n\n/**\n * Discover the confidential wrapper for an ERC-20 token via the on-chain registry.\n * Returns the wrapper address if one exists, or `null` if not.\n * Cached indefinitely since wrapper mappings are immutable.\n *\n * @param config - Token and ERC-20 addresses.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns Query result with `data: Address | null`.\n *\n * @example\n * ```tsx\n * const { data: wrapperAddress } = useWrapperDiscovery({\n * tokenAddress: \"0xConfidentialToken\",\n * erc20Address: \"0xUSDC\",\n * });\n * ```\n */\nexport function useWrapperDiscovery(\n config: UseWrapperDiscoveryConfig,\n options?: Omit<UseQueryOptions<Address | null>, \"queryKey\" | \"queryFn\">,\n) {\n const { tokenAddress, erc20Address } = config;\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n const baseOpts = wrapperDiscoveryQueryOptions(sdk.registry, {\n tokenAddress,\n erc20Address,\n registryAddress,\n });\n\n return useQuery<Address | null>({\n ...baseOpts,\n ...options,\n enabled: (baseOpts.enabled ?? true) && (options?.enabled ?? true),\n });\n}\n\n/**\n * Suspense variant of {@link useWrapperDiscovery}.\n * Suspends rendering until the wrapper address is resolved.\n *\n * @param config - Token and ERC-20 addresses.\n * @returns Suspense query result with `data: Address | null`.\n *\n * @example\n * ```tsx\n * const { data: wrapperAddress } = useWrapperDiscoverySuspense({\n * tokenAddress: \"0xConfidentialToken\",\n * erc20Address: \"0xUSDC\",\n * });\n * ```\n */\nexport function useWrapperDiscoverySuspense(config: UseWrapperDiscoverySuspenseConfig) {\n const { tokenAddress, erc20Address } = config;\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useSuspenseQuery<Address | null>(\n wrapperDiscoveryQueryOptions(sdk.registry, {\n tokenAddress,\n erc20Address,\n registryAddress,\n }),\n );\n}\n","\"use client\";\n\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { tokenMetadataQueryOptions, type TokenMetadata } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery, useSuspenseQuery } from \"../utils/query\";\n\n/**\n * Read ERC-20 token metadata (name, symbol, decimals).\n * Fetches all three in parallel. Cached indefinitely since metadata is immutable.\n *\n * @param tokenAddress - Address of the token contract.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns Query result with `data: TokenMetadata`.\n *\n * @example\n * ```tsx\n * const { data: metadata } = useMetadata(\"0xToken\");\n * // metadata?.name, metadata?.symbol, metadata?.decimals\n * ```\n */\nexport function useMetadata(\n tokenAddress: Address,\n options?: Omit<UseQueryOptions<TokenMetadata>, \"queryKey\" | \"queryFn\">,\n) {\n const sdk = useZamaSDK();\n return useQuery<TokenMetadata>({\n ...tokenMetadataQueryOptions(sdk, tokenAddress),\n ...options,\n });\n}\n\n/**\n * Suspense variant of {@link useMetadata}.\n * Suspends rendering until metadata is loaded.\n *\n * @param tokenAddress - Address of the token contract.\n * @returns Suspense query result with `data: TokenMetadata`.\n *\n * @example\n * ```tsx\n * const { data: metadata } = useMetadataSuspense(\"0xToken\");\n * ```\n */\nexport function useMetadataSuspense(tokenAddress: Address) {\n const sdk = useZamaSDK();\n return useSuspenseQuery<TokenMetadata>(tokenMetadataQueryOptions(sdk, tokenAddress));\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n delegateDecryptionMutationOptions,\n zamaQueryKeys,\n type DelegateDecryptionParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Delegate FHE decryption rights for a confidential contract to another address\n * via the on-chain ACL.\n *\n * @param address - Confidential contract address to delegate on.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const delegate = useDelegateDecryption(\"0xToken\");\n * delegate.mutate({ delegateAddress: \"0xDelegate\" });\n * ```\n */\nexport function useDelegateDecryption(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, DelegateDecryptionParams>,\n) {\n const sdk = useZamaSDK();\n\n return useMutation<TransactionResult, Error, DelegateDecryptionParams>({\n ...delegateDecryptionMutationOptions(sdk, address),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n try {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n } finally {\n void context.client.invalidateQueries({ queryKey: zamaQueryKeys.delegationStatus.all });\n }\n },\n });\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n revokeDelegationMutationOptions,\n zamaQueryKeys,\n type RevokeDelegationParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Revoke FHE decryption delegation for a confidential contract from a delegate address.\n *\n * @param address - Confidential contract address to revoke delegation on.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const revoke = useRevokeDelegation(\"0xToken\");\n * revoke.mutate({ delegateAddress: \"0xDelegate\" });\n * ```\n */\nexport function useRevokeDelegation(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, RevokeDelegationParams>,\n) {\n const sdk = useZamaSDK();\n\n return useMutation<TransactionResult, Error, RevokeDelegationParams>({\n ...revokeDelegationMutationOptions(sdk, address),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n try {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n } finally {\n void context.client.invalidateQueries({ queryKey: zamaQueryKeys.delegationStatus.all });\n }\n },\n });\n}\n","\"use client\";\n\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { delegationStatusQueryOptions, type DelegationStatusData } from \"@zama-fhe/sdk/query\";\nimport { useQuery } from \"../utils/query\";\nimport { useZamaSDK } from \"../provider\";\n\nexport interface UseDelegationStatusConfig {\n /** Address of the confidential contract. Pass `undefined` to disable the query. */\n contractAddress: Address | undefined;\n /** The address that granted the delegation. */\n delegatorAddress?: Address;\n /** The address that received delegation rights. */\n delegateAddress?: Address;\n}\n\n/**\n * Query delegation status between a delegator and delegate for a token.\n *\n * @param config - Token address, delegator, and delegate addresses.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns `{ isActive, expiryTimestamp, isLoading, error }`.\n *\n * @example\n * ```tsx\n * const { data } = useDelegationStatus({\n * contractAddress: \"0xToken\",\n * delegatorAddress: \"0xDelegator\",\n * delegateAddress: \"0xDelegate\",\n * });\n * // data?.isActive, data?.expiryTimestamp\n * ```\n */\nexport function useDelegationStatus(\n config: UseDelegationStatusConfig,\n options?: Omit<UseQueryOptions<DelegationStatusData>, \"queryKey\" | \"queryFn\">,\n) {\n const sdk = useZamaSDK();\n const baseOpts = delegationStatusQueryOptions(sdk, config);\n\n return useQuery<DelegationStatusData>({\n ...baseOpts,\n ...options,\n enabled: (baseOpts.enabled ?? true) && (options?.enabled ?? true),\n });\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { decryptBalanceAsMutationOptions, type DecryptBalanceAsParams } from \"@zama-fhe/sdk/query\";\nimport { useToken } from \"../token/use-token\";\n\n/**\n * Decrypt another user's confidential balance as a delegate.\n *\n * @param address - Address of the confidential token contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const decryptAs = useDecryptBalanceAs(\"0xToken\");\n * decryptAs.mutate({ delegatorAddress: \"0xDelegator\" });\n * // decryptAs.data => 1000n\n * ```\n */\nexport function useDecryptBalanceAs(\n address: Address,\n options?: UseMutationOptions<bigint, Error, DecryptBalanceAsParams>,\n) {\n const token = useToken(address);\n\n return useMutation<bigint, Error, DecryptBalanceAsParams>({\n ...decryptBalanceAsMutationOptions(token),\n ...options,\n });\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address, Token } from \"@zama-fhe/sdk\";\nimport {\n batchDecryptBalancesAsMutationOptions,\n type BatchDecryptBalancesAsParams,\n} from \"@zama-fhe/sdk/query\";\n\n/**\n * Batch decrypt confidential balances as a delegate across multiple tokens.\n *\n * @param tokens - {@link Token} instances to decrypt balances for.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const batchDecryptAs = useBatchDecryptBalancesAs(tokens);\n * batchDecryptAs.mutate({\n * delegatorAddress: \"0xDelegator\",\n * });\n * // batchDecryptAs.data => Map { \"0xTokenA\" => 100n, \"0xTokenB\" => 200n }\n * ```\n */\nexport function useBatchDecryptBalancesAs(\n tokens: Token[],\n options?: UseMutationOptions<Map<Address, bigint>, Error, BatchDecryptBalancesAsParams>,\n) {\n return useMutation<Map<Address, bigint>, Error, BatchDecryptBalancesAsParams>({\n ...batchDecryptBalancesAsMutationOptions(tokens),\n ...options,\n });\n}\n","\"use client\";\n\nimport type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { Address, TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n approveUnderlyingMutationOptions,\n invalidateAfterApproveUnderlying,\n type ApproveUnderlyingParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useWrappedToken } from \"../token/use-wrapped-token\";\n\n/**\n * Approve the wrapper contract to spend the underlying ERC-20.\n * Defaults to max uint256. Resets to zero first if there's an existing\n * non-zero allowance (required by tokens like USDT).\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link SigningRejectedError} — user rejected the wallet prompt\n * - {@link TransactionRevertedError} — approval transaction reverted\n *\n * @param address - Address of the confidential wrapper contract.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const approve = useApproveUnderlying(\"0xWrapper\");\n * approve.mutate({}); // max approval\n * approve.mutate({ amount: 1000n }); // exact amount\n * ```\n */\nexport function useApproveUnderlying(\n address: Address,\n options?: UseMutationOptions<TransactionResult, Error, ApproveUnderlyingParams, Address>,\n) {\n const token = useWrappedToken(address);\n\n return useMutation<TransactionResult, Error, ApproveUnderlyingParams, Address>({\n ...approveUnderlyingMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterApproveUnderlying(context.client, token.address);\n },\n });\n}\n","\"use client\";\n\nimport { useQuery, useSuspenseQuery } from \"../utils/query\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { isConfidentialQueryOptions, isWrapperQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\nexport { isConfidentialQueryOptions, isWrapperQueryOptions };\n\n/**\n * Check if a token supports the ERC-7984 confidential interface via ERC-165.\n * Result is cached indefinitely since interface support does not change.\n *\n * @param tokenAddress - Address of the token contract to check.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns Query result with `data: boolean`.\n *\n * @example\n * ```tsx\n * const { data: isConfidential } = useIsConfidential(\"0xToken\");\n * ```\n */\nexport function useIsConfidential(\n tokenAddress: Address,\n options?: Omit<UseQueryOptions<boolean>, \"queryKey\" | \"queryFn\">,\n) {\n const sdk = useZamaSDK();\n\n return useQuery<boolean>({\n ...isConfidentialQueryOptions(sdk, tokenAddress),\n ...options,\n });\n}\n\n/**\n * Suspense variant of {@link useIsConfidential}.\n * Suspends rendering until the ERC-165 check resolves.\n *\n * @param tokenAddress - Address of the token contract to check.\n * @returns Suspense query result with `data: boolean`.\n *\n * @example\n * ```tsx\n * const { data: isConfidential } = useIsConfidentialSuspense(\"0xToken\");\n * ```\n */\nexport function useIsConfidentialSuspense(tokenAddress: Address) {\n const sdk = useZamaSDK();\n\n return useSuspenseQuery<boolean>(isConfidentialQueryOptions(sdk, tokenAddress));\n}\n\n/**\n * Check if a token supports the ERC-7984 wrapper interface via ERC-165.\n * Result is cached indefinitely since interface support does not change.\n *\n * @param tokenAddress - Address of the token contract to check.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns Query result with `data: boolean`.\n *\n * @example\n * ```tsx\n * const { data: isWrapper } = useIsWrapper(\"0xToken\");\n * ```\n */\nexport function useIsWrapper(\n tokenAddress: Address,\n options?: Omit<UseQueryOptions<boolean>, \"queryKey\" | \"queryFn\">,\n) {\n const sdk = useZamaSDK();\n\n return useQuery<boolean>({\n ...isWrapperQueryOptions(sdk, tokenAddress),\n ...options,\n });\n}\n\n/**\n * Suspense variant of {@link useIsWrapper}.\n * Suspends rendering until the ERC-165 check resolves.\n *\n * @param tokenAddress - Address of the token contract to check.\n * @returns Suspense query result with `data: boolean`.\n *\n * @example\n * ```tsx\n * const { data: isWrapper } = useIsWrapperSuspense(\"0xToken\");\n * ```\n */\nexport function useIsWrapperSuspense(tokenAddress: Address) {\n const sdk = useZamaSDK();\n\n return useSuspenseQuery<boolean>(isWrapperQueryOptions(sdk, tokenAddress));\n}\n","\"use client\";\n\nimport { useQuery, useSuspenseQuery } from \"../utils/query\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { totalSupplyQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\nexport { totalSupplyQueryOptions };\n\n/**\n * Read the total supply of a token.\n * Stale after 30 seconds to balance freshness and RPC cost.\n *\n * @param tokenAddress - Address of the token contract.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns Query result with `data: bigint`.\n * Uses ERC-165 to call `inferredTotalSupply()` on upgraded wrappers and\n * legacy `totalSupply()` on pre-upgrade wrappers.\n *\n * @example\n * ```tsx\n * const { data: totalSupply } = useTotalSupply(\"0xToken\");\n * ```\n */\nexport function useTotalSupply(\n tokenAddress: Address,\n options?: Omit<UseQueryOptions<bigint>, \"queryKey\" | \"queryFn\">,\n) {\n const sdk = useZamaSDK();\n\n return useQuery<bigint>({\n ...totalSupplyQueryOptions(sdk, tokenAddress),\n ...options,\n });\n}\n\n/**\n * Suspense variant of {@link useTotalSupply}.\n * Suspends rendering until the total supply is loaded.\n *\n * @param tokenAddress - Address of the token contract.\n * @returns Suspense query result with `data: bigint`.\n * Uses ERC-165 to call `inferredTotalSupply()` on upgraded wrappers and\n * legacy `totalSupply()` on pre-upgrade wrappers.\n *\n * @example\n * ```tsx\n * const { data: totalSupply } = useTotalSupplySuspense(\"0xToken\");\n * ```\n */\nexport function useTotalSupplySuspense(tokenAddress: Address) {\n const sdk = useZamaSDK();\n\n return useSuspenseQuery<bigint>(totalSupplyQueryOptions(sdk, tokenAddress));\n}\n","\"use client\";\n\nimport type { TokenWrapperPair } from \"@zama-fhe/sdk\";\nimport { tokenPairsQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Fetches all token wrapper pairs from the ConfidentialTokenWrappersRegistry\n * contract on the current chain.\n */\nexport function useTokenPairsRegistry() {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<readonly TokenWrapperPair[]>(\n tokenPairsQueryOptions(sdk, {\n registryAddress,\n }),\n );\n}\n","\"use client\";\n\nimport { tokenPairsLengthQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Returns the total number of token wrapper pairs in the registry.\n */\nexport function useTokenPairsLength() {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<bigint>(\n tokenPairsLengthQueryOptions(sdk, {\n registryAddress,\n }),\n );\n}\n","\"use client\";\n\nimport type { TokenWrapperPair } from \"@zama-fhe/sdk\";\nimport { tokenPairsSliceQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Fetches a range of token wrapper pairs from the registry (paginated).\n *\n * @param fromIndex - Start index (inclusive). Pass `undefined` to disable.\n * @param toIndex - End index (exclusive). Pass `undefined` to disable.\n */\nexport function useTokenPairsSlice({\n fromIndex,\n toIndex,\n}: {\n fromIndex: bigint | undefined;\n toIndex: bigint | undefined;\n}) {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<readonly TokenWrapperPair[]>(\n tokenPairsSliceQueryOptions(sdk, {\n registryAddress,\n fromIndex,\n toIndex,\n }),\n );\n}\n","\"use client\";\n\nimport type { TokenWrapperPair } from \"@zama-fhe/sdk\";\nimport { tokenPairQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Fetches a single token wrapper pair by index from the registry.\n *\n * @param index - Zero-based pair index. Pass `undefined` to disable.\n */\nexport function useTokenPair({ index }: { index: bigint | undefined }) {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<TokenWrapperPair>(\n tokenPairQueryOptions(sdk, {\n registryAddress,\n index,\n }),\n );\n}\n","\"use client\";\n\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { confidentialTokenAddressQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Looks up the confidential token address for a given plain token address.\n */\nexport function useConfidentialTokenAddress({\n tokenAddress,\n}: {\n tokenAddress: Address | undefined;\n}) {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<readonly [boolean, Address]>(\n confidentialTokenAddressQueryOptions(sdk, {\n registryAddress,\n tokenAddress,\n }),\n );\n}\n","\"use client\";\n\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { tokenAddressQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Looks up the plain token address for a given confidential token address.\n */\nexport function useTokenAddress({\n confidentialTokenAddress,\n}: {\n confidentialTokenAddress: Address | undefined;\n}) {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<readonly [boolean, Address]>(\n tokenAddressQueryOptions(sdk, {\n registryAddress,\n confidentialTokenAddress,\n }),\n );\n}\n","\"use client\";\n\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { isConfidentialTokenValidQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Checks whether a confidential token is registered and valid in the\n * on-chain wrappers registry.\n *\n * @param confidentialTokenAddress - The confidential token to check. Pass `undefined` to disable.\n */\nexport function useIsConfidentialTokenValid({\n confidentialTokenAddress,\n}: {\n confidentialTokenAddress: Address | undefined;\n}) {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n return useQuery<boolean>(\n isConfidentialTokenValidQueryOptions(sdk, {\n registryAddress,\n confidentialTokenAddress,\n }),\n );\n}\n","\"use client\";\n\nimport type {\n TokenWrapperPair,\n TokenWrapperPairWithMetadata,\n PaginatedResult,\n} from \"@zama-fhe/sdk\";\nimport { listPairsQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useQuery } from \"../utils/query\";\nimport { useWrappersRegistryAddress } from \"./use-wrappers-registry-address\";\n\n/**\n * Fetches paginated token wrapper pairs from the registry.\n *\n * @param options - Query options: `page` (1-indexed, default `1`), `pageSize` (default `100`), `metadata` (fetch on-chain metadata for both tokens, default `false`).\n *\n * @example\n * ```tsx\n * const { data, isLoading } = useListPairs({ page: 1, pageSize: 20 });\n * if (data) {\n * console.log(`${data.total} pairs, showing page ${data.page}`);\n * }\n * ```\n */\nexport function useListPairs({\n page = 1,\n pageSize = 100,\n metadata = false,\n}: {\n page?: number;\n pageSize?: number;\n metadata?: boolean;\n} = {}) {\n const sdk = useZamaSDK();\n const registryAddress = useWrappersRegistryAddress();\n\n // Pass sdk.registry (a lazy singleton) so the class-level TTL cache is shared\n // across all queryFn executions — rather than constructing a new instance each time.\n return useQuery<PaginatedResult<TokenWrapperPair | TokenWrapperPairWithMetadata>>(\n listPairsQueryOptions(sdk.registry, {\n registryAddress,\n page,\n pageSize,\n metadata,\n }),\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zama-fhe/react-sdk",
3
- "version": "3.0.0-alpha.41",
3
+ "version": "3.0.0-alpha.42",
4
4
  "description": "React hooks for Zama SDK",
5
5
  "license": "BSD-3-Clause-Clear",
6
6
  "author": "Zama",
@@ -58,15 +58,13 @@
58
58
  },
59
59
  "devDependencies": {
60
60
  "@zama-fhe/sdk": "workspace:*",
61
- "rolldown": "1.0.0",
62
- "rolldown-plugin-dts": "^0.25.0",
63
61
  "viem": "^2.47.12"
64
62
  },
65
63
  "peerDependencies": {
66
64
  "@tanstack/react-query": ">=5",
67
- "@zama-fhe/sdk": "^3.0.0-alpha.41",
65
+ "@zama-fhe/sdk": "^3.0.0-alpha.42",
68
66
  "react": ">=18",
69
- "viem": "^2.47.0",
67
+ "viem": ">=2",
70
68
  "wagmi": ">=2"
71
69
  },
72
70
  "sideEffects": false,