@zama-fhe/sdk 3.6.0 → 3.7.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/base-signer.cjs +1 -1
- package/dist/cjs/base-signer.cjs.map +1 -1
- package/dist/cjs/chains.cjs +1 -1
- package/dist/cjs/chains.cjs.map +1 -1
- package/dist/cjs/ethers/index.cjs +1 -1
- package/dist/cjs/ethers/index.cjs.map +1 -1
- package/dist/cjs/fhevm-relayer.cjs +2 -2
- package/dist/cjs/fhevm-relayer.cjs.map +1 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/query/index.cjs +1 -1
- package/dist/cjs/query/index.cjs.map +1 -1
- package/dist/cjs/relayer.cjs +1 -1
- package/dist/cjs/relayer.cjs.map +1 -1
- package/dist/cjs/token.cjs +1 -1
- package/dist/cjs/token.cjs.map +1 -1
- package/dist/cjs/viem/index.cjs +1 -1
- package/dist/cjs/viem/index.cjs.map +1 -1
- package/dist/cjs/wrappers-registry.cjs +1 -1
- package/dist/cjs/wrappers-registry.cjs.map +1 -1
- package/dist/esm/base-signer--sBO2qJp.js +2 -0
- package/dist/esm/base-signer--sBO2qJp.js.map +1 -0
- package/dist/esm/{base-signer-Iu5Lszrf.d.ts → base-signer-S2Ogf6L4.d.ts} +2 -2
- package/dist/esm/chains/index.d.ts +1 -1
- package/dist/esm/chains/index.js +1 -1
- package/dist/esm/chains-DEpKup1n.js +2 -0
- package/dist/esm/chains-DEpKup1n.js.map +1 -0
- package/dist/esm/cleartext/index.d.ts +2 -2
- package/dist/esm/cleartext/index.js +1 -1
- package/dist/esm/{cleartext-iE4sWgSP.js → cleartext-DcbDCDXj.js} +2 -2
- package/dist/esm/{cleartext-iE4sWgSP.js.map → cleartext-DcbDCDXj.js.map} +1 -1
- package/dist/esm/{cleartext-B2DI8fgm.d.ts → cleartext-pv2blbFU.d.ts} +2 -2
- package/dist/esm/encrypt.worker.js +51 -51
- package/dist/esm/{encryption-BKoalB4o.js → encryption-DJljZ2oV.js} +2 -2
- package/dist/esm/{encryption-BKoalB4o.js.map → encryption-DJljZ2oV.js.map} +1 -1
- package/dist/esm/ethers/index.d.ts +5 -5
- package/dist/esm/ethers/index.js +1 -1
- package/dist/esm/ethers/index.js.map +1 -1
- package/dist/esm/fhevm-relayer-CPmCytDX.js +8 -0
- package/dist/esm/fhevm-relayer-CPmCytDX.js.map +1 -0
- package/dist/esm/{index-BCh3VaZo.d.ts → index-DRrrBtMX.d.ts} +2000 -1115
- package/dist/esm/{index-ijgDL4IC.d.ts → index-Gk1S0gjO.d.ts} +14 -1
- package/dist/esm/{index-S6QjPkZE.d.ts → index-tfvbrVa2.d.ts} +4 -4
- package/dist/esm/index.d.ts +108 -8
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node/index.d.ts +4 -4
- package/dist/esm/node/index.js +1 -1
- package/dist/esm/query/index.d.ts +4 -537
- package/dist/esm/query/index.js +1 -1
- package/dist/esm/query/index.js.map +1 -1
- package/dist/esm/relayer-B6Zo6EkX.js +2 -0
- package/dist/esm/relayer-B6Zo6EkX.js.map +1 -0
- package/dist/esm/token-BMQ6xlrk.js +2 -0
- package/dist/esm/{token-BejFVO8m.js.map → token-BMQ6xlrk.js.map} +1 -1
- package/dist/esm/{types-D3W3J65M.d.ts → types-BOyFfG7D.d.ts} +42 -7
- package/dist/esm/{types-Ce9Lhvrf.d.ts → types-BRIpBy9n.d.ts} +3 -3
- package/dist/esm/{types-CFDG6lIJ.d.ts → types-OXQqX_kH.d.ts} +3 -3
- package/dist/esm/{validation-BRu06AM_.js → validation-DWe2k89s.js} +2 -2
- package/dist/esm/{validation-BRu06AM_.js.map → validation-DWe2k89s.js.map} +1 -1
- package/dist/esm/viem/index.d.ts +5 -5
- package/dist/esm/viem/index.js +1 -1
- package/dist/esm/viem/index.js.map +1 -1
- package/dist/esm/web/index.d.ts +1 -1
- package/dist/esm/web/index.js +1 -1
- package/dist/esm/wrappers-registry-BfQr2QHn.js +2 -0
- package/dist/esm/wrappers-registry-BfQr2QHn.js.map +1 -0
- package/package.json +2 -2
- package/dist/esm/base-signer-DGIEzavu.js +0 -2
- package/dist/esm/base-signer-DGIEzavu.js.map +0 -1
- package/dist/esm/chains-ByyCdrrd.js +0 -2
- package/dist/esm/chains-ByyCdrrd.js.map +0 -1
- package/dist/esm/fhevm-relayer-Cm-ZR1vP.js +0 -8
- package/dist/esm/fhevm-relayer-Cm-ZR1vP.js.map +0 -1
- package/dist/esm/relayer-CVKO9GmQ.js +0 -2
- package/dist/esm/relayer-CVKO9GmQ.js.map +0 -1
- package/dist/esm/token-BejFVO8m.js +0 -2
- package/dist/esm/wrappers-registry-BLe7PkZi.js +0 -2
- package/dist/esm/wrappers-registry-BLe7PkZi.js.map +0 -1
|
@@ -36,6 +36,15 @@ interface FheChain<TId extends number = number> {
|
|
|
36
36
|
readonly kmsContractAddress: Address;
|
|
37
37
|
/** Address of the input verifier contract. */
|
|
38
38
|
readonly inputVerifierContractAddress: Address;
|
|
39
|
+
/**
|
|
40
|
+
* Address of the `ProtocolConfig` contract. Required to sign or use V2
|
|
41
|
+
* (unified) decryption permits — including {@link WILDCARD_PERMIT} — which
|
|
42
|
+
* need protocol v0.14+. Leave `undefined` for a chain still on protocol
|
|
43
|
+
* ≤0.13, or one whose `ProtocolConfig` address isn't known yet: V2 permit
|
|
44
|
+
* signing then fails with a clear {@link UnifiedPermitNotSupportedError}
|
|
45
|
+
* instead of a wallet prompt. V1 permits are unaffected either way.
|
|
46
|
+
*/
|
|
47
|
+
readonly protocolConfigContractAddress?: Address | undefined;
|
|
39
48
|
/** EIP-712 verifying contract address for decryption requests. */
|
|
40
49
|
readonly verifyingContractAddressDecryption: Address;
|
|
41
50
|
/** EIP-712 verifying contract address for input verification. */
|
|
@@ -76,6 +85,7 @@ declare const mainnet: {
|
|
|
76
85
|
readonly verifyingContractAddressDecryption: "0x0f6024a97684f7d90ddb0fAAD79cB15F2C888D24";
|
|
77
86
|
readonly verifyingContractAddressInputVerification: "0xcB1bB072f38bdAF0F328CdEf1Fc6eDa1DF029287";
|
|
78
87
|
readonly registryAddress: "0xeb5015fF021DB115aCe010f23F55C2591059bBA0";
|
|
88
|
+
readonly protocolConfigContractAddress: "0xD8236B57394f90726b26aB25D38CeAC776E1a7C4";
|
|
79
89
|
};
|
|
80
90
|
/**
|
|
81
91
|
* Polygon mainnet network configuration (chainId 137).
|
|
@@ -91,6 +101,7 @@ declare const polygon: {
|
|
|
91
101
|
readonly verifyingContractAddressDecryption: "0x0f6024a97684f7d90ddb0fAAD79cB15F2C888D24";
|
|
92
102
|
readonly verifyingContractAddressInputVerification: "0xcB1bB072f38bdAF0F328CdEf1Fc6eDa1DF029287";
|
|
93
103
|
readonly registryAddress: "0xc8908569868758dAF814B5a8b96bBc44D1653d54";
|
|
104
|
+
readonly protocolConfigContractAddress: "0x17f62Ab3A1Ea519703cD597410147A30Fa1a7f1e";
|
|
94
105
|
};
|
|
95
106
|
/**
|
|
96
107
|
* Sepolia testnet network configuration (chainId 11155111).
|
|
@@ -106,6 +117,7 @@ declare const sepolia: {
|
|
|
106
117
|
readonly verifyingContractAddressDecryption: "0x5D8BD78e2ea6bbE41f26dFe9fdaEAa349e077478";
|
|
107
118
|
readonly verifyingContractAddressInputVerification: "0x483b9dE06E4E4C7D35CCf5837A1668487406D955";
|
|
108
119
|
readonly registryAddress: "0x2f0750Bbb0A246059d80e94c454586a7F27a128e";
|
|
120
|
+
readonly protocolConfigContractAddress: "0x51f9AFBc89Ea792e1a21a12AB802ab58D4dbee83";
|
|
109
121
|
};
|
|
110
122
|
/**
|
|
111
123
|
* Polygon Amoy testnet network configuration (chainId 80002).
|
|
@@ -121,6 +133,7 @@ declare const polygonAmoy: {
|
|
|
121
133
|
readonly verifyingContractAddressDecryption: "0x5D8BD78e2ea6bbE41f26dFe9fdaEAa349e077478";
|
|
122
134
|
readonly verifyingContractAddressInputVerification: "0x483b9dE06E4E4C7D35CCf5837A1668487406D955";
|
|
123
135
|
readonly registryAddress: "0xF486c3D4F4562760A43883e72E8D6f6Cf2EFdA94";
|
|
136
|
+
readonly protocolConfigContractAddress: "0x4CcF009Aba90D04f52b31fc7aDdE240578aFe10F";
|
|
124
137
|
};
|
|
125
138
|
/**
|
|
126
139
|
* Hoodi testnet configuration (chainId 560048).
|
|
@@ -217,4 +230,4 @@ declare const anvil: {
|
|
|
217
230
|
declare const chains: Record<number, FheChain>;
|
|
218
231
|
//#endregion
|
|
219
232
|
export { hoodi as a, polygon as c, AtLeastOneChain as d, FheChain as f, hardhat as i, polygonAmoy as l, bscTestnet as n, ingenTestnet as o, FheChainAuth as p, chains as r, mainnet as s, anvil as t, sepolia as u };
|
|
220
|
-
//# sourceMappingURL=index-
|
|
233
|
+
//# sourceMappingURL=index-Gk1S0gjO.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import "./index-
|
|
2
|
-
import { c as GenericStorage,
|
|
3
|
-
import "./cleartext-
|
|
1
|
+
import "./index-Gk1S0gjO.js";
|
|
2
|
+
import { c as GenericStorage, fn as RelayerOptions, n as RelayerConfig } from "./types-BOyFfG7D.js";
|
|
3
|
+
import "./cleartext-pv2blbFU.js";
|
|
4
4
|
//#region src/node/config.d.ts
|
|
5
5
|
/** Node transport — drives the FHE backend directly on the calling thread. */
|
|
6
6
|
interface NodeRelayerConfig extends RelayerConfig {
|
|
@@ -58,4 +58,4 @@ declare class AsyncLocalMapStorage implements GenericStorage {
|
|
|
58
58
|
declare const asyncLocalStorage: AsyncLocalMapStorage;
|
|
59
59
|
//#endregion
|
|
60
60
|
export { node as i, asyncLocalStorage as n, NodeRelayerConfig as r, AsyncLocalMapStorage as t };
|
|
61
|
-
//# sourceMappingURL=index-
|
|
61
|
+
//# sourceMappingURL=index-tfvbrVa2.d.ts.map
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,8 +1,108 @@
|
|
|
1
|
-
import { a as hoodi, c as polygon, d as AtLeastOneChain, f as FheChain, i as hardhat, l as polygonAmoy, n as bscTestnet, o as ingenTestnet, p as FheChainAuth, r as chains, s as mainnet, t as anvil, u as sepolia } from "./index-
|
|
2
|
-
import { $ as
|
|
3
|
-
import { t as cleartext } from "./cleartext-
|
|
4
|
-
import { t as ZamaConfigEthers } from "./types-
|
|
5
|
-
import { n as MutableWalletAccountStore, r as createWalletAccountStore, t as BaseSigner } from "./base-signer-
|
|
6
|
-
import { $ as
|
|
7
|
-
import { t as ZamaConfigViem } from "./types-
|
|
8
|
-
|
|
1
|
+
import { a as hoodi, c as polygon, d as AtLeastOneChain, f as FheChain, i as hardhat, l as polygonAmoy, n as bscTestnet, o as ingenTestnet, p as FheChainAuth, r as chains, s as mainnet, t as anvil, u as sepolia } from "./index-Gk1S0gjO.js";
|
|
2
|
+
import { $ as RevokeDelegationSubmittedEvent, $t as TransactionResult, A as WalletAccountListener, At as OnChainEvent, B as ApproveUnderlyingSubmittedEvent, Bt as decodeDelegatedForUserDecryption, C as TransferAndCallRequest, Ct as TransferCallbacks, D as GenericSigner, Dt as AclTopics, E as WrapRequest, Et as AclEvent, F as ReadContractReturnType, Ft as UnwrapRequestedEvent, G as DelegationSubmittedEvent, Gt as decodeUnwrapRequested, H as DecryptEndEvent, Ht as decodeOnChainEvents, I as ReadFunctionName, It as WrapEvent, J as EncryptStartEvent, Jt as findRevokedDelegationForUserDecryption, K as EncryptEndEvent, Kt as decodeWrap, L as WriteContractArgs, Lt as decodeAclEvent, M as ContractAbi, Mt as TOKEN_TOPICS, N as ReadContractArgs, Nt as Topics, O as WalletAccount, Ot as ConfidentialTransferEvent, P as ReadContractConfig, Pt as UnwrapFinalizedEvent, Q as PermitOperation, Qt as TransactionReceipt, R as WriteContractConfig, Rt as decodeAclEvents, S as TransactionKind, St as ShieldCallbacks, T as UnwrapRequest, Tt as ACL_TOPICS, U as DecryptErrorEvent, Ut as decodeRevokedDelegationForUserDecryption, V as BaseEvent, Vt as decodeOnChainEvent, W as DecryptStartEvent, Wt as decodeUnwrapFinalized, X as InvalidateDecryptionSignaturesSubmittedEvent, Xt as findWrap, Y as FinalizeUnwrapSubmittedEvent, Yt as findUnwrapRequested, Z as PermitErrorEvent, Zt as RawLog, _ as PrepareTransactionRequest, _t as ShieldPath, a as ZamaConfigBase, an as EncryptParams, at as TransferSubmittedEvent, b as RevokeDelegationRequest, bt as UnwrapResult, c as GenericStorage, cn as FhevmClient, ct as UnshieldPhase2SubmittedEvent, d as ConfidentialTransferFromRequest, dn as FhevmRuntimeConfig, dt as ZamaSDKEvent, en as ClearValue, et as SetOperatorSubmittedEvent, f as ConfidentialTransferRequest, fn as RelayerOptions, ft as ZamaSDKEventListener, g as PrepareOptions, gt as ShieldOptions, h as PrepareFees, ht as ApprovalStrategy, i as ZamaConfig, in as EncryptInput, it as TransferFromSubmittedEvent, j as WalletAccountStore, jt as RevokedDelegationForUserDecryptionEvent, k as WalletAccountChange, kt as DelegatedForUserDecryptionEvent, l as GenericProvider, ln as FhevmClientOptions, lt as UnwrapSubmittedEvent, m as FinalizeUnwrapRequest, mn as TypedValue, mt as ZamaSDKEvents, n as RelayerConfig, nn as DecryptValuesParameters, nt as TransactionErrorEvent, o as ZamaConfigGeneric, on as EncryptResult, ot as UnshieldPhase1SubmittedEvent, p as DelegateDecryptionRequest, pn as RelayerSDK, pt as ZamaSDKEventType, q as EncryptErrorEvent, qt as findDelegatedForUserDecryption, rn as EIP712TypedData, rt as TransactionOperation, s as GenericLogger, sn as EncryptedValue, st as UnshieldPhase2StartedEvent, t as CleartextRelayerConfig, tn as DecryptPublicValuesResult, tt as ShieldSubmittedEvent, u as ApproveUnderlyingRequest, un as FhevmRelayerOptions, ut as WrapSubmittedEvent, v as PreparedFor, vt as TransferOptions, w as UnwrapAllRequest, wt as UnshieldCallbacks, x as SetOperatorRequest, xt as WrapOptions, y as PreparedTransaction, yt as UnshieldOptions, z as WriteFunctionName, zt as decodeConfidentialTransfer } from "./types-BOyFfG7D.js";
|
|
3
|
+
import { t as cleartext } from "./cleartext-pv2blbFU.js";
|
|
4
|
+
import { t as ZamaConfigEthers } from "./types-OXQqX_kH.js";
|
|
5
|
+
import { n as MutableWalletAccountStore, r as createWalletAccountStore, t as BaseSigner } from "./base-signer-S2Ogf6L4.js";
|
|
6
|
+
import { $n as DelegationExpiryUnchangedError, $r as ERC7984_WRAPPER_INTERFACE_ID, An as SignerRequiredError, Ar as SerializedPermitEip712, At as Token, Bn as InsufficientAllowanceError, Br as getTokenPairContract, Bt as ListPairsOptions, Ci as createConfig, Cn as UnshieldAlreadyFinalizedDetails, Cr as PermissionV2, Dn as SigningFailedError, Dr as PreparedPermitV1, Dt as WrappedToken, En as SigningErrorMetadata, Er as PreparedPermitBase, Fn as ConfigurationError, Fr as PaginatedResult, Gn as EncryptionFailedError, Gr as delegateForUserDecryptionContract, Hn as InsufficientERC20BalanceError, Hr as getTokenPairsLengthContract, Ht as WrappersRegistryConfig, In as RelayerRequestFailedError, Ir as TokenWrapperPair, Jn as DelegationCooldownError, Jr as isHandleDelegatedContract, Kn as AclPausedError, Kr as getDelegationExpiryContract, Ln as BalanceCheckUnavailableError, Lr as TokenWrapperPairWithMetadata, Mn as WalletNotConnectedError, Mr as WILDCARD_PERMIT, Nn as RpcRateLimitError, Nr as WildcardPermit, On as SigningRejectedError, Or as PreparedPermitV2, Ot as BatchBalancesResult, Pn as NotEntitledError, Pr as ChecksummedAddress, Qn as DelegationExpiredError, Qr as ERC7984_INTERFACE_ID, Rn as BalanceErrorDetails, Rr as getConfidentialTokenAddressContract, Si as wrapContract, Sn as matchZamaError, Sr as PermissionV1, Tn as TransactionRevertedError, Tr as PreparedPermit, Un as DecryptionFailedError, Ur as getTokenPairsSliceContract, Vn as InsufficientConfidentialBalanceError, Vr as getTokenPairsContract, Vt as WrappersRegistry, Wn as EncryptOffloadUnavailableError, Wr as isConfidentialTokenValidContract, Xn as DelegationDelegateEqualsContractError, Xr as transferAndCallContract, Yn as DelegationDelegateCannotBeWildcardError, Yr as revokeDelegationContract, Zn as DelegationExpirationTooSoonError, Zr as ERC1363_INTERFACE_ID, _i as setOperatorContract, _r as ZamaErrorCode, a as ZamaSDK, ai as balanceOfContract, ar as InvalidationTimestampTooLowError, bi as unwrapFromBalanceContract, bn as Permits, br as Permission, c as BatchDecryptItem, ci as symbolContract, cr as PreparedPermitChainMismatchError, di as confidentialTransferContract, dr as TransportKeyPairChangedError, ei as isConfidentialTokenContract, er as DelegationNotFoundError, fi as confidentialTransferFromContract, fr as TransportKeyPairExpiredError, gi as rateContract, gr as ZamaError, hi as isOperatorContract, hr as ChainMismatchError, ii as approveContract, ir as InvalidationTimestampInFutureError, jn as WalletAccountNotReadyError, jr as SerializedTransportKeyPair, kn as SignerNotConfiguredError, kr as SerializedPermit, kt as BatchDecryptAsOptions, l as BatchDecryptResult, li as confidentialBalanceOfContract, lr as PreparedPermitExpiredError, mi as inferredTotalSupplyContract, mr as UnifiedPermitNotSupportedError, n as DecryptResult, ni as supportsInterfaceContract, nr as DelegationSelfNotAllowedError, o as ZamaSDKOptions, oi as decimalsContract, or as KeyWrappingError, pi as finalizeUnwrapContract, pr as UnifiedDecryptionUnsupportedError, qn as DelegationContractIsSelfError, qr as invalidateDecryptionSignaturesBeforeContract, r as EncryptedInput, ri as allowanceContract, rr as InvalidTransportKeyPairError, s as Offline, si as nameContract, sr as NoCiphertextError, t as Decryption, ti as isConfidentialWrapperContract, tr as DelegationNotPropagatedError, u as DelegatedDecryptOptions, ui as confidentialTotalSupplyContract, ur as RevokedKmsContextError, vi as underlyingContract, vn as Delegations, vr as isRetryable, wn as UnshieldAlreadyFinalizedError, wr as PreparePermitRequest, xi as unwrapRequesterContract, xn as ErrorForCode, xr as PermissionBase, yi as unwrapContract, yn as DelegationStatus, yr as retryAfterSeconds, zn as ERC20ReadFailedError, zr as getTokenAddressContract, zt as DefaultRegistryAddresses } from "./index-DRrrBtMX.js";
|
|
7
|
+
import { t as ZamaConfigViem } from "./types-BRIpBy9n.js";
|
|
8
|
+
import { Address, Hex } from "viem";
|
|
9
|
+
//#region src/contracts/constants.d.ts
|
|
10
|
+
/** uint64 max — represents a permanent (no-expiry) delegation. */
|
|
11
|
+
declare const MAX_UINT64: bigint;
|
|
12
|
+
/**
|
|
13
|
+
* `contractAddress` covering every confidential contract with a single
|
|
14
|
+
* delegation.
|
|
15
|
+
*/
|
|
16
|
+
declare const WILDCARD_CONTRACT: "0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF";
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region src/storage/memory-storage.d.ts
|
|
19
|
+
/** In-memory credential store. Credentials are lost on page reload. */
|
|
20
|
+
declare class MemoryStorage implements GenericStorage {
|
|
21
|
+
#private;
|
|
22
|
+
/**
|
|
23
|
+
* Retrieve a value by key.
|
|
24
|
+
* @returns The stored value, or `null` if the key does not exist.
|
|
25
|
+
*/
|
|
26
|
+
get<T = unknown>(key: string): Promise<T | null>;
|
|
27
|
+
/** Store a value under the given key, overwriting any existing entry. */
|
|
28
|
+
set<T = unknown>(key: string, value: T): Promise<void>;
|
|
29
|
+
/** Remove the entry for the given key (no-op if absent). */
|
|
30
|
+
delete(key: string): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
/** Default singleton for application-wide use. */
|
|
33
|
+
declare const memoryStorage: MemoryStorage;
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region src/storage/indexeddb-storage.d.ts
|
|
36
|
+
/**
|
|
37
|
+
* IndexedDB-backed {@link GenericStorage}.
|
|
38
|
+
*
|
|
39
|
+
* Stores keypair and permit objects keyed by a hashed wallet address. The
|
|
40
|
+
* SDK delegates security to the storage backend — values are persisted
|
|
41
|
+
* verbatim with no SDK-layer encryption.
|
|
42
|
+
*/
|
|
43
|
+
declare class IndexedDBStorage implements GenericStorage {
|
|
44
|
+
#private;
|
|
45
|
+
constructor(dbName?: string, dbVersion?: number, storeName?: string);
|
|
46
|
+
/**
|
|
47
|
+
* Retrieve a value by key.
|
|
48
|
+
* @returns The stored value, or `null` if the key does not exist.
|
|
49
|
+
*/
|
|
50
|
+
get<T = unknown>(key: string): Promise<T | null>;
|
|
51
|
+
/** Store a value under the given key, overwriting any existing entry. */
|
|
52
|
+
set<T = unknown>(key: string, value: T): Promise<void>;
|
|
53
|
+
/** Remove the entry for the given key (no-op if absent). */
|
|
54
|
+
delete(key: string): Promise<void>;
|
|
55
|
+
/** Remove all stored entries. */
|
|
56
|
+
clear(): Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
/** Default singleton for application-wide use. */
|
|
59
|
+
declare const indexedDBStorage: IndexedDBStorage;
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region src/storage/chrome-session-storage.d.ts
|
|
62
|
+
/**
|
|
63
|
+
* {@link GenericStorage} backed by `chrome.storage.session`.
|
|
64
|
+
*
|
|
65
|
+
* Use this in MV3 web extensions so the wallet signature survives
|
|
66
|
+
* service worker restarts and is shared across popup, background,
|
|
67
|
+
* and content script contexts.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* import { ZamaSDK, indexedDBStorage, chromeSessionStorage } from "@zama-fhe/sdk";
|
|
72
|
+
* import { createConfig } from "@zama-fhe/sdk/viem";
|
|
73
|
+
*
|
|
74
|
+
* const config = createConfig({
|
|
75
|
+
* chains: [mySepolia],
|
|
76
|
+
* publicClient,
|
|
77
|
+
* walletClient,
|
|
78
|
+
* relayers: { [mySepolia.id]: web() },
|
|
79
|
+
* storage: indexedDBStorage, // encrypted transport key pair — persistent
|
|
80
|
+
* permitStorage: chromeSessionStorage, // signed permits — ephemeral
|
|
81
|
+
* });
|
|
82
|
+
* const sdk = new ZamaSDK(config);
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
declare class ChromeSessionStorage implements GenericStorage {
|
|
86
|
+
/**
|
|
87
|
+
* Retrieve a value by key.
|
|
88
|
+
* @returns The stored value, or `null` if the key does not exist.
|
|
89
|
+
*/
|
|
90
|
+
get<T = unknown>(key: string): Promise<T | null>;
|
|
91
|
+
/** Store a value under the given key, overwriting any existing entry. */
|
|
92
|
+
set(key: string, value: unknown): Promise<void>;
|
|
93
|
+
/** Remove the entry for the given key (no-op if absent). */
|
|
94
|
+
delete(key: string): Promise<void>;
|
|
95
|
+
}
|
|
96
|
+
/** Default singleton for application-wide use. */
|
|
97
|
+
declare const chromeSessionStorage: ChromeSessionStorage;
|
|
98
|
+
//#endregion
|
|
99
|
+
//#region src/utils/handles.d.ts
|
|
100
|
+
/** All-zero encrypted-value sentinel — a 32-byte zero handle representing the cleartext value `0`. */
|
|
101
|
+
declare const ZERO_ENCRYPTED_VALUE: "0x0000000000000000000000000000000000000000000000000000000000000000";
|
|
102
|
+
/**
|
|
103
|
+
* Check whether an encrypted value represents the zero value.
|
|
104
|
+
*/
|
|
105
|
+
declare function isEncryptedValueZero(encryptedValue: string): boolean;
|
|
106
|
+
//#endregion
|
|
107
|
+
export { ACL_TOPICS, type AclEvent, AclPausedError, AclTopics, type Address, type ApprovalStrategy, type ApproveUnderlyingRequest, type ApproveUnderlyingSubmittedEvent, type AtLeastOneChain, BalanceCheckUnavailableError, type BalanceErrorDetails, type BaseEvent, BaseSigner, type BatchBalancesResult, type BatchDecryptAsOptions, type BatchDecryptItem, type BatchDecryptResult, ChainMismatchError, type ChecksummedAddress, ChromeSessionStorage, type ClearValue, type CleartextRelayerConfig, type ConfidentialTransferEvent, type ConfidentialTransferFromRequest, type ConfidentialTransferRequest, ConfigurationError, type ContractAbi, type DecryptEndEvent, type DecryptErrorEvent, type EncryptedInput as DecryptInput, type DecryptPublicValuesResult, type DecryptResult, type DecryptStartEvent, type DecryptValuesParameters, Decryption, DecryptionFailedError, DefaultRegistryAddresses, type DelegateDecryptionRequest, type DelegatedDecryptOptions, type DelegatedForUserDecryptionEvent, DelegationContractIsSelfError, DelegationCooldownError, DelegationDelegateCannotBeWildcardError, DelegationDelegateEqualsContractError, DelegationExpirationTooSoonError, DelegationExpiredError, DelegationExpiryUnchangedError, DelegationNotFoundError, DelegationNotPropagatedError, DelegationSelfNotAllowedError, type DelegationStatus, type DelegationSubmittedEvent, Delegations, type EIP712TypedData, ERC1363_INTERFACE_ID, ERC20ReadFailedError, ERC7984_INTERFACE_ID, ERC7984_WRAPPER_INTERFACE_ID, type EncryptEndEvent, type EncryptErrorEvent, type EncryptInput, EncryptOffloadUnavailableError, type EncryptParams, type EncryptResult, type EncryptStartEvent, type EncryptedValue, EncryptionFailedError, type ErrorForCode, type FheChain, type FheChainAuth, type FhevmClient, type FhevmClientOptions, type FhevmRelayerOptions, type FhevmRuntimeConfig, type FinalizeUnwrapRequest, type FinalizeUnwrapSubmittedEvent, type GenericLogger, type GenericProvider, type GenericSigner, type GenericStorage, type Hex, IndexedDBStorage, InsufficientAllowanceError, InsufficientConfidentialBalanceError, InsufficientERC20BalanceError, InvalidTransportKeyPairError, type InvalidateDecryptionSignaturesSubmittedEvent, InvalidationTimestampInFutureError, InvalidationTimestampTooLowError, KeyWrappingError, type ListPairsOptions, MAX_UINT64, MemoryStorage, MutableWalletAccountStore, NoCiphertextError, NotEntitledError, Offline, type OnChainEvent, type PaginatedResult, type Permission, type PermissionBase, type PermissionV1, type PermissionV2, type PermitErrorEvent, type PermitOperation, Permits, type PrepareFees, type PrepareOptions, type PreparePermitRequest, type PrepareTransactionRequest, type PreparedFor, type PreparedPermit, type PreparedPermitBase, PreparedPermitChainMismatchError, PreparedPermitExpiredError, type PreparedPermitV1, type PreparedPermitV2, type PreparedTransaction, type RawLog, type ReadContractArgs, type ReadContractConfig, type ReadContractReturnType, type ReadFunctionName, type RelayerConfig, type RelayerOptions, RelayerRequestFailedError, type RelayerSDK, type RevokeDelegationRequest, type RevokeDelegationSubmittedEvent, type RevokedDelegationForUserDecryptionEvent, RevokedKmsContextError, RpcRateLimitError, type SerializedPermit, type SerializedPermitEip712, type SerializedTransportKeyPair, type SetOperatorRequest, type SetOperatorSubmittedEvent, type ShieldCallbacks, type ShieldOptions, type ShieldPath, type ShieldSubmittedEvent, SignerNotConfiguredError, SignerRequiredError, type SigningErrorMetadata, SigningFailedError, SigningRejectedError, TOKEN_TOPICS, Token, type TokenWrapperPair, type TokenWrapperPairWithMetadata, Topics, type TransactionErrorEvent, type TransactionKind, type TransactionOperation, type TransactionReceipt, type TransactionResult, TransactionRevertedError, type TransferAndCallRequest, type TransferCallbacks, type TransferFromSubmittedEvent, type TransferOptions, type TransferSubmittedEvent, TransportKeyPairChangedError, TransportKeyPairExpiredError, type TypedValue, UnifiedDecryptionUnsupportedError, UnifiedPermitNotSupportedError, type UnshieldAlreadyFinalizedDetails, UnshieldAlreadyFinalizedError, type UnshieldCallbacks, type UnshieldOptions, type UnshieldPhase1SubmittedEvent, type UnshieldPhase2StartedEvent, type UnshieldPhase2SubmittedEvent, type UnwrapAllRequest, type UnwrapFinalizedEvent, type UnwrapRequest, type UnwrapRequestedEvent, type UnwrapResult, type UnwrapSubmittedEvent, WILDCARD_CONTRACT, WILDCARD_PERMIT, type WalletAccount, type WalletAccountChange, type WalletAccountListener, WalletAccountNotReadyError, type WalletAccountStore, WalletNotConnectedError, type WildcardPermit, type WrapEvent, type WrapOptions, type WrapRequest, type WrapSubmittedEvent, WrappedToken, WrappersRegistry, type WrappersRegistryConfig, type WriteContractArgs, type WriteContractConfig, type WriteFunctionName, ZERO_ENCRYPTED_VALUE, type ZamaConfig, type ZamaConfigBase, type ZamaConfigEthers, type ZamaConfigGeneric, type ZamaConfigViem, ZamaError, ZamaErrorCode, ZamaSDK, type ZamaSDKEvent, type ZamaSDKEventListener, type ZamaSDKEventType, ZamaSDKEvents, type ZamaSDKOptions, allowanceContract, anvil, approveContract, balanceOfContract, bscTestnet, chains, chromeSessionStorage, cleartext, confidentialBalanceOfContract, confidentialTotalSupplyContract, confidentialTransferContract, confidentialTransferFromContract, createConfig, createWalletAccountStore, decimalsContract, decodeAclEvent, decodeAclEvents, decodeConfidentialTransfer, decodeDelegatedForUserDecryption, decodeOnChainEvent, decodeOnChainEvents, decodeRevokedDelegationForUserDecryption, decodeUnwrapFinalized, decodeUnwrapRequested, decodeWrap, delegateForUserDecryptionContract, finalizeUnwrapContract, findDelegatedForUserDecryption, findRevokedDelegationForUserDecryption, findUnwrapRequested, findWrap, getConfidentialTokenAddressContract, getDelegationExpiryContract, getTokenAddressContract, getTokenPairContract, getTokenPairsContract, getTokenPairsLengthContract, getTokenPairsSliceContract, hardhat, hoodi, indexedDBStorage, inferredTotalSupplyContract, ingenTestnet, invalidateDecryptionSignaturesBeforeContract, isConfidentialTokenContract, isConfidentialTokenValidContract, isConfidentialWrapperContract, isEncryptedValueZero, isHandleDelegatedContract, isOperatorContract, isRetryable, mainnet, matchZamaError, memoryStorage, nameContract, polygon, polygonAmoy, rateContract, retryAfterSeconds, revokeDelegationContract, sepolia, setOperatorContract, supportsInterfaceContract, symbolContract, transferAndCallContract, underlyingContract, unwrapContract, unwrapFromBalanceContract, unwrapRequesterContract, wrapContract };
|
|
108
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{S as e,_ as t,a as n,b as r,c as i,d as a,g as o,h as s,i as c,m as l,n as u,o as d,p as f,r as p,s as m,t as h,v as ee}from"./relayer-CVKO9GmQ.js";import{$ as g,A as te,C as ne,D as re,F as ie,G as _,H as ae,I as oe,J as se,K as v,L as y,M as ce,N as le,O as b,P as ue,Q as de,R as x,S as fe,T as pe,U as me,V as he,W as ge,X as _e,Z as ve,_ as S,a as ye,b as be,c as xe,d as Se,et as Ce,f as we,g as C,h as w,i as Te,j as Ee,k as De,l as Oe,m as ke,n as Ae,nt as je,o as Me,p as Ne,q as Pe,r as Fe,rt as Ie,s as Le,t as Re,tt as T,u as ze,v as Be,x as Ve,z as E}from"./wrappers-registry-BLe7PkZi.js";import{n as He,r as D,t as O}from"./encryption-BKoalB4o.js";import{a as Ue,c as k,d as A,f as We,g as j,h as Ge,i as M,l as Ke,m as qe,n as Je,o as Ye,p as Xe,r as Ze,s as Qe,t as $e,u as et}from"./token-BejFVO8m.js";import{t as tt}from"./cleartext-iE4sWgSP.js";import{_ as nt,a as rt,c as it,d as N,f as P,g as at,h as ot,i as st,l as ct,m as lt,n as ut,o as dt,p as ft,r as pt,s as mt,t as ht,u as gt}from"./base-signer-DGIEzavu.js";import{t as F}from"./validation-BRu06AM_.js";import{a as _t,c as vt,i as yt,l as bt,n as xt,o as St,r as Ct,s as wt,t as Tt,u as Et}from"./chains-ByyCdrrd.js";import{r as Dt,t as Ot}from"./assertions-Ca1ePdRJ.js";import{getAddress as I,keccak256 as kt,size as At,toBytes as jt,zeroAddress as Mt}from"viem";import{z as L}from"zod/mini";function Nt(e,t){if(e instanceof p){let n=t[e.code];if(n)return n(e)}return t._?.(e)}var Pt=class extends p{encryptedValue;contractAddress;account;constructor(e,t){super(c.NotEntitled,`Account ${e.account} is not entitled to decrypt encrypted value ${e.encryptedValue} on contract ${e.contractAddress}. This is not a transient failure — the account needs an on-chain ACL grant before it can decrypt this encrypted value.`,t),this.name=`NotEntitledError`,this.encryptedValue=e.encryptedValue,this.contractAddress=e.contractAddress,this.account=e.account}},R=class extends p{constructor(e,t){super(c.DelegationSelfNotAllowed,e,t),this.name=`DelegationSelfNotAllowedError`}},Ft=class extends p{constructor(e,t){super(c.DelegationCooldown,e,t),this.name=`DelegationCooldownError`}},z=class extends p{constructor(e,t){super(c.DelegationNotFound,e,t),this.name=`DelegationNotFoundError`}},B=class extends p{constructor(e,t){super(c.DelegationExpired,e,t),this.name=`DelegationExpiredError`}},V=class extends p{constructor(e,t){super(c.DelegationExpiryUnchanged,e,t),this.name=`DelegationExpiryUnchangedError`}},H=class extends p{constructor(e,t){super(c.DelegationDelegateEqualsContract,e,t),this.name=`DelegationDelegateEqualsContractError`}},It=class extends p{constructor(e,t){super(c.DelegationContractIsSelf,e,t),this.name=`DelegationContractIsSelfError`}},Lt=class extends p{constructor(e,t){super(c.AclPaused,e,t),this.name=`AclPausedError`}},U=class extends p{constructor(e,t){super(c.DelegationExpirationTooSoon,e,t),this.name=`DelegationExpirationTooSoonError`}},W=class extends p{constructor(e,t){super(c.DelegationNotPropagated,e,t),this.name=`DelegationNotPropagatedError`}};function Rt(e){if(!(e instanceof Error))return null;let t=e.cause;if(typeof t!=`object`||!t||!(`data`in t))return null;let{data:n}=t;return typeof n!=`object`||!n||!(`errorName`in n)?null:typeof n.errorName==`string`?n.errorName:null}var zt=class extends p{unwrapTxHash;unwrapRequestId;constructor(e,t,n){super(c.UnshieldAlreadyFinalized,e,n),this.name=`UnshieldAlreadyFinalizedError`,this.unwrapTxHash=t.unwrapTxHash,this.unwrapRequestId=t.unwrapRequestId}};const Bt=`InvalidUnwrapRequest`,Vt=kt(jt(`${Bt}(bytes32)`)).slice(0,10);function Ht(e){for(let t=e;t instanceof Error;t=t.cause)if(Rt(t)===Bt||t.message.includes(Bt)||t.message.includes(Vt))return!0;return!1}const Ut=[O,de,u,W,se,Pe,Pt,j,_e,T];function G(e,n,c={}){if(Ut.some(t=>e instanceof t))return e;let d=e instanceof Error?e.message:n;if(e instanceof Error&&f(e.message))return new _e(e.message,{cause:e});if(t(e))return new T(`The permit's KMS context has been revoked on-chain, so the permit is no longer usable. The SDK evicts the permit and re-grants automatically; if this error surfaced, the retry failed the same way. The on-chain validity check is cached for up to 15 minutes, so a just-revoked context can keep failing across that window. Retry after the window; the SDK re-runs the recovery on the next decrypt, no manual cleanup is needed.`,{cause:e});if(e instanceof Error&&l(e.message))return c.isDelegated?new W(`Delegated decryption was denied by the on-chain ACL check. This is most commonly caused by the delegation not having propagated yet, or by the RPC node serving a stale block. Propagation usually completes within ~10 blocks (a few seconds) and the SDK retries across that window; seeing this means it did not sync in time. Retry shortly (and prefer a fresh, low-lag RPC endpoint). If it persists, the delegator may genuinely lack the on-chain ACL grant.`,{cause:e}):new Pt({encryptedValue:r(e.message)??``,contractAddress:c.contractAddress??``,account:c.account??``},{cause:e});if(a(e))return new j(d,{cause:e,retryAfter:i(e)});let p=m(e);return p===void 0&&ee(e)?new j(d,{cause:e,retryAfter:i(e)}):p===400?new de(e instanceof Error?e.message:`No ciphertext for this account`,{cause:e}):c.isDelegated&&p===500?new W(`Delegated decryption failed with a server error. This is most commonly caused by the delegation not having propagated to the gateway yet. Cross-chain sync usually completes within ~10 blocks (a few seconds) and the SDK retries across that window; seeing this means it did not sync in time — retry shortly. If the error persists, the gateway or relayer may be experiencing an unrelated issue.`,{cause:e}):s(e)||p!==void 0?new u(d,p,{cause:e,retryAfter:i(e),retryable:o(e)||void 0}):new O(n,{cause:e})}function Wt(e,t){if(e instanceof p)return e;let n=m(e),r=o(e);return n!==void 0||s(e)?new u(e instanceof Error?e.message:t,n,{cause:e,retryAfter:i(e),retryable:r||void 0}):new D(t,{cause:e})}const Gt=[{type:`function`,name:`allowance`,inputs:[{name:`owner`,type:`address`,internalType:`address`},{name:`spender`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`uint256`,internalType:`uint256`}],stateMutability:`view`},{type:`function`,name:`approve`,inputs:[{name:`spender`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`approveAndCall`,inputs:[{name:`spender`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`approveAndCall`,inputs:[{name:`spender`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`},{name:`data`,type:`bytes`,internalType:`bytes`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`balanceOf`,inputs:[{name:`account`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`uint256`,internalType:`uint256`}],stateMutability:`view`},{type:`function`,name:`supportsInterface`,inputs:[{name:`interfaceId`,type:`bytes4`,internalType:`bytes4`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`totalSupply`,inputs:[],outputs:[{name:``,type:`uint256`,internalType:`uint256`}],stateMutability:`view`},{type:`function`,name:`transfer`,inputs:[{name:`to`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`transferAndCall`,inputs:[{name:`to`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`transferAndCall`,inputs:[{name:`to`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`},{name:`data`,type:`bytes`,internalType:`bytes`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`transferFrom`,inputs:[{name:`from`,type:`address`,internalType:`address`},{name:`to`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`transferFromAndCall`,inputs:[{name:`from`,type:`address`,internalType:`address`},{name:`to`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`},{name:`data`,type:`bytes`,internalType:`bytes`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`transferFromAndCall`,inputs:[{name:`from`,type:`address`,internalType:`address`},{name:`to`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`event`,name:`Approval`,inputs:[{name:`owner`,type:`address`,indexed:!0,internalType:`address`},{name:`spender`,type:`address`,indexed:!0,internalType:`address`},{name:`value`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1},{type:`event`,name:`Transfer`,inputs:[{name:`from`,type:`address`,indexed:!0,internalType:`address`},{name:`to`,type:`address`,indexed:!0,internalType:`address`},{name:`value`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1}];function Kt(e,t,n,r=`0x`){return{address:e,abi:Gt,functionName:`transferAndCall`,args:[t,n,r]}}const K=[{type:`function`,name:`allow`,inputs:[{name:`handle`,type:`bytes32`,internalType:`bytes32`},{name:`account`,type:`address`,internalType:`address`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`allowForDecryption`,inputs:[{name:`handlesList`,type:`bytes32[]`,internalType:`bytes32[]`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`allowTransient`,inputs:[{name:`ciphertext`,type:`bytes32`,internalType:`bytes32`},{name:`account`,type:`address`,internalType:`address`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`cleanTransientStorage`,inputs:[],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`delegateForUserDecryption`,inputs:[{name:`delegate`,type:`address`,internalType:`address`},{name:`contractAddress`,type:`address`,internalType:`address`},{name:`expirationDate`,type:`uint64`,internalType:`uint64`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`getUserDecryptionDelegationExpirationDate`,inputs:[{name:`delegator`,type:`address`,internalType:`address`},{name:`delegate`,type:`address`,internalType:`address`},{name:`contractAddress`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`uint64`,internalType:`uint64`}],stateMutability:`view`},{type:`function`,name:`isAccountDenied`,inputs:[{name:`account`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`isAllowed`,inputs:[{name:`handle`,type:`bytes32`,internalType:`bytes32`},{name:`account`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`isAllowedForDecryption`,inputs:[{name:`handle`,type:`bytes32`,internalType:`bytes32`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`isHandleDelegatedForUserDecryption`,inputs:[{name:`delegator`,type:`address`,internalType:`address`},{name:`delegate`,type:`address`,internalType:`address`},{name:`contractAddress`,type:`address`,internalType:`address`},{name:`handle`,type:`bytes32`,internalType:`bytes32`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`multicall`,inputs:[{name:`data`,type:`bytes[]`,internalType:`bytes[]`}],outputs:[{name:`results`,type:`bytes[]`,internalType:`bytes[]`}],stateMutability:`payable`},{type:`function`,name:`persistAllowed`,inputs:[{name:`handle`,type:`bytes32`,internalType:`bytes32`},{name:`account`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`revokeDelegationForUserDecryption`,inputs:[{name:`delegate`,type:`address`,internalType:`address`},{name:`contractAddress`,type:`address`,internalType:`address`}],outputs:[],stateMutability:`nonpayable`}];function qt(e,t,n,r){return{address:e,abi:K,functionName:`delegateForUserDecryption`,args:[t,n,r]}}function Jt(e,t,n){return{address:e,abi:K,functionName:`revokeDelegationForUserDecryption`,args:[t,n]}}function Yt(e,t,n,r){return{address:e,abi:K,functionName:`getUserDecryptionDelegationExpirationDate`,args:[t,n,r]}}function Xt(e,t,n,r,i){return{address:e,abi:K,functionName:`isHandleDelegatedForUserDecryption`,args:[t,n,r,i]}}const Zt=2n**64n-1n;function Qt(e){return st(e.signer,e.provider,e)}function $t(e){return e.startsWith(`0x`)?e:`0x${e}`}function q(e){return kt(jt(e))}const J={ConfidentialTransfer:q(`ConfidentialTransfer(address,address,bytes32)`),Wrap:q(`Wrap(address,uint256,bytes32)`),UnwrapRequested:q(`UnwrapRequested(address,bytes32,bytes32)`),UnwrapFinalized:q(`UnwrapFinalized(address,bytes32,bytes32,uint64)`)};function Y(e){return I($t(e.slice(-40)))}function en(e){return e}function tn(e,t){let n=2+t*64,r=e.slice(n,n+64);return r.length===64?r:r.padEnd(64,`0`)}function nn(e,t){return I($t(tn(e,t).slice(-40)))}function X(e,t){return BigInt(`0x`+tn(e,t))}function rn(e,t){return $t(tn(e,t))}function an(e){return e.topics[0]!==J.ConfidentialTransfer||e.topics.length<4?null:{eventName:`ConfidentialTransfer`,from:Y(e.topics[1]),to:Y(e.topics[2]),encryptedAmount:en(e.topics[3])}}function on(e){return e.topics[0]!==J.Wrap||e.topics.length<2?null:{eventName:`Wrap`,to:Y(e.topics[1]),roundedAmount:X(e.data,0),encryptedWrappedAmount:rn(e.data,1)}}function sn(e){return e.topics[0]!==J.UnwrapRequested||e.topics.length<3?null:{eventName:`UnwrapRequested`,receiver:Y(e.topics[1]),unwrapRequestId:en(e.topics[2]),encryptedAmount:rn(e.data,0)}}function cn(e){return e.topics[0]!==J.UnwrapFinalized||e.topics.length<3?null:{eventName:`UnwrapFinalized`,receiver:Y(e.topics[1]),unwrapRequestId:en(e.topics[2]),encryptedAmount:rn(e.data,0),cleartextAmount:X(e.data,1)}}function ln(e){return an(e)??on(e)??sn(e)??cn(e)}function un(e){let t=[];for(let n of e){let e=ln(n);e&&t.push(e)}return t}function dn(e){for(let t of e){let e=sn(t);if(e)return e}return null}function fn(e){for(let t of e){let e=on(t);if(e)return e}return null}const pn=[J.ConfidentialTransfer,J.Wrap,J.UnwrapRequested,J.UnwrapFinalized],Z={DelegatedForUserDecryption:q(`DelegatedForUserDecryption(address,address,address,uint64,uint64,uint64)`),RevokedDelegationForUserDecryption:q(`RevokedDelegationForUserDecryption(address,address,address,uint64,uint64)`)};function Q(e){return e.topics[0]!==Z.DelegatedForUserDecryption||e.topics.length<3?null:{eventName:`DelegatedForUserDecryption`,delegator:Y(e.topics[1]),delegate:Y(e.topics[2]),contractAddress:nn(e.data,0),delegationCounter:X(e.data,1),oldExpirationDate:X(e.data,2),newExpirationDate:X(e.data,3)}}function mn(e){return e.topics[0]!==Z.RevokedDelegationForUserDecryption||e.topics.length<3?null:{eventName:`RevokedDelegationForUserDecryption`,delegator:Y(e.topics[1]),delegate:Y(e.topics[2]),contractAddress:nn(e.data,0),delegationCounter:X(e.data,1),oldExpirationDate:X(e.data,2)}}function hn(e){return Q(e)??mn(e)}function gn(e){let t=[];for(let n of e){let e=hn(n);e&&t.push(e)}return t}function _n(e){for(let t of e){let e=Q(t);if(e)return e}return null}function vn(e){for(let t of e){let e=mn(t);if(e)return e}return null}const yn=[Z.DelegatedForUserDecryption,Z.RevokedDelegationForUserDecryption];var bn=class{#e;#t;#n;#r;#i;#a;constructor(e){this.#e=e.signer,this.#t=e.provider,this.#n=e.cachingService,this.#r=e.credentialService,this.#i=e.logger,this.#a=e.emitEvent}#o(e){return _(this.#r,e)}#s(e,t){throw this.#a({type:E.PermitError,operation:e,error:t instanceof Error?t:Error(String(t))}),t}async grantPermit(e){if(e.length===0)return;let t;try{t=this.#o(`grantPermit`),await Ue(`grantPermit`,this.#e,this.#t)}catch(e){this.#s(`grantPermit`,e)}await t.grantPermit(e)}async grantDelegationPermit(e,t){if(t.length===0)return;let n;try{n=this.#o(`grantDelegationPermit`),await Ue(`grantDelegationPermit`,this.#e,this.#t)}catch(e){this.#s(`grantDelegationPermit`,e)}await n.grantPermit(t,e)}async hasPermit(e){return this.#r?this.#r.hasPermit(e):!1}async hasDelegationPermit(e,t){return this.#r?this.#r.hasPermit(t,e):!1}async warmTransportKeyPair(){let e=this.#r;if(!e)return;let t=this.#e?.walletAccount.getSnapshot();t&&await e.warmTransportKeyPair(t.address)}async registerPermit(e,t){let n;try{n=this.#o(`registerPermit`)}catch(e){this.#s(`registerPermit`,e)}await n.registerPermit(e,t),await this.#c(e.signerAddress)}async revokePermits(e){let t=this.#o(`revokePermits`),n=I((await M(`revokePermits`,this.#e,this.#t)).address);try{await t.revokePermits(e)}finally{await this.#c(n)}}async clear(){let e=this.#o(`clear`),t=I((await M(`clear`,this.#e,this.#t)).address);try{await e.clearCredentials()}finally{await this.#c(t)}}async#c(e){await x(`clear decrypt cache`,()=>this.#n.clearForRequester(e),this.#i)}async revokeTransportKeyPair(e){await this.#o(`revokeTransportKeyPair`).revokeTransportKeyPair(e)}async warmTransportKeyPairScope(e){await this.#o(`warmTransportKeyPairScope`).warmTransportKeyPairScope(e)}},xn=class{#e;#t;#n;constructor(e){this.#e=e.signer,this.#t=e.provider,this.#n=e.delegationService}#r(e){return _(this.#e,e)}async delegateDecryption({contractAddress:e,delegateAddress:t,expirationDate:n}){let r=this.#r(`delegateDecryption`),i=await M(`delegateDecryption`,this.#e,this.#t);return this.#n.delegateDecryption(r,{contractAddress:e,delegateAddress:t,delegatorAddress:i.address,expirationDate:n})}async revokeDelegation({contractAddress:e,delegateAddress:t}){let n=this.#r(`revokeDelegation`),r=await M(`revokeDelegation`,this.#e,this.#t);return this.#n.revokeDelegation(n,{contractAddress:e,delegateAddress:t,delegatorAddress:r.address})}async isActive(e){return this.#n.isDelegated(e)}async getExpiry(e){return this.#n.getDelegationExpiry(e)}async getStatus(e){return this.#n.getStatus(e)}},Sn=class{#e;#t;#n;#r;constructor(e){this.#e=e.signer,this.#t=e.provider,this.#n=e.router,this.#r=e.decryptionService}#i(e){return _(this.#r,e)}async decryptValues(e,t){let n=this.#i(`decryptValues`),r=await M(`decryptValues`,this.#e,this.#t);return n.decryptValues(e,r.address,t)}async delegatedDecryptValues(e,t,n=t,r){let i=this.#i(`delegatedDecryptValues`),a=await M(`delegatedDecryptValues`,this.#e,this.#t);return i.delegatedDecryptValues(e,t,a.address,n,r)}async decryptPublicValues(e,t){if(e.length===0)return{clearValues:{},decryptionProof:`0x`,abiEncodedClearValues:`0x`};try{let n=await this.#n.relayer.decryptPublicValuesWithSignatures({encryptedValues:e,options:t}),r={};return n.checkSignaturesArgs.handlesList.forEach((e,t)=>{Dt(n.clearValues[t],`result.clearValues[${t}]`),r[e]=n.clearValues[t].value}),{clearValues:r,abiEncodedClearValues:n.checkSignaturesArgs.abiEncodedCleartexts,decryptionProof:n.checkSignaturesArgs.decryptionProof}}catch(e){throw G(e,`Public decryption failed`)}}async delegatedBatchDecryptValues({encryptedInputs:e,delegatorAddress:t,accountAddress:n=t,maxConcurrency:r,waitForPropagation:i}){let a=this.#i(`delegatedBatchDecryptValues`),o=await M(`delegatedBatchDecryptValues`,this.#e,this.#t);return a.delegatedBatchDecryptHandlesAs({encryptedInputs:e,delegatorAddress:t,delegateAddress:o.address,accountAddress:n,maxConcurrency:r,waitForPropagation:i})}},Cn=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t}prepare(e,t){return this.#e.prepare(e,t)}preparePermit(e){return this.#t.preparePermit(e)}},wn=class{async get(e){return(await chrome.storage.session.get(e))[e]??null}async set(e,t){await chrome.storage.session.set({[e]:t})}async delete(e){await chrome.storage.session.remove(e)}};const Tn=new wn;function $(e){return`zama:pending-unshield:${gt(e)}`}const En=L.union([L.pipe(P,L.transform(e=>({unwrapTxHash:e}))),L.pipe(L.object({version:L.literal(1),unwrapTxHash:P,unwrapRequestId:L.optional(P)}),L.transform(({unwrapTxHash:e,unwrapRequestId:t})=>({unwrapTxHash:e,unwrapRequestId:t})))]);async function Dn(e,t,n,r){if(r===void 0){await e.set($(t),n);return}await e.set($(t),{version:1,unwrapTxHash:n,unwrapRequestId:r})}async function On(e,t){let n=$(t),r=await e.get(n);if(r==null)return null;let i=En.safeParse(r);return i.success?i.data:(await e.delete(n),null)}async function kn(e,t){await e.delete($(t))}var An=class extends $e{#e;#t=null;#n=null;#r(e){try{return Dt(this.sdk.signer,`WrappedToken.sdk.signer`),this.sdk.signer}catch(t){throw new he(e,{cause:t})}}async underlying(){return this.#u()}async isPayable(){if(this.#n!==null)return this.#n;try{let e=await this.#u();this.#n=await this.sdk.provider.readContract(Ne(e))}catch{this.#n=!1}return this.#n}async allowance(e){let t=await this.#u();return this.sdk.provider.readContract(w(t,I(e),this.address))}async shield(t,n){let r=await M(`shield`,this.sdk.signer,this.sdk.provider),i=await this.isPayable(),a=await this.#u(),o=I(r.address),s;try{s=await this.sdk.provider.readContract(S(a,o))}catch(t){throw t instanceof p?t:new A(`Could not read ERC-20 balance for shield validation (token: ${a})`,{cause:e(t)})}if(s<t)throw new qe(`Insufficient ERC-20 balance: requested ${t}, available ${s} (token: ${a})`,{requested:t,available:s,token:a});return i?this.#i(t,a,o,n):this.#a(t,o,n)}async#i(e,t,n,r){this.#r(`shield`);let i=r?.to?I(r.to):n,a=i===n?`0x`:i;return this.submitTransaction({operation:`shield:transferAndCall`,config:Kt(t,this.address,e,a),onSubmitted:r?.onShieldSubmitted})}async wrap(t,n){this.#r(`wrap`);let r=await M(`wrap`,this.sdk.signer,this.sdk.provider),i=await this.#u(),a=I(r.address),o;try{o=await this.sdk.provider.readContract(S(i,a))}catch(t){throw t instanceof p?t:new A(`Could not read ERC-20 balance for wrap validation (token: ${i})`,{cause:e(t)})}if(o<t)throw new qe(`Insufficient ERC-20 balance: requested ${t}, available ${o} (token: ${i})`,{requested:t,available:o,token:i});let s;try{s=await this.sdk.provider.readContract(w(i,a,this.address))}catch(t){throw t instanceof p?t:new A(`Could not read ERC-20 allowance for wrap validation (token: ${i})`,{cause:e(t)})}if(s<t)throw new We(`Insufficient allowance for wrap: requested ${t}, approved ${s}. Call approveUnderlying() first (token: ${i}).`,{requested:t,available:s,token:i});let c=n?.to?I(n.to):a;return this.submitTransaction({operation:`wrap`,config:y(this.address,c,t),onSubmitted:n?.onWrapSubmitted})}async#a(e,t,n){this.#r(`shield`);let r=n?.approvalStrategy??`exact`;r!==`skip`&&await this.#f(e,r===`max`,n);let i=n?.to?I(n.to):t;return this.submitTransaction({operation:`shield:approveAndWrap`,config:y(this.address,i,e),onSubmitted:n?.onShieldSubmitted})}async approveUnderlying(e){this.#r(`approveUnderlying`);let t=await M(`approveUnderlying`,this.sdk.signer,this.sdk.provider),n=await this.#u(),r=I(t.address),i=e??2n**256n-1n;return i>0n&&await this.sdk.provider.readContract(w(n,r,this.address))>0n&&await this.submitTransaction({operation:`approveUnderlying:reset`,config:C(n,this.address,0n)}),this.submitTransaction({operation:`approveUnderlying`,config:C(n,this.address,i)})}async unshield(e,t){let{skipBalanceCheck:n=!1,onUnwrapSubmitted:r,onFinalizing:i,onFinalizeSubmitted:a}=t??{};n||await this.assertConfidentialBalance(e);let o={onFinalizing:i,onFinalizeSubmitted:a},s=crypto.randomUUID(),c=await this.unwrap(e);return x(`unshield: onUnwrapSubmitted`,()=>r?.(c.txHash),this.sdk.logger),this.#d(c.unwrapRequestId,c.txHash,s,o)}async unshieldAll(e){let t=crypto.randomUUID(),n=await this.unwrapAll();return x(`unshieldAll: onUnwrapSubmitted`,()=>e?.onUnwrapSubmitted?.(n.txHash),this.sdk.logger),this.#d(n.unwrapRequestId,n.txHash,t,e)}async resumeUnshield(e,t){let n;try{n=await this.sdk.provider.waitForTransactionReceipt(e)}catch(e){throw e instanceof p?e:new v(`Failed to get unwrap receipt`,{cause:e})}let r=this.#o(n.logs);if(await this.#s(r))throw await this.#l(`resumeUnshield`),new zt(`Nothing to resume: the unwrap request was already finalized on-chain and the funds were delivered.`,{unwrapTxHash:e,unwrapRequestId:r});return this.#d(r,e,crypto.randomUUID(),t)}async getPendingUnshield(){let e=await On(this.sdk.storage,this.address);return e?await this.#c(e)?(await this.#l(`getPendingUnshield`),null):e.unwrapTxHash:null}async unwrap(e){this.#r(`unwrap`);let t=I((await M(`unwrap`,this.sdk.signer,this.sdk.provider)).address),{encryptedValues:n,inputProof:r}=await this.sdk.encrypt({values:[{value:e,type:`euint64`}],contractAddress:this.address,userAddress:t}),[i]=n;if(!i)throw new D(`Encryption returned no encrypted values`);let a=await this.submitTransaction({operation:`unwrap`,config:ue(this.address,t,t,i,r)});return{...a,unwrapRequestId:this.#o(a.receipt.logs)}}async unwrapAll(){this.#r(`unwrapAll`);let e=I((await M(`unwrapAll`,this.sdk.signer,this.sdk.provider)).address),t=await this.readConfidentialBalanceOf(e);if(k(t))throw new O(`Cannot unshield: balance is zero`);let n=await this.submitTransaction({operation:`unwrapAll`,config:ie(this.address,e,e,t)});return{...n,unwrapRequestId:this.#o(n.receipt.logs)}}async finalizeUnwrap(e){this.#r(`finalizeUnwrap`),await Ue(`finalizeUnwrap`,this.sdk.signer,this.sdk.provider);let t=await this.sdk.decryption.decryptPublicValues([e]),n=t.clearValues[e];return Ot(n,`finalizeUnwrap: clearValue`),this.submitTransaction({operation:`finalizeUnwrap`,config:b(this.address,e,n,t.decryptionProof)})}#o(e){let t=dn(e.filter(e=>e.address===void 0||I(e.address)===this.address));if(!t)throw new v(`No UnwrapRequested event from this wrapper found in the unwrap receipt`);return t.unwrapRequestId}async#s(e){try{return await this.sdk.provider.readContract(oe(this.address,e))===Mt}catch{return!1}}async#c(e){let t=e.unwrapRequestId;if(t===void 0)try{let n=await this.sdk.provider.waitForTransactionReceipt(e.unwrapTxHash);t=this.#o(n.logs)}catch{return!1}return this.#s(t)}async#l(e){await x(`${e}: clearPendingUnshield`,()=>kn(this.sdk.storage,this.address),this.sdk.logger)}async#u(){return this.#e===void 0?(this.#t||=this.sdk.provider.readContract(le(this.address)).then(e=>(this.#e=e,this.#t=null,e)).catch(e=>{throw this.#t=null,e}),this.#t):this.#e}async#d(e,t,n,r){this.emit({type:E.UnshieldPhase1Submitted,txHash:t,operationId:n}),await x(`unshield: savePendingUnshield`,()=>Dn(this.sdk.storage,this.address,t,e),this.sdk.logger),this.emit({type:E.UnshieldPhase2Started,operationId:n}),x(`unshield: onFinalizing`,()=>r?.onFinalizing?.(),this.sdk.logger);let i;try{i=await this.finalizeUnwrap(e)}catch(n){throw Ht(n)?(await this.#l(`unshield`),new zt(`The unwrap request was finalized concurrently — the funds were already delivered.`,{unwrapTxHash:t,unwrapRequestId:e},{cause:n})):n}return this.emit({type:E.UnshieldPhase2Submitted,txHash:i.txHash,operationId:n}),x(`unshield: onFinalizeSubmitted`,()=>r?.onFinalizeSubmitted?.(i.txHash),this.sdk.logger),await this.#l(`unshield`),i}async#f(e,t,n){this.#r(`approveUnderlying`);let r=await this.#u(),i=I((await M(`approveUnderlying`,this.sdk.signer,this.sdk.provider)).address),a=await this.sdk.provider.readContract(w(r,i,this.address));if(a>=e)return;a>0n&&await this.submitTransaction({operation:`approveUnderlying:reset`,config:C(r,this.address,0n)});let o=t?2n**256n-1n:e;await this.submitTransaction({operation:`approveUnderlying`,config:C(r,this.address,o),onSubmitted:n?.onApprovalSubmitted})}};const jn=L.union([L.bigint(),L.boolean(),N]),Mn=L.array(L.string());var Nn=class{#e;#t;#n=`zama:decrypt`;#r=`${this.#n}:keys`;#i=Promise.resolve();constructor(e,t){this.#e=e,this.#t=t}async get(e,t,n){try{let r=this.#c(e,t,n),i=await this.#e.get(r);if(i===null)return null;let a=jn.safeParse(i);return a.success?a.data:(await this.delete(e,t,n),null)}catch(e){return this.#t.warn(`CachingService.get failed`,{error:e}),null}}async set(e,t,n,r){try{let i=this.#c(e,t,n);await this.#e.set(i,r),this.#i=this.#i.then(()=>this.#u(i).catch(e=>{this.#t.warn(`CachingService index write failed`,{error:e})})),await this.#i}catch(e){this.#t.warn(`CachingService.set failed`,{error:e})}}async delete(e,t,n){let r=this.#c(e,t,n);this.#i=this.#i.then(()=>this.#a(r).catch(e=>{this.#t.warn(`CachingService.delete failed`,{error:e})})),await this.#i}async clearForRequester(e){this.#i=this.#i.then(()=>this.#o(e).catch(e=>{this.#t.warn(`CachingService.clearForRequester failed`,{error:e})})),await this.#i}async clearAll(){this.#i=this.#i.then(()=>this.#s().catch(e=>{this.#t.warn(`CachingService.clearAll failed`,{error:e})})),await this.#i}async#a(e){await this.#e.delete(e).catch(()=>{});let t=await this.#l(),n=t.filter(t=>t!==e);n.length!==t.length&&await this.#e.set(this.#r,n)}async#o(e){let t=I(e),n=`${this.#n}:${t}:`,r=await this.#l(),i=[],a=[];for(let e of r)e.startsWith(n)?i.push(e):a.push(e);await Promise.all(i.map(e=>this.#e.delete(e).catch(()=>{}))),await this.#e.set(this.#r,a)}async#s(){let e=await this.#l();await Promise.all(e.map(e=>this.#e.delete(e).catch(()=>{}))),await this.#e.delete(this.#r)}#c(e,t,n){return`${this.#n}:${I(e)}:${I(t)}:${n.toLowerCase()}`}async#l(){let e=await this.#e.get(this.#r);if(e===null)return[];let t=Mn.safeParse(e);return t.success?t.data:(await this.#e.delete(this.#r).catch(()=>{}),[])}async#u(e){let t=await this.#l();t.includes(e)||(t.push(e),await this.#e.set(this.#r,t))}};function Pn(e,t){let n=Fn(e,t);if(!n)throw new O(`No permit covers contract ${t} after allow()`);return{privateKey:e.keypair.privateKey,publicKey:e.keypair.publicKey,serializedPermit:n.serializedPermit}}function Fn(e,t){let n=gt(t);return e.permissions.find(e=>e.contractAddresses.includes(n))}const In=e=>new Promise(t=>setTimeout(t,e));var Ln=class{#e;#t;#n;#r;#i;constructor({cache:e,credentialService:t,delegationService:n,router:r,emitEvent:i}){this.#e=e,this.#t=t,this.#n=n,this.#r=r,this.#i=i}async decryptValues(e,t,n){let r=I(t);return this.#s(e,{requesterAddress:r,errorMessage:`Failed to decrypt encrypted values`},n)}async delegatedDecryptValues(e,t,n,r,i){let a=I(t),o=I(n),s={spent:!1};return this.#a(i?.waitForPropagation??!0,()=>this.#s(e,{requesterAddress:I(r),delegator:a,validate:e=>this.#m(e,{delegatorAddress:a,delegateAddress:o}),errorMessage:`Failed to decrypt delegated encrypted values`},void 0,s))}async#a(e,t){let n;for(let r=0;r<16;r++)try{return await t()}catch(t){if(n=t,!(r<15&&e&&t instanceof W))throw t;await In(2e3)}throw n}async delegatedBatchDecryptHandlesAs({encryptedInputs:e,delegatorAddress:t,delegateAddress:n,accountAddress:r,maxConcurrency:i=5,waitForPropagation:a=!0}){let o=e.map(e=>({encryptedValue:e.encryptedValue,contractAddress:I(e.contractAddress)}));if(o.length===0)return{items:o};let s=I(r);try{let e=await this.delegatedDecryptValues(o.map(({encryptedValue:e,contractAddress:t})=>({encryptedValue:e,contractAddress:t})),t,n,s,{waitForPropagation:a});for(let t of o)this.#d(t,e);return{items:o}}catch(e){if(Ke(e))throw e;if(o.length===1){let[n=this.#p()]=o;return n.error=this.#f(e,`Failed to decrypt delegated encrypted values`,{isDelegated:!0,contractAddress:n.contractAddress,account:I(t)}),{items:o}}}let c=!1,l;if(await Ze(o.map(e=>async()=>{if(!c)try{let r=await this.delegatedDecryptValues([{encryptedValue:e.encryptedValue,contractAddress:e.contractAddress}],t,n,s,{waitForPropagation:!1});this.#d(e,r)}catch(n){if(Ke(n)){c=!0,l??=n;return}e.error=this.#f(n,`Failed to decrypt delegated encrypted values`,{isDelegated:!0,contractAddress:e.contractAddress,account:I(t)})}}),i),l!==void 0)throw l;return{items:o}}async#o(e,t,n,r){let i=Pn(e,t),a;try{a=await this.#r.relayer.parseTransportKeyPair({publicKey:i.publicKey,privateKey:i.privateKey,tkmsVersion:e.keypair.tkmsVersion})}catch(e){throw e instanceof Error&&f(e.message)&&await this.#t.evictTransportKeyPair(),e}let o=await this.#r.relayer.parseSignedDecryptionPermit({transportKeyPair:a,serializedPermit:i.serializedPermit});return this.#r.relayer.decryptValues({transportKeyPair:a,signedPermit:o,encryptedValues:n,contractAddress:t,options:r})}async#s(t,n,r,i={spent:!1}){if(t.length===0)return{};let a=t.map(e=>({encryptedValue:e.encryptedValue,contractAddress:I(e.contractAddress)})),o={},s=[];for(let e of a)k(e.encryptedValue)?o[e.encryptedValue]=0n:s.push(e);if(s.length===0)return o;let c=Array.from(new Set(a.map(e=>e.contractAddress))),l=Array.from(new Set(s.map(e=>e.contractAddress)));if(n.validate)try{await n.validate(l)}catch(e){throw ee(e)?this.#u(e,`the delegation pre-check`):e}let u=[];for(let e of s){let t=await this.#e.get(n.requesterAddress,e.contractAddress,e.encryptedValue);t===null?u.push(e):o[e.encryptedValue]=t}if(u.length===0)return o;let d=await this.#t.grantPermit(c,n.delegator),f=new Map;for(let e of u){let t=f.get(e.contractAddress);t?t.push(e.encryptedValue):f.set(e.contractAddress,[e.encryptedValue])}let m=[];for(let[e,t]of f)for(let n of Qe(t))m.push({contractAddress:e,encryptedValues:n});let h=Date.now(),g=u.map(e=>e.encryptedValue);try{this.#i({type:E.DecryptStart,encryptedValues:g});try{await this.#c(n,d,m,o,r)}catch(e){if(!(e instanceof T)||i.spent)throw e;let t=d.permissions.map(e=>e.serializedPermit.signature);i.spent=!0;try{d=await this.#t.recoverPermits(c,n.delegator,t)}catch(e){throw e instanceof Pe?new T(`The permit's KMS context has been revoked on-chain and the automatic re-grant failed, so the decrypt cannot proceed. Establish a new permit for this scope and retry.`,{cause:e}):e}await this.#c(n,d,m.filter(({encryptedValues:e})=>e.some(e=>o[e]===void 0)),o,r)}let e={};for(let t of g){let n=o[t];n!==void 0&&(e[t]=n)}return this.#i({type:E.DecryptEnd,durationMs:Date.now()-h,encryptedValues:g,result:e}),o}catch(t){let r=t instanceof p&&t.cause instanceof Error?t.cause:t;throw this.#i({type:E.DecryptError,error:e(r),durationMs:Date.now()-h,encryptedValues:g}),G(t,n.errorMessage,{isDelegated:n.delegator!==void 0})}}async#c(e,t,n,r,i){let a=(await Ze(n.map(({contractAddress:n,encryptedValues:a})=>async()=>{try{await this.#l(e,t,n,a,r,i);return}catch(e){return e}}),5)).filter(e=>e!==void 0);if(a.length>0)throw a.find(e=>e instanceof T)??a[0]}async#l(e,t,n,r,i,a){let o;try{o=await this.#o(t,n,r,a)}catch(t){throw G(t,e.errorMessage,{isDelegated:e.delegator!==void 0,contractAddress:n,account:e.delegator??e.requesterAddress})}for(let t=0;t<r.length;t++){let a=r[t],s=o[t]?.value;a!==void 0&&s!==void 0&&(i[a]=s,await this.#e.set(e.requesterAddress,n,a,s))}let s=r.filter(e=>i[e]===void 0);if(s.length>0)throw new O(`${e.errorMessage}: relayer returned no clear value for ${s.length} of ${r.length} handle(s) on ${n}`,{cause:AggregateError(s.map(e=>new O(`No clear value for handle ${e} on ${n}`)),`${s.length} handle(s) missing a clear value on ${n}`)})}#u(e,t){return new j(`RPC provider rate-limited ${t}; retry with backoff.`,{cause:e,retryAfter:i(e)})}#d(e,t){let n=t[e.encryptedValue];if(n===void 0){e.error=new O(`Batch delegated decryption returned no value for encrypted value ${e.encryptedValue} on contract ${e.contractAddress}`);return}e.value=n}#f(e,t,n){return e instanceof p?e:G(e,t,n)}#p(){throw new O(`Batch delegated decryption invariant failed: missing item`)}async#m(e,{delegatorAddress:t,delegateAddress:n}){let r=await this.#n.findInactiveDelegations(e,t,n);if(r.size!==0)for(let e of r.values())throw e}};const Rn={AlreadyDelegatedOrRevokedInSameBlock:e=>new Ft(`Only one delegate/revoke per (delegator, delegate, contract) per block. Wait for the next block before retrying.`,{cause:e}),SenderCannotBeContractAddress:e=>new It(`The contract address cannot be the caller address.`,{cause:e}),EnforcedPause:e=>new Lt(`The ACL contract is paused. Delegation operations are temporarily disabled.`,{cause:e}),SenderCannotBeDelegate:e=>new R(`Cannot delegate to yourself (delegate === msg.sender).`,{cause:e}),DelegateCannotBeContractAddress:e=>new H(`Delegate address cannot be the same as the contract address.`,{cause:e}),ExpirationDateBeforeOneHour:e=>new U(`Expiration date must be at least 1 hour in the future.`,{cause:e}),ExpirationDateAlreadySetToSameValue:e=>new V(`The new expiration date is the same as the current one.`,{cause:e}),NotDelegatedYet:e=>new z(`Cannot revoke: no active delegation exists.`,{cause:e})};function zn(e){return Object.hasOwn(Rn,e)}function Bn(e,t){let n=Rt(e);if(n&&zn(n))return Rn[n](t);let r=e instanceof Error?e.message:String(e);for(let[e,n]of Object.entries(Rn))if(r.includes(e))return n(t);return null}var Vn=class{#e;#t;#n;#r;constructor({provider:e,router:t,emitEvent:n=()=>{},logger:r}){this.#t=e,this.#e=t,this.#r=r,this.#n=n}async delegateDecryption(e,{contractAddress:t,delegateAddress:n,delegatorAddress:r,expirationDate:i}){if(i&&i.getTime()<Date.now()+36e5)throw new U(`Expiration date must be at least 1 hour in the future`);let a=I(t),o=I(n),s=I(r);if(o===s)throw new R(`Cannot delegate to yourself (delegate === msg.sender).`);if(o===a)throw new H(`Delegate address cannot be the same as the contract address (${a}).`);let c=this.#e.relayer.chain.aclContractAddress,l=i?BigInt(Math.floor(i.getTime()/1e3)):Zt,u;try{u=await this.getDelegationExpiry({contractAddress:a,delegatorAddress:s,delegateAddress:o})}catch(e){this.#r.warn(`delegateDecryption: pre-flight expiry check failed`,{error:e}),u=-1n}if(u===l)throw new V(`The new expiration date (${l}) is the same as the current one. No on-chain change needed.`);return this.#i({operation:`delegateDecryption`,signer:e,contractAddress:a,config:qt(c,o,a,l)})}async revokeDelegation(e,{contractAddress:t,delegateAddress:n,delegatorAddress:r}){let i=I(t),a=I(n),o=I(r),s=this.#e.relayer.chain.aclContractAddress,c;try{c=await this.getDelegationExpiry({contractAddress:i,delegatorAddress:o,delegateAddress:a})}catch(e){this.#r.warn(`revokeDelegation: pre-flight expiry check failed`,{error:e}),c=1n}if(c===0n)throw new z(`No active delegation found for delegate ${a} on contract ${i}.`);return this.#i({operation:`revokeDelegation`,signer:e,contractAddress:i,config:Jt(s,a,i)})}async isDelegated(e){return(await this.getStatus(e)).isActive}async getStatus(e){let t=await this.getDelegationExpiry(e);return t===0n?{isActive:!1,expiryTimestamp:t}:t===Zt?{isActive:!0,expiryTimestamp:t}:{isActive:t>await this.#t.getBlockTimestamp(),expiryTimestamp:t}}async getDelegationExpiry({contractAddress:e,delegatorAddress:t,delegateAddress:n}){let r=this.#e.relayer.chain.aclContractAddress;return this.#t.readContract(Yt(r,I(t),I(n),I(e)))}async#i({operation:e,signer:t,contractAddress:n,config:r}){try{return await Je({operation:e,signer:t,provider:this.#t,config:r,emit:e=>this.#n(e,n),logger:this.#r})}catch(e){throw this.#a(e),e}}#a(e){if(!(e instanceof v))return;let t=Bn(e.cause??e,e);if(t)throw t}async findInactiveDelegations(e,t,n){let r=new Map;return await Promise.all(e.map(async e=>{try{await this.assertDelegationActive(e,t,n)}catch(t){if(t instanceof z||t instanceof B){let n=I(e);r.set(n,t);return}throw t}})),r}async assertDelegationActive(e,t,n){let r=I(e),i=I(t),a=I(n),{isActive:o,expiryTimestamp:s}=await this.getStatus({contractAddress:r,delegatorAddress:i,delegateAddress:a});if(!o)throw s===0n?new z(`No active delegation from ${i} to ${a} for ${r}`):new B(`Delegation from ${i} to ${a} for ${r} has expired`)}},Hn=class{#e;#t;constructor({router:e,emitEvent:t}){this.#e=e,this.#t=t}async encryptValues(t,n){let r=Date.now(),i=I(t.contractAddress);try{this.#t({type:E.EncryptStart},i);let e=await this.#e.relayer.encryptValues({...t,options:n});return this.#t({type:E.EncryptEnd,durationMs:Date.now()-r},i),e}catch(t){throw this.#t({type:E.EncryptError,error:e(t),durationMs:Date.now()-r},i),Wt(t,`Encryption failed`)}}},Un=class{#e;#t;#n;#r;#i;#a=new Set;#o;constructor(e){this.#e=e.signer,this.#t=e.router,this.#n=e.cachingService,this.#r=e.credentialService,this.#i=e.logger,this.#e&&(this.#o=this.#e.walletAccount.subscribe(e=>{this.#s(e).catch(e=>{this.#i.warn(`wallet account handler failed`,{error:e})})}))}onWalletAccountChange(e){return this.#a.add(e),()=>{this.#a.delete(e)}}dispose(){this.#o?.(),this.#o=void 0,this.#a.clear()}async#s(e){let t=e.previous,n=e.next,r=n?.chainId;r!==void 0&&await x(`switch relayer chain`,()=>this.#t.switchChain(r),this.#i);let i=this.#r;i&&await x(`credential wallet account change`,()=>i.handleWalletAccountChange(t,n),this.#i),t&&await x(`clear decrypt cache`,()=>this.#n.clearForRequester(t.address),this.#i),await Promise.all(Array.from(this.#a,t=>x(`wallet account listener`,()=>t(e),this.#i)))}};const Wn=L.object({kind:L.literal(`ConfidentialTransfer`),from:N,token:N,to:N,amount:L.bigint()}),Gn=L.object({kind:L.literal(`ConfidentialTransferFrom`),from:N,token:N,owner:N,to:N,amount:L.bigint()}),Kn=L.object({kind:L.literal(`SetOperator`),from:N,token:N,operator:N,until:ft}),qn=L.object({kind:L.literal(`Unwrap`),from:N,token:N,to:N,amount:L.bigint()}),Jn=L.object({kind:L.literal(`UnwrapAll`),from:N,token:N,to:N}),Yn=L.object({kind:L.literal(`FinalizeUnwrap`),from:N,wrapper:N,unwrapRequestIdOrAmount:P}),Xn=L.object({kind:L.literal(`ApproveUnderlying`),from:N,underlying:N,spender:N,amount:L.bigint()}),Zn=L.object({kind:L.literal(`Wrap`),from:N,wrapper:N,to:N,amount:L.bigint()}),Qn=P.check(L.refine(e=>e===`0x`||At(e)===20,`TransferAndCall.recipientData must be "0x" (self-shield to the sender) or a raw 20-byte address, not a 32-byte ABI-encoded value the wrapper would truncate to a garbage address`)),$n=L.object({kind:L.literal(`TransferAndCall`),from:N,underlying:N,wrapper:N,amount:L.bigint(),recipientData:L.optional(Qn)}),er=L.object({kind:L.literal(`DelegateDecryption`),from:N,contractAddress:N,delegateAddress:N,expirationDate:L.optional(L.date())}),tr=L.object({kind:L.literal(`RevokeDelegation`),from:N,contractAddress:N,delegateAddress:N});L.discriminatedUnion(`kind`,[Wn,Gn,Kn,qn,Jn,Yn,Xn,Zn,$n,er,tr]);const nr=L.strictObject({maxFeePerGas:L.bigint(),maxPriorityFeePerGas:L.bigint()}),rr=L.object({nonce:L.optional(L.int().check(L.nonnegative())),gasLimit:L.optional(L.bigint()),fees:L.optional(nr)}),ir=L.object({address:N,abi:L.array(L.unknown()),functionName:L.string(),args:L.array(L.unknown()),value:L.optional(L.bigint()),gas:L.optional(L.bigint())}),ar=L.extend(rr,{from:N,calldata:ir});var or=class{#e;#t;#n;constructor(e){this.#e=e.provider,this.#t=e.router,this.#n=e.encryption}async prepare(e,t){t&&=F(rr,t);let n=await this.#e.getChainId(),r=this.#t.chain.id;if(n!==r)throw new h(`Offline.prepare: provider is on chain ${n} but the SDK is configured for chain ${r}. The prepared transaction's contract addresses and encrypted inputs are bound to chain ${r} — point the provider at the same chain.`);let i=F(ar,{calldata:await this.#r(e),from:e.from,nonce:t?.nonce,gasLimit:t?.gasLimit,fees:t?.fees}),a=await this.#e.prepareTransaction(i);return{kind:e.kind,unsignedTx:a,from:i.from}}async#r(e){switch(e.kind){case`ConfidentialTransfer`:return this.#i(e);case`ConfidentialTransferFrom`:return this.#a(e);case`SetOperator`:return this.#o(e);case`Unwrap`:return this.#s(e);case`UnwrapAll`:return this.#c(e);case`FinalizeUnwrap`:return this.#l(e);case`ApproveUnderlying`:return this.#u(e);case`Wrap`:return this.#d(e);case`TransferAndCall`:return this.#f(e);case`DelegateDecryption`:return this.#p(e);case`RevokeDelegation`:return this.#m(e);default:throw new h(`OfflineService.prepare: unsupported transaction kind '${e.kind}'.`)}}async#i(e){e=F(Wn,e);let{encryptedValues:t,inputProof:n}=await this.#n.encryptValues({values:[{value:e.amount,type:`euint64`}],contractAddress:e.token,userAddress:e.from}),r=t[0];if(!r)throw new D(`Encryption returned no handles for ConfidentialTransfer`);return pe(e.token,e.to,r,n)}async#a(e){e=F(Gn,e);let{encryptedValues:t,inputProof:n}=await this.#n.encryptValues({values:[{value:e.amount,type:`euint64`}],contractAddress:e.token,userAddress:e.from}),r=t[0];if(!r)throw new D(`Encryption returned no handles for ConfidentialTransferFrom`);return re(e.token,e.owner,e.to,r,n)}#o(e){return e=F(Kn,e),ce(e.token,e.operator,e.until)}async#s(e){e=F(qn,e);let{encryptedValues:t,inputProof:n}=await this.#n.encryptValues({values:[{value:e.amount,type:`euint64`}],contractAddress:e.token,userAddress:e.from}),r=t[0];if(!r)throw new D(`Encryption returned no handles for Unwrap`);return ue(e.token,e.from,e.to,r,n)}async#c(e){e=F(Jn,e);let t=await this.#e.readContract(fe(e.token,e.from));return ie(e.token,e.from,e.to,t)}async#l(e){e=F(Yn,e);let t=await this.#t.relayer.decryptPublicValuesWithSignatures({encryptedValues:[e.unwrapRequestIdOrAmount]}).catch(e=>{throw G(e,`Public decryption failed during FinalizeUnwrap`)}),n=t.clearValues[0]?.value;return Ot(n,`FinalizeUnwrap: decryptPublicValuesWithSignatures(handle).clearValue`),b(e.wrapper,e.unwrapRequestIdOrAmount,n,t.checkSignaturesArgs.decryptionProof)}#u(e){return e=F(Xn,e),C(e.underlying,e.spender,e.amount)}#d(e){return e=F(Zn,e),y(e.wrapper,e.to,e.amount)}#f(e){return e=F($n,e),Kt(e.underlying,e.wrapper,e.amount,e.recipientData)}#p(e){if(e=F(er,e),e.expirationDate&&e.expirationDate.getTime()<Date.now()+36e5)throw new U(`Expiration date must be at least 1 hour in the future`);if(e.delegateAddress===e.from)throw new R(`Cannot delegate to yourself (delegate === msg.sender).`);if(e.delegateAddress===e.contractAddress)throw new H(`Delegate address cannot be the same as the contract address (${e.contractAddress}).`);let t=e.expirationDate?BigInt(Math.floor(e.expirationDate.getTime()/1e3)):Zt;return qt(this.#t.chain.aclContractAddress,e.delegateAddress,e.contractAddress,t)}#m(e){return e=F(tr,e),Jt(this.#t.chain.aclContractAddress,e.delegateAddress,e.contractAddress)}};function sr(e){if(!(!Object.hasOwn(e,`transportKeyPairDerivationSecret`)||e.transportKeyPairDerivationSecret!==void 0))throw new h(`transportKeyPairDerivationSecret was passed as undefined, which usually means the environment variable it reads is unset (e.g. process.env.ZAMA_DERIVATION_SECRET). Supply the secret, or omit the option entirely to persist transport key pairs in cleartext on purpose.`)}function cr(e){if(e===void 0)return;let{importScripts:t}=globalThis;if(!(typeof window>`u`&&typeof document>`u`&&typeof t!=`function`))throw new h(`transportKeyPairDerivationSecret is supported in headless environments only (CLI tools, servers, agents). Remove the option: an environment with a platform keystore, or one that ships a bundle, must delegate at-rest security of the transport key pair to the storage backend.`)}function lr(e){if(e===void 0)return;let t=F(it,e);return new ct(typeof t==`string`?t:new Uint8Array(t))}var ur=class{#e;provider;signer;storage;registry;permits;delegations;decryption;offline;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;constructor(e,t={}){sr(t),cr(t.transportKeyPairDerivationSecret);let n=lr(t.transportKeyPairDerivationSecret);this.#e=e.router,this.provider=e.provider,this.signer=e.signer,this.storage=e.storage,this.#r=e.onEvent??function(){},this.#i=e.logger,this.#a=new Nn(e.storage,this.#i),this.#u=new Vn({provider:this.provider,router:e.router,emitEvent:this.emitEvent.bind(this),logger:this.#i});let r={};for(let t of e.chains)t.registryAddress&&(r[t.id]=t.registryAddress);this.registry=new dt({provider:this.provider,registryAddresses:r,registryTTL:e.registryTTL}),this.#n=r,this.#t=e.registryTTL,this.#l=new mt({router:e.router,signer:e.signer,transportKeyPairTTL:e.transportKeyPairTTL,permitTTL:e.permitTTL,scope:e.transportKeyPairScope,derivationSecret:n,storage:this.storage,permitStorage:e.permitStorage,logger:this.#i,emitEvent:this.emitEvent.bind(this)}),e.signer&&(this.#c=new Ln({cache:this.#a,credentialService:this.#l,delegationService:this.#u,router:e.router,emitEvent:this.emitEvent.bind(this)})),this.#s=new Hn({router:e.router,emitEvent:this.emitEvent.bind(this)}),this.#o=new Un({signer:e.signer,router:e.router,cachingService:this.#a,credentialService:this.#l,logger:this.#i}),this.#d=new or({provider:this.provider,router:e.router,encryption:this.#s,emitEvent:(e,t)=>this.emitEvent(e,t)}),this.permits=new bn({signer:this.signer,provider:this.provider,cachingService:this.#a,credentialService:this.#l,logger:this.#i,emitEvent:this.emitEvent.bind(this)}),this.delegations=new xn({signer:this.signer,provider:this.provider,delegationService:this.#u}),this.decryption=new Sn({signer:this.signer,provider:this.provider,router:e.router,decryptionService:this.#c}),this.offline=new Cn(this.#d,this.#l)}onWalletAccountChange(e){return this.#o.onWalletAccountChange(e)}get logger(){return this.#i}get relayer(){return this.#e.relayer}emitEvent(e,t){try{this.#r({...e,tokenAddress:t,timestamp:Date.now()})}catch(t){this.#i.warn(`${e.type} event listener silently failed`,{error:t})}}createWrappersRegistry(e){return new dt({provider:this.provider,registryAddresses:{...this.#n,...e},registryTTL:this.#t})}async encrypt(e,t){return this.#s.encryptValues(e,t)}createToken(e){return new $e(this,e)}createWrappedToken(e){return new An(this,e)}dispose(){this.#o.dispose(),this.#e.dispose()}terminate(){this.dispose(),this.signer?.dispose?.()}[Symbol.dispose](){this.terminate()}};export{yn as ACL_TOPICS,Lt as AclPausedError,Z as AclTopics,et as BalanceCheckUnavailableError,ht as BaseSigner,Ge as ChainMismatchError,wn as ChromeSessionStorage,h as ConfigurationError,Sn as Decryption,O as DecryptionFailedError,rt as DefaultRegistryAddresses,It as DelegationContractIsSelfError,Ft as DelegationCooldownError,H as DelegationDelegateEqualsContractError,U as DelegationExpirationTooSoonError,B as DelegationExpiredError,V as DelegationExpiryUnchangedError,z as DelegationNotFoundError,W as DelegationNotPropagatedError,R as DelegationSelfNotAllowedError,xn as Delegations,xe as ERC1363_INTERFACE_ID,A as ERC20ReadFailedError,Oe as ERC7984_INTERFACE_ID,ze as ERC7984_WRAPPER_INTERFACE_ID,He as EncryptOffloadUnavailableError,D as EncryptionFailedError,at as IndexedDBStorage,We as InsufficientAllowanceError,Xe as InsufficientConfidentialBalanceError,qe as InsufficientERC20BalanceError,_e as InvalidTransportKeyPairError,ve as KeyWrappingError,lt as MemoryStorage,ut as MutableWalletAccountStore,de as NoCiphertextError,Pt as NotEntitledError,Cn as Offline,bn as Permits,g as PreparedPermitChainMismatchError,Ce as PreparedPermitExpiredError,u as RelayerRequestFailedError,T as RevokedKmsContextError,j as RpcRateLimitError,he as SignerNotConfiguredError,ae as SignerRequiredError,Pe as SigningFailedError,se as SigningRejectedError,pn as TOKEN_TOPICS,$e as Token,J as Topics,v as TransactionRevertedError,je as TransportKeyPairChangedError,Ie as TransportKeyPairExpiredError,zt as UnshieldAlreadyFinalizedError,me as WalletAccountNotReadyError,ge as WalletNotConnectedError,An as WrappedToken,dt as WrappersRegistry,Ye as ZERO_ENCRYPTED_VALUE,p as ZamaError,c as ZamaErrorCode,ur as ZamaSDK,E as ZamaSDKEvents,w as allowanceContract,Tt as anvil,C as approveContract,S as balanceOfContract,xt as bscTestnet,Ct as chains,Tn as chromeSessionStorage,tt as cleartext,fe as confidentialBalanceOfContract,ne as confidentialTotalSupplyContract,pe as confidentialTransferContract,re as confidentialTransferFromContract,Qt as createConfig,pt as createWalletAccountStore,Be as decimalsContract,hn as decodeAclEvent,gn as decodeAclEvents,an as decodeConfidentialTransfer,Q as decodeDelegatedForUserDecryption,ln as decodeOnChainEvent,un as decodeOnChainEvents,mn as decodeRevokedDelegationForUserDecryption,cn as decodeUnwrapFinalized,sn as decodeUnwrapRequested,on as decodeWrap,qt as delegateForUserDecryptionContract,b as finalizeUnwrapContract,_n as findDelegatedForUserDecryption,vn as findRevokedDelegationForUserDecryption,dn as findUnwrapRequested,fn as findWrap,Re as getConfidentialTokenAddressContract,Yt as getDelegationExpiryContract,Ae as getTokenAddressContract,Fe as getTokenPairContract,Te as getTokenPairsContract,ye as getTokenPairsLengthContract,Me as getTokenPairsSliceContract,yt as hardhat,_t as hoodi,nt as indexedDBStorage,De as inferredTotalSupplyContract,St as ingenTestnet,Se as isConfidentialTokenContract,Le as isConfidentialTokenValidContract,we as isConfidentialWrapperContract,k as isEncryptedValueZero,Xt as isHandleDelegatedContract,te as isOperatorContract,n as isRetryable,wt as mainnet,Nt as matchZamaError,ot as memoryStorage,be as nameContract,vt as polygon,bt as polygonAmoy,Ee as rateContract,d as retryAfterSeconds,Jt as revokeDelegationContract,Et as sepolia,ce as setOperatorContract,ke as supportsInterfaceContract,Ve as symbolContract,Kt as transferAndCallContract,le as underlyingContract,ue as unwrapContract,ie as unwrapFromBalanceContract,oe as unwrapRequesterContract,y as wrapContract};
|
|
1
|
+
import{S as e,_ as t,a as n,c as r,d as i,g as a,h as o,i as s,m as c,n as l,o as u,p as d,r as f,s as p,t as m,v as ee,w as h,y as g}from"./relayer-B6Zo6EkX.js";import{$ as te,A as ne,C as re,D as ie,F as _,G as v,I as ae,K as y,L as b,M as oe,N as se,O as ce,P as le,S as ue,T as de,U as x,W as fe,X as pe,Z as S,_ as me,_t as he,a as ge,at as _e,b as ve,c as ye,ct as be,d as xe,dt as Se,et as Ce,f as we,ft as Te,g as C,gt as Ee,h as w,ht as T,i as De,it as E,j as Oe,k as ke,l as Ae,lt as je,m as Me,mt as Ne,n as Pe,nt as Fe,o as Ie,ot as Le,p as Re,pt as ze,r as Be,rt as D,s as Ve,t as He,tt as Ue,u as We,ut as Ge,v as Ke,vt as qe,x as Je,yt as Ye,z as Xe}from"./wrappers-registry-BfQr2QHn.js";import{n as Ze,r as O,t as k}from"./encryption-DJljZ2oV.js";import{a as Qe,c as $e,d as A,f as et,g as j,h as tt,i as M,l as nt,m as rt,n as it,o as at,p as ot,r as st,s as ct,t as N,u as lt}from"./token-BMQ6xlrk.js";import{t as ut}from"./cleartext-DcbDCDXj.js";import{a as dt,c as ft,d as pt,f as mt,i as ht,l as gt,m as _t,n as vt,o as yt,p as bt,r as xt,s as St,t as Ct,u as wt}from"./base-signer--sBO2qJp.js";import{t as P}from"./validation-DWe2k89s.js";import{a as Tt,c as Et,i as Dt,l as Ot,n as kt,o as At,r as jt,s as Mt,t as Nt,u as Pt}from"./chains-DEpKup1n.js";import{r as Ft,t as It}from"./assertions-Ca1ePdRJ.js";import{getAddress as F,keccak256 as Lt,size as Rt,toBytes as zt,zeroAddress as Bt}from"viem";import{z as I}from"zod/mini";function Vt(e,t){if(e instanceof f){let n=t[e.code];if(n)return n(e)}return t._?.(e)}var Ht=class extends f{encryptedValue;contractAddress;account;constructor(e,t){super(s.NotEntitled,`Account ${e.account} is not entitled to decrypt encrypted value ${e.encryptedValue} on contract ${e.contractAddress}. This is not a transient failure — the account needs an on-chain ACL grant before it can decrypt this encrypted value.`,t),this.name=`NotEntitledError`,this.encryptedValue=e.encryptedValue,this.contractAddress=e.contractAddress,this.account=e.account}},L=class extends f{constructor(e,t){super(s.DelegationSelfNotAllowed,e,t),this.name=`DelegationSelfNotAllowedError`}},Ut=class extends f{constructor(e,t){super(s.DelegationCooldown,e,t),this.name=`DelegationCooldownError`}},R=class extends f{constructor(e,t){super(s.DelegationNotFound,e,t),this.name=`DelegationNotFoundError`}},Wt=class extends f{constructor(e,t){super(s.DelegationExpired,e,t),this.name=`DelegationExpiredError`}},z=class extends f{constructor(e,t){super(s.DelegationExpiryUnchanged,e,t),this.name=`DelegationExpiryUnchangedError`}},B=class extends f{constructor(e,t){super(s.DelegationDelegateEqualsContract,e,t),this.name=`DelegationDelegateEqualsContractError`}},Gt=class extends f{constructor(e,t){super(s.DelegationDelegateCannotBeWildcard,e,t),this.name=`DelegationDelegateCannotBeWildcardError`}},Kt=class extends f{constructor(e,t){super(s.DelegationContractIsSelf,e,t),this.name=`DelegationContractIsSelfError`}},qt=class extends f{constructor(e,t){super(s.AclPaused,e,t),this.name=`AclPausedError`}},V=class extends f{constructor(e,t){super(s.DelegationExpirationTooSoon,e,t),this.name=`DelegationExpirationTooSoonError`}},H=class extends f{constructor(e,t){super(s.DelegationNotPropagated,e,t),this.name=`DelegationNotPropagatedError`}};function Jt(e){if(!(e instanceof Error))return null;let t=e.cause;if(typeof t!=`object`||!t||!(`data`in t))return null;let{data:n}=t;return typeof n!=`object`||!n||!(`errorName`in n)?null:typeof n.errorName==`string`?n.errorName:null}var Yt=class extends f{unwrapTxHash;unwrapRequestId;constructor(e,t,n){super(s.UnshieldAlreadyFinalized,e,n),this.name=`UnshieldAlreadyFinalizedError`,this.unwrapTxHash=t.unwrapTxHash,this.unwrapRequestId=t.unwrapRequestId}};const Xt=`InvalidUnwrapRequest`,Zt=Lt(zt(`${Xt}(bytes32)`)).slice(0,10);function Qt(e){for(let t=e;t instanceof Error;t=t.cause)if(Jt(t)===Xt||t.message.includes(Xt)||t.message.includes(Zt))return!0;return!1}const $t=[k,Te,l,H,Le,_e,Ht,j,be,T,qe];function U(n,s,u={}){if($t.some(e=>n instanceof e))return n;let f=n instanceof Error?n.message:s;if(n instanceof Error&&d(n.message))return new be(n.message,{cause:n});if(t(n))return new T(`The permit's KMS context has been revoked on-chain, so the permit is no longer usable. The SDK evicts the permit and re-grants automatically; if this error surfaced, the retry failed the same way. The on-chain validity check is cached for up to 15 minutes, so a just-revoked context can keep failing across that window. Retry after the window; the SDK re-runs the recovery on the next decrypt, no manual cleanup is needed.`,{cause:n});if(n instanceof Error&&g(n.message))return new qe(`This account's stored permit for this scope is a wildcard (V2) permit, but the connected relayer does not yet support unified decryption (/v3/user-decrypt). Grant a specific-contract permit instead (sdk.permits.grantPermit([...])), or retry once the relayer upgrades.`,{cause:n});if(n instanceof Error&&c(n.message))return u.isDelegated?new H(`Delegated decryption was denied by the on-chain ACL check. This is most commonly caused by the delegation not having propagated yet, or by the RPC node serving a stale block. Propagation usually completes within ~10 blocks (a few seconds) and the SDK retries across that window; seeing this means it did not sync in time. Retry shortly (and prefer a fresh, low-lag RPC endpoint). If it persists, the delegator may genuinely lack the on-chain ACL grant.`,{cause:n}):new Ht({encryptedValue:e(n.message)??``,contractAddress:u.contractAddress??``,account:u.account??``},{cause:n});if(i(n))return new j(f,{cause:n,retryAfter:r(n)});let m=p(n);return m===void 0&&ee(n)?new j(f,{cause:n,retryAfter:r(n)}):m===400?new Te(n instanceof Error?n.message:`No ciphertext for this account`,{cause:n}):u.isDelegated&&m===500?new H(`Delegated decryption failed with a server error. This is most commonly caused by the delegation not having propagated to the gateway yet. Cross-chain sync usually completes within ~10 blocks (a few seconds) and the SDK retries across that window; seeing this means it did not sync in time — retry shortly. If the error persists, the gateway or relayer may be experiencing an unrelated issue.`,{cause:n}):o(n)||m!==void 0?new l(f,m,{cause:n,retryAfter:r(n),retryable:a(n)||void 0}):new k(s,{cause:n})}function en(e,t){if(e instanceof f)return e;let n=p(e),i=a(e);return n!==void 0||o(e)?new l(e instanceof Error?e.message:t,n,{cause:e,retryAfter:r(e),retryable:i||void 0}):new O(t,{cause:e})}const tn=[{type:`function`,name:`allowance`,inputs:[{name:`owner`,type:`address`,internalType:`address`},{name:`spender`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`uint256`,internalType:`uint256`}],stateMutability:`view`},{type:`function`,name:`approve`,inputs:[{name:`spender`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`approveAndCall`,inputs:[{name:`spender`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`approveAndCall`,inputs:[{name:`spender`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`},{name:`data`,type:`bytes`,internalType:`bytes`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`balanceOf`,inputs:[{name:`account`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`uint256`,internalType:`uint256`}],stateMutability:`view`},{type:`function`,name:`supportsInterface`,inputs:[{name:`interfaceId`,type:`bytes4`,internalType:`bytes4`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`totalSupply`,inputs:[],outputs:[{name:``,type:`uint256`,internalType:`uint256`}],stateMutability:`view`},{type:`function`,name:`transfer`,inputs:[{name:`to`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`transferAndCall`,inputs:[{name:`to`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`transferAndCall`,inputs:[{name:`to`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`},{name:`data`,type:`bytes`,internalType:`bytes`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`transferFrom`,inputs:[{name:`from`,type:`address`,internalType:`address`},{name:`to`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`transferFromAndCall`,inputs:[{name:`from`,type:`address`,internalType:`address`},{name:`to`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`},{name:`data`,type:`bytes`,internalType:`bytes`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`function`,name:`transferFromAndCall`,inputs:[{name:`from`,type:`address`,internalType:`address`},{name:`to`,type:`address`,internalType:`address`},{name:`value`,type:`uint256`,internalType:`uint256`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`nonpayable`},{type:`event`,name:`Approval`,inputs:[{name:`owner`,type:`address`,indexed:!0,internalType:`address`},{name:`spender`,type:`address`,indexed:!0,internalType:`address`},{name:`value`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1},{type:`event`,name:`Transfer`,inputs:[{name:`from`,type:`address`,indexed:!0,internalType:`address`},{name:`to`,type:`address`,indexed:!0,internalType:`address`},{name:`value`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1}];function nn(e,t,n,r=`0x`){return{address:e,abi:tn,functionName:`transferAndCall`,args:[t,n,r]}}const W=[{type:`function`,name:`allow`,inputs:[{name:`handle`,type:`bytes32`,internalType:`bytes32`},{name:`account`,type:`address`,internalType:`address`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`allowForDecryption`,inputs:[{name:`handlesList`,type:`bytes32[]`,internalType:`bytes32[]`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`allowTransient`,inputs:[{name:`ciphertext`,type:`bytes32`,internalType:`bytes32`},{name:`account`,type:`address`,internalType:`address`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`cleanTransientStorage`,inputs:[],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`delegateForUserDecryption`,inputs:[{name:`delegate`,type:`address`,internalType:`address`},{name:`contractAddress`,type:`address`,internalType:`address`},{name:`expirationDate`,type:`uint64`,internalType:`uint64`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`getUserDecryptionDelegationExpirationDate`,inputs:[{name:`delegator`,type:`address`,internalType:`address`},{name:`delegate`,type:`address`,internalType:`address`},{name:`contractAddress`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`uint64`,internalType:`uint64`}],stateMutability:`view`},{type:`function`,name:`invalidateDecryptionSignaturesBefore`,inputs:[{name:`timestamp`,type:`uint256`,internalType:`uint256`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`isAccountDenied`,inputs:[{name:`account`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`isAllowed`,inputs:[{name:`handle`,type:`bytes32`,internalType:`bytes32`},{name:`account`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`isAllowedForDecryption`,inputs:[{name:`handle`,type:`bytes32`,internalType:`bytes32`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`isHandleDelegatedForUserDecryption`,inputs:[{name:`delegator`,type:`address`,internalType:`address`},{name:`delegate`,type:`address`,internalType:`address`},{name:`contractAddress`,type:`address`,internalType:`address`},{name:`handle`,type:`bytes32`,internalType:`bytes32`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`multicall`,inputs:[{name:`data`,type:`bytes[]`,internalType:`bytes[]`}],outputs:[{name:`results`,type:`bytes[]`,internalType:`bytes[]`}],stateMutability:`payable`},{type:`function`,name:`persistAllowed`,inputs:[{name:`handle`,type:`bytes32`,internalType:`bytes32`},{name:`account`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`revokeDelegationForUserDecryption`,inputs:[{name:`delegate`,type:`address`,internalType:`address`},{name:`contractAddress`,type:`address`,internalType:`address`}],outputs:[],stateMutability:`nonpayable`}];function G(e,t,n,r){return{address:e,abi:W,functionName:`delegateForUserDecryption`,args:[t,n,r]}}function rn(e,t,n){return{address:e,abi:W,functionName:`revokeDelegationForUserDecryption`,args:[t,n]}}function an(e,t){return{address:e,abi:W,functionName:`invalidateDecryptionSignaturesBefore`,args:[t]}}function on(e,t,n,r){return{address:e,abi:W,functionName:`getUserDecryptionDelegationExpirationDate`,args:[t,n,r]}}function sn(e,t,n,r,i){return{address:e,abi:W,functionName:`isHandleDelegatedForUserDecryption`,args:[t,n,r,i]}}const K=2n**64n-1n,q=`0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF`;function cn(e){return ht(e.signer,e.provider,e)}function ln(e){return e.startsWith(`0x`)?e:`0x${e}`}function J(e){return Lt(zt(e))}const Y={ConfidentialTransfer:J(`ConfidentialTransfer(address,address,bytes32)`),Wrap:J(`Wrap(address,uint256,bytes32)`),UnwrapRequested:J(`UnwrapRequested(address,bytes32,bytes32)`),UnwrapFinalized:J(`UnwrapFinalized(address,bytes32,bytes32,uint64)`)};function X(e){return F(ln(e.slice(-40)))}function un(e){return e}function dn(e,t){let n=2+t*64,r=e.slice(n,n+64);return r.length===64?r:r.padEnd(64,`0`)}function fn(e,t){return F(ln(dn(e,t).slice(-40)))}function Z(e,t){return BigInt(`0x`+dn(e,t))}function pn(e,t){return ln(dn(e,t))}function mn(e){return e.topics[0]!==Y.ConfidentialTransfer||e.topics.length<4?null:{eventName:`ConfidentialTransfer`,from:X(e.topics[1]),to:X(e.topics[2]),encryptedAmount:un(e.topics[3])}}function hn(e){return e.topics[0]!==Y.Wrap||e.topics.length<2?null:{eventName:`Wrap`,to:X(e.topics[1]),roundedAmount:Z(e.data,0),encryptedWrappedAmount:pn(e.data,1)}}function gn(e){return e.topics[0]!==Y.UnwrapRequested||e.topics.length<3?null:{eventName:`UnwrapRequested`,receiver:X(e.topics[1]),unwrapRequestId:un(e.topics[2]),encryptedAmount:pn(e.data,0)}}function _n(e){return e.topics[0]!==Y.UnwrapFinalized||e.topics.length<3?null:{eventName:`UnwrapFinalized`,receiver:X(e.topics[1]),unwrapRequestId:un(e.topics[2]),encryptedAmount:pn(e.data,0),cleartextAmount:Z(e.data,1)}}function vn(e){return mn(e)??hn(e)??gn(e)??_n(e)}function yn(e){let t=[];for(let n of e){let e=vn(n);e&&t.push(e)}return t}function bn(e){for(let t of e){let e=gn(t);if(e)return e}return null}function xn(e){for(let t of e){let e=hn(t);if(e)return e}return null}const Sn=[Y.ConfidentialTransfer,Y.Wrap,Y.UnwrapRequested,Y.UnwrapFinalized],Q={DelegatedForUserDecryption:J(`DelegatedForUserDecryption(address,address,address,uint64,uint64,uint64)`),RevokedDelegationForUserDecryption:J(`RevokedDelegationForUserDecryption(address,address,address,uint64,uint64)`)};function Cn(e){return e.topics[0]!==Q.DelegatedForUserDecryption||e.topics.length<3?null:{eventName:`DelegatedForUserDecryption`,delegator:X(e.topics[1]),delegate:X(e.topics[2]),contractAddress:fn(e.data,0),delegationCounter:Z(e.data,1),oldExpirationDate:Z(e.data,2),newExpirationDate:Z(e.data,3)}}function wn(e){return e.topics[0]!==Q.RevokedDelegationForUserDecryption||e.topics.length<3?null:{eventName:`RevokedDelegationForUserDecryption`,delegator:X(e.topics[1]),delegate:X(e.topics[2]),contractAddress:fn(e.data,0),delegationCounter:Z(e.data,1),oldExpirationDate:Z(e.data,2)}}function Tn(e){return Cn(e)??wn(e)}function En(e){let t=[];for(let n of e){let e=Tn(n);e&&t.push(e)}return t}function Dn(e){for(let t of e){let e=Cn(t);if(e)return e}return null}function On(e){for(let t of e){let e=wn(t);if(e)return e}return null}const kn=[Q.DelegatedForUserDecryption,Q.RevokedDelegationForUserDecryption];var An=class{#e;#t;#n;#r;#i;#a;#o;constructor(e){this.#e=e.signer,this.#t=e.provider,this.#n=e.cachingService,this.#r=e.credentialService,this.#i=e.delegationService,this.#a=e.logger,this.#o=e.emitEvent}#s(e){return D(this.#e,e)}#c(e){return D(this.#r,e)}#l(e,t){throw this.#o({type:S.PermitError,operation:e,error:t instanceof Error?t:Error(String(t))}),t}async grantPermit(e){if(Array.isArray(e)&&e.length===0)return;let t;try{t=this.#c(`grantPermit`),await Qe(`grantPermit`,this.#e,this.#t)}catch(e){this.#l(`grantPermit`,e)}await t.grantPermit(e)}async grantDelegationPermit(e,t){if(Array.isArray(t)&&t.length===0)return;let n;try{n=this.#c(`grantDelegationPermit`),await Qe(`grantDelegationPermit`,this.#e,this.#t)}catch(e){this.#l(`grantDelegationPermit`,e)}await n.grantPermit(t,e)}async hasPermit(e){return this.#r?this.#r.hasPermit(e):!1}async hasDelegationPermit(e,t){return this.#r?this.#r.hasPermit(t,e):!1}async warmTransportKeyPair(){let e=this.#r;if(!e)return;let t=this.#e?.walletAccount.getSnapshot();t&&await e.warmTransportKeyPair(t.address)}async registerPermit(e,t){let n;try{n=this.#c(`registerPermit`)}catch(e){this.#l(`registerPermit`,e)}await n.registerPermit(e,t),await this.#u(e.signerAddress)}async revokePermits(e){let t=this.#c(`revokePermits`),n=F((await M(`revokePermits`,this.#e,this.#t)).address);try{await t.revokePermits(e)}finally{await this.#u(n)}}async clear(){let e=this.#c(`clear`),t=F((await M(`clear`,this.#e,this.#t)).address);try{await e.clearCredentials()}finally{await this.#u(t)}}async#u(e){await x(`clear decrypt cache`,()=>this.#n.clearForRequester(e),this.#a)}async revokeTransportKeyPair(e){await this.#c(`revokeTransportKeyPair`).revokeTransportKeyPair(e)}async warmTransportKeyPairScope(e){await this.#c(`warmTransportKeyPairScope`).warmTransportKeyPairScope(e)}async invalidateDecryptionSignatures(e){let t=this.#c(`invalidateDecryptionSignatures`),n=this.#s(`invalidateDecryptionSignatures`),r=await M(`invalidateDecryptionSignatures`,this.#e,this.#t),i=fe(r.address),a=await this.#i.invalidateDecryptionSignaturesBefore(n,e);return await t.clearPermitsAfterInvalidation(i),await this.#u(F(r.address)),a}},jn=class{#e;#t;#n;constructor(e){this.#e=e.signer,this.#t=e.provider,this.#n=e.delegationService}#r(e){return D(this.#e,e)}async delegateDecryption({contractAddress:e,delegateAddress:t,expirationDate:n}){let r=this.#r(`delegateDecryption`),i=await M(`delegateDecryption`,this.#e,this.#t);return this.#n.delegateDecryption(r,{contractAddress:e,delegateAddress:t,delegatorAddress:i.address,expirationDate:n})}async revokeDelegation({contractAddress:e,delegateAddress:t}){let n=this.#r(`revokeDelegation`),r=await M(`revokeDelegation`,this.#e,this.#t);return this.#n.revokeDelegation(n,{contractAddress:e,delegateAddress:t,delegatorAddress:r.address})}async isActive(e){return this.#n.isDelegated(e)}async getExpiry(e){return this.#n.getDelegationExpiry(e)}async getStatus(e){return this.#n.getStatus(e)}},Mn=class{#e;#t;#n;#r;constructor(e){this.#e=e.signer,this.#t=e.provider,this.#n=e.router,this.#r=e.decryptionService}#i(e){return D(this.#r,e)}async decryptValues(e,t){let n=this.#i(`decryptValues`),r=await M(`decryptValues`,this.#e,this.#t);return n.decryptValues(e,r.address,t)}async delegatedDecryptValues(e,t,n=t,r){let i=this.#i(`delegatedDecryptValues`),a=await M(`delegatedDecryptValues`,this.#e,this.#t);return i.delegatedDecryptValues(e,t,a.address,n,r)}async decryptPublicValues(e,t){if(e.length===0)return{clearValues:{},decryptionProof:`0x`,abiEncodedClearValues:`0x`};try{let n=await this.#n.relayer.decryptPublicValuesWithSignatures({encryptedValues:e,options:t}),r={};return n.checkSignaturesArgs.handlesList.forEach((e,t)=>{Ft(n.clearValues[t],`result.clearValues[${t}]`),r[e]=n.clearValues[t].value}),{clearValues:r,abiEncodedClearValues:n.checkSignaturesArgs.abiEncodedCleartexts,decryptionProof:n.checkSignaturesArgs.decryptionProof}}catch(e){throw U(e,`Public decryption failed`)}}async delegatedBatchDecryptValues({encryptedInputs:e,delegatorAddress:t,accountAddress:n=t,maxConcurrency:r,waitForPropagation:i}){let a=this.#i(`delegatedBatchDecryptValues`),o=await M(`delegatedBatchDecryptValues`,this.#e,this.#t);return a.delegatedBatchDecryptHandlesAs({encryptedInputs:e,delegatorAddress:t,delegateAddress:o.address,accountAddress:n,maxConcurrency:r,waitForPropagation:i})}},Nn=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t}prepare(e,t){return this.#e.prepare(e,t)}preparePermit(e){return this.#t.preparePermit(e)}},Pn=class{async get(e){return(await chrome.storage.session.get(e))[e]??null}async set(e,t){await chrome.storage.session.set({[e]:t})}async delete(e){await chrome.storage.session.remove(e)}};const Fn=new Pn;function $(e){return`zama:pending-unshield:${fe(e)}`}const In=I.union([I.pipe(y,I.transform(e=>({unwrapTxHash:e}))),I.pipe(I.object({version:I.literal(1),unwrapTxHash:y,unwrapRequestId:I.optional(y)}),I.transform(({unwrapTxHash:e,unwrapRequestId:t})=>({unwrapTxHash:e,unwrapRequestId:t})))]);async function Ln(e,t,n,r){if(r===void 0){await e.set($(t),n);return}await e.set($(t),{version:1,unwrapTxHash:n,unwrapRequestId:r})}async function Rn(e,t){let n=$(t),r=await e.get(n);if(r==null)return null;let i=In.safeParse(r);return i.success?i.data:(await e.delete(n),null)}async function zn(e,t){await e.delete($(t))}var Bn=class extends N{#e;#t=null;#n=null;#r(e){try{return Ft(this.sdk.signer,`WrappedToken.sdk.signer`),this.sdk.signer}catch(t){throw new te(e,{cause:t})}}async underlying(){return this.#u()}async isPayable(){if(this.#n!==null)return this.#n;try{let e=await this.#u();this.#n=await this.sdk.provider.readContract(Re(e))}catch{this.#n=!1}return this.#n}async allowance(e){let t=await this.#u();return this.sdk.provider.readContract(w(t,F(e),this.address))}async shield(e,t){let n=await M(`shield`,this.sdk.signer,this.sdk.provider),r=await this.isPayable(),i=await this.#u(),a=F(n.address),o;try{o=await this.sdk.provider.readContract(me(i,a))}catch(e){throw e instanceof f?e:new A(`Could not read ERC-20 balance for shield validation (token: ${i})`,{cause:h(e)})}if(o<e)throw new rt(`Insufficient ERC-20 balance: requested ${e}, available ${o} (token: ${i})`,{requested:e,available:o,token:i});return r?this.#i(e,i,a,t):this.#a(e,a,t)}async#i(e,t,n,r){this.#r(`shield`);let i=r?.to?F(r.to):n,a=i===n?`0x`:i;return this.submitTransaction({operation:`shield:transferAndCall`,config:nn(t,this.address,e,a),onSubmitted:r?.onShieldSubmitted})}async wrap(e,t){this.#r(`wrap`);let n=await M(`wrap`,this.sdk.signer,this.sdk.provider),r=await this.#u(),i=F(n.address),a;try{a=await this.sdk.provider.readContract(me(r,i))}catch(e){throw e instanceof f?e:new A(`Could not read ERC-20 balance for wrap validation (token: ${r})`,{cause:h(e)})}if(a<e)throw new rt(`Insufficient ERC-20 balance: requested ${e}, available ${a} (token: ${r})`,{requested:e,available:a,token:r});let o;try{o=await this.sdk.provider.readContract(w(r,i,this.address))}catch(e){throw e instanceof f?e:new A(`Could not read ERC-20 allowance for wrap validation (token: ${r})`,{cause:h(e)})}if(o<e)throw new et(`Insufficient allowance for wrap: requested ${e}, approved ${o}. Call approveUnderlying() first (token: ${r}).`,{requested:e,available:o,token:r});let s=t?.to?F(t.to):i;return this.submitTransaction({operation:`wrap`,config:b(this.address,s,e),onSubmitted:t?.onWrapSubmitted})}async#a(e,t,n){this.#r(`shield`);let r=n?.approvalStrategy??`exact`;r!==`skip`&&await this.#f(e,r===`max`,n);let i=n?.to?F(n.to):t;return this.submitTransaction({operation:`shield:approveAndWrap`,config:b(this.address,i,e),onSubmitted:n?.onShieldSubmitted})}async approveUnderlying(e){this.#r(`approveUnderlying`);let t=await M(`approveUnderlying`,this.sdk.signer,this.sdk.provider),n=await this.#u(),r=F(t.address),i=e??2n**256n-1n;return i>0n&&await this.sdk.provider.readContract(w(n,r,this.address))>0n&&await this.submitTransaction({operation:`approveUnderlying:reset`,config:C(n,this.address,0n)}),this.submitTransaction({operation:`approveUnderlying`,config:C(n,this.address,i)})}async unshield(e,t){let{skipBalanceCheck:n=!1,onUnwrapSubmitted:r,onFinalizing:i,onFinalizeSubmitted:a}=t??{};n||await this.assertConfidentialBalance(e);let o={onFinalizing:i,onFinalizeSubmitted:a},s=crypto.randomUUID(),c=await this.unwrap(e);return x(`unshield: onUnwrapSubmitted`,()=>r?.(c.txHash),this.sdk.logger),this.#d(c.unwrapRequestId,c.txHash,s,o)}async unshieldAll(e){let t=crypto.randomUUID(),n=await this.unwrapAll();return x(`unshieldAll: onUnwrapSubmitted`,()=>e?.onUnwrapSubmitted?.(n.txHash),this.sdk.logger),this.#d(n.unwrapRequestId,n.txHash,t,e)}async resumeUnshield(e,t){let n;try{n=await this.sdk.provider.waitForTransactionReceipt(e)}catch(e){throw e instanceof f?e:new E(`Failed to get unwrap receipt`,{cause:e})}let r=this.#o(n.logs);if(await this.#s(r))throw await this.#l(`resumeUnshield`),new Yt(`Nothing to resume: the unwrap request was already finalized on-chain and the funds were delivered.`,{unwrapTxHash:e,unwrapRequestId:r});return this.#d(r,e,crypto.randomUUID(),t)}async getPendingUnshield(){let e=await Rn(this.sdk.storage,this.address);return e?await this.#c(e)?(await this.#l(`getPendingUnshield`),null):e.unwrapTxHash:null}async unwrap(e){this.#r(`unwrap`);let t=F((await M(`unwrap`,this.sdk.signer,this.sdk.provider)).address),{encryptedValues:n,inputProof:r}=await this.sdk.encrypt({values:[{value:e,type:`euint64`}],contractAddress:this.address,userAddress:t}),[i]=n;if(!i)throw new O(`Encryption returned no encrypted values`);let a=await this.submitTransaction({operation:`unwrap`,config:le(this.address,t,t,i,r)});return{...a,unwrapRequestId:this.#o(a.receipt.logs)}}async unwrapAll(){this.#r(`unwrapAll`);let e=F((await M(`unwrapAll`,this.sdk.signer,this.sdk.provider)).address),t=await this.readConfidentialBalanceOf(e);if($e(t))throw new k(`Cannot unshield: balance is zero`);let n=await this.submitTransaction({operation:`unwrapAll`,config:_(this.address,e,e,t)});return{...n,unwrapRequestId:this.#o(n.receipt.logs)}}async finalizeUnwrap(e){this.#r(`finalizeUnwrap`),await Qe(`finalizeUnwrap`,this.sdk.signer,this.sdk.provider);let t=await this.sdk.decryption.decryptPublicValues([e]),n=t.clearValues[e];return It(n,`finalizeUnwrap: clearValue`),this.submitTransaction({operation:`finalizeUnwrap`,config:ce(this.address,e,n,t.decryptionProof)})}#o(e){let t=bn(e.filter(e=>e.address===void 0||F(e.address)===this.address));if(!t)throw new E(`No UnwrapRequested event from this wrapper found in the unwrap receipt`);return t.unwrapRequestId}async#s(e){try{return await this.sdk.provider.readContract(ae(this.address,e))===Bt}catch{return!1}}async#c(e){let t=e.unwrapRequestId;if(t===void 0)try{let n=await this.sdk.provider.waitForTransactionReceipt(e.unwrapTxHash);t=this.#o(n.logs)}catch{return!1}return this.#s(t)}async#l(e){await x(`${e}: clearPendingUnshield`,()=>zn(this.sdk.storage,this.address),this.sdk.logger)}async#u(){return this.#e===void 0?(this.#t||=this.sdk.provider.readContract(se(this.address)).then(e=>(this.#e=e,this.#t=null,e)).catch(e=>{throw this.#t=null,e}),this.#t):this.#e}async#d(e,t,n,r){this.emit({type:S.UnshieldPhase1Submitted,txHash:t,operationId:n}),await x(`unshield: savePendingUnshield`,()=>Ln(this.sdk.storage,this.address,t,e),this.sdk.logger),this.emit({type:S.UnshieldPhase2Started,operationId:n}),x(`unshield: onFinalizing`,()=>r?.onFinalizing?.(),this.sdk.logger);let i;try{i=await this.finalizeUnwrap(e)}catch(n){throw Qt(n)?(await this.#l(`unshield`),new Yt(`The unwrap request was finalized concurrently — the funds were already delivered.`,{unwrapTxHash:t,unwrapRequestId:e},{cause:n})):n}return this.emit({type:S.UnshieldPhase2Submitted,txHash:i.txHash,operationId:n}),x(`unshield: onFinalizeSubmitted`,()=>r?.onFinalizeSubmitted?.(i.txHash),this.sdk.logger),await this.#l(`unshield`),i}async#f(e,t,n){this.#r(`approveUnderlying`);let r=await this.#u(),i=F((await M(`approveUnderlying`,this.sdk.signer,this.sdk.provider)).address),a=await this.sdk.provider.readContract(w(r,i,this.address));if(a>=e)return;a>0n&&await this.submitTransaction({operation:`approveUnderlying:reset`,config:C(r,this.address,0n)});let o=t?2n**256n-1n:e;await this.submitTransaction({operation:`approveUnderlying`,config:C(r,this.address,o),onSubmitted:n?.onApprovalSubmitted})}};const Vn=I.union([I.bigint(),I.boolean(),v]),Hn=I.array(I.string());var Un=class{#e;#t;#n=`zama:decrypt`;#r=`${this.#n}:keys`;#i=Promise.resolve();constructor(e,t){this.#e=e,this.#t=t}async get(e,t,n){try{let r=this.#c(e,t,n),i=await this.#e.get(r);if(i===null)return null;let a=Vn.safeParse(i);return a.success?a.data:(await this.delete(e,t,n),null)}catch(e){return this.#t.warn(`CachingService.get failed`,{error:e}),null}}async set(e,t,n,r){try{let i=this.#c(e,t,n);await this.#e.set(i,r),this.#i=this.#i.then(()=>this.#u(i).catch(e=>{this.#t.warn(`CachingService index write failed`,{error:e})})),await this.#i}catch(e){this.#t.warn(`CachingService.set failed`,{error:e})}}async delete(e,t,n){let r=this.#c(e,t,n);this.#i=this.#i.then(()=>this.#a(r).catch(e=>{this.#t.warn(`CachingService.delete failed`,{error:e})})),await this.#i}async clearForRequester(e){this.#i=this.#i.then(()=>this.#o(e).catch(e=>{this.#t.warn(`CachingService.clearForRequester failed`,{error:e})})),await this.#i}async clearAll(){this.#i=this.#i.then(()=>this.#s().catch(e=>{this.#t.warn(`CachingService.clearAll failed`,{error:e})})),await this.#i}async#a(e){await this.#e.delete(e).catch(()=>{});let t=await this.#l(),n=t.filter(t=>t!==e);n.length!==t.length&&await this.#e.set(this.#r,n)}async#o(e){let t=F(e),n=`${this.#n}:${t}:`,r=await this.#l(),i=[],a=[];for(let e of r)e.startsWith(n)?i.push(e):a.push(e);await Promise.all(i.map(e=>this.#e.delete(e).catch(()=>{}))),await this.#e.set(this.#r,a)}async#s(){let e=await this.#l();await Promise.all(e.map(e=>this.#e.delete(e).catch(()=>{}))),await this.#e.delete(this.#r)}#c(e,t,n){return`${this.#n}:${F(e)}:${F(t)}:${n.toLowerCase()}`}async#l(){let e=await this.#e.get(this.#r);if(e===null)return[];let t=Hn.safeParse(e);return t.success?t.data:(await this.#e.delete(this.#r).catch(()=>{}),[])}async#u(e){let t=await this.#l();t.includes(e)||(t.push(e),await this.#e.set(this.#r,t))}};function Wn(e,t){let n=Gn(e,t);if(!n)throw new k(`No permit covers contract ${t} after allow()`);return{privateKey:e.keypair.privateKey,publicKey:e.keypair.publicKey,serializedPermit:n.serializedPermit}}function Gn(e,t){let n=fe(t);return e.permissions.find(e=>ft(e,n))}const Kn=e=>new Promise(t=>setTimeout(t,e));var qn=class{#e;#t;#n;#r;#i;constructor({cache:e,credentialService:t,delegationService:n,router:r,emitEvent:i}){this.#e=e,this.#t=t,this.#n=n,this.#r=r,this.#i=i}async decryptValues(e,t,n){let r=F(t);return this.#s(e,{requesterAddress:r,errorMessage:`Failed to decrypt encrypted values`},n)}async delegatedDecryptValues(e,t,n,r,i){let a=F(t),o=F(n),s={spent:!1};return this.#a(i?.waitForPropagation??!0,()=>this.#s(e,{requesterAddress:F(r),delegator:a,validate:e=>this.#m(e,{delegatorAddress:a,delegateAddress:o}),errorMessage:`Failed to decrypt delegated encrypted values`},void 0,s))}async#a(e,t){let n;for(let r=0;r<16;r++)try{return await t()}catch(t){if(n=t,!(r<15&&e&&t instanceof H))throw t;await Kn(2e3)}throw n}async delegatedBatchDecryptHandlesAs({encryptedInputs:e,delegatorAddress:t,delegateAddress:n,accountAddress:r,maxConcurrency:i=5,waitForPropagation:a=!0}){let o=e.map(e=>({encryptedValue:e.encryptedValue,contractAddress:F(e.contractAddress)}));if(o.length===0)return{items:o};let s=F(r);try{let e=await this.delegatedDecryptValues(o.map(({encryptedValue:e,contractAddress:t})=>({encryptedValue:e,contractAddress:t})),t,n,s,{waitForPropagation:a});for(let t of o)this.#d(t,e);return{items:o}}catch(e){if(nt(e))throw e;if(o.length===1){let[n=this.#p()]=o;return n.error=this.#f(e,`Failed to decrypt delegated encrypted values`,{isDelegated:!0,contractAddress:n.contractAddress,account:F(t)}),{items:o}}}let c=!1,l;if(await st(o.map(e=>async()=>{if(!c)try{let r=await this.delegatedDecryptValues([{encryptedValue:e.encryptedValue,contractAddress:e.contractAddress}],t,n,s,{waitForPropagation:!1});this.#d(e,r)}catch(n){if(nt(n)){c=!0,l??=n;return}e.error=this.#f(n,`Failed to decrypt delegated encrypted values`,{isDelegated:!0,contractAddress:e.contractAddress,account:F(t)})}}),i),l!==void 0)throw l;return{items:o}}async#o(e,t,n,r){let i=Wn(e,t),a;try{a=await this.#r.relayer.parseTransportKeyPair({publicKey:i.publicKey,privateKey:i.privateKey,tkmsVersion:e.keypair.tkmsVersion})}catch(e){throw e instanceof Error&&d(e.message)&&await this.#t.evictTransportKeyPair(),e}let o=await this.#r.relayer.parseSignedDecryptionPermit({transportKeyPair:a,serializedPermit:i.serializedPermit});return this.#r.relayer.decryptValues({transportKeyPair:a,signedPermit:o,encryptedValues:n,contractAddress:t,options:r})}async#s(e,t,n,r={spent:!1}){if(e.length===0)return{};let i=e.map(e=>({encryptedValue:e.encryptedValue,contractAddress:F(e.contractAddress)})),a={},o=[];for(let e of i)$e(e.encryptedValue)?a[e.encryptedValue]=0n:o.push(e);if(o.length===0)return a;let s=Array.from(new Set(i.map(e=>e.contractAddress))),c=Array.from(new Set(o.map(e=>e.contractAddress)));if(t.validate)try{await t.validate(c)}catch(e){throw ee(e)?this.#u(e,`the delegation pre-check`):e}let l=[];for(let e of o){let n=await this.#e.get(t.requesterAddress,e.contractAddress,e.encryptedValue);n===null?l.push(e):a[e.encryptedValue]=n}if(l.length===0)return a;let u=await this.#t.grantPermit(s,t.delegator),d=new Map;for(let e of l){let t=d.get(e.contractAddress);t?t.push(e.encryptedValue):d.set(e.contractAddress,[e.encryptedValue])}let p=[];for(let[e,t]of d)for(let n of ct(t))p.push({contractAddress:e,encryptedValues:n});let m=Date.now(),g=l.map(e=>e.encryptedValue);try{this.#i({type:S.DecryptStart,encryptedValues:g});try{await this.#c(t,u,p,a,n)}catch(e){if(!(e instanceof T)||r.spent)throw e;let i=u.permissions.map(e=>e.serializedPermit.signature);r.spent=!0;try{u=await this.#t.recoverPermits(s,t.delegator,i)}catch(e){throw e instanceof _e?new T(`The permit's KMS context has been revoked on-chain and the automatic re-grant failed, so the decrypt cannot proceed. Establish a new permit for this scope and retry.`,{cause:e}):e}await this.#c(t,u,p.filter(({encryptedValues:e})=>e.some(e=>a[e]===void 0)),a,n)}let e={};for(let t of g){let n=a[t];n!==void 0&&(e[t]=n)}return this.#i({type:S.DecryptEnd,durationMs:Date.now()-m,encryptedValues:g,result:e}),a}catch(e){let n=e instanceof f&&e.cause instanceof Error?e.cause:e;throw this.#i({type:S.DecryptError,error:h(n),durationMs:Date.now()-m,encryptedValues:g}),U(e,t.errorMessage,{isDelegated:t.delegator!==void 0})}}async#c(e,t,n,r,i){let a=(await st(n.map(({contractAddress:n,encryptedValues:a})=>async()=>{try{await this.#l(e,t,n,a,r,i);return}catch(e){return e}}),5)).filter(e=>e!==void 0);if(a.length>0)throw a.find(e=>e instanceof T)??a[0]}async#l(e,t,n,r,i,a){let o;try{o=await this.#o(t,n,r,a)}catch(t){throw U(t,e.errorMessage,{isDelegated:e.delegator!==void 0,contractAddress:n,account:e.delegator??e.requesterAddress})}for(let t=0;t<r.length;t++){let a=r[t],s=o[t]?.value;a!==void 0&&s!==void 0&&(i[a]=s,await this.#e.set(e.requesterAddress,n,a,s))}let s=r.filter(e=>i[e]===void 0);if(s.length>0)throw new k(`${e.errorMessage}: relayer returned no clear value for ${s.length} of ${r.length} handle(s) on ${n}`,{cause:AggregateError(s.map(e=>new k(`No clear value for handle ${e} on ${n}`)),`${s.length} handle(s) missing a clear value on ${n}`)})}#u(e,t){return new j(`RPC provider rate-limited ${t}; retry with backoff.`,{cause:e,retryAfter:r(e)})}#d(e,t){let n=t[e.encryptedValue];if(n===void 0){e.error=new k(`Batch delegated decryption returned no value for encrypted value ${e.encryptedValue} on contract ${e.contractAddress}`);return}e.value=n}#f(e,t,n){return e instanceof f?e:U(e,t,n)}#p(){throw new k(`Batch delegated decryption invariant failed: missing item`)}async#m(e,{delegatorAddress:t,delegateAddress:n}){let r=await this.#n.findInactiveDelegations(e,t,n);if(r.size!==0)for(let e of r.values())throw e}};const Jn={AlreadyDelegatedOrRevokedInSameBlock:e=>new Ut(`Only one delegate/revoke per (delegator, delegate, contract) per block. Wait for the next block before retrying.`,{cause:e}),SenderCannotBeContractAddress:e=>new Kt(`The contract address cannot be the caller address.`,{cause:e}),EnforcedPause:e=>new qt(`The ACL contract is paused. Delegation operations are temporarily disabled.`,{cause:e}),SenderCannotBeDelegate:e=>new L(`Cannot delegate to yourself (delegate === msg.sender).`,{cause:e}),DelegateCannotBeContractAddress:e=>new B(`Delegate address cannot be the same as the contract address.`,{cause:e}),DelegateCannotBeWildcard:e=>new Gt(`Delegate address cannot be the wildcard address; it can only be used as the contract address.`,{cause:e}),ExpirationDateBeforeOneHour:e=>new V(`Expiration date must be at least 1 hour in the future.`,{cause:e}),ExpirationDateAlreadySetToSameValue:e=>new z(`The new expiration date is the same as the current one.`,{cause:e}),NotDelegatedYet:e=>new R(`Cannot revoke: no active delegation exists.`,{cause:e}),InvalidationTimestampTooLow:e=>new Ge(`The invalidation cutoff must be strictly later than the account's current one. Pass a later timestamp, or omit it to use the current block timestamp.`,{cause:e}),InvalidationTimestampInTheFuture:e=>new je(`The invalidation cutoff cannot be in the future. Pass a timestamp no later than now, or omit it to use the current block timestamp.`,{cause:e})};function Yn(e){return Object.hasOwn(Jn,e)}function Xn(e,t){let n=Jt(e);if(n&&Yn(n))return Jn[n](t);let r=e instanceof Error?e.message:String(e);for(let[e,n]of Object.entries(Jn))if(r.includes(e))return n(t);return null}var Zn=class{#e;#t;#n;#r;constructor({provider:e,router:t,emitEvent:n=()=>{},logger:r}){this.#t=e,this.#e=t,this.#r=r,this.#n=n}async delegateDecryption(e,{contractAddress:t,delegateAddress:n,delegatorAddress:r,expirationDate:i}){if(i&&i.getTime()<Date.now()+36e5)throw new V(`Expiration date must be at least 1 hour in the future`);let a=F(t),o=F(n),s=F(r);if(o===s)throw new L(`Cannot delegate to yourself (delegate === msg.sender).`);if(o===F(`0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF`))throw new Gt(`Delegate address cannot be the wildcard address; it can only be used as the contract address.`);if(o===a)throw new B(`Delegate address cannot be the same as the contract address (${a}).`);let c=this.#e.relayer.chain.aclContractAddress,l=i?BigInt(Math.floor(i.getTime()/1e3)):K,u;try{u=await this.getDelegationExpiry({contractAddress:a,delegatorAddress:s,delegateAddress:o})}catch(e){this.#r.warn(`delegateDecryption: pre-flight expiry check failed`,{error:e}),u=-1n}if(u===l)throw new z(`The new expiration date (${l}) is the same as the current one. No on-chain change needed.`);return a!==F(`0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF`)&&await this.#i({contractAddress:a,delegatorAddress:s,delegateAddress:o}),this.#s({operation:`delegateDecryption`,signer:e,contractAddress:a,config:G(c,o,a,l)})}async revokeDelegation(e,{contractAddress:t,delegateAddress:n,delegatorAddress:r}){let i=F(t),a=F(n),o=F(r),s=this.#e.relayer.chain.aclContractAddress,c;try{c=await this.getDelegationExpiry({contractAddress:i,delegatorAddress:o,delegateAddress:a})}catch(e){this.#r.warn(`revokeDelegation: pre-flight expiry check failed`,{error:e}),c=1n}if(c===0n)throw new R(`No active delegation found for delegate ${a} on contract ${i}.`);return this.#s({operation:`revokeDelegation`,signer:e,contractAddress:i,config:rn(s,a,i)})}async isDelegated(e){return(await this.getStatus(e)).isActive}async getStatus(e){let t=F(e.contractAddress)===q,[n,r]=await Promise.all([this.getDelegationExpiry(e),t?Promise.resolve(0n):this.getDelegationExpiry({...e,contractAddress:q})]),i=this.#a(n)||this.#a(r)?await this.#t.getBlockTimestamp():void 0,a=this.#o(n,i);if(a.isActive)return a;let o=this.#o(r,i);return o.isActive?o:n>=r?a:o}async#i(e){try{let{isActive:t}=await this.getStatus({...e,contractAddress:q});t&&this.#r.warn(`delegateDecryption: ${e.delegateAddress} already holds an active wildcard delegation from ${e.delegatorAddress}; this grant for ${e.contractAddress} is redundant.`)}catch(e){this.#r.warn(`delegateDecryption: wildcard redundancy check failed`,{error:e})}}#a(e){return e!==0n&&e!==K}#o(e,t){return e===0n?{isActive:!1,expiryTimestamp:e}:e===K?{isActive:!0,expiryTimestamp:e}:{isActive:t!==void 0&&e>t,expiryTimestamp:e}}async getDelegationExpiry({contractAddress:e,delegatorAddress:t,delegateAddress:n}){let r=this.#e.relayer.chain.aclContractAddress;return this.#t.readContract(on(r,F(t),F(n),F(e)))}async#s({operation:e,signer:t,contractAddress:n,config:r}){try{return await it({operation:e,signer:t,provider:this.#t,config:r,emit:e=>this.#n(e,n),logger:this.#r})}catch(e){throw this.#c(e),e}}async invalidateDecryptionSignaturesBefore(e,t){let n=this.#e.relayer.chain.aclContractAddress,r=t?BigInt(Math.floor(t.getTime()/1e3)):0n;return this.#s({operation:`invalidateDecryptionSignatures`,signer:e,config:an(n,r)})}#c(e){if(!(e instanceof E))return;let t=Xn(e.cause??e,e);if(t)throw t}async findInactiveDelegations(e,t,n){let r=new Map;return await Promise.all(e.map(async e=>{try{await this.assertDelegationActive(e,t,n)}catch(t){if(t instanceof R||t instanceof Wt){let n=F(e);r.set(n,t);return}throw t}})),r}async assertDelegationActive(e,t,n){let r=F(e),i=F(t),a=F(n),{isActive:o,expiryTimestamp:s}=await this.getStatus({contractAddress:r,delegatorAddress:i,delegateAddress:a});if(!o)throw s===0n?new R(`No active delegation from ${i} to ${a} for ${r}`):new Wt(`Delegation from ${i} to ${a} for ${r} has expired`)}},Qn=class{#e;#t;constructor({router:e,emitEvent:t}){this.#e=e,this.#t=t}async encryptValues(e,t){let n=Date.now(),r=F(e.contractAddress);try{this.#t({type:S.EncryptStart},r);let i=await this.#e.relayer.encryptValues({...e,options:t});return this.#t({type:S.EncryptEnd,durationMs:Date.now()-n},r),i}catch(e){throw this.#t({type:S.EncryptError,error:h(e),durationMs:Date.now()-n},r),en(e,`Encryption failed`)}}},$n=class{#e;#t;#n;#r;#i;#a=new Set;#o;constructor(e){this.#e=e.signer,this.#t=e.router,this.#n=e.cachingService,this.#r=e.credentialService,this.#i=e.logger,this.#e&&(this.#o=this.#e.walletAccount.subscribe(e=>{this.#s(e).catch(e=>{this.#i.warn(`wallet account handler failed`,{error:e})})}))}onWalletAccountChange(e){return this.#a.add(e),()=>{this.#a.delete(e)}}dispose(){this.#o?.(),this.#o=void 0,this.#a.clear()}async#s(e){let t=e.previous,n=e.next,r=n?.chainId;r!==void 0&&await x(`switch relayer chain`,()=>this.#t.switchChain(r),this.#i);let i=this.#r;i&&await x(`credential wallet account change`,()=>i.handleWalletAccountChange(t,n),this.#i),t&&await x(`clear decrypt cache`,()=>this.#n.clearForRequester(t.address),this.#i),await Promise.all(Array.from(this.#a,t=>x(`wallet account listener`,()=>t(e),this.#i)))}};const er=I.object({kind:I.literal(`ConfidentialTransfer`),from:v,token:v,to:v,amount:I.bigint()}),tr=I.object({kind:I.literal(`ConfidentialTransferFrom`),from:v,token:v,owner:v,to:v,amount:I.bigint()}),nr=I.object({kind:I.literal(`SetOperator`),from:v,token:v,operator:v,until:pe}),rr=I.object({kind:I.literal(`Unwrap`),from:v,token:v,to:v,amount:I.bigint()}),ir=I.object({kind:I.literal(`UnwrapAll`),from:v,token:v,to:v}),ar=I.object({kind:I.literal(`FinalizeUnwrap`),from:v,wrapper:v,unwrapRequestIdOrAmount:y}),or=I.object({kind:I.literal(`ApproveUnderlying`),from:v,underlying:v,spender:v,amount:I.bigint()}),sr=I.object({kind:I.literal(`Wrap`),from:v,wrapper:v,to:v,amount:I.bigint()}),cr=y.check(I.refine(e=>e===`0x`||Rt(e)===20,`TransferAndCall.recipientData must be "0x" (self-shield to the sender) or a raw 20-byte address, not a 32-byte ABI-encoded value the wrapper would truncate to a garbage address`)),lr=I.object({kind:I.literal(`TransferAndCall`),from:v,underlying:v,wrapper:v,amount:I.bigint(),recipientData:I.optional(cr)}),ur=I.object({kind:I.literal(`DelegateDecryption`),from:v,contractAddress:v,delegateAddress:v,expirationDate:I.optional(I.date())}),dr=I.object({kind:I.literal(`RevokeDelegation`),from:v,contractAddress:v,delegateAddress:v});I.discriminatedUnion(`kind`,[er,tr,nr,rr,ir,ar,or,sr,lr,ur,dr]);const fr=I.strictObject({maxFeePerGas:I.bigint(),maxPriorityFeePerGas:I.bigint()}),pr=I.object({nonce:I.optional(I.int().check(I.nonnegative())),gasLimit:I.optional(I.bigint()),fees:I.optional(fr)}),mr=I.object({address:v,abi:I.array(I.unknown()),functionName:I.string(),args:I.array(I.unknown()),value:I.optional(I.bigint()),gas:I.optional(I.bigint())}),hr=I.extend(pr,{from:v,calldata:mr});var gr=class{#e;#t;#n;constructor(e){this.#e=e.provider,this.#t=e.router,this.#n=e.encryption}async prepare(e,t){t&&=P(pr,t);let n=await this.#e.getChainId(),r=this.#t.chain.id;if(n!==r)throw new m(`Offline.prepare: provider is on chain ${n} but the SDK is configured for chain ${r}. The prepared transaction's contract addresses and encrypted inputs are bound to chain ${r} — point the provider at the same chain.`);let i=P(hr,{calldata:await this.#r(e),from:e.from,nonce:t?.nonce,gasLimit:t?.gasLimit,fees:t?.fees}),a=await this.#e.prepareTransaction(i);return{kind:e.kind,unsignedTx:a,from:i.from}}async#r(e){switch(e.kind){case`ConfidentialTransfer`:return this.#i(e);case`ConfidentialTransferFrom`:return this.#a(e);case`SetOperator`:return this.#o(e);case`Unwrap`:return this.#s(e);case`UnwrapAll`:return this.#c(e);case`FinalizeUnwrap`:return this.#l(e);case`ApproveUnderlying`:return this.#u(e);case`Wrap`:return this.#d(e);case`TransferAndCall`:return this.#f(e);case`DelegateDecryption`:return this.#p(e);case`RevokeDelegation`:return this.#m(e);default:throw new m(`OfflineService.prepare: unsupported transaction kind '${e.kind}'.`)}}async#i(e){e=P(er,e);let{encryptedValues:t,inputProof:n}=await this.#n.encryptValues({values:[{value:e.amount,type:`euint64`}],contractAddress:e.token,userAddress:e.from}),r=t[0];if(!r)throw new O(`Encryption returned no handles for ConfidentialTransfer`);return de(e.token,e.to,r,n)}async#a(e){e=P(tr,e);let{encryptedValues:t,inputProof:n}=await this.#n.encryptValues({values:[{value:e.amount,type:`euint64`}],contractAddress:e.token,userAddress:e.from}),r=t[0];if(!r)throw new O(`Encryption returned no handles for ConfidentialTransferFrom`);return ie(e.token,e.owner,e.to,r,n)}#o(e){return e=P(nr,e),oe(e.token,e.operator,e.until)}async#s(e){e=P(rr,e);let{encryptedValues:t,inputProof:n}=await this.#n.encryptValues({values:[{value:e.amount,type:`euint64`}],contractAddress:e.token,userAddress:e.from}),r=t[0];if(!r)throw new O(`Encryption returned no handles for Unwrap`);return le(e.token,e.from,e.to,r,n)}async#c(e){e=P(ir,e);let t=await this.#e.readContract(ue(e.token,e.from));return _(e.token,e.from,e.to,t)}async#l(e){e=P(ar,e);let t=await this.#t.relayer.decryptPublicValuesWithSignatures({encryptedValues:[e.unwrapRequestIdOrAmount]}).catch(e=>{throw U(e,`Public decryption failed during FinalizeUnwrap`)}),n=t.clearValues[0]?.value;return It(n,`FinalizeUnwrap: decryptPublicValuesWithSignatures(handle).clearValue`),ce(e.wrapper,e.unwrapRequestIdOrAmount,n,t.checkSignaturesArgs.decryptionProof)}#u(e){return e=P(or,e),C(e.underlying,e.spender,e.amount)}#d(e){return e=P(sr,e),b(e.wrapper,e.to,e.amount)}#f(e){return e=P(lr,e),nn(e.underlying,e.wrapper,e.amount,e.recipientData)}#p(e){if(e=P(ur,e),e.expirationDate&&e.expirationDate.getTime()<Date.now()+36e5)throw new V(`Expiration date must be at least 1 hour in the future`);if(e.delegateAddress===e.from)throw new L(`Cannot delegate to yourself (delegate === msg.sender).`);if(e.delegateAddress===e.contractAddress)throw new B(`Delegate address cannot be the same as the contract address (${e.contractAddress}).`);let t=e.expirationDate?BigInt(Math.floor(e.expirationDate.getTime()/1e3)):K;return G(this.#t.chain.aclContractAddress,e.delegateAddress,e.contractAddress,t)}#m(e){return e=P(dr,e),rn(this.#t.chain.aclContractAddress,e.delegateAddress,e.contractAddress)}};function _r(e){if(!(!Object.hasOwn(e,`transportKeyPairDerivationSecret`)||e.transportKeyPairDerivationSecret!==void 0))throw new m(`transportKeyPairDerivationSecret was passed as undefined, which usually means the environment variable it reads is unset (e.g. process.env.ZAMA_DERIVATION_SECRET). Supply the secret, or omit the option entirely to persist transport key pairs in cleartext on purpose.`)}function vr(e){if(e===void 0)return;let{importScripts:t}=globalThis;if(!(typeof window>`u`&&typeof document>`u`&&typeof t!=`function`))throw new m(`transportKeyPairDerivationSecret is supported in headless environments only (CLI tools, servers, agents). Remove the option: an environment with a platform keystore, or one that ships a bundle, must delegate at-rest security of the transport key pair to the storage backend.`)}function yr(e){if(e===void 0)return;let t=P(gt,e);return new wt(typeof t==`string`?t:new Uint8Array(t))}var br=class{#e;provider;signer;storage;registry;permits;delegations;decryption;offline;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;constructor(e,t={}){_r(t),vr(t.transportKeyPairDerivationSecret);let n=yr(t.transportKeyPairDerivationSecret);this.#e=e.router,this.provider=e.provider,this.signer=e.signer,this.storage=e.storage,this.#r=e.onEvent??function(){},this.#i=e.logger,this.#a=new Un(e.storage,this.#i),this.#u=new Zn({provider:this.provider,router:e.router,emitEvent:this.emitEvent.bind(this),logger:this.#i});let r={};for(let t of e.chains)t.registryAddress&&(r[t.id]=t.registryAddress);this.registry=new yt({provider:this.provider,registryAddresses:r,registryTTL:e.registryTTL}),this.#n=r,this.#t=e.registryTTL,this.#l=new St({router:e.router,signer:e.signer,transportKeyPairTTL:e.transportKeyPairTTL,permitTTL:e.permitTTL,scope:e.transportKeyPairScope,derivationSecret:n,storage:this.storage,permitStorage:e.permitStorage,logger:this.#i,emitEvent:this.emitEvent.bind(this)}),e.signer&&(this.#c=new qn({cache:this.#a,credentialService:this.#l,delegationService:this.#u,router:e.router,emitEvent:this.emitEvent.bind(this)})),this.#s=new Qn({router:e.router,emitEvent:this.emitEvent.bind(this)}),this.#o=new $n({signer:e.signer,router:e.router,cachingService:this.#a,credentialService:this.#l,logger:this.#i}),this.#d=new gr({provider:this.provider,router:e.router,encryption:this.#s,emitEvent:(e,t)=>this.emitEvent(e,t)}),this.permits=new An({signer:this.signer,provider:this.provider,cachingService:this.#a,credentialService:this.#l,delegationService:this.#u,logger:this.#i,emitEvent:this.emitEvent.bind(this)}),this.delegations=new jn({signer:this.signer,provider:this.provider,delegationService:this.#u}),this.decryption=new Mn({signer:this.signer,provider:this.provider,router:e.router,decryptionService:this.#c}),this.offline=new Nn(this.#d,this.#l)}onWalletAccountChange(e){return this.#o.onWalletAccountChange(e)}get logger(){return this.#i}get relayer(){return this.#e.relayer}emitEvent(e,t){try{this.#r({...e,tokenAddress:t,timestamp:Date.now()})}catch(t){this.#i.warn(`${e.type} event listener silently failed`,{error:t})}}createWrappersRegistry(e){return new yt({provider:this.provider,registryAddresses:{...this.#n,...e},registryTTL:this.#t})}async encrypt(e,t){return this.#s.encryptValues(e,t)}createToken(e){return new N(this,e)}createWrappedToken(e){return new Bn(this,e)}dispose(){this.#o.dispose(),this.#e.dispose()}terminate(){this.dispose(),this.signer?.dispose?.()}[Symbol.dispose](){this.terminate()}};export{kn as ACL_TOPICS,qt as AclPausedError,Q as AclTopics,lt as BalanceCheckUnavailableError,Ct as BaseSigner,tt as ChainMismatchError,Pn as ChromeSessionStorage,m as ConfigurationError,Mn as Decryption,k as DecryptionFailedError,dt as DefaultRegistryAddresses,Kt as DelegationContractIsSelfError,Ut as DelegationCooldownError,Gt as DelegationDelegateCannotBeWildcardError,B as DelegationDelegateEqualsContractError,V as DelegationExpirationTooSoonError,Wt as DelegationExpiredError,z as DelegationExpiryUnchangedError,R as DelegationNotFoundError,H as DelegationNotPropagatedError,L as DelegationSelfNotAllowedError,jn as Delegations,ye as ERC1363_INTERFACE_ID,A as ERC20ReadFailedError,Ae as ERC7984_INTERFACE_ID,We as ERC7984_WRAPPER_INTERFACE_ID,Ze as EncryptOffloadUnavailableError,O as EncryptionFailedError,bt as IndexedDBStorage,et as InsufficientAllowanceError,ot as InsufficientConfidentialBalanceError,rt as InsufficientERC20BalanceError,be as InvalidTransportKeyPairError,je as InvalidationTimestampInFutureError,Ge as InvalidationTimestampTooLowError,Se as KeyWrappingError,K as MAX_UINT64,pt as MemoryStorage,vt as MutableWalletAccountStore,Te as NoCiphertextError,Ht as NotEntitledError,Nn as Offline,An as Permits,ze as PreparedPermitChainMismatchError,Ne as PreparedPermitExpiredError,l as RelayerRequestFailedError,T as RevokedKmsContextError,j as RpcRateLimitError,te as SignerNotConfiguredError,Ce as SignerRequiredError,_e as SigningFailedError,Le as SigningRejectedError,Sn as TOKEN_TOPICS,N as Token,Y as Topics,E as TransactionRevertedError,Ee as TransportKeyPairChangedError,he as TransportKeyPairExpiredError,qe as UnifiedDecryptionUnsupportedError,Ye as UnifiedPermitNotSupportedError,Yt as UnshieldAlreadyFinalizedError,q as WILDCARD_CONTRACT,Xe as WILDCARD_PERMIT,Ue as WalletAccountNotReadyError,Fe as WalletNotConnectedError,Bn as WrappedToken,yt as WrappersRegistry,at as ZERO_ENCRYPTED_VALUE,f as ZamaError,s as ZamaErrorCode,br as ZamaSDK,S as ZamaSDKEvents,w as allowanceContract,Nt as anvil,C as approveContract,me as balanceOfContract,kt as bscTestnet,jt as chains,Fn as chromeSessionStorage,ut as cleartext,ue as confidentialBalanceOfContract,re as confidentialTotalSupplyContract,de as confidentialTransferContract,ie as confidentialTransferFromContract,cn as createConfig,xt as createWalletAccountStore,Ke as decimalsContract,Tn as decodeAclEvent,En as decodeAclEvents,mn as decodeConfidentialTransfer,Cn as decodeDelegatedForUserDecryption,vn as decodeOnChainEvent,yn as decodeOnChainEvents,wn as decodeRevokedDelegationForUserDecryption,_n as decodeUnwrapFinalized,gn as decodeUnwrapRequested,hn as decodeWrap,G as delegateForUserDecryptionContract,ce as finalizeUnwrapContract,Dn as findDelegatedForUserDecryption,On as findRevokedDelegationForUserDecryption,bn as findUnwrapRequested,xn as findWrap,He as getConfidentialTokenAddressContract,on as getDelegationExpiryContract,Pe as getTokenAddressContract,Be as getTokenPairContract,De as getTokenPairsContract,ge as getTokenPairsLengthContract,Ie as getTokenPairsSliceContract,Dt as hardhat,Tt as hoodi,_t as indexedDBStorage,ke as inferredTotalSupplyContract,At as ingenTestnet,an as invalidateDecryptionSignaturesBeforeContract,xe as isConfidentialTokenContract,Ve as isConfidentialTokenValidContract,we as isConfidentialWrapperContract,$e as isEncryptedValueZero,sn as isHandleDelegatedContract,ne as isOperatorContract,n as isRetryable,Mt as mainnet,Vt as matchZamaError,mt as memoryStorage,ve as nameContract,Et as polygon,Ot as polygonAmoy,Oe as rateContract,u as retryAfterSeconds,rn as revokeDelegationContract,Pt as sepolia,oe as setOperatorContract,Me as supportsInterfaceContract,Je as symbolContract,nn as transferAndCallContract,se as underlyingContract,le as unwrapContract,_ as unwrapFromBalanceContract,ae as unwrapRequesterContract,b as wrapContract};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|