@zama-fhe/sdk 3.2.0-alpha.2 → 3.2.0

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/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a as e,i as t,n,r,t as i}from"./relayer-D-nicEYJ.js";import{A as a,B as o,C as s,D as c,E as l,F as u,H as d,I as ee,L as te,M as ne,N as re,O as ie,P as f,R as ae,S as oe,T as se,V as ce,_ as le,a as ue,b as de,c as fe,d as pe,f as me,g as p,h as m,i as he,j as ge,k as _e,l as ve,m as ye,n as be,o as xe,p as Se,r as Ce,s as we,t as Te,u as Ee,v as De,w as Oe,x as ke,z as Ae}from"./wrappers-registry-BWWG0aze.js";import{n as h,t as g}from"./encryption-BGmINekJ.js";import{_ as je,a as Me,b as _,c as v,d as Ne,f as Pe,g as Fe,h as Ie,i as y,l as b,m as Le,n as Re,o as x,p as ze,r as Be,s as S,t as C,u as Ve,v as He,y as Ue}from"./token-TQ-VFHS4.js";import{r as w,t as We}from"./error-W1N-FGwV.js";import{t as Ge}from"./cleartext-CTla3A3O.js";import{a as Ke,c as qe,d as Je,f as T,i as Ye,l as Xe,n as Ze,o as E,r as Qe,s as $e,t as et,u as tt}from"./base-signer-BVqcM5jt.js";import{n as nt,t as rt}from"./indexeddb-storage-Mi-fCWN3.js";import{n as it,t as at}from"./memory-storage-fp9RY5BQ.js";import{i as ot,t as st}from"./assertions-CnPIS0VN.js";import{t as D}from"./hex-CxtyupeQ.js";import{a as ct,c as lt,i as ut,n as dt,o as ft,r as pt,s as mt,t as ht}from"./chains-CXcO1DBP.js";import{getAddress as O,keccak256 as gt,toBytes as _t}from"viem";import{z as k}from"zod/mini";var vt=class extends r{constructor(e,n){super(t.TransportKeyPairExpired,e,n),this.name=`TransportKeyPairExpiredError`}},yt=class extends r{constructor(e,n){super(t.InvalidTransportKeyPair,e,n),this.name=`InvalidTransportKeyPairError`}},A=class extends r{constructor(e,n){super(t.NoCiphertext,e,n),this.name=`NoCiphertextError`}},j=class extends r{constructor(e,n){super(t.DelegationSelfNotAllowed,e,n),this.name=`DelegationSelfNotAllowedError`}},M=class extends r{constructor(e,n){super(t.DelegationCooldown,e,n),this.name=`DelegationCooldownError`}},N=class extends r{constructor(e,n){super(t.DelegationNotFound,e,n),this.name=`DelegationNotFoundError`}},P=class extends r{constructor(e,n){super(t.DelegationExpired,e,n),this.name=`DelegationExpiredError`}},F=class extends r{constructor(e,n){super(t.DelegationExpiryUnchanged,e,n),this.name=`DelegationExpiryUnchangedError`}},I=class extends r{constructor(e,n){super(t.DelegationDelegateEqualsContract,e,n),this.name=`DelegationDelegateEqualsContractError`}},bt=class extends r{constructor(e,n){super(t.DelegationContractIsSelf,e,n),this.name=`DelegationContractIsSelfError`}},xt=class extends r{constructor(e,n){super(t.AclPaused,e,n),this.name=`AclPausedError`}},L=class extends r{constructor(e,n){super(t.DelegationExpirationTooSoon,e,n),this.name=`DelegationExpirationTooSoonError`}},R=class extends r{constructor(e,n){super(t.DelegationNotPropagated,e,n),this.name=`DelegationNotPropagatedError`}};function z(e,t,r=!1){if(e instanceof g||e instanceof A||e instanceof n||e instanceof R||e instanceof d||e instanceof ce)return e;let i=We(e);return i===400?new A(e instanceof Error?e.message:`No ciphertext for this account`,{cause:e}):r&&i===500?new R(`Delegated decryption failed with a server error. This is most commonly caused by the delegation not having propagated to the gateway yet — after granting delegation, allow 1–2 minutes for cross-chain synchronization before retrying. If the error persists, the gateway or relayer may be experiencing an unrelated issue.`,{cause:e}):i===void 0?new g(t,{cause:e}):new n(e instanceof Error?e.message:t,i,{cause:e})}function St(e,t){if(e instanceof r)return e;let i=We(e);return i===void 0?new h(t,{cause:e}):new n(e instanceof Error?e.message:t,i,{cause:e})}const Ct=[{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 wt(e,t,n,r=`0x`){return{address:e,abi:Ct,functionName:`transferAndCall`,args:[t,n,r]}}function Tt(e){return Ye(e.signer,e.provider,e)}var Et=class{#e;#t;#n;#r;constructor(e){this.#e=e.signer,this.#t=e.provider,this.#n=e.relayer,this.#r=e.decryptionService}#i(e){return o(this.#r,e)}async decryptValues(e){let t=this.#i(`decryptValues`),n=await S(`decryptValues`,this.#e,this.#t);return t.userDecrypt(e,n.address)}async delegatedDecryptValues(e,t,n=t){let r=this.#i(`delegatedDecryptValues`),i=await S(`delegatedDecryptValues`,this.#e,this.#t);return r.delegatedUserDecrypt(e,t,i.address,n)}async decryptPublicValues(e){if(e.length===0)return{clearValues:{},decryptionProof:`0x`,abiEncodedClearValues:`0x`};try{return await this.#n.publicDecrypt(e)}catch(e){throw z(e,`Public decryption failed`)}}async delegatedBatchDecryptValues({encryptedInputs:e,delegatorAddress:t,accountAddress:n=t,maxConcurrency:r}){let i=this.#i(`delegatedBatchDecryptValues`),a=await S(`delegatedBatchDecryptValues`,this.#e,this.#t);return i.delegatedBatchDecryptHandlesAs({encryptedInputs:e,delegatorAddress:t,delegateAddress:a.address,accountAddress:n,maxConcurrency:r})}},Dt=class{#e;#t;#n;constructor(e){this.#e=e.signer,this.#t=e.provider,this.#n=e.delegationService}#r(e){return o(this.#e,e)}async delegateDecryption({contractAddress:e,delegateAddress:t,expirationDate:n}){let r=this.#r(`delegateDecryption`),i=await S(`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 S(`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)}},Ot=class{#e;#t;#n;#r;#i;constructor(e){this.#e=e.signer,this.#t=e.provider,this.#n=e.cachingService,this.#r=e.credentialService,this.#i=e.logger}#a(e){return o(this.#r,e)}async grantPermit(e){if(e.length===0)return;let t=this.#a(`grantPermit`);await v(`grantPermit`,this.#e,this.#t),await t.grantPermit(e)}async grantDelegationPermit(e,t){if(t.length===0)return;let n=this.#a(`grantDelegationPermit`);await v(`grantDelegationPermit`,this.#e,this.#t),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 revokePermits(e){let t=this.#a(`revokePermits`),n=O((await S(`revokePermits`,this.#e,this.#t)).address);try{await t.revokePermits(e)}finally{await u(`clear decrypt cache`,()=>this.#n.clearForRequester(n),this.#i)}}async clear(){let e=this.#a(`clear`),t=O((await S(`clear`,this.#e,this.#t)).address);try{await e.clearCredentials()}finally{await u(`clear decrypt cache`,()=>this.#n.clearForRequester(t),this.#i)}}};const kt=k.union([k.bigint(),k.boolean(),Je]),At=k.array(k.string());var jt=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=kt.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=O(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}:${O(e)}:${O(t)}:${n.toLowerCase()}`}async#l(){let e=await this.#e.get(this.#r);if(e===null)return[];let t=At.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 Mt(e,t){let n=Ft(e,t);if(!n)throw new g(`No permit covers contract ${t} after allow()`);return Pt(e,n)}function Nt(e,t){let n=Ft(e,t);if(!n)throw new g(`No delegated permit covers contract ${t} after allow()`);return{...Pt(e,n),delegatorAddress:n.delegatorAddress}}function Pt(e,t){return{signedContractAddresses:t.signedContractAddresses,privateKey:e.keypair.privateKey,publicKey:e.keypair.publicKey,signature:t.signature,startTimestamp:t.startTimestamp,durationDays:t.durationDays}}function Ft(e,t){let n=tt(t);return e.permits.find(e=>e.signedContractAddresses.includes(n))}var It=class{#e;#t;#n;#r;#i;constructor({cache:e,credentialService:t,delegationService:n,relayer:r,emitEvent:i}){this.#e=e,this.#t=t,this.#n=n,this.#r=r,this.#i=i}async userDecrypt(e,t){let n=O(t);return this.#a(e,{requesterAddress:n,resolveCredentials:e=>this.#t.grantPermit(e),decryptContract:async({credentials:e,contractAddress:t,encryptedValues:r})=>this.#r.userDecrypt({encryptedValues:r,contractAddress:t,...Mt(e,t),signerAddress:n}),errorMessage:`Failed to decrypt encrypted values`})}async delegatedUserDecrypt(e,t,n,r){let i=O(t),a=O(n);return this.#a(e,{requesterAddress:O(r),resolveCredentials:e=>this.#t.grantPermit(e,i),validate:e=>this.#l(e,{delegatorAddress:i,delegateAddress:a}),decryptContract:async({credentials:e,contractAddress:t,encryptedValues:n})=>this.#r.delegatedUserDecrypt({encryptedValues:n,contractAddress:t,...Nt(e,t),delegateAddress:a}),errorMessage:`Failed to decrypt delegated encrypted values`,delegated:!0})}async delegatedBatchDecryptHandlesAs({encryptedInputs:e,delegatorAddress:t,delegateAddress:n,accountAddress:r,maxConcurrency:i=5}){let a=e.map(e=>({encryptedValue:e.encryptedValue,contractAddress:O(e.contractAddress)}));if(a.length===0)return{items:a};let o=O(r);try{let e=await this.delegatedUserDecrypt(a.map(({encryptedValue:e,contractAddress:t})=>({encryptedValue:e,contractAddress:t})),t,n,o);for(let t of a)this.#o(t,e);return{items:a}}catch(e){if(Le(e))throw e;if(a.length===1){let[t=this.#c()]=a;return t.error=this.#s(e,`Failed to decrypt delegated encrypted values`,!0),{items:a}}}return await Me(a.map(e=>async()=>{try{let r=await this.delegatedUserDecrypt([{encryptedValue:e.encryptedValue,contractAddress:e.contractAddress}],t,n,o);this.#o(e,r)}catch(t){if(Le(t))throw t;e.error=this.#s(t,`Failed to decrypt delegated encrypted values`,!0)}}),i),{items:a}}async#a(e,t){if(e.length===0)return{};let n=e.map(e=>({encryptedValue:e.encryptedValue,contractAddress:O(e.contractAddress)})),r={},i=[];for(let e of n)y(e.encryptedValue)?r[e.encryptedValue]=0n:i.push(e);if(i.length===0)return r;let a=Array.from(new Set(n.map(e=>e.contractAddress))),o=Array.from(new Set(i.map(e=>e.contractAddress)));t.validate&&await t.validate(o);let s=[];for(let e of i){let n=await this.#e.get(t.requesterAddress,e.contractAddress,e.encryptedValue);n===null?s.push(e):r[e.encryptedValue]=n}if(s.length===0)return r;let c=await t.resolveCredentials(a),l=new Map;for(let e of s){let t=l.get(e.contractAddress);t?t.push(e.encryptedValue):l.set(e.contractAddress,[e.encryptedValue])}let u=Date.now(),d=s.map(e=>e.encryptedValue);try{this.#i({type:x.DecryptStart,encryptedValues:d}),await Me([...l.entries()].map(([e,n])=>async()=>{let i=await t.decryptContract({credentials:c,contractAddress:e,encryptedValues:n});for(let[n,a]of Object.entries(i))r[n]=a,await this.#e.set(t.requesterAddress,e,n,a)}),5);let e={};for(let t of d){let n=r[t];n!==void 0&&(e[t]=n)}return this.#i({type:x.DecryptEnd,durationMs:Date.now()-u,encryptedValues:d,result:e}),r}catch(e){throw this.#i({type:x.DecryptError,error:w(e),durationMs:Date.now()-u,encryptedValues:d}),z(e,t.errorMessage,t.delegated)}}#o(e,t){let n=t[e.encryptedValue];if(n===void 0){e.error=new g(`Batch delegated decryption returned no value for encrypted value ${e.encryptedValue} on contract ${e.contractAddress}`);return}e.value=n}#s(e,t,n=!1){return e instanceof r?e:z(e,t,n)}#c(){throw new g(`Batch delegated decryption invariant failed: missing item`)}async#l(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}};function Lt(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}const B={AlreadyDelegatedOrRevokedInSameBlock:e=>new M(`Only one delegate/revoke per (delegator, delegate, contract) per block. Wait for the next block before retrying.`,{cause:e}),SenderCannotBeContractAddress:e=>new bt(`The contract address cannot be the caller address.`,{cause:e}),EnforcedPause:e=>new xt(`The ACL contract is paused. Delegation operations are temporarily disabled.`,{cause:e}),SenderCannotBeDelegate:e=>new j(`Cannot delegate to yourself (delegate === msg.sender).`,{cause:e}),DelegateCannotBeContractAddress:e=>new I(`Delegate address cannot be the same as the contract address.`,{cause:e}),ExpirationDateBeforeOneHour:e=>new L(`Expiration date must be at least 1 hour in the future.`,{cause:e}),ExpirationDateAlreadySetToSameValue:e=>new F(`The new expiration date is the same as the current one.`,{cause:e}),NotDelegatedYet:e=>new N(`Cannot revoke: no active delegation exists.`,{cause:e})};function Rt(e){return e in B}function zt(e,t){let n=Lt(e);if(n&&Rt(n))return B[n](t);let r=e instanceof Error?e.message:String(e);for(let[e,n]of Object.entries(B))if(r.includes(e))return n(t);return null}var Bt=class{#e;#t;#n;#r;constructor({provider:e,relayer:t,emitEvent:n=()=>{},logger:r}){this.#e=e,this.#t=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 L(`Expiration date must be at least 1 hour in the future`);let a=O(t),o=O(n),s=O(r);if(o===s)throw new j(`Cannot delegate to yourself (delegate === msg.sender).`);if(o===a)throw new I(`Delegate address cannot be the same as the contract address (${a}).`);let c=await this.#t.getAclAddress(),l=i?BigInt(Math.floor(i.getTime()/1e3)):b,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 F(`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:t,config:Ve(c,o,a,l)})}async revokeDelegation(e,{contractAddress:t,delegateAddress:n,delegatorAddress:r}){let i=O(t),a=O(n),o=O(r),s=await this.#t.getAclAddress(),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 N(`No active delegation found for delegate ${a} on contract ${i}.`);return this.#i({operation:`revokeDelegation`,signer:e,contractAddress:t,config:ze(s,a,i)})}async isDelegated(e){let t=await this.getDelegationExpiry(e);return t===0n?!1:t===b?!0:t>await this.#e.getBlockTimestamp()}async getDelegationExpiry({contractAddress:e,delegatorAddress:t,delegateAddress:n}){let r=await this.#t.getAclAddress();return this.#e.readContract(Ne(r,O(t),O(n),O(e)))}async#i({operation:e,signer:t,contractAddress:n,config:r}){try{return await Re({operation:e,signer:t,provider:this.#e,config:r,emit:e=>this.#n(e,n),logger:this.#r})}catch(e){throw this.#a(e),e}}#a(e){if(!(e instanceof _))return;let t=zt(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 N||t instanceof P){let n=O(e);r.set(n,t);return}throw t}})),r}async assertDelegationActive(e,t,n){let r=O(e),i=O(t),a=O(n),o=await this.getDelegationExpiry({contractAddress:r,delegatorAddress:i,delegateAddress:a});if(o===0n)throw new N(`No active delegation from ${i} to ${a} for ${r}`);if(o!==b&&o<=await this.#e.getBlockTimestamp())throw new P(`Delegation from ${i} to ${a} for ${r} has expired`)}},Vt=class{#e;#t;constructor({relayer:e,emitEvent:t}){this.#e=e,this.#t=t}async encrypt(e){let t=Date.now();try{this.#t({type:x.EncryptStart},e.contractAddress);let n=await this.#e.encrypt(e);return this.#t({type:x.EncryptEnd,durationMs:Date.now()-t},e.contractAddress),n}catch(n){throw this.#t({type:x.EncryptError,error:w(n),durationMs:Date.now()-t},e.contractAddress),St(n,`Encryption failed`)}}},Ht=class{#e;#t;#n;#r;#i;#a=new Set;#o;constructor(e){this.#e=e.signer,this.#t=e.relayer,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 u(`switch relayer chain`,()=>this.#t.switchChain(r),this.#i);let i=this.#r;i&&await u(`credential wallet account change`,()=>i.handleWalletAccountChange(t,n),this.#i),t&&await u(`clear decrypt cache`,()=>this.#n.clearForRequester(t.address),this.#i),await Promise.all(Array.from(this.#a,t=>u(`wallet account listener`,()=>t(e),this.#i)))}};function V(e){return gt(_t(e))}const H={ConfidentialTransfer:V(`ConfidentialTransfer(address,address,bytes32)`),Wrapped:V(`Wrapped(address,uint256)`),UnwrapRequested:V(`UnwrapRequested(address,bytes32,bytes32)`),UnwrapFinalized:V(`UnwrapFinalized(address,bytes32,bytes32,uint64)`)};function U(e){return O(D(e.slice(-40)))}function W(e){return e}function G(e,t){let n=2+t*64,r=e.slice(n,n+64);return r.length===64?r:r.padEnd(64,`0`)}function Ut(e,t){return O(D(G(e,t).slice(-40)))}function K(e,t){return BigInt(`0x`+G(e,t))}function Wt(e,t){return D(G(e,t))}function Gt(e){return e.topics[0]!==H.ConfidentialTransfer||e.topics.length<4?null:{eventName:`ConfidentialTransfer`,from:U(e.topics[1]),to:U(e.topics[2]),encryptedAmount:W(e.topics[3])}}function q(e){return e.topics[0]!==H.Wrapped||e.topics.length<2?null:{eventName:`Wrapped`,to:U(e.topics[1]),amountIn:K(e.data,0)}}function J(e){return e.topics[0]!==H.UnwrapRequested||e.topics.length<3?null:{eventName:`UnwrapRequested`,receiver:U(e.topics[1]),unwrapRequestId:W(e.topics[2]),encryptedAmount:Wt(e.data,0)}}function Y(e){return e.topics[0]!==H.UnwrapFinalized||e.topics.length<3?null:{eventName:`UnwrapFinalized`,receiver:U(e.topics[1]),unwrapRequestId:W(e.topics[2]),encryptedAmount:Wt(e.data,0),cleartextAmount:K(e.data,1)}}function Kt(e){return Gt(e)??q(e)??J(e)??Y(e)}function qt(e){let t=[];for(let n of e){let e=Kt(n);e&&t.push(e)}return t}function Jt(e){for(let t of e){let e=J(t);if(e)return e}return null}function Yt(e){for(let t of e){let e=q(t);if(e)return e}return null}const Xt=[H.ConfidentialTransfer,H.Wrapped,H.UnwrapRequested,H.UnwrapFinalized],X={DelegatedForUserDecryption:V(`DelegatedForUserDecryption(address,address,address,uint64,uint64,uint64)`),RevokedDelegationForUserDecryption:V(`RevokedDelegationForUserDecryption(address,address,address,uint64,uint64)`)};function Z(e){return e.topics[0]!==X.DelegatedForUserDecryption||e.topics.length<3?null:{eventName:`DelegatedForUserDecryption`,delegator:U(e.topics[1]),delegate:U(e.topics[2]),contractAddress:Ut(e.data,0),delegationCounter:K(e.data,1),oldExpirationDate:K(e.data,2),newExpirationDate:K(e.data,3)}}function Q(e){return e.topics[0]!==X.RevokedDelegationForUserDecryption||e.topics.length<3?null:{eventName:`RevokedDelegationForUserDecryption`,delegator:U(e.topics[1]),delegate:U(e.topics[2]),contractAddress:Ut(e.data,0),delegationCounter:K(e.data,1),oldExpirationDate:K(e.data,2)}}function Zt(e){return Z(e)??Q(e)}function Qt(e){let t=[];for(let n of e){let e=Zt(n);e&&t.push(e)}return t}function $t(e){for(let t of e){let e=Z(t);if(e)return e}return null}function en(e){for(let t of e){let e=Q(t);if(e)return e}return null}const tn=[X.DelegatedForUserDecryption,X.RevokedDelegationForUserDecryption];var nn=class extends C{#e;#t=null;#n=null;#r(e){try{return ot(this.sdk.signer,`WrappedToken.sdk.signer`),this.sdk.signer}catch(t){throw new ee(e,{cause:t})}}async underlying(){return this.#o()}async isPayable(){if(this.#n!==null)return this.#n;try{let e=await this.#o();this.#n=await this.sdk.provider.readContract(Se(e))}catch{this.#n=!1}return this.#n}async allowance(e){let t=await this.#o();return this.sdk.provider.readContract(m(t,O(e),this.address))}async shield(e,t){let n=await S(`shield`,this.sdk.signer,this.sdk.provider),i=await this.isPayable(),a=await this.#o(),o=O(n.address),s;try{s=await this.sdk.provider.readContract(le(a,o))}catch(e){throw e instanceof r?e:new Fe(`Could not read ERC-20 balance for shield validation (token: ${a})`,{cause:w(e)})}if(s<e)throw new He(`Insufficient ERC-20 balance: requested ${e}, available ${s} (token: ${a})`,{requested:e,available:s,token:a});return i?this.#i(e,a,o,t):this.#a(e,o,t)}async#i(e,t,n,r){this.#r(`shield`);let i=r?.to?O(r.to):n,a=i===n?`0x`:i;return this.submitTransaction({operation:`shield:transferAndCall`,config:wt(t,this.address,e,a),onSubmitted:r?.onShieldSubmitted})}async#a(e,t,n){this.#r(`shield`);let r=n?.approvalStrategy??`exact`;r!==`skip`&&await this.#c(e,r===`max`,n);let i=n?.to?O(n.to):t;return this.submitTransaction({operation:`shield:approveAndWrap`,config:f(this.address,i,e),onSubmitted:n?.onShieldSubmitted})}async approveUnderlying(e){this.#r(`approveUnderlying`);let t=await S(`approveUnderlying`,this.sdk.signer,this.sdk.provider),n=await this.#o(),r=O(t.address),i=e??2n**256n-1n;return i>0n&&await this.sdk.provider.readContract(m(n,r,this.address))>0n&&await this.submitTransaction({operation:`approveUnderlying:reset`,config:p(n,this.address,0n)}),this.submitTransaction({operation:`approveUnderlying`,config:p(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 u(`unshield: onUnwrapSubmitted`,()=>r?.(c.txHash),this.sdk.logger),this.#s(c.txHash,s,o)}async unshieldAll(e){let t=crypto.randomUUID(),n=await this.unwrapAll();return u(`unshieldAll: onUnwrapSubmitted`,()=>e?.onUnwrapSubmitted?.(n.txHash),this.sdk.logger),this.#s(n.txHash,t,e)}async resumeUnshield(e,t){return this.#s(e,crypto.randomUUID(),t)}async unwrap(e){this.#r(`unwrap`);let t=O((await S(`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 h(`Encryption returned no encrypted values`);return this.submitTransaction({operation:`unwrap`,config:ne(this.address,t,t,i,r)})}async unwrapAll(){this.#r(`unwrapAll`);let e=O((await S(`unwrapAll`,this.sdk.signer,this.sdk.provider)).address),t=await this.readConfidentialBalanceOf(e);if(y(t))throw new g(`Cannot unshield: balance is zero`);return this.submitTransaction({operation:`unwrapAll`,config:re(this.address,e,e,t)})}async finalizeUnwrap(e){this.#r(`finalizeUnwrap`),await v(`finalizeUnwrap`,this.sdk.signer,this.sdk.provider);let t=await this.sdk.decryption.decryptPublicValues([e]),n=t.clearValues[e];return st(n,`finalizeUnwrap: clearValue`),this.submitTransaction({operation:`finalizeUnwrap`,config:l(this.address,e,n,t.decryptionProof)})}async#o(){return this.#e===void 0?(this.#t||=this.sdk.provider.readContract(ge(this.address)).then(e=>(this.#e=e,this.#t=null,e)).catch(e=>{throw this.#t=null,e}),this.#t):this.#e}async#s(e,t,n){this.emit({type:x.UnshieldPhase1Submitted,txHash:e,operationId:t});let i;try{i=await this.sdk.provider.waitForTransactionReceipt(e)}catch(e){throw e instanceof r?e:new _(`Failed to get unshield receipt`,{cause:e})}let a=Jt(i.logs);if(!a)throw new _(`No UnwrapRequested event found in unshield receipt`);this.emit({type:x.UnshieldPhase2Started,operationId:t}),u(`unshield: onFinalizing`,()=>n?.onFinalizing?.(),this.sdk.logger);let o=await this.finalizeUnwrap(a.unwrapRequestId??a.encryptedAmount);return this.emit({type:x.UnshieldPhase2Submitted,txHash:o.txHash,operationId:t}),u(`unshield: onFinalizeSubmitted`,()=>n?.onFinalizeSubmitted?.(o.txHash),this.sdk.logger),o}async#c(e,t,n){this.#r(`approveUnderlying`);let r=await this.#o(),i=O((await S(`approveUnderlying`,this.sdk.signer,this.sdk.provider)).address),a=await this.sdk.provider.readContract(m(r,i,this.address));if(a>=e)return;a>0n&&await this.submitTransaction({operation:`approveUnderlying:reset`,config:p(r,this.address,0n)});let o=t?2n**256n-1n:e;await this.submitTransaction({operation:`approveUnderlying`,config:p(r,this.address,o),onSubmitted:n?.onApprovalSubmitted})}},rn=class{relayer;provider;signer;storage;registry;permits;delegations;decryption;#e;#t;#n;#r;#i;#a;#o;#s;#c;constructor(e){this.relayer=e.relayer,this.provider=e.provider,this.signer=e.signer,this.storage=e.storage,this.#t=e.onEvent??function(){},this.#n=e.logger,this.#r=new jt(e.storage,this.#n),this.#c=new Bt({provider:this.provider,relayer:this.relayer,emitEvent:this.emitEvent.bind(this),logger:this.#n});let t={};for(let n of e.chains)n.registryAddress&&(t[n.id]=n.registryAddress);this.registry=new E({provider:this.provider,registryAddresses:t,registryTTL:e.registryTTL}),this.#e=e.registryTTL,e.signer&&(this.#s=new Xe({relayer:this.relayer,signer:e.signer,transportKeyPairTTL:e.transportKeyPairTTL,permitTTL:e.permitTTL,storage:this.storage,permitStorage:e.permitStorage,logger:this.#n}),this.#o=new It({cache:this.#r,credentialService:this.#s,delegationService:this.#c,relayer:this.relayer,emitEvent:this.emitEvent.bind(this)})),this.#a=new Vt({relayer:this.relayer,emitEvent:this.emitEvent.bind(this)}),this.#i=new Ht({signer:e.signer,relayer:this.relayer,cachingService:this.#r,credentialService:this.#s,logger:this.#n}),this.permits=new Ot({signer:this.signer,provider:this.provider,cachingService:this.#r,credentialService:this.#s,logger:this.#n}),this.delegations=new Dt({signer:this.signer,provider:this.provider,delegationService:this.#c}),this.decryption=new Et({signer:this.signer,provider:this.provider,relayer:this.relayer,decryptionService:this.#o})}onWalletAccountChange(e){return this.#i.onWalletAccountChange(e)}get logger(){return this.#n}emitEvent(e,t){try{this.#t({...e,tokenAddress:t,timestamp:Date.now()})}catch(t){this.#n.warn(`${e.type} event listener silently failed`,{error:t})}}createWrappersRegistry(e){return new E({provider:this.provider,registryAddresses:e,registryTTL:this.#e})}async encrypt(e){return this.#a.encrypt(e)}createToken(e){return new C(this,e)}createWrappedToken(e){return new nn(this,e)}dispose(){this.#i.dispose()}terminate(){this.dispose(),this.relayer.terminate(),this.signer?.dispose?.()}[Symbol.dispose](){this.terminate()}};function $(e){return`zama:pending-unshield:${tt(e)}`}const an=k.union([k.pipe(T,k.transform(e=>({unwrapTxHash:e}))),k.pipe(k.object({version:k.literal(1),unwrapTxHash:T,unwrapRequestId:k.optional(T)}),k.transform(({unwrapTxHash:e,unwrapRequestId:t})=>({unwrapTxHash:e,unwrapRequestId:t})))]);async function on(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 sn(e,t){return(await cn(e,t))?.unwrapTxHash??null}async function cn(e,t){let n=$(t),r=await e.get(n);if(r==null)return null;let i=an.safeParse(r);return i.success?i.data:(await e.delete(n),null)}async function ln(e,t){await e.delete($(t))}var un=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 dn=new un;export{tn as ACL_TOPICS,xt as AclPausedError,X as AclTopics,Ie as BalanceCheckUnavailableError,et as BaseSigner,Ue as ChainMismatchError,un as ChromeSessionStorage,i as ConfigurationError,Et as Decryption,g as DecryptionFailedError,Ke as DefaultRegistryAddresses,bt as DelegationContractIsSelfError,M as DelegationCooldownError,I as DelegationDelegateEqualsContractError,L as DelegationExpirationTooSoonError,P as DelegationExpiredError,F as DelegationExpiryUnchangedError,N as DelegationNotFoundError,R as DelegationNotPropagatedError,j as DelegationSelfNotAllowedError,Dt as Delegations,fe as ERC1363_INTERFACE_ID,Fe as ERC20ReadFailedError,ve as ERC7984_INTERFACE_ID,Ee as ERC7984_WRAPPER_INTERFACE_ID,h as EncryptionFailedError,rt as IndexedDBStorage,je as InsufficientConfidentialBalanceError,He as InsufficientERC20BalanceError,yt as InvalidTransportKeyPairError,at as MemoryStorage,Ze as MutableWalletAccountStore,A as NoCiphertextError,Ot as Permits,n as RelayerRequestFailedError,ee as SignerNotConfiguredError,te as SignerRequiredError,ce as SigningFailedError,d as SigningRejectedError,Xt as TOKEN_TOPICS,C as Token,H as Topics,_ as TransactionRevertedError,vt as TransportKeyPairExpiredError,ae as WalletAccountNotReadyError,Ae as WalletNotConnectedError,nn as WrappedToken,E as WrappersRegistry,Be as ZERO_ENCRYPTED_VALUE,r as ZamaError,t as ZamaErrorCode,rn as ZamaSDK,x as ZamaSDKEvents,m as allowanceContract,ht as anvil,p as approveContract,le as balanceOfContract,dt as bscTestnet,pt as chains,dn as chromeSessionStorage,ln as clearPendingUnshield,Ge as cleartext,oe as confidentialBalanceOfContract,s as confidentialTotalSupplyContract,Oe as confidentialTransferContract,se as confidentialTransferFromContract,Tt as createConfig,Qe as createWalletAccountStore,De as decimalsContract,Zt as decodeAclEvent,Qt as decodeAclEvents,Gt as decodeConfidentialTransfer,Z as decodeDelegatedForUserDecryption,Kt as decodeOnChainEvent,qt as decodeOnChainEvents,Q as decodeRevokedDelegationForUserDecryption,Y as decodeUnwrapFinalized,J as decodeUnwrapRequested,q as decodeWrapped,Ve as delegateForUserDecryptionContract,l as finalizeUnwrapContract,$t as findDelegatedForUserDecryption,en as findRevokedDelegationForUserDecryption,Jt as findUnwrapRequested,Yt as findWrapped,Te as getConfidentialTokenAddressContract,Ne as getDelegationExpiryContract,be as getTokenAddressContract,Ce as getTokenPairContract,he as getTokenPairsContract,ue as getTokenPairsLengthContract,xe as getTokenPairsSliceContract,ut as hardhat,ct as hoodi,nt as indexedDBStorage,c as inferredTotalSupplyContract,ft as ingenTestnet,pe as isConfidentialTokenContract,we as isConfidentialTokenValidContract,me as isConfidentialWrapperContract,y as isEncryptedValueZero,Pe as isHandleDelegatedContract,ie as isOperatorContract,sn as loadPendingUnshield,cn as loadPendingUnshieldRequest,mt as mainnet,e as matchZamaError,it as memoryStorage,de as nameContract,_e as rateContract,$e as resolveChainRelayers,qe as resolveStorage,ze as revokeDelegationContract,on as savePendingUnshield,lt as sepolia,a as setOperatorContract,ye as supportsInterfaceContract,ke as symbolContract,wt as transferAndCallContract,ge as underlyingContract,ne as unwrapContract,re as unwrapFromBalanceContract,f as wrapContract};
1
+ import{a as e,i as t,n,r,t as i}from"./relayer-D-nicEYJ.js";import{A as a,B as o,C as s,D as c,E as l,F as u,H as d,I as ee,L as te,M as ne,N as re,O as ie,P as f,R as ae,S as oe,T as se,V as ce,_ as le,a as ue,b as de,c as fe,d as pe,f as me,g as p,h as m,i as he,j as ge,k as _e,l as ve,m as ye,n as be,o as xe,p as Se,r as Ce,s as we,t as Te,u as Ee,v as De,w as Oe,x as ke,z as Ae}from"./wrappers-registry-BWWG0aze.js";import{n as h,t as g}from"./encryption-BGmINekJ.js";import{_ as je,a as Me,b as _,c as v,d as Ne,f as Pe,g as Fe,h as Ie,i as y,l as b,m as Le,n as Re,o as x,p as ze,r as Be,s as S,t as C,u as Ve,v as He,y as Ue}from"./token-TQ-VFHS4.js";import{r as w,t as We}from"./error-W1N-FGwV.js";import{t as Ge}from"./cleartext-CTla3A3O.js";import{a as Ke,c as qe,d as Je,f as T,i as Ye,l as Xe,n as Ze,o as E,r as Qe,s as $e,t as et,u as tt}from"./base-signer-BVqcM5jt.js";import{n as nt,t as rt}from"./indexeddb-storage-Mi-fCWN3.js";import{n as it,t as at}from"./memory-storage-fp9RY5BQ.js";import{i as ot,t as st}from"./assertions-CnPIS0VN.js";import{t as D}from"./hex-CxtyupeQ.js";import{a as ct,c as lt,i as ut,n as dt,o as ft,r as pt,s as mt,t as ht}from"./chains-CXcO1DBP.js";import{getAddress as O,keccak256 as gt,toBytes as _t}from"viem";import{z as k}from"zod/mini";var vt=class extends r{constructor(e,n){super(t.TransportKeyPairExpired,e,n),this.name=`TransportKeyPairExpiredError`}},yt=class extends r{constructor(e,n){super(t.InvalidTransportKeyPair,e,n),this.name=`InvalidTransportKeyPairError`}},A=class extends r{constructor(e,n){super(t.NoCiphertext,e,n),this.name=`NoCiphertextError`}},j=class extends r{constructor(e,n){super(t.DelegationSelfNotAllowed,e,n),this.name=`DelegationSelfNotAllowedError`}},bt=class extends r{constructor(e,n){super(t.DelegationCooldown,e,n),this.name=`DelegationCooldownError`}},M=class extends r{constructor(e,n){super(t.DelegationNotFound,e,n),this.name=`DelegationNotFoundError`}},N=class extends r{constructor(e,n){super(t.DelegationExpired,e,n),this.name=`DelegationExpiredError`}},P=class extends r{constructor(e,n){super(t.DelegationExpiryUnchanged,e,n),this.name=`DelegationExpiryUnchangedError`}},F=class extends r{constructor(e,n){super(t.DelegationDelegateEqualsContract,e,n),this.name=`DelegationDelegateEqualsContractError`}},xt=class extends r{constructor(e,n){super(t.DelegationContractIsSelf,e,n),this.name=`DelegationContractIsSelfError`}},St=class extends r{constructor(e,n){super(t.AclPaused,e,n),this.name=`AclPausedError`}},I=class extends r{constructor(e,n){super(t.DelegationExpirationTooSoon,e,n),this.name=`DelegationExpirationTooSoonError`}},L=class extends r{constructor(e,n){super(t.DelegationNotPropagated,e,n),this.name=`DelegationNotPropagatedError`}};function R(e,t,r=!1){if(e instanceof g||e instanceof A||e instanceof n||e instanceof L||e instanceof d||e instanceof ce)return e;let i=We(e);return i===400?new A(e instanceof Error?e.message:`No ciphertext for this account`,{cause:e}):r&&i===500?new L(`Delegated decryption failed with a server error. This is most commonly caused by the delegation not having propagated to the gateway yet — after granting delegation, allow 1–2 minutes for cross-chain synchronization before retrying. If the error persists, the gateway or relayer may be experiencing an unrelated issue.`,{cause:e}):i===void 0?new g(t,{cause:e}):new n(e instanceof Error?e.message:t,i,{cause:e})}function Ct(e,t){if(e instanceof r)return e;let i=We(e);return i===void 0?new h(t,{cause:e}):new n(e instanceof Error?e.message:t,i,{cause:e})}const wt=[{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 Tt(e,t,n,r=`0x`){return{address:e,abi:wt,functionName:`transferAndCall`,args:[t,n,r]}}function Et(e){return Ye(e.signer,e.provider,e)}var Dt=class{#e;#t;#n;#r;constructor(e){this.#e=e.signer,this.#t=e.provider,this.#n=e.relayer,this.#r=e.decryptionService}#i(e){return o(this.#r,e)}async decryptValues(e){let t=this.#i(`decryptValues`),n=await S(`decryptValues`,this.#e,this.#t);return t.userDecrypt(e,n.address)}async delegatedDecryptValues(e,t,n=t){let r=this.#i(`delegatedDecryptValues`),i=await S(`delegatedDecryptValues`,this.#e,this.#t);return r.delegatedUserDecrypt(e,t,i.address,n)}async decryptPublicValues(e){if(e.length===0)return{clearValues:{},decryptionProof:`0x`,abiEncodedClearValues:`0x`};try{return await this.#n.publicDecrypt(e)}catch(e){throw R(e,`Public decryption failed`)}}async delegatedBatchDecryptValues({encryptedInputs:e,delegatorAddress:t,accountAddress:n=t,maxConcurrency:r}){let i=this.#i(`delegatedBatchDecryptValues`),a=await S(`delegatedBatchDecryptValues`,this.#e,this.#t);return i.delegatedBatchDecryptHandlesAs({encryptedInputs:e,delegatorAddress:t,delegateAddress:a.address,accountAddress:n,maxConcurrency:r})}},Ot=class{#e;#t;#n;constructor(e){this.#e=e.signer,this.#t=e.provider,this.#n=e.delegationService}#r(e){return o(this.#e,e)}async delegateDecryption({contractAddress:e,delegateAddress:t,expirationDate:n}){let r=this.#r(`delegateDecryption`),i=await S(`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 S(`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)}},kt=class{#e;#t;#n;#r;#i;constructor(e){this.#e=e.signer,this.#t=e.provider,this.#n=e.cachingService,this.#r=e.credentialService,this.#i=e.logger}#a(e){return o(this.#r,e)}async grantPermit(e){if(e.length===0)return;let t=this.#a(`grantPermit`);await v(`grantPermit`,this.#e,this.#t),await t.grantPermit(e)}async grantDelegationPermit(e,t){if(t.length===0)return;let n=this.#a(`grantDelegationPermit`);await v(`grantDelegationPermit`,this.#e,this.#t),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 revokePermits(e){let t=this.#a(`revokePermits`),n=O((await S(`revokePermits`,this.#e,this.#t)).address);try{await t.revokePermits(e)}finally{await u(`clear decrypt cache`,()=>this.#n.clearForRequester(n),this.#i)}}async clear(){let e=this.#a(`clear`),t=O((await S(`clear`,this.#e,this.#t)).address);try{await e.clearCredentials()}finally{await u(`clear decrypt cache`,()=>this.#n.clearForRequester(t),this.#i)}}};const At=k.union([k.bigint(),k.boolean(),Je]),jt=k.array(k.string());var Mt=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=At.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=O(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}:${O(e)}:${O(t)}:${n.toLowerCase()}`}async#l(){let e=await this.#e.get(this.#r);if(e===null)return[];let t=jt.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 Nt(e,t){let n=It(e,t);if(!n)throw new g(`No permit covers contract ${t} after allow()`);return Ft(e,n)}function Pt(e,t){let n=It(e,t);if(!n)throw new g(`No delegated permit covers contract ${t} after allow()`);return{...Ft(e,n),delegatorAddress:n.delegatorAddress}}function Ft(e,t){return{signedContractAddresses:t.signedContractAddresses,privateKey:e.keypair.privateKey,publicKey:e.keypair.publicKey,signature:t.signature,startTimestamp:t.startTimestamp,durationDays:t.durationDays}}function It(e,t){let n=tt(t);return e.permits.find(e=>e.signedContractAddresses.includes(n))}var Lt=class{#e;#t;#n;#r;#i;constructor({cache:e,credentialService:t,delegationService:n,relayer:r,emitEvent:i}){this.#e=e,this.#t=t,this.#n=n,this.#r=r,this.#i=i}async userDecrypt(e,t){let n=O(t);return this.#a(e,{requesterAddress:n,resolveCredentials:e=>this.#t.grantPermit(e),decryptContract:async({credentials:e,contractAddress:t,encryptedValues:r})=>this.#r.userDecrypt({encryptedValues:r,contractAddress:t,...Nt(e,t),signerAddress:n}),errorMessage:`Failed to decrypt encrypted values`})}async delegatedUserDecrypt(e,t,n,r){let i=O(t),a=O(n);return this.#a(e,{requesterAddress:O(r),resolveCredentials:e=>this.#t.grantPermit(e,i),validate:e=>this.#l(e,{delegatorAddress:i,delegateAddress:a}),decryptContract:async({credentials:e,contractAddress:t,encryptedValues:n})=>this.#r.delegatedUserDecrypt({encryptedValues:n,contractAddress:t,...Pt(e,t),delegateAddress:a}),errorMessage:`Failed to decrypt delegated encrypted values`,delegated:!0})}async delegatedBatchDecryptHandlesAs({encryptedInputs:e,delegatorAddress:t,delegateAddress:n,accountAddress:r,maxConcurrency:i=5}){let a=e.map(e=>({encryptedValue:e.encryptedValue,contractAddress:O(e.contractAddress)}));if(a.length===0)return{items:a};let o=O(r);try{let e=await this.delegatedUserDecrypt(a.map(({encryptedValue:e,contractAddress:t})=>({encryptedValue:e,contractAddress:t})),t,n,o);for(let t of a)this.#o(t,e);return{items:a}}catch(e){if(Le(e))throw e;if(a.length===1){let[t=this.#c()]=a;return t.error=this.#s(e,`Failed to decrypt delegated encrypted values`,!0),{items:a}}}return await Me(a.map(e=>async()=>{try{let r=await this.delegatedUserDecrypt([{encryptedValue:e.encryptedValue,contractAddress:e.contractAddress}],t,n,o);this.#o(e,r)}catch(t){if(Le(t))throw t;e.error=this.#s(t,`Failed to decrypt delegated encrypted values`,!0)}}),i),{items:a}}async#a(e,t){if(e.length===0)return{};let n=e.map(e=>({encryptedValue:e.encryptedValue,contractAddress:O(e.contractAddress)})),r={},i=[];for(let e of n)y(e.encryptedValue)?r[e.encryptedValue]=0n:i.push(e);if(i.length===0)return r;let a=Array.from(new Set(n.map(e=>e.contractAddress))),o=Array.from(new Set(i.map(e=>e.contractAddress)));t.validate&&await t.validate(o);let s=[];for(let e of i){let n=await this.#e.get(t.requesterAddress,e.contractAddress,e.encryptedValue);n===null?s.push(e):r[e.encryptedValue]=n}if(s.length===0)return r;let c=await t.resolveCredentials(a),l=new Map;for(let e of s){let t=l.get(e.contractAddress);t?t.push(e.encryptedValue):l.set(e.contractAddress,[e.encryptedValue])}let u=Date.now(),d=s.map(e=>e.encryptedValue);try{this.#i({type:x.DecryptStart,encryptedValues:d}),await Me([...l.entries()].map(([e,n])=>async()=>{let i=await t.decryptContract({credentials:c,contractAddress:e,encryptedValues:n});for(let[n,a]of Object.entries(i))r[n]=a,await this.#e.set(t.requesterAddress,e,n,a)}),5);let e={};for(let t of d){let n=r[t];n!==void 0&&(e[t]=n)}return this.#i({type:x.DecryptEnd,durationMs:Date.now()-u,encryptedValues:d,result:e}),r}catch(e){throw this.#i({type:x.DecryptError,error:w(e),durationMs:Date.now()-u,encryptedValues:d}),R(e,t.errorMessage,t.delegated)}}#o(e,t){let n=t[e.encryptedValue];if(n===void 0){e.error=new g(`Batch delegated decryption returned no value for encrypted value ${e.encryptedValue} on contract ${e.contractAddress}`);return}e.value=n}#s(e,t,n=!1){return e instanceof r?e:R(e,t,n)}#c(){throw new g(`Batch delegated decryption invariant failed: missing item`)}async#l(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}};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}const z={AlreadyDelegatedOrRevokedInSameBlock:e=>new bt(`Only one delegate/revoke per (delegator, delegate, contract) per block. Wait for the next block before retrying.`,{cause:e}),SenderCannotBeContractAddress:e=>new xt(`The contract address cannot be the caller address.`,{cause:e}),EnforcedPause:e=>new St(`The ACL contract is paused. Delegation operations are temporarily disabled.`,{cause:e}),SenderCannotBeDelegate:e=>new j(`Cannot delegate to yourself (delegate === msg.sender).`,{cause:e}),DelegateCannotBeContractAddress:e=>new F(`Delegate address cannot be the same as the contract address.`,{cause:e}),ExpirationDateBeforeOneHour:e=>new I(`Expiration date must be at least 1 hour in the future.`,{cause:e}),ExpirationDateAlreadySetToSameValue:e=>new P(`The new expiration date is the same as the current one.`,{cause:e}),NotDelegatedYet:e=>new M(`Cannot revoke: no active delegation exists.`,{cause:e})};function zt(e){return e in z}function Bt(e,t){let n=Rt(e);if(n&&zt(n))return z[n](t);let r=e instanceof Error?e.message:String(e);for(let[e,n]of Object.entries(z))if(r.includes(e))return n(t);return null}var Vt=class{#e;#t;#n;#r;constructor({provider:e,relayer:t,emitEvent:n=()=>{},logger:r}){this.#e=e,this.#t=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 I(`Expiration date must be at least 1 hour in the future`);let a=O(t),o=O(n),s=O(r);if(o===s)throw new j(`Cannot delegate to yourself (delegate === msg.sender).`);if(o===a)throw new F(`Delegate address cannot be the same as the contract address (${a}).`);let c=await this.#t.getAclAddress(),l=i?BigInt(Math.floor(i.getTime()/1e3)):b,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 P(`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:t,config:Ve(c,o,a,l)})}async revokeDelegation(e,{contractAddress:t,delegateAddress:n,delegatorAddress:r}){let i=O(t),a=O(n),o=O(r),s=await this.#t.getAclAddress(),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 M(`No active delegation found for delegate ${a} on contract ${i}.`);return this.#i({operation:`revokeDelegation`,signer:e,contractAddress:t,config:ze(s,a,i)})}async isDelegated(e){let t=await this.getDelegationExpiry(e);return t===0n?!1:t===b?!0:t>await this.#e.getBlockTimestamp()}async getDelegationExpiry({contractAddress:e,delegatorAddress:t,delegateAddress:n}){let r=await this.#t.getAclAddress();return this.#e.readContract(Ne(r,O(t),O(n),O(e)))}async#i({operation:e,signer:t,contractAddress:n,config:r}){try{return await Re({operation:e,signer:t,provider:this.#e,config:r,emit:e=>this.#n(e,n),logger:this.#r})}catch(e){throw this.#a(e),e}}#a(e){if(!(e instanceof _))return;let t=Bt(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 M||t instanceof N){let n=O(e);r.set(n,t);return}throw t}})),r}async assertDelegationActive(e,t,n){let r=O(e),i=O(t),a=O(n),o=await this.getDelegationExpiry({contractAddress:r,delegatorAddress:i,delegateAddress:a});if(o===0n)throw new M(`No active delegation from ${i} to ${a} for ${r}`);if(o!==b&&o<=await this.#e.getBlockTimestamp())throw new N(`Delegation from ${i} to ${a} for ${r} has expired`)}},Ht=class{#e;#t;constructor({relayer:e,emitEvent:t}){this.#e=e,this.#t=t}async encrypt(e){let t=Date.now();try{this.#t({type:x.EncryptStart},e.contractAddress);let n=await this.#e.encrypt(e);return this.#t({type:x.EncryptEnd,durationMs:Date.now()-t},e.contractAddress),n}catch(n){throw this.#t({type:x.EncryptError,error:w(n),durationMs:Date.now()-t},e.contractAddress),Ct(n,`Encryption failed`)}}},Ut=class{#e;#t;#n;#r;#i;#a=new Set;#o;constructor(e){this.#e=e.signer,this.#t=e.relayer,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 u(`switch relayer chain`,()=>this.#t.switchChain(r),this.#i);let i=this.#r;i&&await u(`credential wallet account change`,()=>i.handleWalletAccountChange(t,n),this.#i),t&&await u(`clear decrypt cache`,()=>this.#n.clearForRequester(t.address),this.#i),await Promise.all(Array.from(this.#a,t=>u(`wallet account listener`,()=>t(e),this.#i)))}};function B(e){return gt(_t(e))}const V={ConfidentialTransfer:B(`ConfidentialTransfer(address,address,bytes32)`),Wrap:B(`Wrap(address,uint256,bytes32)`),UnwrapRequested:B(`UnwrapRequested(address,bytes32,bytes32)`),UnwrapFinalized:B(`UnwrapFinalized(address,bytes32,bytes32,uint64)`)};function H(e){return O(D(e.slice(-40)))}function U(e){return e}function W(e,t){let n=2+t*64,r=e.slice(n,n+64);return r.length===64?r:r.padEnd(64,`0`)}function Wt(e,t){return O(D(W(e,t).slice(-40)))}function G(e,t){return BigInt(`0x`+W(e,t))}function K(e,t){return D(W(e,t))}function Gt(e){return e.topics[0]!==V.ConfidentialTransfer||e.topics.length<4?null:{eventName:`ConfidentialTransfer`,from:H(e.topics[1]),to:H(e.topics[2]),encryptedAmount:U(e.topics[3])}}function q(e){return e.topics[0]!==V.Wrap||e.topics.length<2?null:{eventName:`Wrap`,to:H(e.topics[1]),roundedAmount:G(e.data,0),encryptedWrappedAmount:K(e.data,1)}}function J(e){return e.topics[0]!==V.UnwrapRequested||e.topics.length<3?null:{eventName:`UnwrapRequested`,receiver:H(e.topics[1]),unwrapRequestId:U(e.topics[2]),encryptedAmount:K(e.data,0)}}function Y(e){return e.topics[0]!==V.UnwrapFinalized||e.topics.length<3?null:{eventName:`UnwrapFinalized`,receiver:H(e.topics[1]),unwrapRequestId:U(e.topics[2]),encryptedAmount:K(e.data,0),cleartextAmount:G(e.data,1)}}function Kt(e){return Gt(e)??q(e)??J(e)??Y(e)}function qt(e){let t=[];for(let n of e){let e=Kt(n);e&&t.push(e)}return t}function Jt(e){for(let t of e){let e=J(t);if(e)return e}return null}function Yt(e){for(let t of e){let e=q(t);if(e)return e}return null}const Xt=[V.ConfidentialTransfer,V.Wrap,V.UnwrapRequested,V.UnwrapFinalized],X={DelegatedForUserDecryption:B(`DelegatedForUserDecryption(address,address,address,uint64,uint64,uint64)`),RevokedDelegationForUserDecryption:B(`RevokedDelegationForUserDecryption(address,address,address,uint64,uint64)`)};function Z(e){return e.topics[0]!==X.DelegatedForUserDecryption||e.topics.length<3?null:{eventName:`DelegatedForUserDecryption`,delegator:H(e.topics[1]),delegate:H(e.topics[2]),contractAddress:Wt(e.data,0),delegationCounter:G(e.data,1),oldExpirationDate:G(e.data,2),newExpirationDate:G(e.data,3)}}function Q(e){return e.topics[0]!==X.RevokedDelegationForUserDecryption||e.topics.length<3?null:{eventName:`RevokedDelegationForUserDecryption`,delegator:H(e.topics[1]),delegate:H(e.topics[2]),contractAddress:Wt(e.data,0),delegationCounter:G(e.data,1),oldExpirationDate:G(e.data,2)}}function Zt(e){return Z(e)??Q(e)}function Qt(e){let t=[];for(let n of e){let e=Zt(n);e&&t.push(e)}return t}function $t(e){for(let t of e){let e=Z(t);if(e)return e}return null}function en(e){for(let t of e){let e=Q(t);if(e)return e}return null}const tn=[X.DelegatedForUserDecryption,X.RevokedDelegationForUserDecryption];var nn=class extends C{#e;#t=null;#n=null;#r(e){try{return ot(this.sdk.signer,`WrappedToken.sdk.signer`),this.sdk.signer}catch(t){throw new ee(e,{cause:t})}}async underlying(){return this.#o()}async isPayable(){if(this.#n!==null)return this.#n;try{let e=await this.#o();this.#n=await this.sdk.provider.readContract(Se(e))}catch{this.#n=!1}return this.#n}async allowance(e){let t=await this.#o();return this.sdk.provider.readContract(m(t,O(e),this.address))}async shield(e,t){let n=await S(`shield`,this.sdk.signer,this.sdk.provider),i=await this.isPayable(),a=await this.#o(),o=O(n.address),s;try{s=await this.sdk.provider.readContract(le(a,o))}catch(e){throw e instanceof r?e:new Fe(`Could not read ERC-20 balance for shield validation (token: ${a})`,{cause:w(e)})}if(s<e)throw new He(`Insufficient ERC-20 balance: requested ${e}, available ${s} (token: ${a})`,{requested:e,available:s,token:a});return i?this.#i(e,a,o,t):this.#a(e,o,t)}async#i(e,t,n,r){this.#r(`shield`);let i=r?.to?O(r.to):n,a=i===n?`0x`:i;return this.submitTransaction({operation:`shield:transferAndCall`,config:Tt(t,this.address,e,a),onSubmitted:r?.onShieldSubmitted})}async#a(e,t,n){this.#r(`shield`);let r=n?.approvalStrategy??`exact`;r!==`skip`&&await this.#c(e,r===`max`,n);let i=n?.to?O(n.to):t;return this.submitTransaction({operation:`shield:approveAndWrap`,config:f(this.address,i,e),onSubmitted:n?.onShieldSubmitted})}async approveUnderlying(e){this.#r(`approveUnderlying`);let t=await S(`approveUnderlying`,this.sdk.signer,this.sdk.provider),n=await this.#o(),r=O(t.address),i=e??2n**256n-1n;return i>0n&&await this.sdk.provider.readContract(m(n,r,this.address))>0n&&await this.submitTransaction({operation:`approveUnderlying:reset`,config:p(n,this.address,0n)}),this.submitTransaction({operation:`approveUnderlying`,config:p(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 u(`unshield: onUnwrapSubmitted`,()=>r?.(c.txHash),this.sdk.logger),this.#s(c.txHash,s,o)}async unshieldAll(e){let t=crypto.randomUUID(),n=await this.unwrapAll();return u(`unshieldAll: onUnwrapSubmitted`,()=>e?.onUnwrapSubmitted?.(n.txHash),this.sdk.logger),this.#s(n.txHash,t,e)}async resumeUnshield(e,t){return this.#s(e,crypto.randomUUID(),t)}async unwrap(e){this.#r(`unwrap`);let t=O((await S(`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 h(`Encryption returned no encrypted values`);return this.submitTransaction({operation:`unwrap`,config:ne(this.address,t,t,i,r)})}async unwrapAll(){this.#r(`unwrapAll`);let e=O((await S(`unwrapAll`,this.sdk.signer,this.sdk.provider)).address),t=await this.readConfidentialBalanceOf(e);if(y(t))throw new g(`Cannot unshield: balance is zero`);return this.submitTransaction({operation:`unwrapAll`,config:re(this.address,e,e,t)})}async finalizeUnwrap(e){this.#r(`finalizeUnwrap`),await v(`finalizeUnwrap`,this.sdk.signer,this.sdk.provider);let t=await this.sdk.decryption.decryptPublicValues([e]),n=t.clearValues[e];return st(n,`finalizeUnwrap: clearValue`),this.submitTransaction({operation:`finalizeUnwrap`,config:l(this.address,e,n,t.decryptionProof)})}async#o(){return this.#e===void 0?(this.#t||=this.sdk.provider.readContract(ge(this.address)).then(e=>(this.#e=e,this.#t=null,e)).catch(e=>{throw this.#t=null,e}),this.#t):this.#e}async#s(e,t,n){this.emit({type:x.UnshieldPhase1Submitted,txHash:e,operationId:t});let i;try{i=await this.sdk.provider.waitForTransactionReceipt(e)}catch(e){throw e instanceof r?e:new _(`Failed to get unshield receipt`,{cause:e})}let a=Jt(i.logs);if(!a)throw new _(`No UnwrapRequested event found in unshield receipt`);this.emit({type:x.UnshieldPhase2Started,operationId:t}),u(`unshield: onFinalizing`,()=>n?.onFinalizing?.(),this.sdk.logger);let o=await this.finalizeUnwrap(a.unwrapRequestId??a.encryptedAmount);return this.emit({type:x.UnshieldPhase2Submitted,txHash:o.txHash,operationId:t}),u(`unshield: onFinalizeSubmitted`,()=>n?.onFinalizeSubmitted?.(o.txHash),this.sdk.logger),o}async#c(e,t,n){this.#r(`approveUnderlying`);let r=await this.#o(),i=O((await S(`approveUnderlying`,this.sdk.signer,this.sdk.provider)).address),a=await this.sdk.provider.readContract(m(r,i,this.address));if(a>=e)return;a>0n&&await this.submitTransaction({operation:`approveUnderlying:reset`,config:p(r,this.address,0n)});let o=t?2n**256n-1n:e;await this.submitTransaction({operation:`approveUnderlying`,config:p(r,this.address,o),onSubmitted:n?.onApprovalSubmitted})}},rn=class{relayer;provider;signer;storage;registry;permits;delegations;decryption;#e;#t;#n;#r;#i;#a;#o;#s;#c;constructor(e){this.relayer=e.relayer,this.provider=e.provider,this.signer=e.signer,this.storage=e.storage,this.#t=e.onEvent??function(){},this.#n=e.logger,this.#r=new Mt(e.storage,this.#n),this.#c=new Vt({provider:this.provider,relayer:this.relayer,emitEvent:this.emitEvent.bind(this),logger:this.#n});let t={};for(let n of e.chains)n.registryAddress&&(t[n.id]=n.registryAddress);this.registry=new E({provider:this.provider,registryAddresses:t,registryTTL:e.registryTTL}),this.#e=e.registryTTL,e.signer&&(this.#s=new Xe({relayer:this.relayer,signer:e.signer,transportKeyPairTTL:e.transportKeyPairTTL,permitTTL:e.permitTTL,storage:this.storage,permitStorage:e.permitStorage,logger:this.#n}),this.#o=new Lt({cache:this.#r,credentialService:this.#s,delegationService:this.#c,relayer:this.relayer,emitEvent:this.emitEvent.bind(this)})),this.#a=new Ht({relayer:this.relayer,emitEvent:this.emitEvent.bind(this)}),this.#i=new Ut({signer:e.signer,relayer:this.relayer,cachingService:this.#r,credentialService:this.#s,logger:this.#n}),this.permits=new kt({signer:this.signer,provider:this.provider,cachingService:this.#r,credentialService:this.#s,logger:this.#n}),this.delegations=new Ot({signer:this.signer,provider:this.provider,delegationService:this.#c}),this.decryption=new Dt({signer:this.signer,provider:this.provider,relayer:this.relayer,decryptionService:this.#o})}onWalletAccountChange(e){return this.#i.onWalletAccountChange(e)}get logger(){return this.#n}emitEvent(e,t){try{this.#t({...e,tokenAddress:t,timestamp:Date.now()})}catch(t){this.#n.warn(`${e.type} event listener silently failed`,{error:t})}}createWrappersRegistry(e){return new E({provider:this.provider,registryAddresses:e,registryTTL:this.#e})}async encrypt(e){return this.#a.encrypt(e)}createToken(e){return new C(this,e)}createWrappedToken(e){return new nn(this,e)}dispose(){this.#i.dispose()}terminate(){this.dispose(),this.relayer.terminate(),this.signer?.dispose?.()}[Symbol.dispose](){this.terminate()}};function $(e){return`zama:pending-unshield:${tt(e)}`}const an=k.union([k.pipe(T,k.transform(e=>({unwrapTxHash:e}))),k.pipe(k.object({version:k.literal(1),unwrapTxHash:T,unwrapRequestId:k.optional(T)}),k.transform(({unwrapTxHash:e,unwrapRequestId:t})=>({unwrapTxHash:e,unwrapRequestId:t})))]);async function on(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 sn(e,t){return(await cn(e,t))?.unwrapTxHash??null}async function cn(e,t){let n=$(t),r=await e.get(n);if(r==null)return null;let i=an.safeParse(r);return i.success?i.data:(await e.delete(n),null)}async function ln(e,t){await e.delete($(t))}var un=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 dn=new un;export{tn as ACL_TOPICS,St as AclPausedError,X as AclTopics,Ie as BalanceCheckUnavailableError,et as BaseSigner,Ue as ChainMismatchError,un as ChromeSessionStorage,i as ConfigurationError,Dt as Decryption,g as DecryptionFailedError,Ke as DefaultRegistryAddresses,xt as DelegationContractIsSelfError,bt as DelegationCooldownError,F as DelegationDelegateEqualsContractError,I as DelegationExpirationTooSoonError,N as DelegationExpiredError,P as DelegationExpiryUnchangedError,M as DelegationNotFoundError,L as DelegationNotPropagatedError,j as DelegationSelfNotAllowedError,Ot as Delegations,fe as ERC1363_INTERFACE_ID,Fe as ERC20ReadFailedError,ve as ERC7984_INTERFACE_ID,Ee as ERC7984_WRAPPER_INTERFACE_ID,h as EncryptionFailedError,rt as IndexedDBStorage,je as InsufficientConfidentialBalanceError,He as InsufficientERC20BalanceError,yt as InvalidTransportKeyPairError,at as MemoryStorage,Ze as MutableWalletAccountStore,A as NoCiphertextError,kt as Permits,n as RelayerRequestFailedError,ee as SignerNotConfiguredError,te as SignerRequiredError,ce as SigningFailedError,d as SigningRejectedError,Xt as TOKEN_TOPICS,C as Token,V as Topics,_ as TransactionRevertedError,vt as TransportKeyPairExpiredError,ae as WalletAccountNotReadyError,Ae as WalletNotConnectedError,nn as WrappedToken,E as WrappersRegistry,Be as ZERO_ENCRYPTED_VALUE,r as ZamaError,t as ZamaErrorCode,rn as ZamaSDK,x as ZamaSDKEvents,m as allowanceContract,ht as anvil,p as approveContract,le as balanceOfContract,dt as bscTestnet,pt as chains,dn as chromeSessionStorage,ln as clearPendingUnshield,Ge as cleartext,oe as confidentialBalanceOfContract,s as confidentialTotalSupplyContract,Oe as confidentialTransferContract,se as confidentialTransferFromContract,Et as createConfig,Qe as createWalletAccountStore,De as decimalsContract,Zt as decodeAclEvent,Qt as decodeAclEvents,Gt as decodeConfidentialTransfer,Z as decodeDelegatedForUserDecryption,Kt as decodeOnChainEvent,qt as decodeOnChainEvents,Q as decodeRevokedDelegationForUserDecryption,Y as decodeUnwrapFinalized,J as decodeUnwrapRequested,q as decodeWrap,Ve as delegateForUserDecryptionContract,l as finalizeUnwrapContract,$t as findDelegatedForUserDecryption,en as findRevokedDelegationForUserDecryption,Jt as findUnwrapRequested,Yt as findWrap,Te as getConfidentialTokenAddressContract,Ne as getDelegationExpiryContract,be as getTokenAddressContract,Ce as getTokenPairContract,he as getTokenPairsContract,ue as getTokenPairsLengthContract,xe as getTokenPairsSliceContract,ut as hardhat,ct as hoodi,nt as indexedDBStorage,c as inferredTotalSupplyContract,ft as ingenTestnet,pe as isConfidentialTokenContract,we as isConfidentialTokenValidContract,me as isConfidentialWrapperContract,y as isEncryptedValueZero,Pe as isHandleDelegatedContract,ie as isOperatorContract,sn as loadPendingUnshield,cn as loadPendingUnshieldRequest,mt as mainnet,e as matchZamaError,it as memoryStorage,de as nameContract,_e as rateContract,$e as resolveChainRelayers,qe as resolveStorage,ze as revokeDelegationContract,on as savePendingUnshield,lt as sepolia,a as setOperatorContract,ye as supportsInterfaceContract,ke as symbolContract,Tt as transferAndCallContract,ge as underlyingContract,ne as unwrapContract,re as unwrapFromBalanceContract,f as wrapContract};
2
2
  //# sourceMappingURL=index.js.map