@zama-fhe/react-sdk 3.0.0-alpha.15 → 3.0.0-alpha.17
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 +86 -65
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/wagmi/index.d.ts +40 -6
- package/dist/wagmi/index.js +1 -1
- package/dist/wagmi/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import * as _$_zama_fhe_sdk0 from "@zama-fhe/sdk";
|
|
4
|
-
import { Address, BatchBalancesResult, ClearValueType, DelegatedUserDecryptParams, EIP712TypedData, EncryptParams, GenericSigner, GenericStorage, PaginatedResult, PublicKeyData, ReadonlyToken, RelayerSDK, TokenWrapperPair, TokenWrapperPairWithMetadata, TransactionResult, ZKProofLike, ZamaSDK, ZamaSDKEventListener } from "@zama-fhe/sdk";
|
|
4
|
+
import { Address, BatchBalancesResult, ClearValueType, DelegatedUserDecryptParams, EIP712TypedData, EncryptParams, GenericProvider, GenericSigner, GenericStorage, PaginatedResult, PublicKeyData, ReadonlyToken, RelayerSDK, Token, TokenWrapperPair, TokenWrapperPairWithMetadata, TransactionResult, ZKProofLike, ZamaSDK, ZamaSDKEventListener } from "@zama-fhe/sdk";
|
|
5
5
|
import { ApproveUnderlyingParams, BatchDecryptBalancesAsParams, ConfidentialApproveParams, ConfidentialTransferFromParams, ConfidentialTransferParams, CreateDelegatedUserDecryptEIP712Params, CreateEIP712Params, DecryptBalanceAsParams, DecryptResult, DelegateDecryptionParams, DelegationStatusData, FinalizeUnwrapParams, ResumeUnshieldParams, RevokeDelegationParams, ShieldParams, TokenMetadata, UnshieldAllParams, UnshieldParams, UnwrapParams, UserDecryptQueryConfig } from "@zama-fhe/sdk/query";
|
|
6
6
|
import * as _$_tanstack_react_query0 from "@tanstack/react-query";
|
|
7
|
-
import { UseMutationOptions, UseMutationResult, UseQueryOptions } from "@tanstack/react-query";
|
|
7
|
+
import { UseMutationOptions, UseMutationResult, UseQueryOptions, UseQueryResult } from "@tanstack/react-query";
|
|
8
8
|
import { PropsWithChildren } from "react";
|
|
9
9
|
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
10
10
|
import * as _$_zama_fhe_relayer_sdk_web0 from "@zama-fhe/relayer-sdk/web";
|
|
@@ -14,7 +14,15 @@ import * as _$_zama_fhe_relayer_sdk_web0 from "@zama-fhe/relayer-sdk/web";
|
|
|
14
14
|
interface ZamaProviderProps extends PropsWithChildren {
|
|
15
15
|
/** FHE relayer backend (RelayerWeb for browser, RelayerNode for server). */
|
|
16
16
|
relayer: RelayerSDK;
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Chain provider (`ViemProvider`, `EthersProvider`, `WagmiProvider`, or
|
|
19
|
+
* custom {@link GenericProvider}). Used for every public chain read.
|
|
20
|
+
*/
|
|
21
|
+
provider: GenericProvider;
|
|
22
|
+
/**
|
|
23
|
+
* Wallet signer (`ViemSigner`, `EthersSigner`, `WagmiSigner`, or custom
|
|
24
|
+
* {@link GenericSigner}).
|
|
25
|
+
*/
|
|
18
26
|
signer: GenericSigner;
|
|
19
27
|
/** Credential storage backend (IndexedDBStorage for browser, MemoryStorage for tests). */
|
|
20
28
|
storage: GenericStorage;
|
|
@@ -53,7 +61,7 @@ interface ZamaProviderProps extends PropsWithChildren {
|
|
|
53
61
|
*
|
|
54
62
|
* @example
|
|
55
63
|
* ```tsx
|
|
56
|
-
* <ZamaProvider relayer={relayer} signer={signer} storage={storage}>
|
|
64
|
+
* <ZamaProvider relayer={relayer} provider={provider} signer={signer} storage={storage}>
|
|
57
65
|
* <App />
|
|
58
66
|
* </ZamaProvider>
|
|
59
67
|
* ```
|
|
@@ -61,6 +69,7 @@ interface ZamaProviderProps extends PropsWithChildren {
|
|
|
61
69
|
declare function ZamaProvider({
|
|
62
70
|
children,
|
|
63
71
|
relayer,
|
|
72
|
+
provider,
|
|
64
73
|
signer,
|
|
65
74
|
storage,
|
|
66
75
|
sessionStorage,
|
|
@@ -72,16 +81,37 @@ declare function ZamaProvider({
|
|
|
72
81
|
}: ZamaProviderProps): _$react_jsx_runtime0.JSX.Element;
|
|
73
82
|
/**
|
|
74
83
|
* Access the {@link ZamaSDK} instance from context.
|
|
75
|
-
* Throws if called outside a {@link ZamaProvider}
|
|
84
|
+
* Throws if called outside a {@link ZamaProvider}.
|
|
76
85
|
*
|
|
77
86
|
* @example
|
|
78
87
|
* ```tsx
|
|
79
88
|
* const sdk = useZamaSDK();
|
|
80
|
-
* const token = sdk.
|
|
89
|
+
* const token = sdk.createToken("0x...", "0x...");
|
|
81
90
|
* ```
|
|
82
91
|
*/
|
|
83
92
|
declare function useZamaSDK(): ZamaSDK;
|
|
84
93
|
//#endregion
|
|
94
|
+
//#region src/use-signer-address.d.ts
|
|
95
|
+
/**
|
|
96
|
+
* Read the connected signer address.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```tsx
|
|
100
|
+
* const { data: address, isPending, isError } = useSignerAddress();
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
declare function useSignerAddress(): UseQueryResult<Address>;
|
|
104
|
+
/**
|
|
105
|
+
* Suspense variant of {@link useSignerAddress}.
|
|
106
|
+
* Suspends rendering until the signer address resolves.
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```tsx
|
|
110
|
+
* const { data: address } = useSignerAddressSuspense();
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
declare function useSignerAddressSuspense(): _$_tanstack_react_query0.UseSuspenseQueryResult<`0x${string}`, Error>;
|
|
114
|
+
//#endregion
|
|
85
115
|
//#region src/relayer/use-encrypt.d.ts
|
|
86
116
|
/**
|
|
87
117
|
* Encrypt a plaintext value using FHE.
|
|
@@ -346,7 +376,6 @@ interface UseZamaConfig {
|
|
|
346
376
|
}
|
|
347
377
|
/**
|
|
348
378
|
* Get a {@link Token} instance, memoized by address pair.
|
|
349
|
-
* Reads signer and storage from the nearest {@link ZamaProvider}.
|
|
350
379
|
*
|
|
351
380
|
* @param config - Token and optional wrapper addresses.
|
|
352
381
|
* @returns A memoized `Token` instance.
|
|
@@ -356,7 +385,7 @@ interface UseZamaConfig {
|
|
|
356
385
|
* const token = useToken({ tokenAddress: "0xToken", wrapperAddress: "0xWrapper" });
|
|
357
386
|
* ```
|
|
358
387
|
*/
|
|
359
|
-
declare function useToken(config: UseZamaConfig):
|
|
388
|
+
declare function useToken(config: UseZamaConfig): Token;
|
|
360
389
|
//#endregion
|
|
361
390
|
//#region src/token/use-readonly-token.d.ts
|
|
362
391
|
/**
|
|
@@ -376,55 +405,46 @@ declare function useToken(config: UseZamaConfig): _$_zama_fhe_sdk0.Token;
|
|
|
376
405
|
declare function useReadonlyToken(address: Address): _$_zama_fhe_sdk0.ReadonlyToken;
|
|
377
406
|
//#endregion
|
|
378
407
|
//#region src/balance/use-confidential-balance.d.ts
|
|
379
|
-
/** Configuration for {@link useConfidentialBalance}. */
|
|
380
408
|
interface UseConfidentialBalanceConfig {
|
|
381
409
|
/** Address of the confidential token contract. */
|
|
382
410
|
tokenAddress: Address;
|
|
411
|
+
/** Account to fetch balance for. The query is disabled while `undefined`. */
|
|
412
|
+
account: Address | undefined;
|
|
383
413
|
}
|
|
384
|
-
/** Query options for {@link useConfidentialBalance}. */
|
|
385
414
|
interface UseConfidentialBalanceOptions extends Omit<UseQueryOptions<bigint>, "queryKey" | "queryFn" | "enabled"> {
|
|
386
|
-
/**
|
|
415
|
+
/** Set this to `false` to disable this query from automatically running. */
|
|
387
416
|
enabled?: boolean;
|
|
388
417
|
}
|
|
389
418
|
/**
|
|
390
|
-
*
|
|
391
|
-
*
|
|
392
|
-
*
|
|
393
|
-
* when the handle changes.
|
|
394
|
-
*
|
|
395
|
-
* @param config - Token address configuration.
|
|
396
|
-
* @param options - React Query options forwarded to the balance query.
|
|
397
|
-
* @returns The balance query result.
|
|
419
|
+
* Hook for fetching a confidential token balance. Reads the on-chain handle and
|
|
420
|
+
* decrypts via the SDK; cached values are returned instantly and the relayer is
|
|
421
|
+
* only hit when the handle changes.
|
|
398
422
|
*
|
|
399
423
|
* @example
|
|
400
424
|
* ```tsx
|
|
401
|
-
* const { data: balance
|
|
402
|
-
* tokenAddress: "
|
|
425
|
+
* const { data: balance } = useConfidentialBalance({
|
|
426
|
+
* tokenAddress: "0xToken",
|
|
427
|
+
* account: "0xAccount",
|
|
403
428
|
* });
|
|
404
429
|
* ```
|
|
405
430
|
*/
|
|
406
431
|
declare function useConfidentialBalance(config: UseConfidentialBalanceConfig, options?: UseConfidentialBalanceOptions): _$_tanstack_react_query0.UseQueryResult<bigint, Error>;
|
|
407
432
|
//#endregion
|
|
408
433
|
//#region src/balance/use-confidential-balances.d.ts
|
|
409
|
-
/** Configuration for {@link useConfidentialBalances}. */
|
|
410
434
|
interface UseConfidentialBalancesConfig {
|
|
411
|
-
/** Addresses of the confidential token contracts to batch-query. */
|
|
435
|
+
/** Addresses of the confidential token contracts to batch-query. The query is disabled while empty. */
|
|
412
436
|
tokenAddresses: Address[];
|
|
437
|
+
/** Account to fetch balances for. The query is disabled while `undefined`. */
|
|
438
|
+
account: Address | undefined;
|
|
413
439
|
}
|
|
414
|
-
/** Query options for {@link useConfidentialBalances}. */
|
|
415
440
|
interface UseConfidentialBalancesOptions extends Omit<UseQueryOptions<BatchBalancesResult>, "queryKey" | "queryFn" | "enabled"> {
|
|
416
|
-
/**
|
|
441
|
+
/** Set this to `false` to disable this query from automatically running. */
|
|
417
442
|
enabled?: boolean;
|
|
418
443
|
}
|
|
419
444
|
/**
|
|
420
|
-
*
|
|
421
|
-
*
|
|
422
|
-
*
|
|
423
|
-
* changed handles.
|
|
424
|
-
*
|
|
425
|
-
* Returns partial results when some tokens fail — successful balances are
|
|
426
|
-
* always returned alongside per-token error information.
|
|
427
|
-
*
|
|
445
|
+
* Hook for fetching multiple confidential token balances in batch. Returns
|
|
446
|
+
* partial results when some tokens fail — successful balances are available
|
|
447
|
+
* alongside per-token error information.
|
|
428
448
|
* @param config - Token addresses configuration.
|
|
429
449
|
* @param options - React Query options forwarded to the balance query.
|
|
430
450
|
* @returns The balance query result.
|
|
@@ -433,6 +453,7 @@ interface UseConfidentialBalancesOptions extends Omit<UseQueryOptions<BatchBalan
|
|
|
433
453
|
* ```tsx
|
|
434
454
|
* const { data } = useConfidentialBalances({
|
|
435
455
|
* tokenAddresses: ["0xTokenA", "0xTokenB"],
|
|
456
|
+
* account: "0xAccount",
|
|
436
457
|
* });
|
|
437
458
|
* const balance = data?.results.get("0xTokenA");
|
|
438
459
|
* if (data && data.errors.size > 0) {
|
|
@@ -525,25 +546,24 @@ declare function useConfidentialTransferFrom(config: UseZamaConfig, options?: Us
|
|
|
525
546
|
declare function useConfidentialApprove(config: UseZamaConfig, options?: UseMutationOptions<TransactionResult, Error, ConfidentialApproveParams, Address>): _$_tanstack_react_query0.UseMutationResult<TransactionResult, Error, ConfidentialApproveParams, `0x${string}`>;
|
|
526
547
|
//#endregion
|
|
527
548
|
//#region src/transfer/use-confidential-is-approved.d.ts
|
|
528
|
-
/** Configuration for {@link useConfidentialIsApproved}. */
|
|
529
549
|
interface UseConfidentialIsApprovedConfig {
|
|
530
|
-
/** Address of the confidential token contract.
|
|
550
|
+
/** Address of the confidential token contract. The query is disabled while `undefined`. */
|
|
531
551
|
tokenAddress: Address | undefined;
|
|
532
|
-
/** Address to check approval for.
|
|
552
|
+
/** Address to check approval for. The query is disabled while `undefined`. */
|
|
533
553
|
spender: Address | undefined;
|
|
534
|
-
/** Token holder address.
|
|
535
|
-
holder
|
|
554
|
+
/** Token holder address. The query is disabled while `undefined`. */
|
|
555
|
+
holder: Address | undefined;
|
|
536
556
|
}
|
|
537
|
-
|
|
538
|
-
|
|
557
|
+
interface UseConfidentialIsApprovedSuspenseConfig {
|
|
558
|
+
/** Address of the confidential token contract. */
|
|
559
|
+
tokenAddress: Address;
|
|
539
560
|
/** Address to check approval for. */
|
|
540
561
|
spender: Address;
|
|
541
|
-
/** Token holder address.
|
|
542
|
-
holder
|
|
562
|
+
/** Token holder address. */
|
|
563
|
+
holder: Address;
|
|
543
564
|
}
|
|
544
565
|
/**
|
|
545
|
-
* Check if a spender is an approved operator for a
|
|
546
|
-
*
|
|
566
|
+
* Check if a spender is an approved operator for a holder.
|
|
547
567
|
* @param config - Token address, spender, and optional holder to check.
|
|
548
568
|
* @param options - React Query options (forwarded to `useQuery`).
|
|
549
569
|
* @returns Query result with `data: boolean`.
|
|
@@ -553,24 +573,21 @@ interface UseConfidentialIsApprovedSuspenseConfig extends UseZamaConfig {
|
|
|
553
573
|
* const { data: isApproved } = useConfidentialIsApproved({
|
|
554
574
|
* tokenAddress: "0xToken",
|
|
555
575
|
* spender: "0xSpender",
|
|
556
|
-
* holder: "0xHolder",
|
|
576
|
+
* holder: "0xHolder",
|
|
557
577
|
* });
|
|
558
578
|
* ```
|
|
559
579
|
*/
|
|
560
580
|
declare function useConfidentialIsApproved(config: UseConfidentialIsApprovedConfig, options?: Omit<UseQueryOptions<boolean>, "queryKey" | "queryFn">): _$_tanstack_react_query0.UseQueryResult<boolean, Error>;
|
|
561
581
|
/**
|
|
562
|
-
* Suspense variant of {@link useConfidentialIsApproved}.
|
|
563
|
-
*
|
|
564
|
-
*
|
|
565
|
-
* @param config - Token address, spender, and optional holder to check.
|
|
566
|
-
* @returns Suspense query result with `data: boolean`.
|
|
582
|
+
* Suspense variant of {@link useConfidentialIsApproved}. Suspends rendering
|
|
583
|
+
* until the approval check resolves.
|
|
567
584
|
*
|
|
568
585
|
* @example
|
|
569
586
|
* ```tsx
|
|
570
587
|
* const { data: isApproved } = useConfidentialIsApprovedSuspense({
|
|
571
588
|
* tokenAddress: "0xToken",
|
|
572
589
|
* spender: "0xSpender",
|
|
573
|
-
* holder: "0xHolder",
|
|
590
|
+
* holder: "0xHolder",
|
|
574
591
|
* });
|
|
575
592
|
* ```
|
|
576
593
|
*/
|
|
@@ -742,46 +759,50 @@ declare function useUnshieldAll(config: UseZamaConfig, options?: UseMutationOpti
|
|
|
742
759
|
declare function useResumeUnshield(config: UseZamaConfig, options?: UseMutationOptions<TransactionResult, Error, ResumeUnshieldParams, Address>): _$_tanstack_react_query0.UseMutationResult<TransactionResult, Error, ResumeUnshieldParams, `0x${string}`>;
|
|
743
760
|
//#endregion
|
|
744
761
|
//#region src/shield/use-underlying-allowance.d.ts
|
|
745
|
-
/** Configuration for {@link useUnderlyingAllowance}. */
|
|
746
762
|
interface UseUnderlyingAllowanceConfig {
|
|
747
763
|
/** Address of the confidential token contract used to scope the query cache. */
|
|
748
764
|
tokenAddress: Address;
|
|
749
765
|
/** Address of the wrapper contract whose underlying ERC-20 allowance is checked. */
|
|
750
766
|
wrapperAddress: Address;
|
|
767
|
+
/** Owner to fetch allowance for. The query is disabled while `undefined`. */
|
|
768
|
+
owner: Address | undefined;
|
|
769
|
+
}
|
|
770
|
+
interface UseUnderlyingAllowanceSuspenseConfig {
|
|
771
|
+
/** Address of the confidential token contract used to scope the query cache. */
|
|
772
|
+
tokenAddress: Address;
|
|
773
|
+
/** Address of the wrapper contract whose underlying ERC-20 allowance is checked. */
|
|
774
|
+
wrapperAddress: Address;
|
|
775
|
+
/** Owner to fetch allowance for. */
|
|
776
|
+
owner: Address;
|
|
751
777
|
}
|
|
752
778
|
/**
|
|
753
|
-
*
|
|
754
|
-
* Useful to check if an approval is needed before shielding.
|
|
755
|
-
*
|
|
756
|
-
* @param config - Token and wrapper addresses.
|
|
757
|
-
* @param options - React Query options (forwarded to `useQuery`).
|
|
758
|
-
* @returns Query result with `data: bigint` (current allowance).
|
|
779
|
+
* Hook for fetching the underlying ERC-20 allowance granted to the wrapper
|
|
780
|
+
* contract. Useful to check if an approval is needed before shielding.
|
|
759
781
|
*
|
|
760
782
|
* @example
|
|
761
783
|
* ```tsx
|
|
762
784
|
* const { data: allowance } = useUnderlyingAllowance({
|
|
763
785
|
* tokenAddress: "0xConfidentialToken",
|
|
764
786
|
* wrapperAddress: "0xWrapper",
|
|
787
|
+
* owner: "0xOwner",
|
|
765
788
|
* });
|
|
766
789
|
* ```
|
|
767
790
|
*/
|
|
768
791
|
declare function useUnderlyingAllowance(config: UseUnderlyingAllowanceConfig, options?: Omit<UseQueryOptions<bigint>, "queryKey" | "queryFn">): _$_tanstack_react_query0.UseQueryResult<bigint, Error>;
|
|
769
792
|
/**
|
|
770
|
-
* Suspense variant of {@link useUnderlyingAllowance}.
|
|
771
|
-
*
|
|
772
|
-
*
|
|
773
|
-
* @param config - Token and wrapper addresses.
|
|
774
|
-
* @returns Suspense query result with `data: bigint`.
|
|
793
|
+
* Suspense variant of {@link useUnderlyingAllowance}. Suspends rendering until
|
|
794
|
+
* the allowance resolves.
|
|
775
795
|
*
|
|
776
796
|
* @example
|
|
777
797
|
* ```tsx
|
|
778
798
|
* const { data: allowance } = useUnderlyingAllowanceSuspense({
|
|
779
799
|
* tokenAddress: "0xConfidentialToken",
|
|
780
800
|
* wrapperAddress: "0xWrapper",
|
|
801
|
+
* owner: "0xOwner",
|
|
781
802
|
* });
|
|
782
803
|
* ```
|
|
783
804
|
*/
|
|
784
|
-
declare function useUnderlyingAllowanceSuspense(config:
|
|
805
|
+
declare function useUnderlyingAllowanceSuspense(config: UseUnderlyingAllowanceSuspenseConfig): _$_tanstack_react_query0.UseSuspenseQueryResult<bigint, Error>;
|
|
785
806
|
//#endregion
|
|
786
807
|
//#region src/token/use-wrapper-discovery.d.ts
|
|
787
808
|
/** Configuration for {@link useWrapperDiscovery}. */
|
|
@@ -1185,5 +1206,5 @@ declare function useListPairs({
|
|
|
1185
1206
|
metadata?: boolean;
|
|
1186
1207
|
}): _$_tanstack_react_query0.UseQueryResult<PaginatedResult<TokenWrapperPair | TokenWrapperPairWithMetadata>, Error>;
|
|
1187
1208
|
//#endregion
|
|
1188
|
-
export { type UseConfidentialBalanceConfig, type UseConfidentialBalanceOptions, type UseConfidentialBalancesConfig, type UseConfidentialBalancesOptions, type UseConfidentialIsApprovedConfig, type UseConfidentialIsApprovedSuspenseConfig, type UseConfidentialTransferConfig, type UseDelegationStatusConfig, type UseIsAllowedConfig, type UseShieldConfig, type UseUnderlyingAllowanceConfig, type UseUserDecryptResult, type UseWrapperDiscoveryConfig, type UseWrapperDiscoverySuspenseConfig, type UseZamaConfig, ZamaProvider, type ZamaProviderProps, useAllow, useApproveUnderlying, useBatchDecryptBalancesAs, useConfidentialApprove, useConfidentialBalance, useConfidentialBalances, useConfidentialIsApproved, useConfidentialIsApprovedSuspense, useConfidentialTokenAddress, useConfidentialTransfer, useConfidentialTransferFrom, useCreateDelegatedUserDecryptEIP712, useCreateEIP712, useDecryptBalanceAs, useDelegateDecryption, useDelegatedUserDecrypt, useDelegationStatus, useEncrypt, useFinalizeUnwrap, useGenerateKeypair, useIsAllowed, useIsConfidential, useIsConfidentialSuspense, useIsConfidentialTokenValid, useIsWrapper, useIsWrapperSuspense, useListPairs, useMetadata, useMetadataSuspense, usePublicDecrypt, usePublicKey, usePublicParams, useReadonlyToken, useRequestZKProofVerification, useResumeUnshield, useRevoke, useRevokeDelegation, useRevokeSession, useShield, useToken, useTokenAddress, useTokenPair, useTokenPairsLength, useTokenPairsRegistry, useTokenPairsSlice, useTotalSupply, useTotalSupplySuspense, useUnderlyingAllowance, useUnderlyingAllowanceSuspense, useUnshield, useUnshieldAll, useUnwrap, useUnwrapAll, useUserDecrypt, useWrapperDiscovery, useWrapperDiscoverySuspense, useWrappersRegistryAddress, useZamaSDK };
|
|
1209
|
+
export { type UseConfidentialBalanceConfig, type UseConfidentialBalanceOptions, type UseConfidentialBalancesConfig, type UseConfidentialBalancesOptions, type UseConfidentialIsApprovedConfig, type UseConfidentialIsApprovedSuspenseConfig, type UseConfidentialTransferConfig, type UseDelegationStatusConfig, type UseIsAllowedConfig, type UseShieldConfig, type UseUnderlyingAllowanceConfig, type UseUnderlyingAllowanceSuspenseConfig, type UseUserDecryptResult, type UseWrapperDiscoveryConfig, type UseWrapperDiscoverySuspenseConfig, type UseZamaConfig, ZamaProvider, type ZamaProviderProps, useAllow, useApproveUnderlying, useBatchDecryptBalancesAs, useConfidentialApprove, useConfidentialBalance, useConfidentialBalances, useConfidentialIsApproved, useConfidentialIsApprovedSuspense, useConfidentialTokenAddress, useConfidentialTransfer, useConfidentialTransferFrom, useCreateDelegatedUserDecryptEIP712, useCreateEIP712, useDecryptBalanceAs, useDelegateDecryption, useDelegatedUserDecrypt, useDelegationStatus, useEncrypt, useFinalizeUnwrap, useGenerateKeypair, useIsAllowed, useIsConfidential, useIsConfidentialSuspense, useIsConfidentialTokenValid, useIsWrapper, useIsWrapperSuspense, useListPairs, useMetadata, useMetadataSuspense, usePublicDecrypt, usePublicKey, usePublicParams, useReadonlyToken, useRequestZKProofVerification, useResumeUnshield, useRevoke, useRevokeDelegation, useRevokeSession, useShield, useSignerAddress, useSignerAddressSuspense, useToken, useTokenAddress, useTokenPair, useTokenPairsLength, useTokenPairsRegistry, useTokenPairsSlice, useTotalSupply, useTotalSupplySuspense, useUnderlyingAllowance, useUnderlyingAllowanceSuspense, useUnshield, useUnshieldAll, useUnwrap, useUnwrapAll, useUserDecrypt, useWrapperDiscovery, useWrapperDiscoverySuspense, useWrappersRegistryAddress, useZamaSDK };
|
|
1189
1210
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{ZamaSDK as e}from"@zama-fhe/sdk";import{allowMutationOptions as t,approveUnderlyingMutationOptions as n,batchDecryptBalancesAsMutationOptions as r,confidentialApproveMutationOptions as i,confidentialBalanceQueryOptions as a,confidentialBalancesQueryOptions as o,confidentialIsApprovedQueryOptions as s,confidentialTokenAddressQueryOptions as c,confidentialTransferFromMutationOptions as l,confidentialTransferMutationOptions as u,createDelegatedUserDecryptEIP712MutationOptions as d,createEIP712MutationOptions as f,decryptBalanceAsMutationOptions as p,delegateDecryptionMutationOptions as m,delegatedUserDecryptMutationOptions as ee,delegationStatusQueryOptions as h,encryptMutationOptions as g,finalizeUnwrapMutationOptions as te,generateKeypairMutationOptions as ne,hashFn as _,invalidateAfterApprove as re,invalidateAfterApproveUnderlying as ie,invalidateAfterShield as v,invalidateAfterTransfer as y,invalidateAfterUnshield as b,invalidateAfterUnwrap as x,invalidateWalletLifecycleQueries as S,isAllowedQueryOptions as ae,isConfidentialQueryOptions as C,isConfidentialTokenValidQueryOptions as oe,isWrapperQueryOptions as w,listPairsQueryOptions as se,publicDecryptMutationOptions as ce,publicKeyQueryOptions as le,publicParamsQueryOptions as ue,requestZKProofVerificationMutationOptions as de,resumeUnshieldMutationOptions as fe,revokeDelegationMutationOptions as pe,revokeMutationOptions as me,revokeSessionMutationOptions as he,shieldMutationOptions as ge,signerAddressQueryOptions as T,tokenAddressQueryOptions as _e,tokenMetadataQueryOptions as E,tokenPairQueryOptions as D,tokenPairsLengthQueryOptions as O,tokenPairsQueryOptions as k,tokenPairsSliceQueryOptions as A,totalSupplyQueryOptions as j,underlyingAllowanceQueryOptions as M,unshieldAllMutationOptions as N,unshieldMutationOptions as P,unwrapAllMutationOptions as F,unwrapMutationOptions as I,userDecryptQueryOptions as ve,wrapperDiscoveryQueryOptions as L,zamaQueryKeys as R}from"@zama-fhe/sdk/query";import{skipToken as ye,useMutation as z,useQuery as be,useQueryClient as B,useSuspenseQuery as xe}from"@tanstack/react-query";import{createContext as Se,useContext as Ce,useEffect as V,useMemo as H,useRef as we}from"react";import{jsx as Te}from"react/jsx-runtime";const U=Se(null);function Ee({children:t,relayer:n,signer:r,storage:i,sessionStorage:a,keypairTTL:o,sessionTTL:s,registryAddresses:c,registryTTL:l,onEvent:u}){let d=B(),f=we(u);V(()=>{f.current=u});let p=H(()=>r?.subscribe?{onDisconnect:()=>S(d),onAccountChange:()=>S(d),onChainChange:()=>S(d)}:void 0,[d,r]),m=H(()=>new e({relayer:n,signer:r,storage:i,sessionStorage:a,keypairTTL:o,sessionTTL:s,registryAddresses:c,registryTTL:l,onEvent:f.current,signerLifecycleCallbacks:p}),[n,r,i,a,o,s,c,l,p]);return V(()=>()=>m.dispose(),[m]),Te(U.Provider,{value:m,children:t})}function W(){let e=Ce(U);if(!e)throw Error(`useZamaSDK must be used within a <ZamaProvider>. Wrap your component tree in <ZamaProvider relayer={…} signer={…} storage={…}>.`);return e}function De(){return z(g(W()))}function G(e){return be({...e,queryKeyHashFn:_})}function K(e){return xe({...e,queryKeyHashFn:_})}function Oe(e,t){let n=ve(W(),e);return G({...n,...t,enabled:n.enabled&&(t?.enabled??!1)})}function ke(){return z(ce(W()))}function Ae(){return z(ne(W()))}function je(){return z(f(W()))}function Me(){return z(d(W()))}function Ne(){return z(ee(W()))}function Pe(){return z(de(W()))}function Fe(){return G(le(W()))}function Ie(e){return G(ue(W(),e))}function Le(e){return z({...t(W()),...e,onSuccess:(t,n,r,i)=>{e?.onSuccess?.(t,n,r,i),i.client.invalidateQueries({queryKey:R.isAllowed.all})}})}function Re(e){let t=W(),n=G({...T(t.signer)}).data;return G(n?ae(t,{account:n,contractAddresses:e.contractAddresses}):{queryKey:R.isAllowed.all,queryFn:ye,enabled:!1})}function ze(e){return z({...me(W()),...e,onSuccess:(t,n,r,i)=>{e?.onSuccess?.(t,n,r,i),i.client.removeQueries({queryKey:R.isAllowed.all}),i.client.removeQueries({queryKey:R.decryption.all})}})}function Be(e){return z({...he(W()),...e,onSuccess:(t,n,r,i)=>{e?.onSuccess?.(t,n,r,i),i.client.removeQueries({queryKey:R.isAllowed.all}),i.client.removeQueries({queryKey:R.decryption.all})}})}function q(e){let t=W();return H(()=>t.createToken(e.tokenAddress,e.wrapperAddress),[t,e.tokenAddress,e.wrapperAddress])}function J(e){let t=W();return H(()=>t.createReadonlyToken(e),[t,e])}function Ve(e,t){let{tokenAddress:n}=e,{enabled:r=!0}=t??{},i=W(),o=J(n),s=G(T(i.signer)).data,c=a(o,{tokenAddress:n,owner:s});return G({...c,...t,enabled:c.enabled&&r})}function He(e,t){let{tokenAddresses:n}=e,{enabled:r=!0}=t??{},i=W(),a=G(T(i.signer)).data,s=o(H(()=>n.map(e=>i.createReadonlyToken(e)),[i,n]),{owner:a});return G({...s,...t,enabled:(s.enabled??!0)&&r})}function Y(e,t){let n=e?t:void 0;return{wrappedContext:n,callerContext:e?n?.callerContext:t}}async function X({queryClient:e,tokenAddress:t,amount:n,mode:r}){let i=R.confidentialBalance.token(t);await e.cancelQueries({queryKey:i});let a=e.getQueriesData({queryKey:i});for(let[t,i]of a)i!==void 0&&e.setQueryData(t,r===`add`?i+n:i-n);return a}function Z(e,t){for(let[n,r]of t)e.setQueryData(n,r)}function Ue({optimistic:e,tokenAddress:t,queryClient:n,options:r}){return{onMutate:e?async(e,i)=>({snapshot:await X({queryClient:n,tokenAddress:t,amount:e.amount,mode:`add`}),callerContext:await r?.onMutate?.(e,i)}):r?.onMutate,onError:(t,i,a,o)=>{let{wrappedContext:s,callerContext:c}=Y(e,a);try{s&&Z(n,s.snapshot)}finally{r?.onError?.(t,i,c,o)}},onSuccess:(n,i,a,o)=>{let{callerContext:s}=Y(e,a);r?.onSuccess?.(n,i,s,o),v(o.client,t)},onSettled:(t,n,i,a,o)=>{let{callerContext:s}=Y(e,a);r?.onSettled?.(t,n,i,s,o)}}}function We(e,t){let n=q(e),r=B();return z({...u(n),...t,onMutate:e.optimistic?async(n,i)=>({snapshot:await X({queryClient:r,tokenAddress:e.tokenAddress,amount:n.amount,mode:`subtract`}),callerContext:await t?.onMutate?.(n,i)}):t?.onMutate,onError:(n,i,a,o)=>{let{wrappedContext:s,callerContext:c}=Y(e.optimistic,a);try{s&&Z(r,s.snapshot)}finally{t?.onError?.(n,i,c,o)}},onSuccess:(n,r,i,a)=>{let{callerContext:o}=Y(e.optimistic,i);t?.onSuccess?.(n,r,o,a),y(a.client,e.tokenAddress)},onSettled:(n,r,i,a,o)=>{let{callerContext:s}=Y(e.optimistic,a);t?.onSettled?.(n,r,i,s,o)}})}function Ge(e,t){return z({...l(q(e)),...t,onSuccess:(n,r,i,a)=>{t?.onSuccess?.(n,r,i,a),y(a.client,e.tokenAddress)}})}function Ke(e,t){return z({...i(q(e)),...t,onSuccess:(n,r,i,a)=>{t?.onSuccess?.(n,r,i,a),re(a.client,e.tokenAddress)}})}function qe(e,t){let{tokenAddress:n,spender:r,holder:i}=e,a=W(),o=G({...T(a.signer),enabled:n!==void 0&&r!==void 0&&i===void 0}),c=i??o.data,l=s(a.signer,n,{holder:c,spender:r});return G({...l,...t,enabled:(l.enabled??!0)&&(t?.enabled??!0)})}function Je(e){let{spender:t,holder:n,...r}=e,i=W(),a=q(r),o=K(T(i.signer)),c=n??o.data;return K(s(i.signer,a.address,{holder:c,spender:t}))}function Ye(e,t){let n=q(e),r=B();return z({...ge(n),...t,...Ue({optimistic:e.optimistic,tokenAddress:e.tokenAddress,queryClient:r,options:t})})}function Xe(e,t){return z({...I(q(e)),...t,onSuccess:(n,r,i,a)=>{t?.onSuccess?.(n,r,i,a),x(a.client,e.tokenAddress)}})}function Ze(e,t){return z({...F(q(e)),...t,onSuccess:(n,r,i,a)=>{t?.onSuccess?.(n,r,i,a),x(a.client,e.tokenAddress)}})}function Qe(e,t){return z({...te(q(e)),...t,onSuccess:(n,r,i,a)=>{t?.onSuccess?.(n,r,i,a),b(a.client,e.tokenAddress)}})}function $e(e,t){return z({...P(q(e)),...t,onSuccess:(n,r,i,a)=>{t?.onSuccess?.(n,r,i,a),b(a.client,e.tokenAddress)}})}function et(e,t){return z({...N(q(e)),...t,onSuccess:(n,r,i,a)=>{t?.onSuccess?.(n,r,i,a),b(a.client,e.tokenAddress)}})}function tt(e,t){return z({...fe(q(e)),...t,onSuccess:(n,r,i,a)=>{t?.onSuccess?.(n,r,i,a),b(a.client,e.tokenAddress)}})}function nt(e,t){let{tokenAddress:n,wrapperAddress:r}=e,i=W(),a=G(T(i.signer)).data,o=M(i.signer,n,{owner:a,wrapperAddress:r});return G({...o,...t,enabled:(o.enabled??!0)&&(t?.enabled??!0)})}function rt(e){let{tokenAddress:t,wrapperAddress:n}=e,r=W(),i=K(T(r.signer)).data;return K(M(r.signer,t,{owner:i,wrapperAddress:n}))}function Q(){let e=W(),{data:t}=G({queryKey:R.wrappersRegistry.chainId(),queryFn:()=>e.signer.getChainId(),staleTime:3e4});return t===void 0?void 0:e.registry.getAddress(t)}function it(e,t){let{tokenAddress:n,erc20Address:r}=e,i=W(),a=Q(),o=L(i.registry,{tokenAddress:n,erc20Address:r,registryAddress:a});return G({...o,...t,enabled:(o.enabled??!0)&&(t?.enabled??!0)})}function at(e){let{tokenAddress:t,erc20Address:n}=e,r=W(),i=Q();return K(L(r.registry,{tokenAddress:t,erc20Address:n,registryAddress:i}))}function ot(e,t){return G({...E(W().signer,e),...t})}function st(e){return K(E(W().signer,e))}function ct(e,t){return z({...m(q(e)),...t,onSuccess:(e,n,r,i)=>{try{t?.onSuccess?.(e,n,r,i)}finally{i.client.invalidateQueries({queryKey:R.delegationStatus.all})}}})}function lt(e,t){return z({...pe(q(e)),...t,onSuccess:(e,n,r,i)=>{try{t?.onSuccess?.(e,n,r,i)}finally{i.client.invalidateQueries({queryKey:R.delegationStatus.all})}}})}function ut(e,t){let n=h(W(),e);return G({...n,...t,enabled:(n.enabled??!0)&&(t?.enabled??!0)})}function dt(e,t){return z({...p(J(e)),...t})}function ft(e,t){return z({...r(e),...t})}function $(e,t){return z({...n(q(e)),...t,onSuccess:(n,r,i,a)=>{t?.onSuccess?.(n,r,i,a),ie(a.client,e.tokenAddress)}})}function pt(e,t){return G({...C(W().signer,e),...t})}function mt(e){return K(C(W().signer,e))}function ht(e,t){return G({...w(W().signer,e),...t})}function gt(e){return K(w(W().signer,e))}function _t(e,t){return G({...j(W().signer,e),...t})}function vt(e){return K(j(W().signer,e))}function yt(){let e=W(),t=Q();return G(k(e.signer,{registryAddress:t}))}function bt(){let e=W(),t=Q();return G(O(e.signer,{registryAddress:t}))}function xt({fromIndex:e,toIndex:t}){let n=W(),r=Q();return G(A(n.signer,{registryAddress:r,fromIndex:e,toIndex:t}))}function St({index:e}){let t=W(),n=Q();return G(D(t.signer,{registryAddress:n,index:e}))}function Ct({tokenAddress:e}){let t=W(),n=Q();return G(c(t.signer,{registryAddress:n,tokenAddress:e}))}function wt({confidentialTokenAddress:e}){let t=W(),n=Q();return G(_e(t.signer,{registryAddress:n,confidentialTokenAddress:e}))}function Tt({confidentialTokenAddress:e}){let t=W(),n=Q();return G(oe(t.signer,{registryAddress:n,confidentialTokenAddress:e}))}function Et({page:e=1,pageSize:t=100,metadata:n=!1}={}){let r=W(),i=Q();return G(se(r.registry,{registryAddress:i,page:e,pageSize:t,metadata:n}))}export{Ee as ZamaProvider,Le as useAllow,$ as useApproveUnderlying,ft as useBatchDecryptBalancesAs,Ke as useConfidentialApprove,Ve as useConfidentialBalance,He as useConfidentialBalances,qe as useConfidentialIsApproved,Je as useConfidentialIsApprovedSuspense,Ct as useConfidentialTokenAddress,We as useConfidentialTransfer,Ge as useConfidentialTransferFrom,Me as useCreateDelegatedUserDecryptEIP712,je as useCreateEIP712,dt as useDecryptBalanceAs,ct as useDelegateDecryption,Ne as useDelegatedUserDecrypt,ut as useDelegationStatus,De as useEncrypt,Qe as useFinalizeUnwrap,Ae as useGenerateKeypair,Re as useIsAllowed,pt as useIsConfidential,mt as useIsConfidentialSuspense,Tt as useIsConfidentialTokenValid,ht as useIsWrapper,gt as useIsWrapperSuspense,Et as useListPairs,ot as useMetadata,st as useMetadataSuspense,ke as usePublicDecrypt,Fe as usePublicKey,Ie as usePublicParams,J as useReadonlyToken,Pe as useRequestZKProofVerification,tt as useResumeUnshield,ze as useRevoke,lt as useRevokeDelegation,Be as useRevokeSession,Ye as useShield,q as useToken,wt as useTokenAddress,St as useTokenPair,bt as useTokenPairsLength,yt as useTokenPairsRegistry,xt as useTokenPairsSlice,_t as useTotalSupply,vt as useTotalSupplySuspense,nt as useUnderlyingAllowance,rt as useUnderlyingAllowanceSuspense,$e as useUnshield,et as useUnshieldAll,Xe as useUnwrap,Ze as useUnwrapAll,Oe as useUserDecrypt,it as useWrapperDiscovery,at as useWrapperDiscoverySuspense,Q as useWrappersRegistryAddress,W as useZamaSDK};
|
|
1
|
+
"use client";import{ZamaSDK as e}from"@zama-fhe/sdk";import{allowMutationOptions as t,approveUnderlyingMutationOptions as n,batchDecryptBalancesAsMutationOptions as r,confidentialApproveMutationOptions as i,confidentialBalanceQueryOptions as a,confidentialBalancesQueryOptions as o,confidentialIsApprovedQueryOptions as s,confidentialTokenAddressQueryOptions as c,confidentialTransferFromMutationOptions as l,confidentialTransferMutationOptions as u,createDelegatedUserDecryptEIP712MutationOptions as d,createEIP712MutationOptions as f,decryptBalanceAsMutationOptions as p,delegateDecryptionMutationOptions as m,delegatedUserDecryptMutationOptions as h,delegationStatusQueryOptions as ee,encryptMutationOptions as te,finalizeUnwrapMutationOptions as g,generateKeypairMutationOptions as _,hashFn as v,invalidateAfterApprove as ne,invalidateAfterApproveUnderlying as re,invalidateAfterShield as ie,invalidateAfterTransfer as y,invalidateAfterUnshield as b,invalidateAfterUnwrap as x,invalidateWalletLifecycleQueries as S,isAllowedQueryOptions as ae,isConfidentialQueryOptions as C,isConfidentialTokenValidQueryOptions as oe,isWrapperQueryOptions as w,listPairsQueryOptions as se,publicDecryptMutationOptions as ce,publicKeyQueryOptions as le,publicParamsQueryOptions as ue,requestZKProofVerificationMutationOptions as de,resumeUnshieldMutationOptions as fe,revokeDelegationMutationOptions as pe,revokeMutationOptions as me,revokeSessionMutationOptions as he,shieldMutationOptions as ge,signerAddressQueryOptions as T,tokenAddressQueryOptions as _e,tokenMetadataQueryOptions as E,tokenPairQueryOptions as ve,tokenPairsLengthQueryOptions as D,tokenPairsQueryOptions as O,tokenPairsSliceQueryOptions as k,totalSupplyQueryOptions as A,underlyingAllowanceQueryOptions as j,unshieldAllMutationOptions as M,unshieldMutationOptions as N,unwrapAllMutationOptions as P,unwrapMutationOptions as F,userDecryptQueryOptions as ye,wrapperDiscoveryQueryOptions as I,zamaQueryKeys as L}from"@zama-fhe/sdk/query";import{skipToken as be,useMutation as R,useQuery as xe,useQueryClient as z,useSuspenseQuery as Se}from"@tanstack/react-query";import{createContext as Ce,useContext as we,useEffect as B,useMemo as V,useRef as Te}from"react";import{jsx as Ee}from"react/jsx-runtime";const H=Ce(null);function De({children:t,relayer:n,provider:r,signer:i,storage:a,sessionStorage:o,keypairTTL:s,sessionTTL:c,registryAddresses:l,registryTTL:u,onEvent:d}){let f=z(),p=Te(d);B(()=>{p.current=d});let m=V(()=>i?.subscribe?{onDisconnect:()=>S(f),onAccountChange:()=>S(f),onChainChange:()=>S(f)}:void 0,[f,i]),h=V(()=>new e({relayer:n,provider:r,signer:i,storage:a,sessionStorage:o,keypairTTL:s,sessionTTL:c,registryAddresses:l,registryTTL:u,onEvent:p.current,signerLifecycleCallbacks:m}),[n,r,i,a,o,s,c,l,u,m]);return B(()=>()=>h.dispose(),[h]),Ee(H.Provider,{value:h,children:t})}function U(){let e=we(H);if(!e)throw Error(`useZamaSDK must be used within a <ZamaProvider>. Wrap your component tree in <ZamaProvider relayer={…} provider={…} signer={…} storage={…}>.`);return e}function W(e){return xe({...e,queryKeyHashFn:v})}function G(e){return Se({...e,queryKeyHashFn:v})}function K(){return W(T(U().signer))}function Oe(){return G(T(U().signer))}function ke(){return R(te(U()))}function Ae(e,t){let n=ye(U(),e);return W({...n,...t,enabled:n.enabled&&(t?.enabled??!1)})}function je(){return R(ce(U()))}function Me(){return R(_(U()))}function Ne(){return R(f(U()))}function Pe(){return R(d(U()))}function Fe(){return R(h(U()))}function Ie(){return R(de(U()))}function Le(){return W(le(U()))}function Re(e){return W(ue(U(),e))}function ze(e){return R({...t(U()),...e,onSuccess:(t,n,r,i)=>{e?.onSuccess?.(t,n,r,i),i.client.invalidateQueries({queryKey:L.isAllowed.all})}})}function Be(e){let t=U(),{data:n}=K();return W(n?ae(t,{account:n,contractAddresses:e.contractAddresses}):{queryKey:L.isAllowed.all,queryFn:be,enabled:!1})}function Ve(e){return R({...me(U()),...e,onSuccess:(t,n,r,i)=>{e?.onSuccess?.(t,n,r,i),i.client.removeQueries({queryKey:L.isAllowed.all}),i.client.removeQueries({queryKey:L.decryption.all})}})}function He(e){return R({...he(U()),...e,onSuccess:(t,n,r,i)=>{e?.onSuccess?.(t,n,r,i),i.client.removeQueries({queryKey:L.isAllowed.all}),i.client.removeQueries({queryKey:L.decryption.all})}})}function q(e){let t=U();return V(()=>t.createToken(e.tokenAddress,e.wrapperAddress),[t,e.tokenAddress,e.wrapperAddress])}function J(e){let t=U();return V(()=>t.createReadonlyToken(e),[t,e])}function Ue(e,t){let{tokenAddress:n,account:r}=e,{enabled:i=!0}=t??{},o=a(J(n),{tokenAddress:n,account:r});return W({...o,...t,enabled:!!o.enabled&&i})}function We(e,t){let{tokenAddresses:n,account:r}=e,{enabled:i=!0}=t??{},a=U(),s=o(V(()=>n.map(e=>a.createReadonlyToken(e)),[a,n]),{account:r});return W({...s,...t,enabled:!!s.enabled&&i})}function Y(e,t){let n=e?t:void 0;return{wrappedContext:n,callerContext:e?n?.callerContext:t}}async function X({queryClient:e,tokenAddress:t,amount:n,mode:r}){let i=L.confidentialBalance.token(t);await e.cancelQueries({queryKey:i});let a=e.getQueriesData({queryKey:i});for(let[t,i]of a)i!==void 0&&e.setQueryData(t,r===`add`?i+n:i-n);return a}function Z(e,t){for(let[n,r]of t)e.setQueryData(n,r)}function Ge({optimistic:e,tokenAddress:t,queryClient:n,options:r}){return{onMutate:e?async(e,i)=>({snapshot:await X({queryClient:n,tokenAddress:t,amount:e.amount,mode:`add`}),callerContext:await r?.onMutate?.(e,i)}):r?.onMutate,onError:(t,i,a,o)=>{let{wrappedContext:s,callerContext:c}=Y(e,a);try{s&&Z(n,s.snapshot)}finally{r?.onError?.(t,i,c,o)}},onSuccess:(n,i,a,o)=>{let{callerContext:s}=Y(e,a);r?.onSuccess?.(n,i,s,o),ie(o.client,t)},onSettled:(t,n,i,a,o)=>{let{callerContext:s}=Y(e,a);r?.onSettled?.(t,n,i,s,o)}}}function Ke(e,t){let n=q(e),r=z();return R({...u(n),...t,onMutate:e.optimistic?async(e,i)=>({snapshot:await X({queryClient:r,tokenAddress:n.address,amount:e.amount,mode:`subtract`}),callerContext:await t?.onMutate?.(e,i)}):t?.onMutate,onError:(n,i,a,o)=>{let{wrappedContext:s,callerContext:c}=Y(e.optimistic,a);try{s&&Z(r,s.snapshot)}finally{t?.onError?.(n,i,c,o)}},onSuccess:(r,i,a,o)=>{let{callerContext:s}=Y(e.optimistic,a);t?.onSuccess?.(r,i,s,o),y(o.client,n.address)},onSettled:(n,r,i,a,o)=>{let{callerContext:s}=Y(e.optimistic,a);t?.onSettled?.(n,r,i,s,o)}})}function qe(e,t){let n=q(e);return R({...l(n),...t,onSuccess:(e,r,i,a)=>{t?.onSuccess?.(e,r,i,a),y(a.client,n.address)}})}function Je(e,t){let n=q(e);return R({...i(n),...t,onSuccess:(e,r,i,a)=>{t?.onSuccess?.(e,r,i,a),ne(a.client,n.address)}})}function Ye(e,t){let{tokenAddress:n,spender:r,holder:i}=e,a=s(U(),n,{holder:i,spender:r});return W({...a,...t,enabled:(a.enabled??!0)&&(t?.enabled??!0)})}function Xe(e){let{spender:t,holder:n,tokenAddress:r}=e;return G(s(U(),r,{holder:n,spender:t}))}function Ze(e,t){let n=q(e),r=z();return R({...ge(n),...t,...Ge({optimistic:e.optimistic,tokenAddress:n.address,queryClient:r,options:t})})}function Qe(e,t){let n=q(e);return R({...F(n),...t,onSuccess:(e,r,i,a)=>{t?.onSuccess?.(e,r,i,a),x(a.client,n.address)}})}function $e(e,t){let n=q(e);return R({...P(n),...t,onSuccess:(e,r,i,a)=>{t?.onSuccess?.(e,r,i,a),x(a.client,n.address)}})}function et(e,t){let n=q(e);return R({...g(n),...t,onSuccess:(e,r,i,a)=>{t?.onSuccess?.(e,r,i,a),b(a.client,n.address)}})}function tt(e,t){let n=q(e);return R({...N(n),...t,onSuccess:(e,r,i,a)=>{t?.onSuccess?.(e,r,i,a),b(a.client,n.address)}})}function nt(e,t){let n=q(e);return R({...M(n),...t,onSuccess:(e,r,i,a)=>{t?.onSuccess?.(e,r,i,a),b(a.client,n.address)}})}function rt(e,t){let n=q(e);return R({...fe(n),...t,onSuccess:(e,r,i,a)=>{t?.onSuccess?.(e,r,i,a),b(a.client,n.address)}})}function it(e,t){let{tokenAddress:n,wrapperAddress:r,owner:i}=e,a=j(U(),n,{owner:i,wrapperAddress:r});return W({...a,...t,enabled:(a.enabled??!0)&&(t?.enabled??!0)})}function at(e){let{tokenAddress:t,wrapperAddress:n,owner:r}=e;return G(j(U(),t,{owner:r,wrapperAddress:n}))}function Q(){let e=U(),{data:t}=W({queryKey:L.wrappersRegistry.chainId(),queryFn:()=>e.provider.getChainId(),staleTime:3e4});return t===void 0?void 0:e.registry.getAddress(t)}function ot(e,t){let{tokenAddress:n,erc20Address:r}=e,i=U(),a=Q(),o=I(i.registry,{tokenAddress:n,erc20Address:r,registryAddress:a});return W({...o,...t,enabled:(o.enabled??!0)&&(t?.enabled??!0)})}function st(e){let{tokenAddress:t,erc20Address:n}=e,r=U(),i=Q();return G(I(r.registry,{tokenAddress:t,erc20Address:n,registryAddress:i}))}function ct(e,t){return W({...E(U(),e),...t})}function lt(e){return G(E(U(),e))}function ut(e,t){return R({...m(q(e)),...t,onSuccess:(e,n,r,i)=>{try{t?.onSuccess?.(e,n,r,i)}finally{i.client.invalidateQueries({queryKey:L.delegationStatus.all})}}})}function dt(e,t){return R({...pe(q(e)),...t,onSuccess:(e,n,r,i)=>{try{t?.onSuccess?.(e,n,r,i)}finally{i.client.invalidateQueries({queryKey:L.delegationStatus.all})}}})}function ft(e,t){let n=ee(U(),e);return W({...n,...t,enabled:(n.enabled??!0)&&(t?.enabled??!0)})}function pt(e,t){return R({...p(J(e)),...t})}function mt(e,t){return R({...r(e),...t})}function ht(e,t){let r=q(e);return R({...n(r),...t,onSuccess:(e,n,i,a)=>{t?.onSuccess?.(e,n,i,a),re(a.client,r.address)}})}function gt(e,t){return W({...C(U(),e),...t})}function _t(e){return G(C(U(),e))}function vt(e,t){return W({...w(U(),e),...t})}function yt(e){return G(w(U(),e))}function $(e,t){return W({...A(U(),e),...t})}function bt(e){return G(A(U(),e))}function xt(){return W(O(U(),{registryAddress:Q()}))}function St(){return W(D(U(),{registryAddress:Q()}))}function Ct({fromIndex:e,toIndex:t}){return W(k(U(),{registryAddress:Q(),fromIndex:e,toIndex:t}))}function wt({index:e}){return W(ve(U(),{registryAddress:Q(),index:e}))}function Tt({tokenAddress:e}){return W(c(U(),{registryAddress:Q(),tokenAddress:e}))}function Et({confidentialTokenAddress:e}){return W(_e(U(),{registryAddress:Q(),confidentialTokenAddress:e}))}function Dt({confidentialTokenAddress:e}){return W(oe(U(),{registryAddress:Q(),confidentialTokenAddress:e}))}function Ot({page:e=1,pageSize:t=100,metadata:n=!1}={}){let r=U(),i=Q();return W(se(r.registry,{registryAddress:i,page:e,pageSize:t,metadata:n}))}export{De as ZamaProvider,ze as useAllow,ht as useApproveUnderlying,mt as useBatchDecryptBalancesAs,Je as useConfidentialApprove,Ue as useConfidentialBalance,We as useConfidentialBalances,Ye as useConfidentialIsApproved,Xe as useConfidentialIsApprovedSuspense,Tt as useConfidentialTokenAddress,Ke as useConfidentialTransfer,qe as useConfidentialTransferFrom,Pe as useCreateDelegatedUserDecryptEIP712,Ne as useCreateEIP712,pt as useDecryptBalanceAs,ut as useDelegateDecryption,Fe as useDelegatedUserDecrypt,ft as useDelegationStatus,ke as useEncrypt,et as useFinalizeUnwrap,Me as useGenerateKeypair,Be as useIsAllowed,gt as useIsConfidential,_t as useIsConfidentialSuspense,Dt as useIsConfidentialTokenValid,vt as useIsWrapper,yt as useIsWrapperSuspense,Ot as useListPairs,ct as useMetadata,lt as useMetadataSuspense,je as usePublicDecrypt,Le as usePublicKey,Re as usePublicParams,J as useReadonlyToken,Ie as useRequestZKProofVerification,rt as useResumeUnshield,Ve as useRevoke,dt as useRevokeDelegation,He as useRevokeSession,Ze as useShield,K as useSignerAddress,Oe as useSignerAddressSuspense,q as useToken,Et as useTokenAddress,wt as useTokenPair,St as useTokenPairsLength,xt as useTokenPairsRegistry,Ct as useTokenPairsSlice,$ as useTotalSupply,bt as useTotalSupplySuspense,it as useUnderlyingAllowance,at as useUnderlyingAllowanceSuspense,tt as useUnshield,nt as useUnshieldAll,Qe as useUnwrap,$e as useUnwrapAll,Ae as useUserDecrypt,ot as useWrapperDiscovery,st as useWrapperDiscoverySuspense,Q as useWrappersRegistryAddress,U as useZamaSDK};
|
|
2
2
|
//# sourceMappingURL=index.js.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","useQuery","useQuery","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/relayer/use-user-decrypt.ts","../src/relayer/use-public-decrypt.ts","../src/relayer/use-generate-keypair.ts","../src/relayer/use-create-eip712.ts","../src/relayer/use-create-delegated-user-decrypt-eip712.ts","../src/relayer/use-delegated-user-decrypt.ts","../src/relayer/use-request-zk-proof-verification.ts","../src/relayer/use-public-key.ts","../src/relayer/use-public-params.ts","../src/authorization/use-allow.ts","../src/authorization/use-is-allowed.ts","../src/authorization/use-revoke.ts","../src/authorization/use-revoke-session.ts","../src/token/use-token.ts","../src/token/use-readonly-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/transfer/use-confidential-approve.ts","../src/transfer/use-confidential-is-approved.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/delegation/use-delegate-decryption.ts","../src/delegation/use-revoke-delegation.ts","../src/delegation/use-delegation-status.ts","../src/delegation/use-decrypt-balance-as.ts","../src/delegation/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 {\n Address,\n GenericSigner,\n GenericStorage,\n RelayerSDK,\n ZamaSDKEventListener,\n} 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 /** FHE relayer backend (RelayerWeb for browser, RelayerNode for server). */\n relayer: RelayerSDK;\n /** Wallet signer (`ViemSigner`, `EthersSigner`, or custom {@link GenericSigner}). */\n signer: GenericSigner;\n /** Credential storage backend (IndexedDBStorage for browser, MemoryStorage for tests). */\n storage: GenericStorage;\n /**\n * Session storage for wallet signatures. Defaults to in-memory (lost on reload).\n * Pass a `chrome.storage.session`-backed store for web extensions.\n */\n sessionStorage?: GenericStorage;\n /**\n * How long the ML-KEM re-encryption keypair remains valid, in seconds.\n * Default: `86400` (1 day). Must be positive — `0` is rejected.\n */\n keypairTTL?: number;\n /**\n * Controls how long session signatures (EIP-712 wallet signatures) remain valid, in seconds.\n * Default: `2592000` (30 days).\n * - `0`: never persist — every operation triggers a signing prompt (high-security mode).\n * - Positive number: seconds until the session signature expires and requires re-authentication.\n */\n sessionTTL?: number;\n /**\n * Per-chain wrappers registry address overrides, merged on top of built-in defaults.\n * Use this for custom or local chains (e.g. Hardhat) where no default registry exists.\n */\n registryAddresses?: Record<number, Address>;\n /**\n * How long cached registry results remain valid, in seconds.\n * Default: `86400` (24 hours).\n */\n registryTTL?: number;\n /** Callback invoked on SDK lifecycle events. */\n onEvent?: ZamaSDKEventListener;\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 relayer={relayer} signer={signer} storage={storage}>\n * <App />\n * </ZamaProvider>\n * ```\n */\nexport function ZamaProvider({\n children,\n relayer,\n signer,\n storage,\n sessionStorage,\n keypairTTL,\n sessionTTL,\n registryAddresses,\n registryTTL,\n onEvent,\n}: ZamaProviderProps) {\n const queryClient = useQueryClient();\n\n // Stabilize onEvent so an inline arrow doesn't recreate the SDK every render.\n const onEventRef = useRef(onEvent);\n\n useEffect(() => {\n onEventRef.current = onEvent;\n });\n\n const signerLifecycleCallbacks = useMemo(\n () =>\n signer?.subscribe\n ? {\n onDisconnect: () => invalidateWalletLifecycleQueries(queryClient),\n onAccountChange: () => invalidateWalletLifecycleQueries(queryClient),\n onChainChange: () => invalidateWalletLifecycleQueries(queryClient),\n }\n : undefined,\n [queryClient, signer],\n );\n\n const sdk = useMemo(\n () =>\n new ZamaSDK({\n relayer,\n signer,\n storage,\n sessionStorage,\n keypairTTL,\n sessionTTL,\n registryAddresses,\n registryTTL,\n onEvent: onEventRef.current,\n signerLifecycleCallbacks,\n }),\n [\n relayer,\n signer,\n storage,\n sessionStorage,\n keypairTTL,\n sessionTTL,\n registryAddresses,\n registryTTL,\n signerLifecycleCallbacks,\n ],\n );\n\n // Clean up signer subscriptions on unmount without terminating the\n // caller-owned relayer. dispose() only unsubscribes from wallet events\n // and 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} or when no signer is provided.\n *\n * @example\n * ```tsx\n * const sdk = useZamaSDK();\n * const token = sdk.createReadonlyToken(\"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 relayer={…} signer={…} storage={…}>.\",\n );\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 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\";\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 queryOpts = userDecryptQueryOptions(sdk, config);\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 { useMutation } from \"@tanstack/react-query\";\nimport { generateKeypairMutationOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Generate an FHE keypair via the relayer.\n * Returns a public/private key pair for use in decrypt authorization.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link RelayerRequestFailedError} — relayer keypair generation request failed\n *\n * @returns A mutation whose `mutate` takes no parameters.\n *\n * @example\n * ```tsx\n * const generateKeypair = useGenerateKeypair();\n * generateKeypair.mutate();\n * // generateKeypair.data?.publicKey, generateKeypair.data?.privateKey\n * ```\n */\nexport function useGenerateKeypair() {\n const sdk = useZamaSDK();\n return useMutation(generateKeypairMutationOptions(sdk));\n}\n","\"use client\";\n\nimport type { EIP712TypedData } from \"@zama-fhe/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { createEIP712MutationOptions } from \"@zama-fhe/sdk/query\";\nimport type { CreateEIP712Params } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Create EIP-712 typed data for signing an FHE decrypt credential.\n * The returned typed data is signed by the wallet to authorize decryption.\n *\n * @returns A mutation whose `mutate` accepts {@link CreateEIP712Params}.\n *\n * @example\n * ```tsx\n * const createEIP712 = useCreateEIP712();\n * createEIP712.mutate({\n * publicKey: keypair.publicKey,\n * contractAddresses: [\"0xToken\"],\n * startTimestamp: Math.floor(Date.now() / 1000),\n * });\n * ```\n */\nexport function useCreateEIP712() {\n const sdk = useZamaSDK();\n return useMutation<EIP712TypedData, Error, CreateEIP712Params>(createEIP712MutationOptions(sdk));\n}\n","\"use client\";\n\nimport type { KmsDelegatedUserDecryptEIP712Type } from \"@zama-fhe/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { createDelegatedUserDecryptEIP712MutationOptions } from \"@zama-fhe/sdk/query\";\nimport type { CreateDelegatedUserDecryptEIP712Params } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Create EIP-712 typed data for a delegated user decrypt credential.\n * Used when one wallet authorizes another to decrypt on its behalf.\n *\n * @returns A mutation whose `mutate` accepts {@link CreateDelegatedUserDecryptEIP712Params}.\n *\n * @example\n * ```tsx\n * const createEIP712 = useCreateDelegatedUserDecryptEIP712();\n * createEIP712.mutate({\n * publicKey: keypair.publicKey,\n * contractAddresses: [\"0xToken\"],\n * delegatorAddress: \"0xDelegator\",\n * startTimestamp: Math.floor(Date.now() / 1000),\n * });\n * ```\n */\nexport function useCreateDelegatedUserDecryptEIP712() {\n const sdk = useZamaSDK();\n return useMutation<\n KmsDelegatedUserDecryptEIP712Type,\n Error,\n CreateDelegatedUserDecryptEIP712Params\n >(createDelegatedUserDecryptEIP712MutationOptions(sdk));\n}\n","\"use client\";\n\nimport type { DelegatedUserDecryptParams, ClearValueType, Handle } from \"@zama-fhe/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { delegatedUserDecryptMutationOptions } 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 DelegatedUserDecryptParams}.\n *\n * @example\n * ```tsx\n * const decrypt = useDelegatedUserDecrypt();\n * decrypt.mutate({ handles: [\"0xHandle1\"], ...credentials });\n * // decrypt.data => { \"0xHandle1\": 1000n }\n * ```\n */\nexport function useDelegatedUserDecrypt() {\n const sdk = useZamaSDK();\n return useMutation<Record<Handle, ClearValueType>, Error, DelegatedUserDecryptParams>(\n delegatedUserDecryptMutationOptions(sdk),\n );\n}\n","\"use client\";\n\nimport type { InputProofBytesType, ZKProofLike } from \"@zama-fhe/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { requestZKProofVerificationMutationOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Submit a ZK proof for on-chain verification.\n * Returns the input proof bytes for use in contract calls.\n *\n * @returns A mutation whose `mutate` accepts a {@link ZKProofLike}.\n *\n * @example\n * ```tsx\n * const verify = useRequestZKProofVerification();\n * verify.mutate(zkProof);\n * // verify.data => Uint8Array (input proof bytes)\n * ```\n */\nexport function useRequestZKProofVerification() {\n const sdk = useZamaSDK();\n return useMutation<InputProofBytesType, Error, ZKProofLike>(\n requestZKProofVerificationMutationOptions(sdk),\n );\n}\n","\"use client\";\n\nimport type { PublicKeyData } from \"@zama-fhe/sdk\";\nimport { useQuery } from \"../utils/query\";\nimport { publicKeyQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Fetch the FHE network public key from the relayer.\n * Cached indefinitely since the key does not change during a session.\n *\n * @returns Query result with `data: PublicKeyData | null`.\n *\n * @example\n * ```tsx\n * const { data: publicKey } = usePublicKey();\n * // publicKey?.publicKeyId, publicKey?.publicKey\n * ```\n */\nexport function usePublicKey() {\n const sdk = useZamaSDK();\n return useQuery<PublicKeyData | null>(publicKeyQueryOptions(sdk));\n}\n","\"use client\";\n\nimport type { PublicParamsData } from \"@zama-fhe/sdk\";\nimport { useQuery } from \"../utils/query\";\nimport { publicParamsQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Fetch FHE public parameters for a given bit size from the relayer.\n * Cached indefinitely since parameters do not change during a session.\n *\n * @param bits - The FHE bit size to fetch parameters for (e.g. 2048).\n * @returns Query result with `data: PublicParamsData | null`.\n *\n * @example\n * ```tsx\n * const { data: params } = usePublicParams(2048);\n * // params?.publicParams, params?.publicParamsId\n * ```\n */\nexport function usePublicParams(bits: number) {\n const sdk = useZamaSDK();\n return useQuery<PublicParamsData | null>(publicParamsQueryOptions(sdk, bits));\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { allowMutationOptions, 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: allow, isPending } = useAllow();\n *\n * // Authorize decryption for any contracts with encrypted state:\n * // confidential tokens, auction contracts, governance contracts, etc.\n * await allow([tokenAddress, auctionAddress, governanceAddress]);\n * ```\n */\nexport function useAllow(options?: UseMutationOptions<void, Error, Address[]>) {\n const sdk = useZamaSDK();\n\n return useMutation<void, Error, Address[]>({\n ...allowMutationOptions(sdk),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n void context.client.invalidateQueries({\n queryKey: zamaQueryKeys.isAllowed.all,\n });\n },\n });\n}\n","\"use client\";\n\nimport { useQuery } from \"../utils/query\";\nimport { skipToken } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport {\n isAllowedQueryOptions,\n signerAddressQueryOptions,\n zamaQueryKeys,\n} from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/** Configuration for {@link useIsAllowed}. */\nexport interface UseIsAllowedConfig {\n /** Contract addresses to check credentials against (at least one required). */\n contractAddresses: [Address, ...Address[]];\n}\n\n/**\n * Check whether a session signature is cached for the connected wallet\n * and covers the given contract addresses.\n * Returns `true` if decrypt operations can proceed without a wallet prompt.\n *\n * @example\n * ```tsx\n * const { data: allowed } = useIsAllowed({ contractAddresses: [\"0xToken\"] });\n * ```\n */\nexport function useIsAllowed(config: UseIsAllowedConfig) {\n const sdk = useZamaSDK();\n const addressQuery = useQuery<Address>({\n ...signerAddressQueryOptions(sdk.signer),\n });\n const account = addressQuery.data;\n const baseOpts = account\n ? isAllowedQueryOptions(sdk, { account, contractAddresses: config.contractAddresses })\n : ({\n queryKey: zamaQueryKeys.isAllowed.all,\n queryFn: skipToken,\n enabled: false,\n } as const);\n\n return useQuery<boolean>(baseOpts);\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { revokeMutationOptions, zamaQueryKeys } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Revoke stored FHE decrypt credentials for a list of contract addresses.\n * This is not token-specific — it revokes the EIP-712 authorization for\n * any contract that uses FHE-encrypted values. The next decrypt operation\n * on these contracts will require a fresh wallet signature.\n *\n * @example\n * ```tsx\n * const { mutate: revoke } = useRevoke();\n *\n * // Revoke for any contracts: tokens, auctions, governance, etc.\n * revoke([tokenAddress, auctionAddress]);\n * ```\n */\nexport function useRevoke(options?: UseMutationOptions<void, Error, Address[]>) {\n const sdk = useZamaSDK();\n\n return useMutation<void, Error, Address[]>({\n ...revokeMutationOptions(sdk),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n context.client.removeQueries({ queryKey: zamaQueryKeys.isAllowed.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 { revokeSessionMutationOptions, zamaQueryKeys } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Revoke the session signature for the connected wallet without\n * specifying contract addresses. Useful for wallet disconnect handlers.\n *\n * @example\n * ```tsx\n * const { mutate: revokeSession } = useRevokeSession();\n * revokeSession();\n * ```\n */\nexport function useRevokeSession(options?: UseMutationOptions<void>) {\n const sdk = useZamaSDK();\n\n return useMutation<void>({\n ...revokeSessionMutationOptions(sdk),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n context.client.removeQueries({ queryKey: zamaQueryKeys.isAllowed.all });\n context.client.removeQueries({ queryKey: zamaQueryKeys.decryption.all });\n },\n });\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { useZamaSDK } from \"../provider\";\n\n/** Base configuration shared by all mutation hooks that need a Token instance. */\nexport interface UseZamaConfig {\n /** Address of the confidential token contract. */\n tokenAddress: Address;\n /** Address of the wrapper contract (required for shield/unshield operations). */\n wrapperAddress?: Address;\n}\n\n/**\n * Get a {@link Token} instance, memoized by address pair.\n * Reads signer and storage from the nearest {@link ZamaProvider}.\n *\n * @param config - Token and optional wrapper addresses.\n * @returns A memoized `Token` instance.\n *\n * @example\n * ```tsx\n * const token = useToken({ tokenAddress: \"0xToken\", wrapperAddress: \"0xWrapper\" });\n * ```\n */\nexport function useToken(config: UseZamaConfig) {\n const sdk = useZamaSDK();\n\n return useMemo(\n () => sdk.createToken(config.tokenAddress, config.wrapperAddress),\n [sdk, config.tokenAddress, config.wrapperAddress],\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Get a {@link ReadonlyToken} instance, memoized by address.\n * Supports balance queries, ERC-165 checks, and authorization — no wrapper needed.\n * Reads signer and storage from the nearest {@link ZamaProvider}.\n *\n * @param address - Address of the confidential token contract.\n * @returns A memoized `ReadonlyToken` instance.\n *\n * @example\n * ```tsx\n * const token = useReadonlyToken(\"0xToken\");\n * // token.balanceOf(), token.isConfidential(), etc.\n * ```\n */\nexport function useReadonlyToken(address: Address) {\n const sdk = useZamaSDK();\n\n return useMemo(() => sdk.createReadonlyToken(address), [sdk, address]);\n}\n","\"use client\";\n\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { confidentialBalanceQueryOptions, signerAddressQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useReadonlyToken } from \"../token/use-readonly-token\";\nimport { useQuery } from \"../utils/query\";\n\n/** Configuration for {@link useConfidentialBalance}. */\nexport interface UseConfidentialBalanceConfig {\n /** Address of the confidential token contract. */\n tokenAddress: Address;\n}\n\n/** Query options for {@link useConfidentialBalance}. */\nexport interface UseConfidentialBalanceOptions extends Omit<\n UseQueryOptions<bigint>,\n \"queryKey\" | \"queryFn\" | \"enabled\"\n> {\n /** Whether the query is enabled. Callback form is not supported in composite hooks. */\n enabled?: boolean;\n}\n\n/**\n * Declarative hook to read the connected wallet's confidential token balance.\n * Calls `token.balanceOf(owner)` which reads the on-chain handle and decrypts\n * via the SDK. Cached values are returned instantly — the relayer is only hit\n * when the handle changes.\n *\n * @param config - Token address 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: balance, isLoading } = useConfidentialBalance({\n * tokenAddress: \"0x...\",\n * });\n * ```\n */\nexport function useConfidentialBalance(\n config: UseConfidentialBalanceConfig,\n options?: UseConfidentialBalanceOptions,\n) {\n const { tokenAddress } = config;\n const { enabled = true } = options ?? {};\n const sdk = useZamaSDK();\n const token = useReadonlyToken(tokenAddress);\n\n const addressQuery = useQuery<Address>(signerAddressQueryOptions(sdk.signer));\n\n const owner = addressQuery.data;\n\n const baseOptions = confidentialBalanceQueryOptions(token, {\n tokenAddress,\n owner,\n });\n\n return useQuery<bigint>({\n ...baseOptions,\n ...options,\n enabled: 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, signerAddressQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/** Configuration for {@link useConfidentialBalances}. */\nexport interface UseConfidentialBalancesConfig {\n /** Addresses of the confidential token contracts to batch-query. */\n tokenAddresses: Address[];\n}\n\n/** Query options for {@link useConfidentialBalances}. */\nexport interface UseConfidentialBalancesOptions extends Omit<\n UseQueryOptions<BatchBalancesResult>,\n \"queryKey\" | \"queryFn\" | \"enabled\"\n> {\n /** Whether the query is enabled. Callback form is not supported in composite hooks. */\n enabled?: boolean;\n}\n\n/**\n * Declarative hook to read multiple confidential token balances in batch.\n * Calls `ReadonlyToken.batchBalancesOf()` which decrypts each token via the\n * SDK. Cached values are returned instantly — the relayer is only hit for\n * changed handles.\n *\n * Returns partial results when some tokens fail — successful balances are\n * always returned 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 * tokenAddresses: [\"0xTokenA\", \"0xTokenB\"],\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 { tokenAddresses } = config;\n const { enabled = true } = options ?? {};\n const sdk = useZamaSDK();\n\n const addressQuery = useQuery<Address>(signerAddressQueryOptions(sdk.signer));\n\n const owner = addressQuery.data;\n\n const tokens = useMemo(\n () => tokenAddresses.map((addr) => sdk.createReadonlyToken(addr)),\n [sdk, tokenAddresses],\n );\n\n const baseOptions = confidentialBalancesQueryOptions(tokens, {\n owner,\n });\n\n return useQuery<BatchBalancesResult>({\n ...baseOptions,\n ...options,\n enabled: (baseOptions.enabled ?? true) && 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 { 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, type UseZamaConfig } from \"../token/use-token\";\n\n/** Configuration for {@link useConfidentialTransfer}. */\nexport interface UseConfidentialTransferConfig extends UseZamaConfig {\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 * tokenAddress: \"0x...\",\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);\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: config.tokenAddress,\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, config.tokenAddress);\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, type UseZamaConfig } 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 config - Token address (and optional wrapper) identifying the token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const transferFrom = useConfidentialTransferFrom({ tokenAddress: \"0x...\" });\n * transferFrom.mutate({ from: \"0xOwner\", to: \"0xRecipient\", amount: 500n });\n * ```\n */\nexport function useConfidentialTransferFrom(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, ConfidentialTransferFromParams, Address>,\n) {\n const token = useToken(config);\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, config.tokenAddress);\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 confidentialApproveMutationOptions,\n invalidateAfterApprove,\n type ConfidentialApproveParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useToken, type UseZamaConfig } 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 config - Token address (and optional wrapper) identifying the token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const approve = useConfidentialApprove({ tokenAddress: \"0x...\" });\n * approve.mutate({ spender: \"0xOperator\" });\n * ```\n */\nexport function useConfidentialApprove(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, ConfidentialApproveParams, Address>,\n) {\n const token = useToken(config);\n\n return useMutation<TransactionResult, Error, ConfidentialApproveParams, Address>({\n ...confidentialApproveMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterApprove(context.client, config.tokenAddress);\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 { confidentialIsApprovedQueryOptions, signerAddressQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useToken, type UseZamaConfig } from \"../token/use-token\";\n\nexport { confidentialIsApprovedQueryOptions };\n\n/** Configuration for {@link useConfidentialIsApproved}. */\nexport interface UseConfidentialIsApprovedConfig {\n /** Address of the confidential token contract. Pass `undefined` to disable the query. */\n tokenAddress: Address | undefined;\n /** Address to check approval for. Pass `undefined` to disable the query. */\n spender: Address | undefined;\n /** Token holder address. Defaults to the connected wallet. */\n holder?: Address;\n}\n\n/** Configuration for {@link useConfidentialIsApprovedSuspense}. */\nexport interface UseConfidentialIsApprovedSuspenseConfig extends UseZamaConfig {\n /** Address to check approval for. */\n spender: Address;\n /** Token holder address. Defaults to the connected wallet. */\n holder?: Address;\n}\n\n/**\n * Check if a spender is an approved operator for a given holder (defaults to connected wallet).\n *\n * @param config - Token address, spender, and optional 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: isApproved } = useConfidentialIsApproved({\n * tokenAddress: \"0xToken\",\n * spender: \"0xSpender\",\n * holder: \"0xHolder\", // optional\n * });\n * ```\n */\nexport function useConfidentialIsApproved(\n config: UseConfidentialIsApprovedConfig,\n options?: Omit<UseQueryOptions<boolean>, \"queryKey\" | \"queryFn\">,\n) {\n const { tokenAddress, spender, holder } = config;\n const sdk = useZamaSDK();\n const holderQuery = useQuery<Address>({\n ...signerAddressQueryOptions(sdk.signer),\n enabled: tokenAddress !== undefined && spender !== undefined && holder === undefined,\n });\n const resolvedHolder = holder ?? holderQuery.data;\n const baseOpts = confidentialIsApprovedQueryOptions(sdk.signer, tokenAddress, {\n holder: resolvedHolder,\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 useConfidentialIsApproved}.\n * Suspends rendering until the approval check resolves.\n *\n * @param config - Token address, spender, and optional holder to check.\n * @returns Suspense query result with `data: boolean`.\n *\n * @example\n * ```tsx\n * const { data: isApproved } = useConfidentialIsApprovedSuspense({\n * tokenAddress: \"0xToken\",\n * spender: \"0xSpender\",\n * holder: \"0xHolder\", // optional\n * });\n * ```\n */\nexport function useConfidentialIsApprovedSuspense(config: UseConfidentialIsApprovedSuspenseConfig) {\n const { spender, holder, ...tokenConfig } = config;\n const sdk = useZamaSDK();\n const token = useToken(tokenConfig);\n const addressQuery = useSuspenseQuery<Address>(signerAddressQueryOptions(sdk.signer));\n const resolvedHolder = holder ?? addressQuery.data;\n\n return useSuspenseQuery<boolean>(\n confidentialIsApprovedQueryOptions(sdk.signer, token.address, {\n holder: resolvedHolder,\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 { TransactionResult } from \"@zama-fhe/sdk\";\nimport { shieldMutationOptions, type ShieldParams } from \"@zama-fhe/sdk/query\";\nimport { optimisticBalanceCallbacks } from \"../balance/optimistic-balance-update\";\nimport { useToken, type UseZamaConfig } from \"../token/use-token\";\n\n/** Configuration for {@link useShield}. */\nexport interface UseShieldConfig extends UseZamaConfig {\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 ApprovalFailedError} — ERC-20 approval transaction failed\n * - {@link TransactionRevertedError} — shield transaction reverted\n *\n * @param config - Token and wrapper addresses.\n * Set `optimistic: true` to add the amount to the cached balance immediately.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const shield = useShield({ tokenAddress: \"0x...\", wrapperAddress: \"0x...\", 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 = useToken(config);\n const queryClient = useQueryClient();\n\n return useMutation({\n ...shieldMutationOptions(token),\n ...options,\n ...optimisticBalanceCallbacks({\n optimistic: config.optimistic,\n tokenAddress: config.tokenAddress,\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token address (and optional wrapper) identifying the token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unwrap = useUnwrap({ tokenAddress: \"0x...\" });\n * unwrap.mutate({ amount: 500n });\n * ```\n */\nexport function useUnwrap(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, UnwrapParams, Address>,\n) {\n const token = useToken(config);\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, config.tokenAddress);\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token address (and optional wrapper) identifying the token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unwrapAll = useUnwrapAll({ tokenAddress: \"0x...\" });\n * unwrapAll.mutate();\n * ```\n */\nexport function useUnwrapAll(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, void, Address>,\n) {\n const token = useToken(config);\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, config.tokenAddress);\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token address (and optional wrapper) identifying the token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const finalize = useFinalizeUnwrap({ tokenAddress: \"0x...\" });\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 config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, FinalizeUnwrapParams, Address>,\n) {\n const token = useToken(config);\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, config.tokenAddress);\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token and wrapper addresses.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unshield = useUnshield({ tokenAddress: \"0x...\", wrapperAddress: \"0x...\" });\n * unshield.mutate({ amount: 500n });\n * ```\n */\nexport function useUnshield(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, UnshieldParams, Address>,\n) {\n const token = useToken(config);\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, config.tokenAddress);\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token and wrapper addresses.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unshieldAll = useUnshieldAll({ tokenAddress: \"0x...\", wrapperAddress: \"0x...\" });\n * unshieldAll.mutate();\n * ```\n */\nexport function useUnshieldAll(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, UnshieldAllParams | void, Address>,\n) {\n const token = useToken(config);\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, config.tokenAddress);\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token and wrapper addresses.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const resumeUnshield = useResumeUnshield({ tokenAddress: \"0x...\", wrapperAddress: \"0x...\" });\n * resumeUnshield.mutate({ unwrapTxHash: \"0xabc...\" });\n * ```\n */\nexport function useResumeUnshield(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, ResumeUnshieldParams, Address>,\n) {\n const token = useToken(config);\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, config.tokenAddress);\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 { signerAddressQueryOptions, underlyingAllowanceQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\nexport { underlyingAllowanceQueryOptions };\n\n/** Configuration for {@link useUnderlyingAllowance}. */\nexport interface UseUnderlyingAllowanceConfig {\n /** Address of the confidential token contract used to scope the query cache. */\n tokenAddress: Address;\n /** Address of the wrapper contract whose underlying ERC-20 allowance is checked. */\n wrapperAddress: Address;\n}\n\n/**\n * Read the underlying ERC-20 allowance granted to the wrapper contract.\n * Useful to check if an approval is needed before shielding.\n *\n * @param config - Token and wrapper addresses.\n * @param options - React Query options (forwarded to `useQuery`).\n * @returns Query result with `data: bigint` (current allowance).\n *\n * @example\n * ```tsx\n * const { data: allowance } = useUnderlyingAllowance({\n * tokenAddress: \"0xConfidentialToken\",\n * wrapperAddress: \"0xWrapper\",\n * });\n * ```\n */\nexport function useUnderlyingAllowance(\n config: UseUnderlyingAllowanceConfig,\n options?: Omit<UseQueryOptions<bigint>, \"queryKey\" | \"queryFn\">,\n) {\n const { tokenAddress, wrapperAddress } = config;\n const sdk = useZamaSDK();\n const addressQuery = useQuery<Address>(signerAddressQueryOptions(sdk.signer));\n const owner = addressQuery.data;\n\n const baseOpts = underlyingAllowanceQueryOptions(sdk.signer, tokenAddress, {\n owner,\n wrapperAddress,\n });\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}.\n * Suspends rendering until the allowance is loaded.\n *\n * @param config - Token and wrapper addresses.\n * @returns Suspense query result with `data: bigint`.\n *\n * @example\n * ```tsx\n * const { data: allowance } = useUnderlyingAllowanceSuspense({\n * tokenAddress: \"0xConfidentialToken\",\n * wrapperAddress: \"0xWrapper\",\n * });\n * ```\n */\nexport function useUnderlyingAllowanceSuspense(config: UseUnderlyingAllowanceConfig) {\n const { tokenAddress, wrapperAddress } = config;\n const sdk = useZamaSDK();\n const addressQuery = useSuspenseQuery<Address>(signerAddressQueryOptions(sdk.signer));\n const owner = addressQuery.data;\n\n return useSuspenseQuery<bigint>(\n underlyingAllowanceQueryOptions(sdk.signer, tokenAddress, {\n owner,\n wrapperAddress,\n }),\n );\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 merged registry addresses from `sdk.registry` (built-in defaults\n * plus any `registryAddresses` overrides passed to `ZamaSDKConfig`).\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.signer.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.signer, 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.signer, tokenAddress));\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n delegateDecryptionMutationOptions,\n zamaQueryKeys,\n type DelegateDecryptionParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useToken, type UseZamaConfig } from \"../token/use-token\";\n\n/**\n * Delegate FHE decryption rights for a token to another address via the on-chain ACL.\n *\n * @param config - Token address identifying the confidential token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const delegate = useDelegateDecryption({ tokenAddress: \"0x...\" });\n * delegate.mutate({ delegateAddress: \"0xDelegate\" });\n * ```\n */\nexport function useDelegateDecryption(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, DelegateDecryptionParams>,\n) {\n const token = useToken(config);\n\n return useMutation<TransactionResult, Error, DelegateDecryptionParams>({\n ...delegateDecryptionMutationOptions(token),\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 { TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n revokeDelegationMutationOptions,\n zamaQueryKeys,\n type RevokeDelegationParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useToken, type UseZamaConfig } from \"../token/use-token\";\n\n/**\n * Revoke FHE decryption delegation for a token from a delegate address.\n *\n * @param config - Token address identifying the confidential token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const revoke = useRevokeDelegation({ tokenAddress: \"0x...\" });\n * revoke.mutate({ delegateAddress: \"0xDelegate\" });\n * ```\n */\nexport function useRevokeDelegation(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, RevokeDelegationParams>,\n) {\n const token = useToken(config);\n\n return useMutation<TransactionResult, Error, RevokeDelegationParams>({\n ...revokeDelegationMutationOptions(token),\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 token contract. Pass `undefined` to disable the query. */\n tokenAddress: 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 `{ isDelegated, expiryTimestamp, isLoading, error }`.\n *\n * @example\n * ```tsx\n * const { data } = useDelegationStatus({\n * tokenAddress: \"0xToken\",\n * delegatorAddress: \"0xDelegator\",\n * delegateAddress: \"0xDelegate\",\n * });\n * // data?.isDelegated, 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 { useReadonlyToken } from \"../token/use-readonly-token\";\n\n/**\n * Decrypt another user's confidential balance as a delegate.\n *\n * @param tokenAddress - 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 tokenAddress: Address,\n options?: UseMutationOptions<bigint, Error, DecryptBalanceAsParams>,\n) {\n const readonlyToken = useReadonlyToken(tokenAddress);\n\n return useMutation<bigint, Error, DecryptBalanceAsParams>({\n ...decryptBalanceAsMutationOptions(readonlyToken),\n ...options,\n });\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address, ReadonlyToken } 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 - ReadonlyToken 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: ReadonlyToken[],\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token and wrapper addresses.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const approve = useApproveUnderlying({ tokenAddress: \"0x...\", wrapperAddress: \"0x...\" });\n * approve.mutate({}); // max approval\n * approve.mutate({ amount: 1000n }); // exact amount\n * ```\n */\nexport function useApproveUnderlying(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, ApproveUnderlyingParams, Address>,\n) {\n const token = useToken(config);\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, config.tokenAddress);\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.signer, 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.signer, 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.signer, 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.signer, 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.signer, 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.signer, 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.signer, {\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.signer, {\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.signer, {\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.signer, {\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.signer, {\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.signer, {\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.signer, {\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","useSuspenseQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","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/utils/query.ts","../src/use-signer-address.ts","../src/relayer/use-encrypt.ts","../src/relayer/use-user-decrypt.ts","../src/relayer/use-public-decrypt.ts","../src/relayer/use-generate-keypair.ts","../src/relayer/use-create-eip712.ts","../src/relayer/use-create-delegated-user-decrypt-eip712.ts","../src/relayer/use-delegated-user-decrypt.ts","../src/relayer/use-request-zk-proof-verification.ts","../src/relayer/use-public-key.ts","../src/relayer/use-public-params.ts","../src/authorization/use-allow.ts","../src/authorization/use-is-allowed.ts","../src/authorization/use-revoke.ts","../src/authorization/use-revoke-session.ts","../src/token/use-token.ts","../src/token/use-readonly-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/transfer/use-confidential-approve.ts","../src/transfer/use-confidential-is-approved.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/delegation/use-delegate-decryption.ts","../src/delegation/use-revoke-delegation.ts","../src/delegation/use-delegation-status.ts","../src/delegation/use-decrypt-balance-as.ts","../src/delegation/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 {\n Address,\n GenericProvider,\n GenericSigner,\n GenericStorage,\n RelayerSDK,\n ZamaSDKEventListener,\n} 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 /** FHE relayer backend (RelayerWeb for browser, RelayerNode for server). */\n relayer: RelayerSDK;\n /**\n * Chain provider (`ViemProvider`, `EthersProvider`, `WagmiProvider`, or\n * custom {@link GenericProvider}). Used for every public chain read.\n */\n provider: GenericProvider;\n /**\n * Wallet signer (`ViemSigner`, `EthersSigner`, `WagmiSigner`, or custom\n * {@link GenericSigner}).\n */\n signer: GenericSigner;\n /** Credential storage backend (IndexedDBStorage for browser, MemoryStorage for tests). */\n storage: GenericStorage;\n /**\n * Session storage for wallet signatures. Defaults to in-memory (lost on reload).\n * Pass a `chrome.storage.session`-backed store for web extensions.\n */\n sessionStorage?: GenericStorage;\n /**\n * How long the ML-KEM re-encryption keypair remains valid, in seconds.\n * Default: `86400` (1 day). Must be positive — `0` is rejected.\n */\n keypairTTL?: number;\n /**\n * Controls how long session signatures (EIP-712 wallet signatures) remain valid, in seconds.\n * Default: `2592000` (30 days).\n * - `0`: never persist — every operation triggers a signing prompt (high-security mode).\n * - Positive number: seconds until the session signature expires and requires re-authentication.\n */\n sessionTTL?: number;\n /**\n * Per-chain wrappers registry address overrides, merged on top of built-in defaults.\n * Use this for custom or local chains (e.g. Hardhat) where no default registry exists.\n */\n registryAddresses?: Record<number, Address>;\n /**\n * How long cached registry results remain valid, in seconds.\n * Default: `86400` (24 hours).\n */\n registryTTL?: number;\n /** Callback invoked on SDK lifecycle events. */\n onEvent?: ZamaSDKEventListener;\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 relayer={relayer} provider={provider} signer={signer} storage={storage}>\n * <App />\n * </ZamaProvider>\n * ```\n */\nexport function ZamaProvider({\n children,\n relayer,\n provider,\n signer,\n storage,\n sessionStorage,\n keypairTTL,\n sessionTTL,\n registryAddresses,\n registryTTL,\n onEvent,\n}: ZamaProviderProps) {\n const queryClient = useQueryClient();\n\n // Stabilize onEvent so an inline arrow doesn't recreate the SDK every render.\n const onEventRef = useRef(onEvent);\n\n useEffect(() => {\n onEventRef.current = onEvent;\n });\n\n const signerLifecycleCallbacks = useMemo(\n () =>\n signer?.subscribe\n ? {\n onDisconnect: () => invalidateWalletLifecycleQueries(queryClient),\n onAccountChange: () => invalidateWalletLifecycleQueries(queryClient),\n onChainChange: () => invalidateWalletLifecycleQueries(queryClient),\n }\n : undefined,\n [queryClient, signer],\n );\n\n const sdk = useMemo(\n () =>\n new ZamaSDK({\n relayer,\n provider,\n signer,\n storage,\n sessionStorage,\n keypairTTL,\n sessionTTL,\n registryAddresses,\n registryTTL,\n onEvent: onEventRef.current,\n signerLifecycleCallbacks,\n }),\n [\n relayer,\n provider,\n signer,\n storage,\n sessionStorage,\n keypairTTL,\n sessionTTL,\n registryAddresses,\n registryTTL,\n signerLifecycleCallbacks,\n ],\n );\n\n // Clean up signer subscriptions on unmount without terminating the\n // caller-owned relayer. dispose() only unsubscribes from wallet events\n // and 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...\", \"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 relayer={…} provider={…} signer={…} storage={…}>.\",\n );\n }\n return context;\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 type { UseQueryResult } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { signerAddressQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useQuery, useSuspenseQuery } from \"./utils/query\";\nimport { useZamaSDK } from \"./provider\";\n\n/**\n * Read the connected signer address.\n *\n * @example\n * ```tsx\n * const { data: address, isPending, isError } = useSignerAddress();\n * ```\n */\nexport function useSignerAddress(): UseQueryResult<Address> {\n const sdk = useZamaSDK();\n return useQuery<Address>(signerAddressQueryOptions(sdk.signer));\n}\n\n/**\n * Suspense variant of {@link useSignerAddress}.\n * Suspends rendering until the signer address resolves.\n *\n * @example\n * ```tsx\n * const { data: address } = useSignerAddressSuspense();\n * ```\n */\nexport function useSignerAddressSuspense() {\n const sdk = useZamaSDK();\n return useSuspenseQuery<Address>(signerAddressQueryOptions(sdk.signer));\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","\"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\";\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 queryOpts = userDecryptQueryOptions(sdk, config);\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 { useMutation } from \"@tanstack/react-query\";\nimport { generateKeypairMutationOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Generate an FHE keypair via the relayer.\n * Returns a public/private key pair for use in decrypt authorization.\n *\n * Errors are {@link ZamaError} subclasses — use `instanceof` to handle specific failures:\n * - {@link RelayerRequestFailedError} — relayer keypair generation request failed\n *\n * @returns A mutation whose `mutate` takes no parameters.\n *\n * @example\n * ```tsx\n * const generateKeypair = useGenerateKeypair();\n * generateKeypair.mutate();\n * // generateKeypair.data?.publicKey, generateKeypair.data?.privateKey\n * ```\n */\nexport function useGenerateKeypair() {\n const sdk = useZamaSDK();\n return useMutation(generateKeypairMutationOptions(sdk));\n}\n","\"use client\";\n\nimport type { EIP712TypedData } from \"@zama-fhe/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { createEIP712MutationOptions } from \"@zama-fhe/sdk/query\";\nimport type { CreateEIP712Params } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Create EIP-712 typed data for signing an FHE decrypt credential.\n * The returned typed data is signed by the wallet to authorize decryption.\n *\n * @returns A mutation whose `mutate` accepts {@link CreateEIP712Params}.\n *\n * @example\n * ```tsx\n * const createEIP712 = useCreateEIP712();\n * createEIP712.mutate({\n * publicKey: keypair.publicKey,\n * contractAddresses: [\"0xToken\"],\n * startTimestamp: Math.floor(Date.now() / 1000),\n * });\n * ```\n */\nexport function useCreateEIP712() {\n const sdk = useZamaSDK();\n return useMutation<EIP712TypedData, Error, CreateEIP712Params>(createEIP712MutationOptions(sdk));\n}\n","\"use client\";\n\nimport type { KmsDelegatedUserDecryptEIP712Type } from \"@zama-fhe/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { createDelegatedUserDecryptEIP712MutationOptions } from \"@zama-fhe/sdk/query\";\nimport type { CreateDelegatedUserDecryptEIP712Params } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Create EIP-712 typed data for a delegated user decrypt credential.\n * Used when one wallet authorizes another to decrypt on its behalf.\n *\n * @returns A mutation whose `mutate` accepts {@link CreateDelegatedUserDecryptEIP712Params}.\n *\n * @example\n * ```tsx\n * const createEIP712 = useCreateDelegatedUserDecryptEIP712();\n * createEIP712.mutate({\n * publicKey: keypair.publicKey,\n * contractAddresses: [\"0xToken\"],\n * delegatorAddress: \"0xDelegator\",\n * startTimestamp: Math.floor(Date.now() / 1000),\n * });\n * ```\n */\nexport function useCreateDelegatedUserDecryptEIP712() {\n const sdk = useZamaSDK();\n return useMutation<\n KmsDelegatedUserDecryptEIP712Type,\n Error,\n CreateDelegatedUserDecryptEIP712Params\n >(createDelegatedUserDecryptEIP712MutationOptions(sdk));\n}\n","\"use client\";\n\nimport type { DelegatedUserDecryptParams, ClearValueType, Handle } from \"@zama-fhe/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { delegatedUserDecryptMutationOptions } 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 DelegatedUserDecryptParams}.\n *\n * @example\n * ```tsx\n * const decrypt = useDelegatedUserDecrypt();\n * decrypt.mutate({ handles: [\"0xHandle1\"], ...credentials });\n * // decrypt.data => { \"0xHandle1\": 1000n }\n * ```\n */\nexport function useDelegatedUserDecrypt() {\n const sdk = useZamaSDK();\n return useMutation<Record<Handle, ClearValueType>, Error, DelegatedUserDecryptParams>(\n delegatedUserDecryptMutationOptions(sdk),\n );\n}\n","\"use client\";\n\nimport type { InputProofBytesType, ZKProofLike } from \"@zama-fhe/sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { requestZKProofVerificationMutationOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Submit a ZK proof for on-chain verification.\n * Returns the input proof bytes for use in contract calls.\n *\n * @returns A mutation whose `mutate` accepts a {@link ZKProofLike}.\n *\n * @example\n * ```tsx\n * const verify = useRequestZKProofVerification();\n * verify.mutate(zkProof);\n * // verify.data => Uint8Array (input proof bytes)\n * ```\n */\nexport function useRequestZKProofVerification() {\n const sdk = useZamaSDK();\n return useMutation<InputProofBytesType, Error, ZKProofLike>(\n requestZKProofVerificationMutationOptions(sdk),\n );\n}\n","\"use client\";\n\nimport type { PublicKeyData } from \"@zama-fhe/sdk\";\nimport { useQuery } from \"../utils/query\";\nimport { publicKeyQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Fetch the FHE network public key from the relayer.\n * Cached indefinitely since the key does not change during a session.\n *\n * @returns Query result with `data: PublicKeyData | null`.\n *\n * @example\n * ```tsx\n * const { data: publicKey } = usePublicKey();\n * // publicKey?.publicKeyId, publicKey?.publicKey\n * ```\n */\nexport function usePublicKey() {\n const sdk = useZamaSDK();\n return useQuery<PublicKeyData | null>(publicKeyQueryOptions(sdk));\n}\n","\"use client\";\n\nimport type { PublicParamsData } from \"@zama-fhe/sdk\";\nimport { useQuery } from \"../utils/query\";\nimport { publicParamsQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Fetch FHE public parameters for a given bit size from the relayer.\n * Cached indefinitely since parameters do not change during a session.\n *\n * @param bits - The FHE bit size to fetch parameters for (e.g. 2048).\n * @returns Query result with `data: PublicParamsData | null`.\n *\n * @example\n * ```tsx\n * const { data: params } = usePublicParams(2048);\n * // params?.publicParams, params?.publicParamsId\n * ```\n */\nexport function usePublicParams(bits: number) {\n const sdk = useZamaSDK();\n return useQuery<PublicParamsData | null>(publicParamsQueryOptions(sdk, bits));\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { allowMutationOptions, 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: allow, isPending } = useAllow();\n *\n * // Authorize decryption for any contracts with encrypted state:\n * // confidential tokens, auction contracts, governance contracts, etc.\n * await allow([tokenAddress, auctionAddress, governanceAddress]);\n * ```\n */\nexport function useAllow(options?: UseMutationOptions<void, Error, Address[]>) {\n const sdk = useZamaSDK();\n\n return useMutation<void, Error, Address[]>({\n ...allowMutationOptions(sdk),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n void context.client.invalidateQueries({\n queryKey: zamaQueryKeys.isAllowed.all,\n });\n },\n });\n}\n","\"use client\";\n\nimport { useQuery } from \"../utils/query\";\nimport { skipToken } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { isAllowedQueryOptions, zamaQueryKeys } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\nimport { useSignerAddress } from \"../use-signer-address\";\n\n/** Configuration for {@link useIsAllowed}. */\nexport interface UseIsAllowedConfig {\n /** Contract addresses to check credentials against (at least one required). */\n contractAddresses: [Address, ...Address[]];\n}\n\n/**\n * Check whether a session signature is cached for the connected wallet\n * and covers the given contract addresses.\n * Returns `true` if decrypt operations can proceed without a wallet prompt.\n *\n * @example\n * ```tsx\n * const { data: allowed } = useIsAllowed({ contractAddresses: [\"0xToken\"] });\n * ```\n */\nexport function useIsAllowed(config: UseIsAllowedConfig) {\n const sdk = useZamaSDK();\n const { data: account } = useSignerAddress();\n const baseOpts = account\n ? isAllowedQueryOptions(sdk, { account, contractAddresses: config.contractAddresses })\n : ({\n queryKey: zamaQueryKeys.isAllowed.all,\n queryFn: skipToken,\n enabled: false,\n } as const);\n\n return useQuery<boolean>(baseOpts);\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { revokeMutationOptions, zamaQueryKeys } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Revoke stored FHE decrypt credentials for a list of contract addresses.\n * This is not token-specific — it revokes the EIP-712 authorization for\n * any contract that uses FHE-encrypted values. The next decrypt operation\n * on these contracts will require a fresh wallet signature.\n *\n * @example\n * ```tsx\n * const { mutate: revoke } = useRevoke();\n *\n * // Revoke for any contracts: tokens, auctions, governance, etc.\n * revoke([tokenAddress, auctionAddress]);\n * ```\n */\nexport function useRevoke(options?: UseMutationOptions<void, Error, Address[]>) {\n const sdk = useZamaSDK();\n\n return useMutation<void, Error, Address[]>({\n ...revokeMutationOptions(sdk),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n context.client.removeQueries({ queryKey: zamaQueryKeys.isAllowed.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 { revokeSessionMutationOptions, zamaQueryKeys } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Revoke the session signature for the connected wallet without\n * specifying contract addresses. Useful for wallet disconnect handlers.\n *\n * @example\n * ```tsx\n * const { mutate: revokeSession } = useRevokeSession();\n * revokeSession();\n * ```\n */\nexport function useRevokeSession(options?: UseMutationOptions<void>) {\n const sdk = useZamaSDK();\n\n return useMutation<void>({\n ...revokeSessionMutationOptions(sdk),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n context.client.removeQueries({ queryKey: zamaQueryKeys.isAllowed.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/** Base configuration shared by all mutation hooks that need a Token instance. */\nexport interface UseZamaConfig {\n /** Address of the confidential token contract. */\n tokenAddress: Address;\n /** Address of the wrapper contract (required for shield/unshield operations). */\n wrapperAddress?: Address;\n}\n\n/**\n * Get a {@link Token} instance, memoized by address pair.\n *\n * @param config - Token and optional wrapper addresses.\n * @returns A memoized `Token` instance.\n *\n * @example\n * ```tsx\n * const token = useToken({ tokenAddress: \"0xToken\", wrapperAddress: \"0xWrapper\" });\n * ```\n */\nexport function useToken(config: UseZamaConfig): Token {\n const sdk = useZamaSDK();\n\n return useMemo<Token>(\n () => sdk.createToken(config.tokenAddress, config.wrapperAddress),\n [sdk, config.tokenAddress, config.wrapperAddress],\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { Address } from \"@zama-fhe/sdk\";\nimport { useZamaSDK } from \"../provider\";\n\n/**\n * Get a {@link ReadonlyToken} instance, memoized by address.\n * Supports balance queries, ERC-165 checks, and authorization — no wrapper needed.\n * Reads signer and storage from the nearest {@link ZamaProvider}.\n *\n * @param address - Address of the confidential token contract.\n * @returns A memoized `ReadonlyToken` instance.\n *\n * @example\n * ```tsx\n * const token = useReadonlyToken(\"0xToken\");\n * // token.balanceOf(), token.isConfidential(), etc.\n * ```\n */\nexport function useReadonlyToken(address: Address) {\n const sdk = useZamaSDK();\n\n return useMemo(() => sdk.createReadonlyToken(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 { useReadonlyToken } from \"../token/use-readonly-token\";\nimport { useQuery } from \"../utils/query\";\n\nexport interface UseConfidentialBalanceConfig {\n /** Address of the confidential token contract. */\n tokenAddress: 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 * tokenAddress: \"0xToken\",\n * account: \"0xAccount\",\n * });\n * ```\n */\nexport function useConfidentialBalance(\n config: UseConfidentialBalanceConfig,\n options?: UseConfidentialBalanceOptions,\n) {\n const { tokenAddress, account } = config;\n const { enabled = true } = options ?? {};\n const token = useReadonlyToken(tokenAddress);\n\n const baseOptions = confidentialBalanceQueryOptions(token, {\n tokenAddress,\n account,\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\";\n\nexport interface UseConfidentialBalancesConfig {\n /** Addresses of the confidential token contracts to batch-query. The query is disabled while empty. */\n tokenAddresses: 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 * @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 * tokenAddresses: [\"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 { tokenAddresses, account } = config;\n const { enabled = true } = options ?? {};\n const sdk = useZamaSDK();\n\n const tokens = useMemo(\n () => tokenAddresses.map((addr) => sdk.createReadonlyToken(addr)),\n [sdk, tokenAddresses],\n );\n\n const baseOptions = confidentialBalancesQueryOptions(tokens, {\n account,\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 { 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, type UseZamaConfig } from \"../token/use-token\";\n\n/** Configuration for {@link useConfidentialTransfer}. */\nexport interface UseConfidentialTransferConfig extends UseZamaConfig {\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 * tokenAddress: \"0x...\",\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);\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, type UseZamaConfig } 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 config - Token address (and optional wrapper) identifying the token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const transferFrom = useConfidentialTransferFrom({ tokenAddress: \"0x...\" });\n * transferFrom.mutate({ from: \"0xOwner\", to: \"0xRecipient\", amount: 500n });\n * ```\n */\nexport function useConfidentialTransferFrom(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, ConfidentialTransferFromParams, Address>,\n) {\n const token = useToken(config);\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 confidentialApproveMutationOptions,\n invalidateAfterApprove,\n type ConfidentialApproveParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useToken, type UseZamaConfig } 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 config - Token address (and optional wrapper) identifying the token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const approve = useConfidentialApprove({ tokenAddress: \"0x...\" });\n * approve.mutate({ spender: \"0xOperator\" });\n * ```\n */\nexport function useConfidentialApprove(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, ConfidentialApproveParams, Address>,\n) {\n const token = useToken(config);\n\n return useMutation<TransactionResult, Error, ConfidentialApproveParams, Address>({\n ...confidentialApproveMutationOptions(token),\n ...options,\n onSuccess: (data, variables, onMutateResult, context) => {\n options?.onSuccess?.(data, variables, onMutateResult, context);\n invalidateAfterApprove(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 { confidentialIsApprovedQueryOptions } from \"@zama-fhe/sdk/query\";\nimport { useZamaSDK } from \"../provider\";\n\nexport { confidentialIsApprovedQueryOptions };\n\nexport interface UseConfidentialIsApprovedConfig {\n /** Address of the confidential token contract. The query is disabled while `undefined`. */\n tokenAddress: Address | undefined;\n /** Address to check approval 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 UseConfidentialIsApprovedSuspenseConfig {\n /** Address of the confidential token contract. */\n tokenAddress: Address;\n /** Address to check approval 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 * @param config - Token address, spender, and optional 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: isApproved } = useConfidentialIsApproved({\n * tokenAddress: \"0xToken\",\n * spender: \"0xSpender\",\n * holder: \"0xHolder\",\n * });\n * ```\n */\nexport function useConfidentialIsApproved(\n config: UseConfidentialIsApprovedConfig,\n options?: Omit<UseQueryOptions<boolean>, \"queryKey\" | \"queryFn\">,\n) {\n const { tokenAddress, spender, holder } = config;\n const sdk = useZamaSDK();\n const baseOpts = confidentialIsApprovedQueryOptions(sdk, tokenAddress, {\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 useConfidentialIsApproved}. Suspends rendering\n * until the approval check resolves.\n *\n * @example\n * ```tsx\n * const { data: isApproved } = useConfidentialIsApprovedSuspense({\n * tokenAddress: \"0xToken\",\n * spender: \"0xSpender\",\n * holder: \"0xHolder\",\n * });\n * ```\n */\nexport function useConfidentialIsApprovedSuspense(config: UseConfidentialIsApprovedSuspenseConfig) {\n const { spender, holder, tokenAddress } = config;\n const sdk = useZamaSDK();\n\n return useSuspenseQuery<boolean>(\n confidentialIsApprovedQueryOptions(sdk, tokenAddress, {\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 { TransactionResult } from \"@zama-fhe/sdk\";\nimport { shieldMutationOptions, type ShieldParams } from \"@zama-fhe/sdk/query\";\nimport { optimisticBalanceCallbacks } from \"../balance/optimistic-balance-update\";\nimport { useToken, type UseZamaConfig } from \"../token/use-token\";\n\n/** Configuration for {@link useShield}. */\nexport interface UseShieldConfig extends UseZamaConfig {\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 ApprovalFailedError} — ERC-20 approval transaction failed\n * - {@link TransactionRevertedError} — shield transaction reverted\n *\n * @param config - Token and wrapper addresses.\n * Set `optimistic: true` to add the amount to the cached balance immediately.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const shield = useShield({ tokenAddress: \"0x...\", wrapperAddress: \"0x...\", 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 = useToken(config);\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token address (and optional wrapper) identifying the token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unwrap = useUnwrap({ tokenAddress: \"0x...\" });\n * unwrap.mutate({ amount: 500n });\n * ```\n */\nexport function useUnwrap(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, UnwrapParams, Address>,\n) {\n const token = useToken(config);\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token address (and optional wrapper) identifying the token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unwrapAll = useUnwrapAll({ tokenAddress: \"0x...\" });\n * unwrapAll.mutate();\n * ```\n */\nexport function useUnwrapAll(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, void, Address>,\n) {\n const token = useToken(config);\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token address (and optional wrapper) identifying the token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const finalize = useFinalizeUnwrap({ tokenAddress: \"0x...\" });\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 config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, FinalizeUnwrapParams, Address>,\n) {\n const token = useToken(config);\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token and wrapper addresses.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unshield = useUnshield({ tokenAddress: \"0x...\", wrapperAddress: \"0x...\" });\n * unshield.mutate({ amount: 500n });\n * ```\n */\nexport function useUnshield(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, UnshieldParams, Address>,\n) {\n const token = useToken(config);\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token and wrapper addresses.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const unshieldAll = useUnshieldAll({ tokenAddress: \"0x...\", wrapperAddress: \"0x...\" });\n * unshieldAll.mutate();\n * ```\n */\nexport function useUnshieldAll(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, UnshieldAllParams | void, Address>,\n) {\n const token = useToken(config);\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token and wrapper addresses.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const resumeUnshield = useResumeUnshield({ tokenAddress: \"0x...\", wrapperAddress: \"0x...\" });\n * resumeUnshield.mutate({ unwrapTxHash: \"0xabc...\" });\n * ```\n */\nexport function useResumeUnshield(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, ResumeUnshieldParams, Address>,\n) {\n const token = useToken(config);\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 token contract used to scope the query cache. */\n tokenAddress: Address;\n /** Address of the wrapper contract whose underlying ERC-20 allowance is checked. */\n wrapperAddress: 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 token contract used to scope the query cache. */\n tokenAddress: Address;\n /** Address of the wrapper contract whose underlying ERC-20 allowance is checked. */\n wrapperAddress: 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 * tokenAddress: \"0xConfidentialToken\",\n * wrapperAddress: \"0xWrapper\",\n * owner: \"0xOwner\",\n * });\n * ```\n */\nexport function useUnderlyingAllowance(\n config: UseUnderlyingAllowanceConfig,\n options?: Omit<UseQueryOptions<bigint>, \"queryKey\" | \"queryFn\">,\n) {\n const { tokenAddress, wrapperAddress, owner } = config;\n const sdk = useZamaSDK();\n\n const baseOpts = underlyingAllowanceQueryOptions(sdk, tokenAddress, {\n owner,\n wrapperAddress,\n });\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 * tokenAddress: \"0xConfidentialToken\",\n * wrapperAddress: \"0xWrapper\",\n * owner: \"0xOwner\",\n * });\n * ```\n */\nexport function useUnderlyingAllowanceSuspense(config: UseUnderlyingAllowanceSuspenseConfig) {\n const { tokenAddress, wrapperAddress, owner } = config;\n const sdk = useZamaSDK();\n\n return useSuspenseQuery<bigint>(\n underlyingAllowanceQueryOptions(sdk, tokenAddress, {\n owner,\n wrapperAddress,\n }),\n );\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 merged registry addresses from `sdk.registry` (built-in defaults\n * plus any `registryAddresses` overrides passed to `ZamaSDKConfig`).\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 { TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n delegateDecryptionMutationOptions,\n zamaQueryKeys,\n type DelegateDecryptionParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useToken, type UseZamaConfig } from \"../token/use-token\";\n\n/**\n * Delegate FHE decryption rights for a token to another address via the on-chain ACL.\n *\n * @param config - Token address identifying the confidential token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const delegate = useDelegateDecryption({ tokenAddress: \"0x...\" });\n * delegate.mutate({ delegateAddress: \"0xDelegate\" });\n * ```\n */\nexport function useDelegateDecryption(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, DelegateDecryptionParams>,\n) {\n const token = useToken(config);\n\n return useMutation<TransactionResult, Error, DelegateDecryptionParams>({\n ...delegateDecryptionMutationOptions(token),\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 { TransactionResult } from \"@zama-fhe/sdk\";\nimport {\n revokeDelegationMutationOptions,\n zamaQueryKeys,\n type RevokeDelegationParams,\n} from \"@zama-fhe/sdk/query\";\nimport { useToken, type UseZamaConfig } from \"../token/use-token\";\n\n/**\n * Revoke FHE decryption delegation for a token from a delegate address.\n *\n * @param config - Token address identifying the confidential token.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const revoke = useRevokeDelegation({ tokenAddress: \"0x...\" });\n * revoke.mutate({ delegateAddress: \"0xDelegate\" });\n * ```\n */\nexport function useRevokeDelegation(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, RevokeDelegationParams>,\n) {\n const token = useToken(config);\n\n return useMutation<TransactionResult, Error, RevokeDelegationParams>({\n ...revokeDelegationMutationOptions(token),\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 token contract. Pass `undefined` to disable the query. */\n tokenAddress: 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 `{ isDelegated, expiryTimestamp, isLoading, error }`.\n *\n * @example\n * ```tsx\n * const { data } = useDelegationStatus({\n * tokenAddress: \"0xToken\",\n * delegatorAddress: \"0xDelegator\",\n * delegateAddress: \"0xDelegate\",\n * });\n * // data?.isDelegated, 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 { useReadonlyToken } from \"../token/use-readonly-token\";\n\n/**\n * Decrypt another user's confidential balance as a delegate.\n *\n * @param tokenAddress - 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 tokenAddress: Address,\n options?: UseMutationOptions<bigint, Error, DecryptBalanceAsParams>,\n) {\n const readonlyToken = useReadonlyToken(tokenAddress);\n\n return useMutation<bigint, Error, DecryptBalanceAsParams>({\n ...decryptBalanceAsMutationOptions(readonlyToken),\n ...options,\n });\n}\n","\"use client\";\n\nimport { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport type { Address, ReadonlyToken } 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 - ReadonlyToken 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: ReadonlyToken[],\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 { useToken, type UseZamaConfig } from \"../token/use-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 config - Token and wrapper addresses.\n * @param options - React Query mutation options.\n *\n * @example\n * ```tsx\n * const approve = useApproveUnderlying({ tokenAddress: \"0x...\", wrapperAddress: \"0x...\" });\n * approve.mutate({}); // max approval\n * approve.mutate({ amount: 1000n }); // exact amount\n * ```\n */\nexport function useApproveUnderlying(\n config: UseZamaConfig,\n options?: UseMutationOptions<TransactionResult, Error, ApproveUnderlyingParams, Address>,\n) {\n const token = useToken(config);\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/dist/wagmi/index.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { Address, ContractAbi, EIP712TypedData, GenericSigner, Hex, ReadContractArgs, ReadContractConfig, ReadContractReturnType, ReadFunctionName, SignerLifecycleCallbacks, TransactionReceipt, WriteContractArgs, WriteContractConfig, WriteFunctionName } from "@zama-fhe/sdk";
|
|
3
|
+
import { Address, ContractAbi, EIP712TypedData, GenericProvider, GenericSigner, Hex, ReadContractArgs, ReadContractConfig, ReadContractReturnType, ReadFunctionName, SignerLifecycleCallbacks, TransactionReceipt, WriteContractArgs, WriteContractConfig, WriteFunctionName } from "@zama-fhe/sdk";
|
|
4
4
|
import { Config } from "wagmi";
|
|
5
5
|
|
|
6
6
|
//#region src/wagmi/wagmi-signer.d.ts
|
|
7
7
|
/** Configuration for {@link WagmiSigner}. */
|
|
8
8
|
interface WagmiSignerConfig {
|
|
9
|
+
/** Wagmi `Config` — same instance passed to {@link WagmiProvider}. */
|
|
9
10
|
config: Config;
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
@@ -14,15 +15,12 @@ interface WagmiSignerConfig {
|
|
|
14
15
|
* @param signerConfig - {@link WagmiSignerConfig} with wagmi config
|
|
15
16
|
*/
|
|
16
17
|
declare class WagmiSigner implements GenericSigner {
|
|
17
|
-
private
|
|
18
|
+
#private;
|
|
18
19
|
constructor(signerConfig: WagmiSignerConfig);
|
|
19
20
|
getChainId(): Promise<number>;
|
|
20
21
|
getAddress(): Promise<Address>;
|
|
21
22
|
signTypedData(typedData: EIP712TypedData): Promise<Hex>;
|
|
22
23
|
writeContract<const TAbi extends ContractAbi, TFunctionName extends WriteFunctionName<TAbi>, const TArgs extends WriteContractArgs<TAbi, TFunctionName>>(config: WriteContractConfig<TAbi, TFunctionName, TArgs>): Promise<Hex>;
|
|
23
|
-
readContract<const TAbi extends ContractAbi, TFunctionName extends ReadFunctionName<TAbi>, const TArgs extends ReadContractArgs<TAbi, TFunctionName>>(config: ReadContractConfig<TAbi, TFunctionName, TArgs>): Promise<ReadContractReturnType<TAbi, TFunctionName, TArgs>>;
|
|
24
|
-
waitForTransactionReceipt(hash: Hex): Promise<TransactionReceipt>;
|
|
25
|
-
getBlockTimestamp(): Promise<bigint>;
|
|
26
24
|
subscribe({
|
|
27
25
|
onDisconnect,
|
|
28
26
|
onAccountChange,
|
|
@@ -30,5 +28,41 @@ declare class WagmiSigner implements GenericSigner {
|
|
|
30
28
|
}: SignerLifecycleCallbacks): () => void;
|
|
31
29
|
}
|
|
32
30
|
//#endregion
|
|
33
|
-
|
|
31
|
+
//#region src/wagmi/wagmi-provider.d.ts
|
|
32
|
+
/** Configuration for {@link WagmiProvider}. */
|
|
33
|
+
interface WagmiProviderConfig {
|
|
34
|
+
/** Wagmi `Config` — same instance passed to {@link WagmiSigner}. */
|
|
35
|
+
config: Config;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Read-only {@link GenericProvider} backed by wagmi.
|
|
39
|
+
*
|
|
40
|
+
* Uses the same `Config` as {@link WagmiSigner}, sharing the transport the
|
|
41
|
+
* application has already configured. Pair with a {@link WagmiSigner} when
|
|
42
|
+
* wallet authority is required.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* const provider = new WagmiProvider({ config: wagmiConfig });
|
|
47
|
+
* const signer = new WagmiSigner({ config: wagmiConfig });
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
declare class WagmiProvider implements GenericProvider {
|
|
51
|
+
#private;
|
|
52
|
+
constructor(providerConfig: WagmiProviderConfig);
|
|
53
|
+
getChainId(): Promise<number>;
|
|
54
|
+
readContract<const TAbi extends ContractAbi, TFunctionName extends ReadFunctionName<TAbi>, const TArgs extends ReadContractArgs<TAbi, TFunctionName>>(config: ReadContractConfig<TAbi, TFunctionName, TArgs>): Promise<ReadContractReturnType<TAbi, TFunctionName, TArgs>>;
|
|
55
|
+
/**
|
|
56
|
+
* Wait for a transaction receipt.
|
|
57
|
+
*
|
|
58
|
+
* @param hash - The transaction hash to wait for.
|
|
59
|
+
* @returns The transaction receipt.
|
|
60
|
+
* @throws {@link TransactionRevertedError} if the transaction hash cannot be found (e.g.
|
|
61
|
+
* an ERC-4337 bundler returned a `UserOperation` hash instead of a transaction hash).
|
|
62
|
+
*/
|
|
63
|
+
waitForTransactionReceipt(hash: Hex): Promise<TransactionReceipt>;
|
|
64
|
+
getBlockTimestamp(): Promise<bigint>;
|
|
65
|
+
}
|
|
66
|
+
//#endregion
|
|
67
|
+
export { WagmiProvider, type WagmiProviderConfig, WagmiSigner, type WagmiSignerConfig };
|
|
34
68
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/wagmi/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{TransactionRevertedError as e}from"@zama-fhe/sdk";import*as t from"wagmi/actions";import{getAccount as n,getBlock as r,getChainId as i,readContract as a,signTypedData as o,waitForTransactionReceipt as s,watchAccount as c,writeContract as l}from"wagmi/actions";import*as u from"wagmi";import"wagmi";`useConnection`in u&&u.useConnection;const d=`getConnection`in t?t.getConnection:n,f=`watchConnection`in t?t.watchConnection:c;var p=class{
|
|
1
|
+
"use client";import{TransactionRevertedError as e}from"@zama-fhe/sdk";import*as t from"wagmi/actions";import{getAccount as n,getBlock as r,getChainId as i,readContract as a,signTypedData as o,waitForTransactionReceipt as s,watchAccount as c,writeContract as l}from"wagmi/actions";import*as u from"wagmi";import"wagmi";`useConnection`in u&&u.useConnection;const d=`getConnection`in t?t.getConnection:n,f=`watchConnection`in t?t.watchConnection:c;var p=class{#e;constructor(e){this.#e=e.config}async getChainId(){return i(this.#e)}async getAddress(){let e=d(this.#e);if(!e?.address)throw TypeError(`Invalid address`);return e.address}async signTypedData(e){let{EIP712Domain:t,...n}=e.types;return o(this.#e,{primaryType:e.primaryType,types:n,domain:e.domain,message:{...e.message,startTimestamp:BigInt(e.message.startTimestamp),durationDays:BigInt(e.message.durationDays)}})}async writeContract(e){return l(this.#e,e)}subscribe({onDisconnect:e=()=>{},onAccountChange:t=()=>{},onChainChange:n=()=>{}}){return f(this.#e,{onChange(r,i){r.status===`disconnected`&&i.status!==`disconnected`&&e(),i.address&&r.address&&r.address!==i.address&&t(r.address),typeof i.chainId==`number`&&typeof r.chainId==`number`&&r.chainId!==i.chainId&&n(r.chainId)}})}},m=class{#e;constructor(e){this.#e=e.config}async getChainId(){return i(this.#e)}async readContract(e){return a(this.#e,e)}async waitForTransactionReceipt(t){try{return await s(this.#e,{hash:t})}catch(n){let r=n instanceof Error?n.message:String(n);throw r.includes(`could not be found`)||r.includes(`Transaction not found`)?new e(`Could not find transaction receipt for hash "${t.slice(0,10)}…". If using ERC-4337 with a bundler, your connector may be returning a UserOperation hash instead of a transaction hash.`,{cause:n instanceof Error?n:void 0}):n}}async getBlockTimestamp(){return(await r(this.#e)).timestamp}};export{m as WagmiProvider,p as WagmiSigner};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/wagmi/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/wagmi/compat.ts","../../src/wagmi/wagmi-signer.ts"],"sourcesContent":["import * as wagmi from \"wagmi\";\nimport { useAccount } from \"wagmi\";\nimport * as actions from \"wagmi/actions\";\nimport { getAccount, watchAccount } from \"wagmi/actions\";\n\n// wagmi v3 renamed useAccount → useConnection\nexport const useConnection = \"useConnection\" in wagmi ? wagmi.useConnection : useAccount;\n\n// wagmi v3 renamed getAccount → getConnection\nexport const getConnection = \"getConnection\" in actions ? actions.getConnection : getAccount;\n\n// wagmi v3 renamed watchAccount → watchConnection\nexport const watchConnection =\n \"watchConnection\" in actions ? actions.watchConnection : watchAccount;\n","import type {\n Address,\n ContractAbi,\n EIP712TypedData,\n GenericSigner,\n Hex,\n
|
|
1
|
+
{"version":3,"file":"index.js","names":["#config","#config"],"sources":["../../src/wagmi/compat.ts","../../src/wagmi/wagmi-signer.ts","../../src/wagmi/wagmi-provider.ts"],"sourcesContent":["import * as wagmi from \"wagmi\";\nimport { useAccount } from \"wagmi\";\nimport * as actions from \"wagmi/actions\";\nimport { getAccount, watchAccount } from \"wagmi/actions\";\n\n// wagmi v3 renamed useAccount → useConnection\nexport const useConnection = \"useConnection\" in wagmi ? wagmi.useConnection : useAccount;\n\n// wagmi v3 renamed getAccount → getConnection\nexport const getConnection = \"getConnection\" in actions ? actions.getConnection : getAccount;\n\n// wagmi v3 renamed watchAccount → watchConnection\nexport const watchConnection =\n \"watchConnection\" in actions ? actions.watchConnection : watchAccount;\n","import type {\n Address,\n ContractAbi,\n EIP712TypedData,\n GenericSigner,\n Hex,\n SignerLifecycleCallbacks,\n WriteContractArgs,\n WriteFunctionName,\n WriteContractConfig,\n} from \"@zama-fhe/sdk\";\nimport type { Config } from \"wagmi\";\nimport { getChainId, signTypedData, writeContract } from \"wagmi/actions\";\nimport { getConnection, watchConnection } from \"./compat\";\n\n/** Configuration for {@link WagmiSigner}. */\nexport interface WagmiSignerConfig {\n /** Wagmi `Config` — same instance passed to {@link WagmiProvider}. */\n config: Config;\n}\n\n/**\n * GenericSigner backed by wagmi.\n *\n * @param signerConfig - {@link WagmiSignerConfig} with wagmi config\n */\nexport class WagmiSigner implements GenericSigner {\n readonly #config: Config;\n\n constructor(signerConfig: WagmiSignerConfig) {\n this.#config = signerConfig.config;\n }\n\n async getChainId(): Promise<number> {\n return getChainId(this.#config);\n }\n\n async getAddress(): Promise<Address> {\n const account = getConnection(this.#config);\n if (!account?.address) {\n throw new TypeError(\"Invalid address\");\n }\n return account.address;\n }\n\n async signTypedData(typedData: EIP712TypedData): Promise<Hex> {\n const { EIP712Domain: _, ...sigTypes } = typedData.types;\n return signTypedData(this.#config, {\n primaryType: typedData.primaryType,\n types: sigTypes,\n domain: typedData.domain,\n message: {\n ...typedData.message,\n startTimestamp: BigInt(typedData.message.startTimestamp),\n durationDays: BigInt(typedData.message.durationDays),\n },\n // Cast: EIP712TypedData is a union; viem cannot correlate primaryType/types/message across union members, so the inferred `message` collapses to `never`.\n } as Parameters<typeof signTypedData>[1]);\n }\n\n async writeContract<\n const TAbi extends ContractAbi,\n TFunctionName extends WriteFunctionName<TAbi>,\n const TArgs extends WriteContractArgs<TAbi, TFunctionName>,\n >(config: WriteContractConfig<TAbi, TFunctionName, TArgs>): Promise<Hex> {\n return writeContract(this.#config, config as Parameters<typeof writeContract>[1]);\n }\n\n subscribe({\n onDisconnect = () => {},\n onAccountChange = () => {},\n onChainChange = () => {},\n }: SignerLifecycleCallbacks): () => void {\n return watchConnection(this.#config, {\n onChange(connection, prevConnection) {\n if (connection.status === \"disconnected\" && prevConnection.status !== \"disconnected\") {\n onDisconnect();\n }\n if (\n prevConnection.address &&\n connection.address &&\n connection.address !== prevConnection.address\n ) {\n onAccountChange(connection.address);\n }\n if (\n typeof prevConnection.chainId === \"number\" &&\n typeof connection.chainId === \"number\" &&\n connection.chainId !== prevConnection.chainId\n ) {\n onChainChange(connection.chainId);\n }\n },\n });\n }\n}\n","import type {\n ContractAbi,\n GenericProvider,\n Hex,\n ReadContractArgs,\n ReadContractConfig,\n ReadContractReturnType,\n ReadFunctionName,\n TransactionReceipt,\n} from \"@zama-fhe/sdk\";\nimport { TransactionRevertedError } from \"@zama-fhe/sdk\";\nimport type { Config } from \"wagmi\";\nimport { getBlock, getChainId, readContract, waitForTransactionReceipt } from \"wagmi/actions\";\n\n/** Configuration for {@link WagmiProvider}. */\nexport interface WagmiProviderConfig {\n /** Wagmi `Config` — same instance passed to {@link WagmiSigner}. */\n config: Config;\n}\n\n/**\n * Read-only {@link GenericProvider} backed by wagmi.\n *\n * Uses the same `Config` as {@link WagmiSigner}, sharing the transport the\n * application has already configured. Pair with a {@link WagmiSigner} when\n * wallet authority is required.\n *\n * @example\n * ```ts\n * const provider = new WagmiProvider({ config: wagmiConfig });\n * const signer = new WagmiSigner({ config: wagmiConfig });\n * ```\n */\nexport class WagmiProvider implements GenericProvider {\n readonly #config: Config;\n\n constructor(providerConfig: WagmiProviderConfig) {\n this.#config = providerConfig.config;\n }\n\n async getChainId(): Promise<number> {\n return getChainId(this.#config);\n }\n\n async readContract<\n const TAbi extends ContractAbi,\n TFunctionName extends ReadFunctionName<TAbi>,\n const TArgs extends ReadContractArgs<TAbi, TFunctionName>,\n >(\n config: ReadContractConfig<TAbi, TFunctionName, TArgs>,\n ): Promise<ReadContractReturnType<TAbi, TFunctionName, TArgs>> {\n return readContract(this.#config, config);\n }\n\n /**\n * Wait for a transaction receipt.\n *\n * @param hash - The transaction hash to wait for.\n * @returns The transaction receipt.\n * @throws {@link TransactionRevertedError} if the transaction hash cannot be found (e.g.\n * an ERC-4337 bundler returned a `UserOperation` hash instead of a transaction hash).\n */\n async waitForTransactionReceipt(hash: Hex): Promise<TransactionReceipt> {\n try {\n return await waitForTransactionReceipt(this.#config, { hash });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes(\"could not be found\") || message.includes(\"Transaction not found\")) {\n throw new TransactionRevertedError(\n `Could not find transaction receipt for hash \"${hash.slice(0, 10)}…\". ` +\n \"If using ERC-4337 with a bundler, your connector may be returning a UserOperation hash \" +\n \"instead of a transaction hash.\",\n { cause: error instanceof Error ? error : undefined },\n );\n }\n throw error;\n }\n }\n\n async getBlockTimestamp(): Promise<bigint> {\n const block = await getBlock(this.#config);\n return block.timestamp;\n }\n}\n"],"mappings":"8TAM6B,kBAAmB,GAAQ,EAAM,cAG9D,MAAa,EAAgB,kBAAmB,EAAU,EAAQ,cAAgB,EAGrE,EACX,oBAAqB,EAAU,EAAQ,gBAAkB,ECa3D,IAAa,EAAb,KAAkD,CAChD,GAEA,YAAY,EAAiC,CAC3C,MAAA,EAAe,EAAa,OAG9B,MAAM,YAA8B,CAClC,OAAO,EAAW,MAAA,EAAa,CAGjC,MAAM,YAA+B,CACnC,IAAM,EAAU,EAAc,MAAA,EAAa,CAC3C,GAAI,CAAC,GAAS,QACZ,MAAU,UAAU,kBAAkB,CAExC,OAAO,EAAQ,QAGjB,MAAM,cAAc,EAA0C,CAC5D,GAAM,CAAE,aAAc,EAAG,GAAG,GAAa,EAAU,MACnD,OAAO,EAAc,MAAA,EAAc,CACjC,YAAa,EAAU,YACvB,MAAO,EACP,OAAQ,EAAU,OAClB,QAAS,CACP,GAAG,EAAU,QACb,eAAgB,OAAO,EAAU,QAAQ,eAAe,CACxD,aAAc,OAAO,EAAU,QAAQ,aAAa,CACrD,CAEF,CAAwC,CAG3C,MAAM,cAIJ,EAAuE,CACvE,OAAO,EAAc,MAAA,EAAc,EAA8C,CAGnF,UAAU,CACR,mBAAqB,GACrB,sBAAwB,GACxB,oBAAsB,IACiB,CACvC,OAAO,EAAgB,MAAA,EAAc,CACnC,SAAS,EAAY,EAAgB,CAC/B,EAAW,SAAW,gBAAkB,EAAe,SAAW,gBACpE,GAAc,CAGd,EAAe,SACf,EAAW,SACX,EAAW,UAAY,EAAe,SAEtC,EAAgB,EAAW,QAAQ,CAGnC,OAAO,EAAe,SAAY,UAClC,OAAO,EAAW,SAAY,UAC9B,EAAW,UAAY,EAAe,SAEtC,EAAc,EAAW,QAAQ,EAGtC,CAAC,GC5DO,EAAb,KAAsD,CACpD,GAEA,YAAY,EAAqC,CAC/C,MAAA,EAAe,EAAe,OAGhC,MAAM,YAA8B,CAClC,OAAO,EAAW,MAAA,EAAa,CAGjC,MAAM,aAKJ,EAC6D,CAC7D,OAAO,EAAa,MAAA,EAAc,EAAO,CAW3C,MAAM,0BAA0B,EAAwC,CACtE,GAAI,CACF,OAAO,MAAM,EAA0B,MAAA,EAAc,CAAE,OAAM,CAAC,OACvD,EAAO,CACd,IAAM,EAAU,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CAStE,MARI,EAAQ,SAAS,qBAAqB,EAAI,EAAQ,SAAS,wBAAwB,CAC/E,IAAI,EACR,gDAAgD,EAAK,MAAM,EAAG,GAAG,CAAC,2HAGlE,CAAE,MAAO,aAAiB,MAAQ,EAAQ,IAAA,GAAW,CACtD,CAEG,GAIV,MAAM,mBAAqC,CAEzC,OADc,MAAM,EAAS,MAAA,EAAa,EAC7B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zama-fhe/react-sdk",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "React hooks for Zama SDK",
|
|
5
5
|
"license": "BSD-3-Clause-Clear",
|
|
6
6
|
"author": "Zama",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
},
|
|
65
65
|
"peerDependencies": {
|
|
66
66
|
"@tanstack/react-query": ">=5",
|
|
67
|
-
"@zama-fhe/sdk": "^3.0.0-alpha.
|
|
67
|
+
"@zama-fhe/sdk": "^3.0.0-alpha.17",
|
|
68
68
|
"react": ">=18",
|
|
69
69
|
"viem": "^2.47.0",
|
|
70
70
|
"wagmi": ">=2"
|