@zama-fhe/sdk 3.2.0 → 3.3.0-alpha.10
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/assertions.cjs +1 -1
- package/dist/cjs/assertions.cjs.map +1 -1
- package/dist/cjs/base-signer.cjs +1 -1
- package/dist/cjs/base-signer.cjs.map +1 -1
- package/dist/cjs/ethers/index.cjs +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-cleartext.cjs +1 -1
- package/dist/cjs/relayer-cleartext.cjs.map +1 -1
- package/dist/cjs/relayer-sdk.worker.js +134 -34
- package/dist/cjs/relayer.cjs +1 -1
- package/dist/cjs/relayer.cjs.map +1 -1
- package/dist/cjs/timeout.cjs +2 -0
- package/dist/cjs/timeout.cjs.map +1 -0
- 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/web/index.cjs +136 -36
- package/dist/cjs/web/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/assertions-zYseN5Xz.js +2 -0
- package/dist/esm/assertions-zYseN5Xz.js.map +1 -0
- package/dist/esm/{base-signer-ByGw5ReU.d.ts → base-signer-C3Wc5oi9.d.ts} +2 -2
- package/dist/esm/base-signer-DjytqPkd.js +2 -0
- package/dist/esm/base-signer-DjytqPkd.js.map +1 -0
- package/dist/esm/cleartext/index.d.ts +1 -1
- package/dist/esm/cleartext/index.js +1 -1
- package/dist/esm/{cleartext-DMW5nK1M.d.ts → cleartext-DAkOTlrE.d.ts} +2 -2
- package/dist/esm/{cleartext-CTla3A3O.js → cleartext-rTWFctyd.js} +2 -2
- package/dist/esm/{cleartext-CTla3A3O.js.map → cleartext-rTWFctyd.js.map} +1 -1
- package/dist/esm/{encryption-BGmINekJ.js → encryption-x4Z_Icqk.js} +2 -2
- package/dist/esm/{encryption-BGmINekJ.js.map → encryption-x4Z_Icqk.js.map} +1 -1
- package/dist/esm/ethers/index.d.ts +4 -4
- package/dist/esm/ethers/index.js +1 -1
- package/dist/esm/ethers/index.js.map +1 -1
- package/dist/esm/{hex-CxtyupeQ.js → hex-A72GrTf9.js} +2 -2
- package/dist/esm/{hex-CxtyupeQ.js.map → hex-A72GrTf9.js.map} +1 -1
- package/dist/esm/{index-DoVo9J1n.d.ts → index-C1Mtc8Rw.d.ts} +450 -163
- package/dist/esm/index.d.ts +17 -13
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node/index.d.ts +25 -7
- package/dist/esm/node/index.js +1 -1
- package/dist/esm/node/index.js.map +1 -1
- package/dist/esm/node/relayer-sdk.node-worker.js +1 -1
- package/dist/esm/node/relayer-sdk.node-worker.js.map +1 -1
- package/dist/esm/query/index.d.ts +42 -4
- package/dist/esm/query/index.js +1 -1
- package/dist/esm/query/index.js.map +1 -1
- package/dist/esm/relayer-cleartext-Bp6jtxDd.js +2 -0
- package/dist/esm/relayer-cleartext-Bp6jtxDd.js.map +1 -0
- package/dist/esm/{relayer-cleartext-DkKKjfI6.d.ts → relayer-cleartext-CSeMlmGO.d.ts} +102 -13
- package/dist/esm/relayer-eavK5bfZ.js +2 -0
- package/dist/esm/relayer-eavK5bfZ.js.map +1 -0
- package/dist/esm/relayer-sdk.worker.js +134 -34
- package/dist/esm/timeout-CNVfiaJD.js +2 -0
- package/dist/esm/timeout-CNVfiaJD.js.map +1 -0
- package/dist/esm/token-Bt33g0zQ.js +2 -0
- package/dist/esm/token-Bt33g0zQ.js.map +1 -0
- package/dist/esm/{types-BjDu-RZg.d.ts → types-Gn5MeDsr.d.ts} +14 -2
- package/dist/esm/{types-Xg_On_yY.d.ts → types-OHIaPwCy.d.ts} +2 -2
- package/dist/esm/{types-DiZhtG8i.d.ts → types-piBsdTIP.d.ts} +2 -2
- package/dist/esm/{validation-DHZ3JPOn.js → validation-DLszOweh.js} +2 -2
- package/dist/esm/{validation-DHZ3JPOn.js.map → validation-DLszOweh.js.map} +1 -1
- package/dist/esm/viem/index.d.ts +4 -4
- package/dist/esm/viem/index.js +1 -1
- package/dist/esm/viem/index.js.map +1 -1
- package/dist/esm/web/index.d.ts +2 -2
- package/dist/esm/web/index.js +135 -35
- package/dist/esm/web/index.js.map +1 -1
- package/dist/esm/worker.base-client-BVnT4yJa.js +2 -0
- package/dist/esm/worker.base-client-BVnT4yJa.js.map +1 -0
- package/dist/esm/{wrappers-registry-BWWG0aze.js → wrappers-registry-C1oK8Bi6.js} +2 -2
- package/dist/esm/wrappers-registry-C1oK8Bi6.js.map +1 -0
- package/package.json +51 -51
- package/dist/esm/assertions-CnPIS0VN.js +0 -2
- package/dist/esm/assertions-CnPIS0VN.js.map +0 -1
- package/dist/esm/base-signer-BVqcM5jt.js +0 -2
- package/dist/esm/base-signer-BVqcM5jt.js.map +0 -1
- package/dist/esm/error-W1N-FGwV.js +0 -2
- package/dist/esm/error-W1N-FGwV.js.map +0 -1
- package/dist/esm/relayer-D-nicEYJ.js +0 -2
- package/dist/esm/relayer-D-nicEYJ.js.map +0 -1
- package/dist/esm/relayer-cleartext-DGcb5qtE.js +0 -2
- package/dist/esm/relayer-cleartext-DGcb5qtE.js.map +0 -1
- package/dist/esm/token-TQ-VFHS4.js +0 -2
- package/dist/esm/token-TQ-VFHS4.js.map +0 -1
- package/dist/esm/worker.base-client-x522sMBy.js +0 -2
- package/dist/esm/worker.base-client-x522sMBy.js.map +0 -1
- package/dist/esm/wrappers-registry-BWWG0aze.js.map +0 -1
package/dist/esm/node/index.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { n as FheChain } from "../types-BgczXqW2.js";
|
|
2
2
|
import { a as hoodi, c as sepolia, i as hardhat, n as bscTestnet, o as ingenTestnet, r as chains, s as mainnet, t as anvil } from "../index-CYBH0nyo.js";
|
|
3
|
-
import { $ as
|
|
4
|
-
import { l as BaseRelayer, n as RelayerConfig } from "../types-
|
|
5
|
-
import { t as cleartext } from "../cleartext-
|
|
3
|
+
import { $ as CreateDelegatedEIP712Request, At as WorkerEnv, C as BaseWorkerClient, Ct as RequestZKProofVerificationRequest, Dt as UserDecryptPayload, Et as UpdateCsrfRequest, Mt as WorkerRequestType, N as GenericStorage, Nt as WorkerResponse, Ot as UserDecryptRequest, Pt as SerializedError, Q as CreateDelegatedEIP712Payload, St as PublicDecryptResponseData, Tt as SuccessResponse, Z as BaseRequest, _ as PublicParamsData, _t as GetPublicParamsResponseData, at as DelegatedUserDecryptRequest, bt as PublicDecryptPayload, c as DelegatedUserDecryptParams, ct as EncryptRequest, d as EncryptParams, dt as GenerateKeypairRequest, et as CreateDelegatedEIP712ResponseData, f as EncryptResult, ft as GenerateKeypairResponseData, g as PublicDecryptResult, gt as GetPublicParamsRequest, ht as GetPublicKeyResponseData, it as DelegatedUserDecryptPayload, jt as WorkerRequest, kt as UserDecryptResponseData, l as EIP712TypedData, lt as EncryptResponseData, m as FheEncryptionKey, mt as GetPublicKeyRequest, n as RelayerSDK, nt as CreateEIP712Request, o as TransportKeyPair, ot as DelegatedUserDecryptResponseData, p as EncryptedValue, pt as GenericLogger, rt as CreateEIP712ResponseData, s as ClearValue, st as EncryptPayload, tt as CreateEIP712Payload, ut as ErrorResponse, vt as InitPayload, w as WorkerClientTimeoutConfig, wt as RequestZKProofVerificationResponseData, x as UserDecryptParams, xt as PublicDecryptRequest, yt as InitRequest } from "../relayer-cleartext-CSeMlmGO.js";
|
|
4
|
+
import { l as BaseRelayer, n as RelayerConfig } from "../types-Gn5MeDsr.js";
|
|
5
|
+
import { t as cleartext } from "../cleartext-DAkOTlrE.js";
|
|
6
6
|
import { Address, Hex } from "viem";
|
|
7
7
|
import { Worker } from "node:worker_threads";
|
|
8
8
|
import { InputProofBytesType, KmsDelegatedUserDecryptEIP712Type, ZKProofLike } from "@zama-fhe/relayer-sdk/node";
|
|
9
9
|
|
|
10
10
|
//#region src/worker/worker.node-client.d.ts
|
|
11
|
-
interface NodeWorkerClientConfig {
|
|
11
|
+
interface NodeWorkerClientConfig extends WorkerClientTimeoutConfig {
|
|
12
12
|
chains: FheChain[];
|
|
13
13
|
/** SDK-wide logger for tracing worker request lifecycle. */
|
|
14
14
|
logger: GenericLogger;
|
|
@@ -119,6 +119,22 @@ interface NodePoolOptions {
|
|
|
119
119
|
poolSize?: number;
|
|
120
120
|
fheArtifactStorage?: GenericStorage;
|
|
121
121
|
fheArtifactCacheTTL?: number;
|
|
122
|
+
/**
|
|
123
|
+
* Per-operation worker timeout in **seconds** (encrypt / decrypt / etc.).
|
|
124
|
+
* Defaults to 30. A timed-out operation rejects with `WorkerTimeoutError` and
|
|
125
|
+
* recycles the worker (see {@link recycleWorkerOnTimeout}).
|
|
126
|
+
*/
|
|
127
|
+
operationTimeout?: number;
|
|
128
|
+
/** WASM-init timeout in **seconds**. Defaults to 60. */
|
|
129
|
+
initTimeout?: number;
|
|
130
|
+
/**
|
|
131
|
+
* Terminate + re-init the worker after an operation timeout so a hung thread
|
|
132
|
+
* can't keep serving requests. Defaults to `true`. Note: a timeout caused by a
|
|
133
|
+
* slow/down relayer (not a stuck thread) also recycles an otherwise-healthy
|
|
134
|
+
* worker, paying a WASM re-init on the next call — when fronting a flaky
|
|
135
|
+
* relayer, prefer `false` with a higher `operationTimeout`.
|
|
136
|
+
*/
|
|
137
|
+
recycleWorkerOnTimeout?: boolean;
|
|
122
138
|
}
|
|
123
139
|
/** Node transport — narrows worker type to `NodeWorkerPool`. */
|
|
124
140
|
interface NodeRelayerConfig extends RelayerConfig {
|
|
@@ -129,13 +145,15 @@ interface NodeRelayerConfig extends RelayerConfig {
|
|
|
129
145
|
/**
|
|
130
146
|
* Node.js transport — routes to RelayerNode (worker thread pool).
|
|
131
147
|
*
|
|
132
|
-
* @param options - Pool options
|
|
148
|
+
* @param options - Pool options: `poolSize`, `fheArtifactStorage`,
|
|
149
|
+
* `fheArtifactCacheTTL`, and the worker-timeout knobs `operationTimeout` /
|
|
150
|
+
* `initTimeout` (seconds) and `recycleWorkerOnTimeout`.
|
|
133
151
|
*
|
|
134
152
|
* @example
|
|
135
153
|
* ```ts
|
|
136
154
|
* relayers: {
|
|
137
155
|
* [sepolia.id]: node(),
|
|
138
|
-
* [mainnet.id]: node({ poolSize: 4 }),
|
|
156
|
+
* [mainnet.id]: node({ poolSize: 4, operationTimeout: 10 }),
|
|
139
157
|
* }
|
|
140
158
|
* ```
|
|
141
159
|
*/
|
|
@@ -172,5 +190,5 @@ declare class AsyncLocalMapStorage implements GenericStorage {
|
|
|
172
190
|
/** Default singleton for application-wide use. */
|
|
173
191
|
declare const asyncLocalStorage: AsyncLocalMapStorage;
|
|
174
192
|
//#endregion
|
|
175
|
-
export { AsyncLocalMapStorage, type BaseRequest, BaseWorkerClient, type ClearValue, type CreateDelegatedEIP712Payload, type CreateDelegatedEIP712Request, type CreateDelegatedEIP712ResponseData, type CreateEIP712Payload, type CreateEIP712Request, type CreateEIP712ResponseData, type PublicDecryptResult as DecryptPublicValuesResult, type UserDecryptParams as DecryptValuesParams, type DelegatedUserDecryptParams as DelegatedDecryptValuesParams, type DelegatedUserDecryptPayload, type DelegatedUserDecryptRequest, type DelegatedUserDecryptResponseData, type EIP712TypedData, type EncryptParams, type EncryptPayload, type EncryptRequest, type EncryptResponseData, type EncryptResult, type ErrorResponse, type GenerateKeypairRequest, type GenerateKeypairResponseData, type GenericLogger, type GetPublicKeyRequest, type GetPublicKeyResponseData, type GetPublicParamsRequest, type GetPublicParamsResponseData, type InitPayload, type InitRequest, type NodePoolOptions, type NodeRelayerConfig, type NodeWorkerClientConfig, type NodeWorkerPoolConfig, type PublicDecryptRequest, type PublicDecryptResponseData, type RelayerConfig, type RelayerNodeConfig, type RelayerSDK, type RequestZKProofVerificationRequest, type RequestZKProofVerificationResponseData, type SuccessResponse, type UpdateCsrfRequest, type UserDecryptPayload, type UserDecryptRequest, type UserDecryptResponseData, type WorkerEnv, type WorkerRequest, type WorkerRequestType, type WorkerResponse, anvil, asyncLocalStorage, bscTestnet, chains, cleartext, hardhat, hoodi, ingenTestnet, mainnet, node, sepolia };
|
|
193
|
+
export { AsyncLocalMapStorage, type BaseRequest, BaseWorkerClient, type ClearValue, type CreateDelegatedEIP712Payload, type CreateDelegatedEIP712Request, type CreateDelegatedEIP712ResponseData, type CreateEIP712Payload, type CreateEIP712Request, type CreateEIP712ResponseData, type PublicDecryptResult as DecryptPublicValuesResult, type UserDecryptParams as DecryptValuesParams, type DelegatedUserDecryptParams as DelegatedDecryptValuesParams, type DelegatedUserDecryptPayload, type DelegatedUserDecryptRequest, type DelegatedUserDecryptResponseData, type EIP712TypedData, type EncryptParams, type EncryptPayload, type EncryptRequest, type EncryptResponseData, type EncryptResult, type ErrorResponse, type GenerateKeypairRequest, type GenerateKeypairResponseData, type GenericLogger, type GetPublicKeyRequest, type GetPublicKeyResponseData, type GetPublicParamsRequest, type GetPublicParamsResponseData, type InitPayload, type InitRequest, type NodePoolOptions, type NodeRelayerConfig, type NodeWorkerClientConfig, type NodeWorkerPoolConfig, type PublicDecryptRequest, type PublicDecryptResponseData, type RelayerConfig, type RelayerNodeConfig, type RelayerSDK, type RequestZKProofVerificationRequest, type RequestZKProofVerificationResponseData, type SerializedError, type SuccessResponse, type UpdateCsrfRequest, type UserDecryptPayload, type UserDecryptRequest, type UserDecryptResponseData, type WorkerEnv, type WorkerRequest, type WorkerRequestType, type WorkerResponse, anvil, asyncLocalStorage, bscTestnet, chains, cleartext, hardhat, hoodi, ingenTestnet, mainnet, node, sepolia };
|
|
176
194
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/node/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{n as e}from"../assertions-zYseN5Xz.js";import{t}from"../cleartext-rTWFctyd.js";import{t as n}from"../memory-storage-fp9RY5BQ.js";import{a as r,c as i,i as a,n as o,o as s,r as c,s as l,t as u}from"../chains-CXcO1DBP.js";import{t as d}from"../validation-DLszOweh.js";import{i as f,n as p,r as m,t as h}from"../worker.base-client-BVnT4yJa.js";import{toHex as g}from"viem";import{z as _}from"zod/mini";import{availableParallelism as v}from"node:os";import{Worker as y}from"node:worker_threads";import{randomUUID as b}from"node:crypto";import{createRequire as x}from"node:module";import{pathToFileURL as S}from"node:url";import{AsyncLocalStorage as C}from"node:async_hooks";var w=class extends f{#e;#t=null;constructor(e){super(),this.#e={fheArtifactStorage:new n,...e}}get chain(){return this.#e.chain}async init(){await this.#n.initPool()}get#n(){return this.#e.pool}#r(){return this.#e.fheArtifactStorage?(this.#t||=new m({storage:this.#e.fheArtifactStorage,chainId:this.chain.id,relayerUrl:this.chain.relayerUrl,ttl:this.#e.fheArtifactCacheTTL,logger:this.#e.logger}),this.#t):null}terminate(){this.#t=null,this.resetInit()}[Symbol.dispose](){this.terminate()}async generateTransportKeyPair(){await this.ensureInit();let e=this.chain.id,t=await this.#n.generateKeypair({chainId:e});return{publicKey:t.publicKey,privateKey:t.privateKey}}async createEIP712(e,t,n,r=7){await this.ensureInit();let i=this.chain.id;return this.#n.createEIP712({chainId:i,publicKey:e,contractAddresses:t,startTimestamp:n,durationDays:r})}async encrypt(e){await this.ensureInit();let t=this.chain.id;return p(async()=>{let n=await this.#n.encrypt({chainId:t,...e});return{encryptedValues:n.handles.map(e=>g(e)),inputProof:g(n.inputProof)}})}async userDecrypt(e){await this.ensureInit();let t=this.chain.id;return p(async()=>(await this.#n.userDecrypt({chainId:t,...e})).clearValues)}async publicDecrypt(e){await this.ensureInit();let t=this.chain.id;return p(async()=>{let n=await this.#n.publicDecrypt({chainId:t,encryptedValues:e});return{clearValues:n.clearValues,abiEncodedClearValues:n.abiEncodedClearValues,decryptionProof:n.decryptionProof}})}async createDelegatedUserDecryptEIP712(e,t,n,r,i=7){await this.ensureInit();let a=this.chain.id;return this.#n.createDelegatedUserDecryptEIP712({chainId:a,publicKey:e,contractAddresses:t,delegatorAddress:n,startTimestamp:r,durationDays:i})}async delegatedUserDecrypt(e){await this.ensureInit();let t=this.chain.id;return p(async()=>(await this.#n.delegatedUserDecrypt({chainId:t,...e})).clearValues)}async requestZKProofVerification(e){await this.ensureInit();let t=this.chain.id;return p(async()=>this.#n.requestZKProofVerification({chainId:t,zkProof:e}))}async fetchFheEncryptionKeyBytes(){await this.ensureInit();let e=this.chain.id,t=this.#r();return t?t.fetchFheEncryptionKeyBytes(async()=>(await this.#n.getPublicKey({chainId:e})).result):(await this.#n.getPublicKey({chainId:e})).result}async getPublicParams(e){await this.ensureInit();let t=this.chain.id,n=this.#r();return n?n.getPublicParams(e,async()=>(await this.#n.getPublicParams({chainId:t,bits:e})).result):(await this.#n.getPublicParams({chainId:t,bits:e})).result}},T=class extends h{env=`node`;constructor(e){super(e,e.logger)}createWorker(){let e=S(x(import.meta.url).resolve(`@zama-fhe/sdk/node`));return new y(new URL(`relayer-sdk.node-worker.js`,e))}wireEvents(e){e.on(`message`,e=>this.handleResponse(e)),e.on(`error`,e=>this.handleWorkerError(e.message)),e.on(`messageerror`,()=>this.handleWorkerMessageError())}postMessage(e,t){e.postMessage(t)}terminateWorker(e){e.terminate()}generateRequestId(){return b()}getInitPayload(){return{type:`INIT`,payload:{env:`node`,chains:this.config.chains}}}onWorkerReady(e){e.unref()}},E=class{#e=[];#t=[];#n;#r;#i=null;constructor(e){this.#n=e,this.#r=e.poolSize??Math.min(v(),4)}get poolSize(){return this.#r}async initPool(){if(!(this.#e.length>0))return this.#i||=this.#a().finally(()=>{this.#i=null}),this.#i}async#a(){for(let e=0;e<this.#r;e++)this.#e.push(new T({...this.#n,workerLabel:`node-worker-${e}`})),this.#t.push(0);try{await Promise.all(this.#e.map(e=>e.initWorker()))}catch(e){for(let e of this.#e)e.terminate();throw this.#e.length=0,this.#t.length=0,e}}terminate(){let e=[];for(let t of this.#e)try{t.terminate()}catch(t){e.push(t instanceof Error?t:Error(String(t)))}if(this.#e.length=0,this.#t.length=0,e.length>0)throw AggregateError(e,`Failed to terminate worker pool`)}#o(){let e=0,t=this.#t[0];for(let n=1;n<this.#t.length;n++)this.#t[n]<t&&(t=this.#t[n],e=n);return e}async#s(e){if(this.#e.length===0)throw Error(`NodeWorkerPool not initialized. Call initPool() first.`);let t=this.#o();this.#t[t]++;try{return await e(this.#e[t])}finally{this.#t[t]--}}async generateKeypair(e){return this.#s(t=>t.generateKeypair(e))}async createEIP712(e){return this.#s(t=>t.createEIP712(e))}async encrypt(e){return this.#s(t=>t.encrypt(e))}async userDecrypt(e){return this.#s(t=>t.userDecrypt(e))}async publicDecrypt(e){return this.#s(t=>t.publicDecrypt(e))}async createDelegatedUserDecryptEIP712(e){return this.#s(t=>t.createDelegatedUserDecryptEIP712(e))}async delegatedUserDecrypt(e){return this.#s(t=>t.delegatedUserDecrypt(e))}async requestZKProofVerification(e){return this.#s(t=>t.requestZKProofVerification(e))}async getPublicKey(e){return this.#s(t=>t.getPublicKey(e))}async getPublicParams(e){return this.#s(t=>t.getPublicParams(e))}};const D=3600,O=_.object({poolSize:_.optional(_.int().check(_.positive())),fheArtifactCacheTTL:_.optional(_.int().check(_.nonnegative())),operationTimeout:_.optional(_.int().check(_.positive(),_.lte(D))),initTimeout:_.optional(_.int().check(_.positive(),_.lte(D))),recycleWorkerOnTimeout:_.optional(_.boolean())});function k(t){return t!==void 0&&d(O,t),{type:`node`,createWorker:(e,n)=>new E({chains:e,...t,logger:n}),createRelayer:(n,r,i)=>(e(!!r,`node() relayer requires a worker pool — createWorker must be called first.`),new w({chain:n,pool:r,...t,logger:i}))}}var A=class{#e=new C;run(e){return this.#e.run(new Map,e)}async get(e){return this.#e.getStore()?.get(e)??null}async set(e,t){this.#e.getStore()?.set(e,t)}async delete(e){this.#e.getStore()?.delete(e)}};const j=new A;export{A as AsyncLocalMapStorage,h as BaseWorkerClient,u as anvil,j as asyncLocalStorage,o as bscTestnet,c as chains,t as cleartext,a as hardhat,r as hoodi,s as ingenTestnet,l as mainnet,k as node,i as sepolia};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["#config","#pool","#artifactCache","#getArtifactCache","#workers","#activeCount","#config","#poolSize","#initPromise","#doInitPool","#dispatch","#leastBusyIndex","#als"],"sources":["../../../src/relayer/relayer-node.ts","../../../src/worker/worker.node-client.ts","../../../src/worker/worker.node-pool.ts","../../../src/node/config.ts","../../../src/storage/async-local-storage.ts"],"sourcesContent":["import type {\n InputProofBytesType,\n KmsDelegatedUserDecryptEIP712Type,\n ZKProofLike,\n} from \"@zama-fhe/relayer-sdk/node\";\nimport { toHex } from \"viem\";\nimport type { Address, Hex } from \"viem\";\nimport { MemoryStorage } from \"../storage/memory-storage\";\nimport type { GenericStorage } from \"../types\";\nimport type { NodeWorkerPool } from \"../worker/worker.node-pool\";\nimport type { GenericLogger } from \"../worker/worker.types\";\nimport type { FheChain } from \"../chains/types\";\nimport type { TransportKeyPair } from \"../credentials/types\";\nimport { BaseRelayer } from \"./base-relayer\";\nimport { FheArtifactCache } from \"./fhe-artifact-cache\";\nimport type { RelayerSDK } from \"./relayer-sdk\";\nimport type {\n ClearValue,\n DelegatedUserDecryptParams,\n EIP712TypedData,\n EncryptParams,\n EncryptResult,\n EncryptedValue,\n FheEncryptionKey,\n PublicDecryptResult,\n PublicParamsData,\n UserDecryptParams,\n} from \"./relayer-sdk.types\";\nimport { withRetry } from \"./relayer-utils\";\n\nexport interface RelayerNodeConfig {\n /** FHE chain configuration. */\n chain: FheChain;\n /** Worker thread pool — handles WASM operations off the main thread. */\n pool: NodeWorkerPool;\n /** SDK-wide logger for observing worker lifecycle and request timing. */\n logger: GenericLogger;\n /**\n * Persistent storage for caching FHE public key and params across sessions.\n * Defaults to `new MemoryStorage()` (in-process, lost on restart).\n * Pass a custom `GenericStorage` with redis for cross-restart persistence.\n */\n fheArtifactStorage?: GenericStorage;\n /** Cache TTL in seconds for FHE public material. Default: 86 400 (24 h). Set to 0 to revalidate on every operation. */\n fheArtifactCacheTTL?: number;\n}\n\n/**\n * RelayerNode — Node.js encryption/decryption layer.\n * The pool is injected at construction time; the relayer does not own its lifecycle.\n */\nexport class RelayerNode extends BaseRelayer implements RelayerSDK, Disposable {\n readonly #config: RelayerNodeConfig;\n #artifactCache: FheArtifactCache | null = null;\n\n constructor(config: RelayerNodeConfig) {\n super();\n this.#config = { fheArtifactStorage: new MemoryStorage(), ...config };\n }\n\n protected get chain(): FheChain {\n return this.#config.chain;\n }\n\n protected async init(): Promise<void> {\n await this.#pool.initPool();\n }\n\n get #pool(): NodeWorkerPool {\n return this.#config.pool;\n }\n\n #getArtifactCache(): FheArtifactCache | null {\n if (!this.#config.fheArtifactStorage) {\n return null;\n }\n if (!this.#artifactCache) {\n this.#artifactCache = new FheArtifactCache({\n storage: this.#config.fheArtifactStorage,\n chainId: this.chain.id,\n relayerUrl: this.chain.relayerUrl,\n ttl: this.#config.fheArtifactCacheTTL,\n logger: this.#config.logger,\n });\n }\n return this.#artifactCache;\n }\n\n /**\n * Terminate clears the artifact cache only.\n * The pool is externally owned — the relayer does not terminate it.\n */\n terminate(): void {\n this.#artifactCache = null;\n this.resetInit();\n }\n\n /** Calls {@link terminate}. */\n [Symbol.dispose](): void {\n this.terminate();\n }\n\n async generateTransportKeyPair(): Promise<TransportKeyPair> {\n await this.ensureInit();\n const chainId = this.chain.id;\n const result = await this.#pool.generateKeypair({ chainId });\n return {\n publicKey: result.publicKey,\n privateKey: result.privateKey,\n };\n }\n\n async createEIP712(\n publicKey: Hex,\n contractAddresses: Address[],\n startTimestamp: number,\n durationDays = 7,\n ): Promise<EIP712TypedData> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return this.#pool.createEIP712({\n chainId,\n publicKey,\n contractAddresses,\n startTimestamp,\n durationDays,\n });\n }\n\n async encrypt(params: EncryptParams): Promise<EncryptResult> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return withRetry(async () => {\n const result = await this.#pool.encrypt({ chainId, ...params });\n return {\n encryptedValues: result.handles.map((handle) => toHex(handle)),\n inputProof: toHex(result.inputProof),\n };\n });\n }\n\n async userDecrypt(\n params: UserDecryptParams,\n ): Promise<Readonly<Record<EncryptedValue, ClearValue>>> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return withRetry(async () => {\n const result = await this.#pool.userDecrypt({ chainId, ...params });\n return result.clearValues;\n });\n }\n\n async publicDecrypt(encryptedValues: EncryptedValue[]): Promise<PublicDecryptResult> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return withRetry(async () => {\n const result = await this.#pool.publicDecrypt({ chainId, encryptedValues });\n return {\n clearValues: result.clearValues,\n abiEncodedClearValues: result.abiEncodedClearValues,\n decryptionProof: result.decryptionProof,\n };\n });\n }\n\n async createDelegatedUserDecryptEIP712(\n publicKey: Hex,\n contractAddresses: Address[],\n delegatorAddress: Address,\n startTimestamp: number,\n durationDays = 7,\n ): Promise<KmsDelegatedUserDecryptEIP712Type> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return this.#pool.createDelegatedUserDecryptEIP712({\n chainId,\n publicKey,\n contractAddresses,\n delegatorAddress,\n startTimestamp,\n durationDays,\n });\n }\n\n async delegatedUserDecrypt(\n params: DelegatedUserDecryptParams,\n ): Promise<Readonly<Record<EncryptedValue, ClearValue>>> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return withRetry(async () => {\n const result = await this.#pool.delegatedUserDecrypt({\n chainId,\n ...params,\n });\n return result.clearValues;\n });\n }\n\n async requestZKProofVerification(zkProof: ZKProofLike): Promise<InputProofBytesType> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return withRetry(async () => {\n return this.#pool.requestZKProofVerification({ chainId, zkProof });\n });\n }\n\n async fetchFheEncryptionKeyBytes(): Promise<FheEncryptionKey | null> {\n await this.ensureInit();\n const chainId = this.chain.id;\n const artifactCache = this.#getArtifactCache();\n if (artifactCache) {\n return artifactCache.fetchFheEncryptionKeyBytes(\n async () => (await this.#pool.getPublicKey({ chainId })).result,\n );\n }\n return (await this.#pool.getPublicKey({ chainId })).result;\n }\n\n async getPublicParams(bits: number): Promise<PublicParamsData | null> {\n await this.ensureInit();\n const chainId = this.chain.id;\n const artifactCache = this.#getArtifactCache();\n if (artifactCache) {\n return artifactCache.getPublicParams(\n bits,\n async () => (await this.#pool.getPublicParams({ chainId, bits })).result,\n );\n }\n return (await this.#pool.getPublicParams({ chainId, bits })).result;\n }\n}\n","import { Worker } from \"node:worker_threads\";\nimport { randomUUID } from \"node:crypto\";\nimport type { FheChain } from \"../chains/types\";\nimport type {\n GenericLogger,\n WorkerEnv,\n WorkerRequest,\n WorkerRequestType,\n WorkerResponse,\n} from \"./worker.types\";\nimport { BaseWorkerClient } from \"./worker.base-client\";\n\nexport interface NodeWorkerClientConfig {\n chains: FheChain[];\n /** SDK-wide logger for tracing worker request lifecycle. */\n logger: GenericLogger;\n}\n\n/**\n * Client for communicating with the RelayerSDK Node.js worker thread.\n * Provides a promise-based API for FHE operations using node:worker_threads.\n */\nexport class NodeWorkerClient extends BaseWorkerClient<Worker, NodeWorkerClientConfig> {\n protected readonly env: WorkerEnv = \"node\";\n\n constructor(config: NodeWorkerClientConfig) {\n super(config, config.logger);\n }\n\n protected createWorker(): Worker {\n // Resolve relative to the @zama-fhe/sdk/node entry point so the path is\n // correct regardless of which rolldown chunk this code lands in.\n const nodeEntry = new URL(import.meta.resolve(\"@zama-fhe/sdk/node\"));\n return new Worker(new URL(\"relayer-sdk.node-worker.js\", nodeEntry));\n }\n\n protected wireEvents(worker: Worker): void {\n worker.on(\"message\", (response: WorkerResponse<unknown>) => this.handleResponse(response));\n worker.on(\"error\", (error: Error) => this.handleWorkerError(error.message));\n worker.on(\"messageerror\", () => this.handleWorkerMessageError());\n }\n\n protected postMessage(worker: Worker, request: WorkerRequest): void {\n worker.postMessage(request);\n }\n\n protected terminateWorker(worker: Worker): void {\n void worker.terminate();\n }\n\n protected generateRequestId(): string {\n return randomUUID();\n }\n\n protected getInitPayload(): {\n type: WorkerRequestType;\n payload: WorkerRequest[\"payload\"];\n } {\n return {\n type: \"INIT\",\n payload: { env: \"node\" as const, chains: this.config.chains },\n };\n }\n\n protected override onWorkerReady(worker: Worker): void {\n worker.unref();\n }\n}\n","import { availableParallelism } from \"node:os\";\nimport { NodeWorkerClient } from \"./worker.node-client\";\nimport type { NodeWorkerClientConfig } from \"./worker.node-client\";\nimport type {\n CreateDelegatedEIP712Payload,\n CreateDelegatedEIP712ResponseData,\n CreateEIP712Payload,\n CreateEIP712ResponseData,\n DelegatedUserDecryptPayload,\n DelegatedUserDecryptResponseData,\n EncryptPayload,\n EncryptResponseData,\n GenerateKeypairRequest,\n GenerateKeypairResponseData,\n GetPublicKeyRequest,\n GetPublicKeyResponseData,\n GetPublicParamsRequest,\n GetPublicParamsResponseData,\n PublicDecryptPayload,\n PublicDecryptResponseData,\n RequestZKProofVerificationRequest,\n RequestZKProofVerificationResponseData,\n UserDecryptPayload,\n UserDecryptResponseData,\n} from \"./worker.types\";\n\nexport interface NodeWorkerPoolConfig extends NodeWorkerClientConfig {\n poolSize?: number;\n}\n\nconst MAX_DEFAULT_POOL_SIZE = 4;\n\n/**\n * Pool of Node.js worker threads for parallel FHE operations.\n *\n * **Default pool size:** `min(os.availableParallelism(), 4)`. Each worker loads\n * the full WASM module (~50–100 MB), so size the pool based on available memory.\n *\n * **Scheduling:** Least-connections — each request is dispatched to the worker\n * with the fewest in-flight operations.\n *\n * **When to override pool size:**\n * - High-throughput batch processing (e.g. bulk encryptions): increase to match CPU cores.\n * - Memory-constrained environments: decrease to 1–2 workers.\n *\n * **Lifecycle:**\n * 1. Initialize all workers: `await pool.initPool()`\n * 2. Use: `await pool.encrypt(...)`, `await pool.userDecrypt(...)`, etc.\n * 3. Shut down: `pool.terminate()`\n *\n * `initPool()` is idempotent — concurrent calls share the same initialization promise.\n * If any worker fails to initialize, all workers are terminated and the error is propagated.\n *\n * @internal Instantiated by the `node()` transport factory — not part of the public API.\n */\nexport class NodeWorkerPool {\n readonly #workers: NodeWorkerClient[] = [];\n readonly #activeCount: number[] = [];\n readonly #config: NodeWorkerPoolConfig;\n readonly #poolSize: number;\n #initPromise: Promise<void> | null = null;\n\n /**\n * @param config - Pool configuration. Set `poolSize` to override the default\n * (`min(os.availableParallelism(), 4)`).\n */\n constructor(config: NodeWorkerPoolConfig) {\n this.#config = config;\n this.#poolSize = config.poolSize ?? Math.min(availableParallelism(), MAX_DEFAULT_POOL_SIZE);\n }\n\n get poolSize(): number {\n return this.#poolSize;\n }\n\n async initPool(): Promise<void> {\n if (this.#workers.length > 0) {\n return;\n }\n if (!this.#initPromise) {\n this.#initPromise = this.#doInitPool().finally(() => {\n this.#initPromise = null;\n });\n }\n return this.#initPromise;\n }\n\n async #doInitPool(): Promise<void> {\n for (let i = 0; i < this.#poolSize; i++) {\n this.#workers.push(new NodeWorkerClient(this.#config));\n this.#activeCount.push(0);\n }\n try {\n await Promise.all(this.#workers.map((w) => w.initWorker()));\n } catch (error) {\n // Terminate any workers that did initialize and reset state\n for (const worker of this.#workers) {\n worker.terminate();\n }\n this.#workers.length = 0;\n this.#activeCount.length = 0;\n throw error;\n }\n }\n\n terminate(): void {\n const errors: Error[] = [];\n for (const worker of this.#workers) {\n try {\n worker.terminate();\n } catch (e) {\n errors.push(e instanceof Error ? e : new Error(String(e)));\n }\n }\n this.#workers.length = 0;\n this.#activeCount.length = 0;\n if (errors.length > 0) {\n throw new AggregateError(errors, \"Failed to terminate worker pool\");\n }\n }\n\n /**\n * Pick the worker with the fewest in-flight requests (least-connections).\n * Returns the index so #dispatch can track the active count.\n */\n #leastBusyIndex(): number {\n let minIndex = 0;\n let minCount = this.#activeCount[0]!;\n for (let i = 1; i < this.#activeCount.length; i++) {\n if (this.#activeCount[i]! < minCount) {\n minCount = this.#activeCount[i]!;\n minIndex = i;\n }\n }\n return minIndex;\n }\n\n async #dispatch<T>(fn: (worker: NodeWorkerClient) => Promise<T>): Promise<T> {\n if (this.#workers.length === 0) {\n throw new Error(\"NodeWorkerPool not initialized. Call initPool() first.\");\n }\n const index = this.#leastBusyIndex();\n this.#activeCount[index]!++;\n try {\n return await fn(this.#workers[index]!);\n } finally {\n this.#activeCount[index]!--;\n }\n }\n\n async generateKeypair(\n params: GenerateKeypairRequest[\"payload\"],\n ): Promise<GenerateKeypairResponseData> {\n return this.#dispatch((w) => w.generateKeypair(params));\n }\n\n async createEIP712(params: CreateEIP712Payload): Promise<CreateEIP712ResponseData> {\n return this.#dispatch((w) => w.createEIP712(params));\n }\n\n async encrypt(params: EncryptPayload): Promise<EncryptResponseData> {\n return this.#dispatch((w) => w.encrypt(params));\n }\n\n async userDecrypt(params: UserDecryptPayload): Promise<UserDecryptResponseData> {\n return this.#dispatch((w) => w.userDecrypt(params));\n }\n\n async publicDecrypt(params: PublicDecryptPayload): Promise<PublicDecryptResponseData> {\n return this.#dispatch((w) => w.publicDecrypt(params));\n }\n\n async createDelegatedUserDecryptEIP712(\n params: CreateDelegatedEIP712Payload,\n ): Promise<CreateDelegatedEIP712ResponseData> {\n return this.#dispatch((w) => w.createDelegatedUserDecryptEIP712(params));\n }\n\n async delegatedUserDecrypt(\n params: DelegatedUserDecryptPayload,\n ): Promise<DelegatedUserDecryptResponseData> {\n return this.#dispatch((w) => w.delegatedUserDecrypt(params));\n }\n\n async requestZKProofVerification(\n params: RequestZKProofVerificationRequest[\"payload\"],\n ): Promise<RequestZKProofVerificationResponseData> {\n return this.#dispatch((w) => w.requestZKProofVerification(params));\n }\n\n async getPublicKey(params: GetPublicKeyRequest[\"payload\"]): Promise<GetPublicKeyResponseData> {\n return this.#dispatch((w) => w.getPublicKey(params));\n }\n\n async getPublicParams(\n params: GetPublicParamsRequest[\"payload\"],\n ): Promise<GetPublicParamsResponseData> {\n return this.#dispatch((w) => w.getPublicParams(params));\n }\n}\n","import { z } from \"zod/mini\";\nimport type { RelayerConfig } from \"../config/types\";\nimport type { GenericLogger } from \"../worker/worker.types\";\nimport { RelayerNode } from \"../relayer/relayer-node\";\nimport type { FheChain } from \"../chains/types\";\nimport type { GenericStorage } from \"../types\";\nimport { parseConfiguration } from \"../validation\";\nimport { NodeWorkerPool } from \"../worker/worker.node-pool\";\nimport { assertCondition } from \"../utils\";\n\n/**\n * Pool options for the `node()` transport factory.\n *\n * Logging is configured once, SDK-wide, via `createConfig({ logger })` — there\n * is deliberately no per-relayer logger option.\n */\nexport interface NodePoolOptions {\n poolSize?: number;\n fheArtifactStorage?: GenericStorage;\n fheArtifactCacheTTL?: number;\n}\n\n/** Node transport — narrows worker type to `NodeWorkerPool`. */\nexport interface NodeRelayerConfig extends RelayerConfig {\n readonly type: \"node\";\n readonly createWorker: (chains: FheChain[], logger: GenericLogger) => NodeWorkerPool;\n readonly createRelayer: (\n chain: FheChain,\n worker: NodeWorkerPool,\n logger: GenericLogger,\n ) => RelayerNode;\n}\n\nconst NodePoolOptionsSchema = z.object({\n poolSize: z.optional(z.int().check(z.positive())),\n fheArtifactCacheTTL: z.optional(z.int().check(z.nonnegative())),\n});\n\n/**\n * Node.js transport — routes to RelayerNode (worker thread pool).\n *\n * @param options - Pool options (poolSize, logger, fheArtifactStorage, fheArtifactCacheTTL).\n *\n * @example\n * ```ts\n * relayers: {\n * [sepolia.id]: node(),\n * [mainnet.id]: node({ poolSize: 4 }),\n * }\n * ```\n */\nexport function node(options?: NodePoolOptions): NodeRelayerConfig {\n if (options !== undefined) {\n parseConfiguration(NodePoolOptionsSchema, options);\n }\n return {\n type: \"node\",\n createWorker: (chains, logger) => new NodeWorkerPool({ chains, ...options, logger }),\n createRelayer: (chain, pool, logger) => {\n assertCondition(\n !!pool,\n \"node() relayer requires a worker pool — createWorker must be called first.\",\n );\n return new RelayerNode({ chain, pool, ...options, logger });\n },\n };\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { GenericStorage } from \"../types\";\n\n/**\n * {@link GenericStorage} backed by Node.js {@link AsyncLocalStorage}.\n *\n * Each async context (e.g. HTTP request) gets its own isolated `Map`,\n * so credentials from one request never leak into another.\n *\n * Call {@link run} to establish a context before using the SDK:\n *\n * ```ts\n * import { asyncLocalStorage } from \"@zama-fhe/sdk/node\";\n *\n * app.post(\"/api/transfer\", (req, res) => {\n * asyncLocalStorage.run(async () => {\n * const sdk = new ZamaSDK({ relayer, signer, storage: asyncLocalStorage });\n * // credentials are scoped to this request\n * });\n * });\n * ```\n */\nexport class AsyncLocalMapStorage implements GenericStorage {\n readonly #als = new AsyncLocalStorage<Map<string, unknown>>();\n\n /** Execute `fn` within an isolated storage context. */\n run<R>(fn: () => R | Promise<R>): R | Promise<R> {\n return this.#als.run(new Map(), fn);\n }\n\n async get<T = unknown>(key: string): Promise<T | null> {\n return (this.#als.getStore()?.get(key) as T) ?? null;\n }\n\n async set<T = unknown>(key: string, value: T): Promise<void> {\n this.#als.getStore()?.set(key, value);\n }\n\n async delete(key: string): Promise<void> {\n this.#als.getStore()?.delete(key);\n }\n}\n\n/** Default singleton for application-wide use. */\nexport const asyncLocalStorage = new AsyncLocalMapStorage();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["#config","#pool","#artifactCache","#getArtifactCache","#workers","#activeCount","#config","#poolSize","#initPromise","#doInitPool","#dispatch","#leastBusyIndex","#als"],"sources":["../../../src/relayer/relayer-node.ts","../../../src/worker/worker.node-client.ts","../../../src/worker/worker.node-pool.ts","../../../src/node/config.ts","../../../src/storage/async-local-storage.ts"],"sourcesContent":["import type {\n InputProofBytesType,\n KmsDelegatedUserDecryptEIP712Type,\n ZKProofLike,\n} from \"@zama-fhe/relayer-sdk/node\";\nimport { toHex } from \"viem\";\nimport type { Address, Hex } from \"viem\";\nimport { MemoryStorage } from \"../storage/memory-storage\";\nimport type { GenericStorage } from \"../types\";\nimport type { NodeWorkerPool } from \"../worker/worker.node-pool\";\nimport type { GenericLogger } from \"../worker/worker.types\";\nimport type { FheChain } from \"../chains/types\";\nimport type { TransportKeyPair } from \"../credentials/types\";\nimport { BaseRelayer } from \"./base-relayer\";\nimport { FheArtifactCache } from \"./fhe-artifact-cache\";\nimport type { RelayerSDK } from \"./relayer-sdk\";\nimport type {\n ClearValue,\n DelegatedUserDecryptParams,\n EIP712TypedData,\n EncryptParams,\n EncryptResult,\n EncryptedValue,\n FheEncryptionKey,\n PublicDecryptResult,\n PublicParamsData,\n UserDecryptParams,\n} from \"./relayer-sdk.types\";\nimport { withRetry } from \"./relayer-utils\";\n\nexport interface RelayerNodeConfig {\n /** FHE chain configuration. */\n chain: FheChain;\n /** Worker thread pool — handles WASM operations off the main thread. */\n pool: NodeWorkerPool;\n /** SDK-wide logger for observing worker lifecycle and request timing. */\n logger: GenericLogger;\n /**\n * Persistent storage for caching FHE public key and params across sessions.\n * Defaults to `new MemoryStorage()` (in-process, lost on restart).\n * Pass a custom `GenericStorage` with redis for cross-restart persistence.\n */\n fheArtifactStorage?: GenericStorage;\n /** Cache TTL in seconds for FHE public material. Default: 86 400 (24 h). Set to 0 to revalidate on every operation. */\n fheArtifactCacheTTL?: number;\n}\n\n/**\n * RelayerNode — Node.js encryption/decryption layer.\n * The pool is injected at construction time; the relayer does not own its lifecycle.\n */\nexport class RelayerNode extends BaseRelayer implements RelayerSDK, Disposable {\n readonly #config: RelayerNodeConfig;\n #artifactCache: FheArtifactCache | null = null;\n\n constructor(config: RelayerNodeConfig) {\n super();\n this.#config = { fheArtifactStorage: new MemoryStorage(), ...config };\n }\n\n protected get chain(): FheChain {\n return this.#config.chain;\n }\n\n protected async init(): Promise<void> {\n await this.#pool.initPool();\n }\n\n get #pool(): NodeWorkerPool {\n return this.#config.pool;\n }\n\n #getArtifactCache(): FheArtifactCache | null {\n if (!this.#config.fheArtifactStorage) {\n return null;\n }\n if (!this.#artifactCache) {\n this.#artifactCache = new FheArtifactCache({\n storage: this.#config.fheArtifactStorage,\n chainId: this.chain.id,\n relayerUrl: this.chain.relayerUrl,\n ttl: this.#config.fheArtifactCacheTTL,\n logger: this.#config.logger,\n });\n }\n return this.#artifactCache;\n }\n\n /**\n * Terminate clears the artifact cache only.\n * The pool is externally owned — the relayer does not terminate it.\n */\n terminate(): void {\n this.#artifactCache = null;\n this.resetInit();\n }\n\n /** Calls {@link terminate}. */\n [Symbol.dispose](): void {\n this.terminate();\n }\n\n async generateTransportKeyPair(): Promise<TransportKeyPair> {\n await this.ensureInit();\n const chainId = this.chain.id;\n const result = await this.#pool.generateKeypair({ chainId });\n return { publicKey: result.publicKey, privateKey: result.privateKey };\n }\n\n async createEIP712(\n publicKey: Hex,\n contractAddresses: Address[],\n startTimestamp: number,\n durationDays = 7,\n ): Promise<EIP712TypedData> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return this.#pool.createEIP712({\n chainId,\n publicKey,\n contractAddresses,\n startTimestamp,\n durationDays,\n });\n }\n\n async encrypt(params: EncryptParams): Promise<EncryptResult> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return withRetry(async () => {\n const result = await this.#pool.encrypt({ chainId, ...params });\n return {\n encryptedValues: result.handles.map((handle) => toHex(handle)),\n inputProof: toHex(result.inputProof),\n };\n });\n }\n\n async userDecrypt(\n params: UserDecryptParams,\n ): Promise<Readonly<Record<EncryptedValue, ClearValue>>> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return withRetry(async () => {\n const result = await this.#pool.userDecrypt({ chainId, ...params });\n return result.clearValues;\n });\n }\n\n async publicDecrypt(encryptedValues: EncryptedValue[]): Promise<PublicDecryptResult> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return withRetry(async () => {\n const result = await this.#pool.publicDecrypt({ chainId, encryptedValues });\n return {\n clearValues: result.clearValues,\n abiEncodedClearValues: result.abiEncodedClearValues,\n decryptionProof: result.decryptionProof,\n };\n });\n }\n\n async createDelegatedUserDecryptEIP712(\n publicKey: Hex,\n contractAddresses: Address[],\n delegatorAddress: Address,\n startTimestamp: number,\n durationDays = 7,\n ): Promise<KmsDelegatedUserDecryptEIP712Type> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return this.#pool.createDelegatedUserDecryptEIP712({\n chainId,\n publicKey,\n contractAddresses,\n delegatorAddress,\n startTimestamp,\n durationDays,\n });\n }\n\n async delegatedUserDecrypt(\n params: DelegatedUserDecryptParams,\n ): Promise<Readonly<Record<EncryptedValue, ClearValue>>> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return withRetry(async () => {\n const result = await this.#pool.delegatedUserDecrypt({ chainId, ...params });\n return result.clearValues;\n });\n }\n\n async requestZKProofVerification(zkProof: ZKProofLike): Promise<InputProofBytesType> {\n await this.ensureInit();\n const chainId = this.chain.id;\n return withRetry(async () => {\n return this.#pool.requestZKProofVerification({ chainId, zkProof });\n });\n }\n\n async fetchFheEncryptionKeyBytes(): Promise<FheEncryptionKey | null> {\n await this.ensureInit();\n const chainId = this.chain.id;\n const artifactCache = this.#getArtifactCache();\n if (artifactCache) {\n return artifactCache.fetchFheEncryptionKeyBytes(\n async () => (await this.#pool.getPublicKey({ chainId })).result,\n );\n }\n return (await this.#pool.getPublicKey({ chainId })).result;\n }\n\n async getPublicParams(bits: number): Promise<PublicParamsData | null> {\n await this.ensureInit();\n const chainId = this.chain.id;\n const artifactCache = this.#getArtifactCache();\n if (artifactCache) {\n return artifactCache.getPublicParams(\n bits,\n async () => (await this.#pool.getPublicParams({ chainId, bits })).result,\n );\n }\n return (await this.#pool.getPublicParams({ chainId, bits })).result;\n }\n}\n","import { Worker } from \"node:worker_threads\";\nimport { randomUUID } from \"node:crypto\";\nimport { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\nimport type { FheChain } from \"../chains/types\";\nimport type {\n GenericLogger,\n WorkerEnv,\n WorkerRequest,\n WorkerRequestType,\n WorkerResponse,\n} from \"./worker.types\";\nimport { BaseWorkerClient } from \"./worker.base-client\";\nimport type { WorkerClientTimeoutConfig } from \"./worker.base-client\";\n\nexport interface NodeWorkerClientConfig extends WorkerClientTimeoutConfig {\n chains: FheChain[];\n /** SDK-wide logger for tracing worker request lifecycle. */\n logger: GenericLogger;\n}\n\n/**\n * Client for communicating with the RelayerSDK Node.js worker thread.\n * Provides a promise-based API for FHE operations using node:worker_threads.\n */\nexport class NodeWorkerClient extends BaseWorkerClient<Worker, NodeWorkerClientConfig> {\n protected readonly env: WorkerEnv = \"node\";\n\n constructor(config: NodeWorkerClientConfig) {\n super(config, config.logger);\n }\n\n protected createWorker(): Worker {\n // Resolve relative to the @zama-fhe/sdk/node entry point so the path is\n // correct regardless of which rolldown chunk this code lands in.\n //\n // Use createRequire(...).resolve rather than import.meta.resolve: Vite's\n // SSR transform (Ponder and other server-side bundlers) rewrites\n // `import.meta.resolve` to `__vite_ssr_import_meta__.resolve`, which is\n // undefined at runtime and makes this throw. createRequire only relies on\n // `import.meta.url`, which those transforms preserve. See SDK-235.\n const require = createRequire(import.meta.url);\n const nodeEntry = pathToFileURL(require.resolve(\"@zama-fhe/sdk/node\"));\n return new Worker(new URL(\"relayer-sdk.node-worker.js\", nodeEntry));\n }\n\n protected wireEvents(worker: Worker): void {\n worker.on(\"message\", (response: WorkerResponse<unknown>) => this.handleResponse(response));\n worker.on(\"error\", (error: Error) => this.handleWorkerError(error.message));\n worker.on(\"messageerror\", () => this.handleWorkerMessageError());\n }\n\n protected postMessage(worker: Worker, request: WorkerRequest): void {\n worker.postMessage(request);\n }\n\n protected terminateWorker(worker: Worker): void {\n void worker.terminate();\n }\n\n protected generateRequestId(): string {\n return randomUUID();\n }\n\n protected getInitPayload(): { type: WorkerRequestType; payload: WorkerRequest[\"payload\"] } {\n return { type: \"INIT\", payload: { env: \"node\" as const, chains: this.config.chains } };\n }\n\n protected override onWorkerReady(worker: Worker): void {\n worker.unref();\n }\n}\n","import { availableParallelism } from \"node:os\";\nimport { NodeWorkerClient } from \"./worker.node-client\";\nimport type { NodeWorkerClientConfig } from \"./worker.node-client\";\nimport type {\n CreateDelegatedEIP712Payload,\n CreateDelegatedEIP712ResponseData,\n CreateEIP712Payload,\n CreateEIP712ResponseData,\n DelegatedUserDecryptPayload,\n DelegatedUserDecryptResponseData,\n EncryptPayload,\n EncryptResponseData,\n GenerateKeypairRequest,\n GenerateKeypairResponseData,\n GetPublicKeyRequest,\n GetPublicKeyResponseData,\n GetPublicParamsRequest,\n GetPublicParamsResponseData,\n PublicDecryptPayload,\n PublicDecryptResponseData,\n RequestZKProofVerificationRequest,\n RequestZKProofVerificationResponseData,\n UserDecryptPayload,\n UserDecryptResponseData,\n} from \"./worker.types\";\n\nexport interface NodeWorkerPoolConfig extends NodeWorkerClientConfig {\n poolSize?: number;\n}\n\nconst MAX_DEFAULT_POOL_SIZE = 4;\n\n/**\n * Pool of Node.js worker threads for parallel FHE operations.\n *\n * **Default pool size:** `min(os.availableParallelism(), 4)`. Each worker loads\n * the full WASM module (~50–100 MB), so size the pool based on available memory.\n *\n * **Scheduling:** Least-connections — each request is dispatched to the worker\n * with the fewest in-flight operations.\n *\n * **When to override pool size:**\n * - High-throughput batch processing (e.g. bulk encryptions): increase to match CPU cores.\n * - Memory-constrained environments: decrease to 1–2 workers.\n *\n * **Lifecycle:**\n * 1. Initialize all workers: `await pool.initPool()`\n * 2. Use: `await pool.encrypt(...)`, `await pool.userDecrypt(...)`, etc.\n * 3. Shut down: `pool.terminate()`\n *\n * `initPool()` is idempotent — concurrent calls share the same initialization promise.\n * If any worker fails to initialize, all workers are terminated and the error is propagated.\n *\n * @internal Instantiated by the `node()` transport factory — not part of the public API.\n */\nexport class NodeWorkerPool {\n readonly #workers: NodeWorkerClient[] = [];\n readonly #activeCount: number[] = [];\n readonly #config: NodeWorkerPoolConfig;\n readonly #poolSize: number;\n #initPromise: Promise<void> | null = null;\n\n /**\n * @param config - Pool configuration. Set `poolSize` to override the default\n * (`min(os.availableParallelism(), 4)`).\n */\n constructor(config: NodeWorkerPoolConfig) {\n this.#config = config;\n this.#poolSize = config.poolSize ?? Math.min(availableParallelism(), MAX_DEFAULT_POOL_SIZE);\n }\n\n get poolSize(): number {\n return this.#poolSize;\n }\n\n async initPool(): Promise<void> {\n if (this.#workers.length > 0) {\n return;\n }\n if (!this.#initPromise) {\n this.#initPromise = this.#doInitPool().finally(() => {\n this.#initPromise = null;\n });\n }\n return this.#initPromise;\n }\n\n async #doInitPool(): Promise<void> {\n for (let i = 0; i < this.#poolSize; i++) {\n // Stamp a per-worker label so a WorkerTimeoutError names which worker stalled.\n this.#workers.push(\n new NodeWorkerClient({ ...this.#config, workerLabel: `node-worker-${i}` }),\n );\n this.#activeCount.push(0);\n }\n try {\n await Promise.all(this.#workers.map((w) => w.initWorker()));\n } catch (error) {\n // Terminate any workers that did initialize and reset state\n for (const worker of this.#workers) {\n worker.terminate();\n }\n this.#workers.length = 0;\n this.#activeCount.length = 0;\n throw error;\n }\n }\n\n terminate(): void {\n const errors: Error[] = [];\n for (const worker of this.#workers) {\n try {\n worker.terminate();\n } catch (e) {\n errors.push(e instanceof Error ? e : new Error(String(e)));\n }\n }\n this.#workers.length = 0;\n this.#activeCount.length = 0;\n if (errors.length > 0) {\n throw new AggregateError(errors, \"Failed to terminate worker pool\");\n }\n }\n\n /**\n * Pick the worker with the fewest in-flight requests (least-connections).\n * Returns the index so #dispatch can track the active count.\n */\n #leastBusyIndex(): number {\n let minIndex = 0;\n let minCount = this.#activeCount[0]!;\n for (let i = 1; i < this.#activeCount.length; i++) {\n if (this.#activeCount[i]! < minCount) {\n minCount = this.#activeCount[i]!;\n minIndex = i;\n }\n }\n return minIndex;\n }\n\n async #dispatch<T>(fn: (worker: NodeWorkerClient) => Promise<T>): Promise<T> {\n if (this.#workers.length === 0) {\n throw new Error(\"NodeWorkerPool not initialized. Call initPool() first.\");\n }\n const index = this.#leastBusyIndex();\n this.#activeCount[index]!++;\n try {\n return await fn(this.#workers[index]!);\n } finally {\n this.#activeCount[index]!--;\n }\n }\n\n async generateKeypair(\n params: GenerateKeypairRequest[\"payload\"],\n ): Promise<GenerateKeypairResponseData> {\n return this.#dispatch((w) => w.generateKeypair(params));\n }\n\n async createEIP712(params: CreateEIP712Payload): Promise<CreateEIP712ResponseData> {\n return this.#dispatch((w) => w.createEIP712(params));\n }\n\n async encrypt(params: EncryptPayload): Promise<EncryptResponseData> {\n return this.#dispatch((w) => w.encrypt(params));\n }\n\n async userDecrypt(params: UserDecryptPayload): Promise<UserDecryptResponseData> {\n return this.#dispatch((w) => w.userDecrypt(params));\n }\n\n async publicDecrypt(params: PublicDecryptPayload): Promise<PublicDecryptResponseData> {\n return this.#dispatch((w) => w.publicDecrypt(params));\n }\n\n async createDelegatedUserDecryptEIP712(\n params: CreateDelegatedEIP712Payload,\n ): Promise<CreateDelegatedEIP712ResponseData> {\n return this.#dispatch((w) => w.createDelegatedUserDecryptEIP712(params));\n }\n\n async delegatedUserDecrypt(\n params: DelegatedUserDecryptPayload,\n ): Promise<DelegatedUserDecryptResponseData> {\n return this.#dispatch((w) => w.delegatedUserDecrypt(params));\n }\n\n async requestZKProofVerification(\n params: RequestZKProofVerificationRequest[\"payload\"],\n ): Promise<RequestZKProofVerificationResponseData> {\n return this.#dispatch((w) => w.requestZKProofVerification(params));\n }\n\n async getPublicKey(params: GetPublicKeyRequest[\"payload\"]): Promise<GetPublicKeyResponseData> {\n return this.#dispatch((w) => w.getPublicKey(params));\n }\n\n async getPublicParams(\n params: GetPublicParamsRequest[\"payload\"],\n ): Promise<GetPublicParamsResponseData> {\n return this.#dispatch((w) => w.getPublicParams(params));\n }\n}\n","import { z } from \"zod/mini\";\nimport type { RelayerConfig } from \"../config/types\";\nimport type { GenericLogger } from \"../worker/worker.types\";\nimport { RelayerNode } from \"../relayer/relayer-node\";\nimport type { FheChain } from \"../chains/types\";\nimport type { GenericStorage } from \"../types\";\nimport { parseConfiguration } from \"../validation\";\nimport { NodeWorkerPool } from \"../worker/worker.node-pool\";\nimport { assertCondition } from \"../utils\";\n\n/**\n * Pool options for the `node()` transport factory.\n *\n * Logging is configured once, SDK-wide, via `createConfig({ logger })` — there\n * is deliberately no per-relayer logger option.\n */\nexport interface NodePoolOptions {\n poolSize?: number;\n fheArtifactStorage?: GenericStorage;\n fheArtifactCacheTTL?: number;\n /**\n * Per-operation worker timeout in **seconds** (encrypt / decrypt / etc.).\n * Defaults to 30. A timed-out operation rejects with `WorkerTimeoutError` and\n * recycles the worker (see {@link recycleWorkerOnTimeout}).\n */\n operationTimeout?: number;\n /** WASM-init timeout in **seconds**. Defaults to 60. */\n initTimeout?: number;\n /**\n * Terminate + re-init the worker after an operation timeout so a hung thread\n * can't keep serving requests. Defaults to `true`. Note: a timeout caused by a\n * slow/down relayer (not a stuck thread) also recycles an otherwise-healthy\n * worker, paying a WASM re-init on the next call — when fronting a flaky\n * relayer, prefer `false` with a higher `operationTimeout`.\n */\n recycleWorkerOnTimeout?: boolean;\n}\n\n/** Node transport — narrows worker type to `NodeWorkerPool`. */\nexport interface NodeRelayerConfig extends RelayerConfig {\n readonly type: \"node\";\n readonly createWorker: (chains: FheChain[], logger: GenericLogger) => NodeWorkerPool;\n readonly createRelayer: (\n chain: FheChain,\n worker: NodeWorkerPool,\n logger: GenericLogger,\n ) => RelayerNode;\n}\n\n/**\n * Upper bound (seconds) for the worker-timeout knobs. Timeouts are passed to\n * `setTimeout`, whose delay is a 32-bit signed int of **milliseconds**: a value\n * over ~24.8 days overflows and clamps to ~1 ms, silently firing instantly. Cap\n * well below that (1 hour is already far beyond any legitimate FHE operation) so\n * an absurd config fails loudly at the factory boundary instead of misbehaving.\n */\nconst MAX_WORKER_TIMEOUT_SECONDS = 3_600;\n\nconst NodePoolOptionsSchema = z.object({\n poolSize: z.optional(z.int().check(z.positive())),\n fheArtifactCacheTTL: z.optional(z.int().check(z.nonnegative())),\n operationTimeout: z.optional(z.int().check(z.positive(), z.lte(MAX_WORKER_TIMEOUT_SECONDS))),\n initTimeout: z.optional(z.int().check(z.positive(), z.lte(MAX_WORKER_TIMEOUT_SECONDS))),\n recycleWorkerOnTimeout: z.optional(z.boolean()),\n});\n\n/**\n * Node.js transport — routes to RelayerNode (worker thread pool).\n *\n * @param options - Pool options: `poolSize`, `fheArtifactStorage`,\n * `fheArtifactCacheTTL`, and the worker-timeout knobs `operationTimeout` /\n * `initTimeout` (seconds) and `recycleWorkerOnTimeout`.\n *\n * @example\n * ```ts\n * relayers: {\n * [sepolia.id]: node(),\n * [mainnet.id]: node({ poolSize: 4, operationTimeout: 10 }),\n * }\n * ```\n */\nexport function node(options?: NodePoolOptions): NodeRelayerConfig {\n if (options !== undefined) {\n parseConfiguration(NodePoolOptionsSchema, options);\n }\n return {\n type: \"node\",\n createWorker: (chains, logger) => new NodeWorkerPool({ chains, ...options, logger }),\n createRelayer: (chain, pool, logger) => {\n assertCondition(\n !!pool,\n \"node() relayer requires a worker pool — createWorker must be called first.\",\n );\n return new RelayerNode({ chain, pool, ...options, logger });\n },\n };\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { GenericStorage } from \"../types\";\n\n/**\n * {@link GenericStorage} backed by Node.js {@link AsyncLocalStorage}.\n *\n * Each async context (e.g. HTTP request) gets its own isolated `Map`,\n * so credentials from one request never leak into another.\n *\n * Call {@link run} to establish a context before using the SDK:\n *\n * ```ts\n * import { asyncLocalStorage } from \"@zama-fhe/sdk/node\";\n *\n * app.post(\"/api/transfer\", (req, res) => {\n * asyncLocalStorage.run(async () => {\n * const sdk = new ZamaSDK({ relayer, signer, storage: asyncLocalStorage });\n * // credentials are scoped to this request\n * });\n * });\n * ```\n */\nexport class AsyncLocalMapStorage implements GenericStorage {\n readonly #als = new AsyncLocalStorage<Map<string, unknown>>();\n\n /** Execute `fn` within an isolated storage context. */\n run<R>(fn: () => R | Promise<R>): R | Promise<R> {\n return this.#als.run(new Map(), fn);\n }\n\n async get<T = unknown>(key: string): Promise<T | null> {\n return (this.#als.getStore()?.get(key) as T) ?? null;\n }\n\n async set<T = unknown>(key: string, value: T): Promise<void> {\n this.#als.getStore()?.set(key, value);\n }\n\n async delete(key: string): Promise<void> {\n this.#als.getStore()?.delete(key);\n }\n}\n\n/** Default singleton for application-wide use. */\nexport const asyncLocalStorage = new AsyncLocalMapStorage();\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{n as
|
|
1
|
+
import{g as e}from"../assertions-zYseN5Xz.js";import{n as t,t as n}from"../hex-A72GrTf9.js";import{parentPort as r}from"node:worker_threads";if(!r)throw Error(`This script must be run as a worker thread`);const i=r,a=new Map,o=new Map,s=new Map;function c(e){return{...e,chainId:e.id}}async function l(e){let t=a.get(e);if(t)return t;let n=o.get(e);if(n)return n;let r=s.get(e);if(!r)throw Error(`No config for chain ${e}. Available: [${[...s.keys()].join(`, `)}]`);let i=(async()=>(await import(`@zama-fhe/relayer-sdk/node`)).createInstance({...c(r),batchRpcCalls:!1}))().then(t=>(a.set(e,t),o.delete(e),t)).catch(t=>{throw o.delete(e),t});return o.set(e,i),i}function u(e,t,n,r){let a={id:e,type:t,success:!0,data:n};i.postMessage(a,r)}function d(t,n,r){i.postMessage({id:t,type:n,success:!1,error:r instanceof Error?r.message:String(r),serialized:e(r)})}async function f(e){let{id:t,type:n,payload:r}=e;try{for(let e of r.chains)s.set(e.id,e);u(t,n,{initialized:!0})}catch(e){d(t,n,e)}}function p(e){return typeof e==`boolean`?e?1n:0n:e}function m(e){throw Error(`Unsupported FHE type`)}async function h(e){let{id:t,type:n,payload:r}=e,{values:i,contractAddress:a,userAddress:o}=r;try{let e=(await l(r.chainId)).createEncryptedInput(a,o);for(let t of i){let{value:n,type:r}=t;switch(r){case`ebool`:e.addBool(typeof n==`boolean`?n:n!==0n);break;case`euint8`:e.add8(p(n));break;case`euint16`:e.add16(p(n));break;case`euint32`:e.add32(p(n));break;case`euint64`:e.add64(p(n));break;case`euint128`:e.add128(p(n));break;case`euint256`:e.add256(p(n));break;case`eaddress`:e.addAddress(n);break;default:m(r)}}let s=await e.encrypt();u(t,n,{handles:s.handles,inputProof:s.inputProof},[s.inputProof.buffer,...s.handles.map(e=>e.buffer)])}catch(e){d(t,n,e)}}async function g(e){let{id:n,type:r,payload:i}=e;try{let e=await l(i.chainId),a=i.encryptedValues.map(e=>({handle:e,contractAddress:i.contractAddress}));u(n,r,{clearValues:await e.userDecrypt(a,t(i.privateKey),t(i.publicKey),i.signature,i.signedContractAddresses,i.signerAddress,i.startTimestamp,i.durationDays)})}catch(e){d(n,r,e)}}async function _(e){let{id:t,type:n,payload:r}=e;try{u(t,n,{...await(await l(r.chainId)).publicDecrypt(r.encryptedValues)})}catch(e){d(t,n,e)}}async function v(e){let{id:t,type:r,payload:i}=e;try{let e=(await l(i.chainId)).generateKeypair();u(t,r,{publicKey:n(e.publicKey),privateKey:n(e.privateKey)})}catch(e){d(t,r,e)}}async function y(e){let{id:n,type:r,payload:i}=e;try{u(n,r,(await l(i.chainId)).createEIP712(t(i.publicKey),i.contractAddresses,i.startTimestamp,i.durationDays))}catch(e){d(n,r,e)}}async function b(e){let{id:n,type:r,payload:i}=e;try{u(n,r,(await l(i.chainId)).createDelegatedUserDecryptEIP712(t(i.publicKey),i.contractAddresses,i.delegatorAddress,i.startTimestamp,i.durationDays))}catch(e){d(n,r,e)}}async function x(e){let{id:n,type:r,payload:i}=e;try{let e=await l(i.chainId),a=i.encryptedValues.map(e=>({handle:e,contractAddress:i.contractAddress}));u(n,r,{clearValues:await e.delegatedUserDecrypt(a,t(i.privateKey),t(i.publicKey),i.signature,i.signedContractAddresses,i.delegatorAddress,i.delegateAddress,i.startTimestamp,i.durationDays)})}catch(e){d(n,r,e)}}async function S(e){let{id:t,type:n,payload:r}=e;try{let e=await(await l(r.chainId)).requestZKProofVerification(r.zkProof);u(t,n,e,[e.inputProof.buffer,...e.handles.map(e=>e.buffer)])}catch(e){d(t,n,e)}}async function C(e){let{id:t,type:n,payload:r}=e;try{u(t,n,{result:(await l(r.chainId)).getPublicKey()})}catch(e){d(t,n,e)}}async function w(e){let{id:t,type:n,payload:r}=e;try{u(t,n,{result:(await l(r.chainId)).getPublicParams(r.bits)})}catch(e){d(t,n,e)}}async function T(e){try{switch(e.type){case`INIT`:await f(e);break;case`ENCRYPT`:await h(e);break;case`USER_DECRYPT`:await g(e);break;case`PUBLIC_DECRYPT`:await _(e);break;case`GENERATE_KEYPAIR`:await v(e);break;case`CREATE_EIP712`:await y(e);break;case`CREATE_DELEGATED_EIP712`:await b(e);break;case`DELEGATED_USER_DECRYPT`:await x(e);break;case`REQUEST_ZK_PROOF_VERIFICATION`:await S(e);break;case`GET_PUBLIC_KEY`:await C(e);break;case`GET_PUBLIC_PARAMS`:await w(e);break;default:throw Error(`Unknown request type: ${e.type}`)}}catch(t){d(e.id,e.type,t)}}i.on(`message`,e=>{T(e)});
|
|
2
2
|
//# sourceMappingURL=relayer-sdk.node-worker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relayer-sdk.node-worker.js","names":[],"sources":["../../../src/worker/relayer-sdk.node-worker.ts"],"sourcesContent":["/**\n * Node.js worker thread for RelayerSDK FHE operations.\n * Handles CPU-intensive WASM operations off the main thread using node:worker_threads.\n */\n\nimport type { FhevmInstance, FhevmInstanceConfig } from \"@zama-fhe/relayer-sdk/node\";\nimport type { FheChain } from \"../chains/types\";\nimport { parentPort, type Transferable } from \"node:worker_threads\";\nimport type {\n CreateDelegatedEIP712Request,\n CreateEIP712Request,\n DelegatedUserDecryptRequest,\n DelegatedUserDecryptResponseData,\n EncryptRequest,\n EncryptResponseData,\n ErrorResponse,\n GenerateKeypairRequest,\n GenerateKeypairResponseData,\n GetPublicKeyRequest,\n GetPublicKeyResponseData,\n GetPublicParamsRequest,\n GetPublicParamsResponseData,\n InitRequest,\n PublicDecryptRequest,\n PublicDecryptResponseData,\n RequestZKProofVerificationRequest,\n SuccessResponse,\n UserDecryptRequest,\n UserDecryptResponseData,\n WorkerRequest,\n} from \"./worker.types\";\nimport { prefixHex, unprefixHex } from \"../utils\";\n\nif (!parentPort) {\n throw new Error(\"This script must be run as a worker thread\");\n}\n\nconst port = parentPort;\n\n// ── Multi-chain instance management ─────────────────────────────\nconst instances = new Map<number, FhevmInstance>();\nconst pending = new Map<number, Promise<FhevmInstance>>();\nconst configs = new Map<number, FheChain>();\n\n/** Convert an FheChain to the FhevmInstanceConfig shape expected by createInstance. */\nfunction toInstanceConfig(chain: FheChain): FhevmInstanceConfig {\n return { ...chain, chainId: chain.id };\n}\n\n/**\n * Get or lazily create an FhevmInstance for the given chain.\n */\nasync function getInstance(chainId: number): Promise<FhevmInstance> {\n const existing = instances.get(chainId);\n if (existing) {\n return existing;\n }\n\n const inflight = pending.get(chainId);\n if (inflight) {\n return inflight;\n }\n\n const config = configs.get(chainId);\n if (!config) {\n throw new Error(\n `No config for chain ${chainId}. Available: [${[...configs.keys()].join(\", \")}]`,\n );\n }\n\n const promise = (async () => {\n const nodeSdk = await import(\"@zama-fhe/relayer-sdk/node\");\n return nodeSdk.createInstance({ ...toInstanceConfig(config), batchRpcCalls: false });\n })()\n .then((instance) => {\n instances.set(chainId, instance);\n pending.delete(chainId);\n return instance;\n })\n .catch((err) => {\n pending.delete(chainId);\n throw err;\n });\n\n pending.set(chainId, promise);\n return promise;\n}\n\nfunction sendSuccess<T>(\n id: string,\n type: WorkerRequest[\"type\"],\n data: T,\n transfer?: readonly Transferable[],\n): void {\n const response: SuccessResponse<T> = { id, type, success: true, data };\n port.postMessage(response, transfer);\n}\n\nfunction sendError(id: string, type: WorkerRequest[\"type\"], error: string): void {\n const response: ErrorResponse = { id, type, success: false, error };\n port.postMessage(response);\n}\n\n/**\n * Handle INIT request - register chain configs (instances are lazy).\n */\nasync function handleInit(request: InitRequest): Promise<void> {\n const { id, type, payload } = request;\n try {\n for (const chain of payload.chains) {\n configs.set(chain.id, chain);\n }\n sendSuccess(id, type, { initialized: true });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendError(id, type, message);\n }\n}\n\n/** Coerce a boolean to bigint for numeric FHE types. */\nfunction toBigInt(value: bigint | boolean): bigint {\n return typeof value === \"boolean\" ? (value ? 1n : 0n) : value;\n}\n\nfunction unreachableFheType(_: never): never {\n throw new Error(\"Unsupported FHE type\");\n}\n\nasync function handleEncrypt(request: EncryptRequest): Promise<void> {\n const { id, type, payload } = request;\n const { values, contractAddress, userAddress } = payload;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const input = instance.createEncryptedInput(contractAddress, userAddress);\n\n for (const entry of values) {\n const { value, type: fheType } = entry;\n switch (fheType) {\n case \"ebool\":\n input.addBool(typeof value === \"boolean\" ? value : value !== 0n);\n break;\n case \"euint8\":\n input.add8(toBigInt(value));\n break;\n case \"euint16\":\n input.add16(toBigInt(value));\n break;\n case \"euint32\":\n input.add32(toBigInt(value));\n break;\n case \"euint64\":\n input.add64(toBigInt(value));\n break;\n case \"euint128\":\n input.add128(toBigInt(value));\n break;\n case \"euint256\":\n input.add256(toBigInt(value));\n break;\n case \"eaddress\":\n input.addAddress(value);\n break;\n default:\n unreachableFheType(fheType);\n }\n }\n\n const encrypted = await input.encrypt();\n\n const response: EncryptResponseData = {\n handles: encrypted.handles,\n inputProof: encrypted.inputProof,\n };\n\n const transferList: Transferable[] = [\n encrypted.inputProof.buffer as ArrayBuffer,\n ...encrypted.handles.map((h) => h.buffer as ArrayBuffer),\n ];\n\n sendSuccess(id, type, response, transferList);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendError(id, type, message);\n }\n}\n\nasync function handleUserDecrypt(request: UserDecryptRequest): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const handleContractPairs = payload.encryptedValues.map((encryptedValue) => ({\n handle: encryptedValue,\n contractAddress: payload.contractAddress,\n }));\n\n const result = await instance.userDecrypt(\n handleContractPairs,\n unprefixHex(payload.privateKey),\n unprefixHex(payload.publicKey),\n payload.signature,\n payload.signedContractAddresses,\n payload.signerAddress,\n payload.startTimestamp,\n payload.durationDays,\n );\n\n const response: UserDecryptResponseData = { clearValues: result };\n\n sendSuccess(id, type, response);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendError(id, type, message);\n }\n}\n\nasync function handlePublicDecrypt(request: PublicDecryptRequest): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const result = await instance.publicDecrypt(payload.encryptedValues);\n\n const response: PublicDecryptResponseData = { ...result };\n\n sendSuccess(id, type, response);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendError(id, type, message);\n }\n}\n\nasync function handleGenerateKeypair(request: GenerateKeypairRequest): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const keypair = instance.generateKeypair();\n\n const response: GenerateKeypairResponseData = {\n publicKey: prefixHex(keypair.publicKey),\n privateKey: prefixHex(keypair.privateKey),\n };\n\n sendSuccess(id, type, response);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendError(id, type, message);\n }\n}\n\nasync function handleCreateEIP712(request: CreateEIP712Request): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const eip712 = instance.createEIP712(\n unprefixHex(payload.publicKey),\n payload.contractAddresses,\n payload.startTimestamp,\n payload.durationDays,\n );\n\n sendSuccess(id, type, eip712);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendError(id, type, message);\n }\n}\n\nasync function handleCreateDelegatedEIP712(request: CreateDelegatedEIP712Request): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const result = instance.createDelegatedUserDecryptEIP712(\n unprefixHex(payload.publicKey),\n payload.contractAddresses,\n payload.delegatorAddress,\n payload.startTimestamp,\n payload.durationDays,\n );\n\n sendSuccess(id, type, result);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendError(id, type, message);\n }\n}\n\nasync function handleDelegatedUserDecrypt(request: DelegatedUserDecryptRequest): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const handleContractPairs = payload.encryptedValues.map((encryptedValue) => ({\n handle: encryptedValue,\n contractAddress: payload.contractAddress,\n }));\n\n const result = await instance.delegatedUserDecrypt(\n handleContractPairs,\n unprefixHex(payload.privateKey),\n unprefixHex(payload.publicKey),\n payload.signature,\n payload.signedContractAddresses,\n payload.delegatorAddress,\n payload.delegateAddress,\n payload.startTimestamp,\n payload.durationDays,\n );\n\n const response: DelegatedUserDecryptResponseData = { clearValues: result };\n\n sendSuccess(id, type, response);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendError(id, type, message);\n }\n}\n\nasync function handleRequestZKProofVerification(\n request: RequestZKProofVerificationRequest,\n): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const result = await instance.requestZKProofVerification(payload.zkProof);\n\n const transferList: Transferable[] = [\n result.inputProof.buffer as ArrayBuffer,\n ...result.handles.map((h) => h.buffer as ArrayBuffer),\n ];\n\n sendSuccess(id, type, result, transferList);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendError(id, type, message);\n }\n}\n\nasync function handleGetPublicKey(request: GetPublicKeyRequest): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const result = instance.getPublicKey();\n\n const response: GetPublicKeyResponseData = { result };\n\n sendSuccess(id, type, response);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendError(id, type, message);\n }\n}\n\nasync function handleGetPublicParams(request: GetPublicParamsRequest): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const result = instance.getPublicParams(\n // oxlint-disable-next-line typescript-eslint/consistent-type-imports -- SDK loaded dynamically\n payload.bits as keyof import(\"@zama-fhe/relayer-sdk/node\").PublicParams<Uint8Array>,\n );\n\n const response: GetPublicParamsResponseData = { result };\n\n sendSuccess(id, type, response);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendError(id, type, message);\n }\n}\n\nasync function handleMessage(request: WorkerRequest): Promise<void> {\n try {\n switch (request.type) {\n case \"INIT\":\n await handleInit(request);\n break;\n case \"ENCRYPT\":\n await handleEncrypt(request);\n break;\n case \"USER_DECRYPT\":\n await handleUserDecrypt(request);\n break;\n case \"PUBLIC_DECRYPT\":\n await handlePublicDecrypt(request);\n break;\n case \"GENERATE_KEYPAIR\":\n await handleGenerateKeypair(request);\n break;\n case \"CREATE_EIP712\":\n await handleCreateEIP712(request);\n break;\n case \"CREATE_DELEGATED_EIP712\":\n await handleCreateDelegatedEIP712(request);\n break;\n case \"DELEGATED_USER_DECRYPT\":\n await handleDelegatedUserDecrypt(request);\n break;\n case \"REQUEST_ZK_PROOF_VERIFICATION\":\n await handleRequestZKProofVerification(request);\n break;\n case \"GET_PUBLIC_KEY\":\n await handleGetPublicKey(request);\n break;\n case \"GET_PUBLIC_PARAMS\":\n await handleGetPublicParams(request);\n break;\n default:\n throw new Error(`Unknown request type: ${(request as WorkerRequest).type}`);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendError(request.id, request.type, message);\n }\n}\n\nport.on(\"message\", (request: WorkerRequest) => {\n void handleMessage(request);\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"relayer-sdk.node-worker.js","names":[],"sources":["../../../src/worker/relayer-sdk.node-worker.ts"],"sourcesContent":["/**\n * Node.js worker thread for RelayerSDK FHE operations.\n * Handles CPU-intensive WASM operations off the main thread using node:worker_threads.\n */\n\nimport type { FhevmInstance, FhevmInstanceConfig } from \"@zama-fhe/relayer-sdk/node\";\nimport type { FheChain } from \"../chains/types\";\nimport { parentPort, type Transferable } from \"node:worker_threads\";\nimport type {\n CreateDelegatedEIP712Request,\n CreateEIP712Request,\n DelegatedUserDecryptRequest,\n DelegatedUserDecryptResponseData,\n EncryptRequest,\n EncryptResponseData,\n GenerateKeypairRequest,\n GenerateKeypairResponseData,\n GetPublicKeyRequest,\n GetPublicKeyResponseData,\n GetPublicParamsRequest,\n GetPublicParamsResponseData,\n InitRequest,\n PublicDecryptRequest,\n PublicDecryptResponseData,\n RequestZKProofVerificationRequest,\n SuccessResponse,\n UserDecryptRequest,\n UserDecryptResponseData,\n WorkerRequest,\n} from \"./worker.types\";\nimport { prefixHex, serializeError, unprefixHex } from \"../utils\";\n\nif (!parentPort) {\n throw new Error(\"This script must be run as a worker thread\");\n}\n\nconst port = parentPort;\n\n// ── Multi-chain instance management ─────────────────────────────\nconst instances = new Map<number, FhevmInstance>();\nconst pending = new Map<number, Promise<FhevmInstance>>();\nconst configs = new Map<number, FheChain>();\n\n/** Convert an FheChain to the FhevmInstanceConfig shape expected by createInstance. */\nfunction toInstanceConfig(chain: FheChain): FhevmInstanceConfig {\n return { ...chain, chainId: chain.id };\n}\n\n/**\n * Get or lazily create an FhevmInstance for the given chain.\n */\nasync function getInstance(chainId: number): Promise<FhevmInstance> {\n const existing = instances.get(chainId);\n if (existing) {\n return existing;\n }\n\n const inflight = pending.get(chainId);\n if (inflight) {\n return inflight;\n }\n\n const config = configs.get(chainId);\n if (!config) {\n throw new Error(\n `No config for chain ${chainId}. Available: [${[...configs.keys()].join(\", \")}]`,\n );\n }\n\n const promise = (async () => {\n const nodeSdk = await import(\"@zama-fhe/relayer-sdk/node\");\n return nodeSdk.createInstance({ ...toInstanceConfig(config), batchRpcCalls: false });\n })()\n .then((instance) => {\n instances.set(chainId, instance);\n pending.delete(chainId);\n return instance;\n })\n .catch((err) => {\n pending.delete(chainId);\n throw err;\n });\n\n pending.set(chainId, promise);\n return promise;\n}\n\nfunction sendSuccess<T>(\n id: string,\n type: WorkerRequest[\"type\"],\n data: T,\n transfer?: readonly Transferable[],\n): void {\n const response: SuccessResponse<T> = { id, type, success: true, data };\n port.postMessage(response, transfer);\n}\n\nfunction sendError(id: string, type: WorkerRequest[\"type\"], error: unknown): void {\n // The error and its cause chain are serialized into a structured-clone-safe\n // envelope; the main thread rebuilds it and classifies it once in\n // `wrapDecryptError`. The worker stays taxonomy-agnostic.\n port.postMessage({\n id,\n type,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n serialized: serializeError(error),\n });\n}\n\n/**\n * Handle INIT request - register chain configs (instances are lazy).\n */\nasync function handleInit(request: InitRequest): Promise<void> {\n const { id, type, payload } = request;\n try {\n for (const chain of payload.chains) {\n configs.set(chain.id, chain);\n }\n sendSuccess(id, type, { initialized: true });\n } catch (error) {\n sendError(id, type, error);\n }\n}\n\n/** Coerce a boolean to bigint for numeric FHE types. */\nfunction toBigInt(value: bigint | boolean): bigint {\n return typeof value === \"boolean\" ? (value ? 1n : 0n) : value;\n}\n\nfunction unreachableFheType(_: never): never {\n throw new Error(\"Unsupported FHE type\");\n}\n\nasync function handleEncrypt(request: EncryptRequest): Promise<void> {\n const { id, type, payload } = request;\n const { values, contractAddress, userAddress } = payload;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const input = instance.createEncryptedInput(contractAddress, userAddress);\n\n for (const entry of values) {\n const { value, type: fheType } = entry;\n switch (fheType) {\n case \"ebool\":\n input.addBool(typeof value === \"boolean\" ? value : value !== 0n);\n break;\n case \"euint8\":\n input.add8(toBigInt(value));\n break;\n case \"euint16\":\n input.add16(toBigInt(value));\n break;\n case \"euint32\":\n input.add32(toBigInt(value));\n break;\n case \"euint64\":\n input.add64(toBigInt(value));\n break;\n case \"euint128\":\n input.add128(toBigInt(value));\n break;\n case \"euint256\":\n input.add256(toBigInt(value));\n break;\n case \"eaddress\":\n input.addAddress(value);\n break;\n default:\n unreachableFheType(fheType);\n }\n }\n\n const encrypted = await input.encrypt();\n\n const response: EncryptResponseData = {\n handles: encrypted.handles,\n inputProof: encrypted.inputProof,\n };\n\n const transferList: Transferable[] = [\n encrypted.inputProof.buffer as ArrayBuffer,\n ...encrypted.handles.map((h) => h.buffer as ArrayBuffer),\n ];\n\n sendSuccess(id, type, response, transferList);\n } catch (error) {\n sendError(id, type, error);\n }\n}\n\nasync function handleUserDecrypt(request: UserDecryptRequest): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const handleContractPairs = payload.encryptedValues.map((encryptedValue) => ({\n handle: encryptedValue,\n contractAddress: payload.contractAddress,\n }));\n\n const result = await instance.userDecrypt(\n handleContractPairs,\n unprefixHex(payload.privateKey),\n unprefixHex(payload.publicKey),\n payload.signature,\n payload.signedContractAddresses,\n payload.signerAddress,\n payload.startTimestamp,\n payload.durationDays,\n );\n\n const response: UserDecryptResponseData = { clearValues: result };\n\n sendSuccess(id, type, response);\n } catch (error) {\n sendError(id, type, error);\n }\n}\n\nasync function handlePublicDecrypt(request: PublicDecryptRequest): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const result = await instance.publicDecrypt(payload.encryptedValues);\n\n const response: PublicDecryptResponseData = { ...result };\n\n sendSuccess(id, type, response);\n } catch (error) {\n sendError(id, type, error);\n }\n}\n\nasync function handleGenerateKeypair(request: GenerateKeypairRequest): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const keypair = instance.generateKeypair();\n\n const response: GenerateKeypairResponseData = {\n publicKey: prefixHex(keypair.publicKey),\n privateKey: prefixHex(keypair.privateKey),\n };\n\n sendSuccess(id, type, response);\n } catch (error) {\n sendError(id, type, error);\n }\n}\n\nasync function handleCreateEIP712(request: CreateEIP712Request): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const eip712 = instance.createEIP712(\n unprefixHex(payload.publicKey),\n payload.contractAddresses,\n payload.startTimestamp,\n payload.durationDays,\n );\n\n sendSuccess(id, type, eip712);\n } catch (error) {\n sendError(id, type, error);\n }\n}\n\nasync function handleCreateDelegatedEIP712(request: CreateDelegatedEIP712Request): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const result = instance.createDelegatedUserDecryptEIP712(\n unprefixHex(payload.publicKey),\n payload.contractAddresses,\n payload.delegatorAddress,\n payload.startTimestamp,\n payload.durationDays,\n );\n\n sendSuccess(id, type, result);\n } catch (error) {\n sendError(id, type, error);\n }\n}\n\nasync function handleDelegatedUserDecrypt(request: DelegatedUserDecryptRequest): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const handleContractPairs = payload.encryptedValues.map((encryptedValue) => ({\n handle: encryptedValue,\n contractAddress: payload.contractAddress,\n }));\n\n const result = await instance.delegatedUserDecrypt(\n handleContractPairs,\n unprefixHex(payload.privateKey),\n unprefixHex(payload.publicKey),\n payload.signature,\n payload.signedContractAddresses,\n payload.delegatorAddress,\n payload.delegateAddress,\n payload.startTimestamp,\n payload.durationDays,\n );\n\n const response: DelegatedUserDecryptResponseData = { clearValues: result };\n\n sendSuccess(id, type, response);\n } catch (error) {\n sendError(id, type, error);\n }\n}\n\nasync function handleRequestZKProofVerification(\n request: RequestZKProofVerificationRequest,\n): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const result = await instance.requestZKProofVerification(payload.zkProof);\n\n const transferList: Transferable[] = [\n result.inputProof.buffer as ArrayBuffer,\n ...result.handles.map((h) => h.buffer as ArrayBuffer),\n ];\n\n sendSuccess(id, type, result, transferList);\n } catch (error) {\n sendError(id, type, error);\n }\n}\n\nasync function handleGetPublicKey(request: GetPublicKeyRequest): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const result = instance.getPublicKey();\n\n const response: GetPublicKeyResponseData = { result };\n\n sendSuccess(id, type, response);\n } catch (error) {\n sendError(id, type, error);\n }\n}\n\nasync function handleGetPublicParams(request: GetPublicParamsRequest): Promise<void> {\n const { id, type, payload } = request;\n\n try {\n const instance = await getInstance(payload.chainId);\n\n const result = instance.getPublicParams(\n // oxlint-disable-next-line typescript-eslint/consistent-type-imports -- SDK loaded dynamically\n payload.bits as keyof import(\"@zama-fhe/relayer-sdk/node\").PublicParams<Uint8Array>,\n );\n\n const response: GetPublicParamsResponseData = { result };\n\n sendSuccess(id, type, response);\n } catch (error) {\n sendError(id, type, error);\n }\n}\n\nasync function handleMessage(request: WorkerRequest): Promise<void> {\n try {\n switch (request.type) {\n case \"INIT\":\n await handleInit(request);\n break;\n case \"ENCRYPT\":\n await handleEncrypt(request);\n break;\n case \"USER_DECRYPT\":\n await handleUserDecrypt(request);\n break;\n case \"PUBLIC_DECRYPT\":\n await handlePublicDecrypt(request);\n break;\n case \"GENERATE_KEYPAIR\":\n await handleGenerateKeypair(request);\n break;\n case \"CREATE_EIP712\":\n await handleCreateEIP712(request);\n break;\n case \"CREATE_DELEGATED_EIP712\":\n await handleCreateDelegatedEIP712(request);\n break;\n case \"DELEGATED_USER_DECRYPT\":\n await handleDelegatedUserDecrypt(request);\n break;\n case \"REQUEST_ZK_PROOF_VERIFICATION\":\n await handleRequestZKProofVerification(request);\n break;\n case \"GET_PUBLIC_KEY\":\n await handleGetPublicKey(request);\n break;\n case \"GET_PUBLIC_PARAMS\":\n await handleGetPublicParams(request);\n break;\n default:\n throw new Error(`Unknown request type: ${(request as WorkerRequest).type}`);\n }\n } catch (error) {\n sendError(request.id, request.type, error);\n }\n}\n\nport.on(\"message\", (request: WorkerRequest) => {\n void handleMessage(request);\n});\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { A as
|
|
2
|
-
import { A as UnshieldPhase2StartedEvent, C as SetOperatorSubmittedEvent, D as TransferFromSubmittedEvent, E as TransactionOperation, F as ZamaSDKEventListener, J as UnwrapRequestedEvent, L as ZamaSDKEvents, M as UnwrapSubmittedEvent, N as ZamaSDKEvent, O as TransferSubmittedEvent, P as ZamaSDKEventInput, S as RevokeDelegationSubmittedEvent, T as TransactionErrorEvent, U as OnChainEvent, V as ConfidentialTransferEvent, Y as WrapEvent, _ as DelegationSubmittedEvent, a as ZamaConfig, b as EncryptStartEvent, f as ApproveUnderlyingSubmittedEvent, g as DecryptStartEvent, h as DecryptErrorEvent, j as UnshieldPhase2SubmittedEvent, k as UnshieldPhase1SubmittedEvent, m as DecryptEndEvent, p as BaseEvent, q as UnwrapFinalizedEvent, v as EncryptEndEvent, w as ShieldSubmittedEvent, x as FinalizeUnwrapSubmittedEvent, y as EncryptErrorEvent } from "../types-
|
|
3
|
-
import { $ as DecryptResult, at as QueryFactoryOptions,
|
|
1
|
+
import { A as ShieldCallbacks, B as RawLog, D as ShieldPath, E as ShieldOptions, F as GenericSigner, H as TransactionResult, I as WalletAccount, L as WalletAccountChange, M as UnshieldCallbacks, N as GenericStorage, O as TransferOptions, R as WalletAccountListener, T as ApprovalStrategy, V as TransactionReceipt, c as DelegatedUserDecryptParams, d as EncryptParams, f as EncryptResult, g as PublicDecryptResult, j as TransferCallbacks, k as UnshieldOptions, l as EIP712TypedData, n as RelayerSDK, o as TransportKeyPair, p as EncryptedValue, s as ClearValue, u as EncryptInput, x as UserDecryptParams } from "../relayer-cleartext-CSeMlmGO.js";
|
|
2
|
+
import { A as UnshieldPhase2StartedEvent, C as SetOperatorSubmittedEvent, D as TransferFromSubmittedEvent, E as TransactionOperation, F as ZamaSDKEventListener, J as UnwrapRequestedEvent, L as ZamaSDKEvents, M as UnwrapSubmittedEvent, N as ZamaSDKEvent, O as TransferSubmittedEvent, P as ZamaSDKEventInput, S as RevokeDelegationSubmittedEvent, T as TransactionErrorEvent, U as OnChainEvent, V as ConfidentialTransferEvent, Y as WrapEvent, _ as DelegationSubmittedEvent, a as ZamaConfig, b as EncryptStartEvent, f as ApproveUnderlyingSubmittedEvent, g as DecryptStartEvent, h as DecryptErrorEvent, j as UnshieldPhase2SubmittedEvent, k as UnshieldPhase1SubmittedEvent, m as DecryptEndEvent, p as BaseEvent, q as UnwrapFinalizedEvent, v as EncryptEndEvent, w as ShieldSubmittedEvent, x as FinalizeUnwrapSubmittedEvent, y as EncryptErrorEvent } from "../types-Gn5MeDsr.js";
|
|
3
|
+
import { $ as DecryptResult, at as QueryFactoryOptions, c as BatchDecryptAsOptions, ct as TokenWrapperPairWithMetadata, et as EncryptedInput, i as WrappersRegistry, it as MutationFactoryOptions, l as Token, nt as SignerQueryContext, o as WrappedToken, ot as PaginatedResult, rt as zamaQueryKeys, s as BatchBalancesResult, st as TokenWrapperPair, t as ZamaSDK, tt as decryptValuesQueryOptions } from "../index-C1Mtc8Rw.js";
|
|
4
4
|
import { Address, Hex } from "viem";
|
|
5
5
|
|
|
6
6
|
//#region src/query/utils.d.ts
|
|
@@ -47,6 +47,7 @@ declare function invalidateAfterUnwrap(queryClient: QueryClientLike, tokenAddres
|
|
|
47
47
|
declare function invalidateBalanceQueries(queryClient: QueryClientLike, tokenAddress: Address): void;
|
|
48
48
|
declare function invalidateAfterShield(queryClient: QueryClientLike, tokenAddress: Address): void;
|
|
49
49
|
declare function invalidateAfterUnshield(queryClient: QueryClientLike, tokenAddress: Address): void;
|
|
50
|
+
declare function invalidateAfterUnshieldSettled(queryClient: QueryClientLike, tokenAddress: Address): void;
|
|
50
51
|
declare function invalidateAfterTransfer(queryClient: QueryClientLike, tokenAddress: Address): void;
|
|
51
52
|
declare function invalidateAfterApproveUnderlying(queryClient: QueryClientLike, tokenAddress: Address): void;
|
|
52
53
|
declare function invalidateAfterSetOperator(queryClient: QueryClientLike, tokenAddress: Address): void;
|
|
@@ -109,6 +110,20 @@ interface UnderlyingAllowanceQueryConfig {
|
|
|
109
110
|
}
|
|
110
111
|
declare function underlyingAllowanceQueryOptions(sdk: ZamaSDK, tokenAddress: Address, config: UnderlyingAllowanceQueryConfig): QueryFactoryOptions<bigint, Error, bigint, ReturnType<typeof zamaQueryKeys.underlyingAllowance.scope>>;
|
|
111
112
|
//#endregion
|
|
113
|
+
//#region src/query/pending-unshield.d.ts
|
|
114
|
+
interface PendingUnshieldQueryConfig {
|
|
115
|
+
query?: Record<string, unknown>;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Query options for reading the unwrap tx hash of an unshield that was
|
|
119
|
+
* interrupted between its two phases (returns `null` if none is pending).
|
|
120
|
+
*
|
|
121
|
+
* Backed by {@link ZamaSDK} storage via `WrappedToken.getPendingUnshield()`.
|
|
122
|
+
* `staleTime: 0` so the value reflects storage on mount; the unshield/unwrap
|
|
123
|
+
* mutations also invalidate this key on success.
|
|
124
|
+
*/
|
|
125
|
+
declare function pendingUnshieldQueryOptions(sdk: ZamaSDK, tokenAddress: Address, config?: PendingUnshieldQueryConfig): QueryFactoryOptions<Hex | null, Error, Hex | null, ReturnType<typeof zamaQueryKeys.pendingUnshield.token>>;
|
|
126
|
+
//#endregion
|
|
112
127
|
//#region src/query/confidential-is-operator.d.ts
|
|
113
128
|
interface ConfidentialIsOperatorQueryConfig {
|
|
114
129
|
holder?: Address;
|
|
@@ -198,6 +213,16 @@ interface ConfidentialTransferParams extends TransferOptions {
|
|
|
198
213
|
}
|
|
199
214
|
declare function confidentialTransferMutationOptions(token: Token): MutationFactoryOptions<readonly ["zama.confidentialTransfer", Address], ConfidentialTransferParams, TransactionResult>;
|
|
200
215
|
//#endregion
|
|
216
|
+
//#region src/query/transfer-and-call.d.ts
|
|
217
|
+
/** Variables for {@link confidentialTransferAndCallMutationOptions}. */
|
|
218
|
+
interface ConfidentialTransferAndCallParams extends TransferOptions {
|
|
219
|
+
to: Address;
|
|
220
|
+
amount: bigint;
|
|
221
|
+
/** Opaque bytes forwarded to the recipient's ERC-7984 receiver hook. */
|
|
222
|
+
data: Hex;
|
|
223
|
+
}
|
|
224
|
+
declare function confidentialTransferAndCallMutationOptions(token: Token): MutationFactoryOptions<readonly ["zama.confidentialTransferAndCall", Address], ConfidentialTransferAndCallParams, TransactionResult>;
|
|
225
|
+
//#endregion
|
|
201
226
|
//#region src/query/transfer-from.d.ts
|
|
202
227
|
/** Variables for {@link confidentialTransferFromMutationOptions}. */
|
|
203
228
|
interface ConfidentialTransferFromParams {
|
|
@@ -209,6 +234,19 @@ interface ConfidentialTransferFromParams {
|
|
|
209
234
|
}
|
|
210
235
|
declare function confidentialTransferFromMutationOptions(token: Token): MutationFactoryOptions<readonly ["zama.confidentialTransferFrom", Address], ConfidentialTransferFromParams, TransactionResult>;
|
|
211
236
|
//#endregion
|
|
237
|
+
//#region src/query/transfer-from-and-call.d.ts
|
|
238
|
+
/** Variables for {@link confidentialTransferFromAndCallMutationOptions}. */
|
|
239
|
+
interface ConfidentialTransferFromAndCallParams {
|
|
240
|
+
from: Address;
|
|
241
|
+
to: Address;
|
|
242
|
+
amount: bigint;
|
|
243
|
+
/** Opaque bytes forwarded to the recipient's ERC-7984 receiver hook. */
|
|
244
|
+
data: Hex;
|
|
245
|
+
/** Optional progress callbacks for the multi-step transfer flow. */
|
|
246
|
+
callbacks?: TransferCallbacks;
|
|
247
|
+
}
|
|
248
|
+
declare function confidentialTransferFromAndCallMutationOptions(token: Token): MutationFactoryOptions<readonly ["zama.confidentialTransferFromAndCall", Address], ConfidentialTransferFromAndCallParams, TransactionResult>;
|
|
249
|
+
//#endregion
|
|
212
250
|
//#region src/query/set-operator.d.ts
|
|
213
251
|
/** Variables for {@link confidentialSetOperatorMutationOptions}. */
|
|
214
252
|
interface ConfidentialSetOperatorParams {
|
|
@@ -338,5 +376,5 @@ interface DelegationStatusQueryConfig {
|
|
|
338
376
|
}
|
|
339
377
|
declare function delegationStatusQueryOptions(sdk: ZamaSDK, config: DelegationStatusQueryConfig): QueryFactoryOptions<DelegationStatusData, Error, DelegationStatusData, ReturnType<typeof zamaQueryKeys.delegationStatus.scope>>;
|
|
340
378
|
//#endregion
|
|
341
|
-
export { type ApprovalStrategy, type ApproveUnderlyingParams, type ApproveUnderlyingSubmittedEvent, type BaseEvent, type BatchBalancesResult, type BatchDecryptAsOptions, type BatchDecryptBalancesAsParams, type ClearValue, type ConfidentialBalanceQueryConfig, type ConfidentialBalancesQueryConfig, type ConfidentialIsOperatorQueryConfig, type ConfidentialSetOperatorParams, type ConfidentialTokenAddressQueryConfig, type ConfidentialTransferEvent, type ConfidentialTransferFromParams, type ConfidentialTransferParams, type DecryptBalanceAsParams, type DecryptEndEvent, type DecryptErrorEvent, type EncryptedInput as DecryptInput, type PublicDecryptResult as DecryptPublicValuesResult, type DecryptResult, type DecryptStartEvent, type UserDecryptParams as DecryptValuesParams, type DelegateDecryptionParams, type DelegatedDecryptValuesMutationParams, type DelegatedUserDecryptParams as DelegatedDecryptValuesParams, type DelegationStatusData, type DelegationStatusQueryConfig, type DelegationSubmittedEvent, type EIP712TypedData, type EncryptEndEvent, type EncryptErrorEvent, type EncryptInput, type EncryptParams, type EncryptResult, type EncryptStartEvent, type EncryptedValue, type FinalizeUnwrapParams, type FinalizeUnwrapSubmittedEvent, type GenericSigner, type GenericStorage, type HasPermitQueryConfig, type IsConfidentialQueryConfig, type IsConfidentialTokenValidQueryConfig, type ListPairsQueryConfig, type MutationFactoryOptions, type OnChainEvent, type QueryClientLike, type QueryFactoryOptions, type QueryFilterLike, type QueryLike, type RawLog, type RelayerSDK, type ResumeUnshieldParams, type RevokeDelegationParams, type RevokeDelegationSubmittedEvent, type SetOperatorSubmittedEvent, type ShieldCallbacks, type ShieldOptions, type ShieldParams, type ShieldPath, type ShieldSubmittedEvent, type StrippedQueryOptionKeys, type Token, type TokenAddressQueryConfig, type TokenMetadata, type TokenMetadataQueryConfig, type TokenPairQueryConfig, type TokenPairsSliceQueryConfig, type TotalSupplyQueryConfig, type TransactionErrorEvent, type TransactionOperation, type TransactionReceipt, type TransactionResult, type TransferCallbacks, type TransferFromSubmittedEvent, type TransferOptions, type TransferSubmittedEvent, type TransportKeyPair, type UnderlyingAllowanceQueryConfig, type UnshieldAllParams, type UnshieldCallbacks, type UnshieldOptions, type UnshieldParams, type UnshieldPhase1SubmittedEvent, type UnshieldPhase2StartedEvent, type UnshieldPhase2SubmittedEvent, type UnwrapFinalizedEvent, type UnwrapParams, type UnwrapRequestedEvent, type UnwrapSubmittedEvent, type WalletAccount, type WalletAccountChange, type WalletAccountListener, type WrapEvent, type WrappedToken, type WrapperDiscoveryQueryConfig, type WrappersRegistryQueryConfig, type ZamaConfig, type ZamaSDK, type ZamaSDKEvent, type ZamaSDKEventInput, type ZamaSDKEventListener, ZamaSDKEvents, approveUnderlyingMutationOptions, batchDecryptBalancesAsMutationOptions, clearCredentialsMutationOptions, confidentialBalanceQueryOptions, confidentialBalancesQueryOptions, confidentialIsOperatorQueryOptions, confidentialSetOperatorMutationOptions, confidentialTokenAddressQueryOptions, confidentialTransferFromMutationOptions, confidentialTransferMutationOptions, decryptBalanceAsMutationOptions, decryptPublicValuesMutationOptions, decryptValuesQueryOptions, delegateDecryptionMutationOptions, delegatedDecryptValuesMutationOptions, delegationStatusQueryOptions, encryptMutationOptions, filterQueryOptions, finalizeUnwrapMutationOptions, grantPermitMutationOptions, hasPermitQueryOptions, hashFn, invalidateAfterApproveUnderlying, invalidateAfterSetOperator, invalidateAfterShield, invalidateAfterTransfer, invalidateAfterUnshield, invalidateAfterUnwrap, invalidateBalanceQueries, invalidateWagmiBalanceQueries, invalidateWalletLifecycleQueries, isConfidentialQueryOptions, isConfidentialTokenValidQueryOptions, isWrapperQueryOptions, listPairsQueryOptions, resumeUnshieldMutationOptions, revokeDelegationMutationOptions, revokePermitsMutationOptions, shieldMutationOptions, tokenAddressQueryOptions, tokenMetadataQueryOptions, tokenPairQueryOptions, tokenPairsLengthQueryOptions, tokenPairsQueryOptions, tokenPairsSliceQueryOptions, totalSupplyQueryOptions, underlyingAllowanceQueryOptions, unshieldAllMutationOptions, unshieldMutationOptions, unwrapAllMutationOptions, unwrapMutationOptions, wrapperDiscoveryQueryOptions, zamaQueryKeys };
|
|
379
|
+
export { type ApprovalStrategy, type ApproveUnderlyingParams, type ApproveUnderlyingSubmittedEvent, type BaseEvent, type BatchBalancesResult, type BatchDecryptAsOptions, type BatchDecryptBalancesAsParams, type ClearValue, type ConfidentialBalanceQueryConfig, type ConfidentialBalancesQueryConfig, type ConfidentialIsOperatorQueryConfig, type ConfidentialSetOperatorParams, type ConfidentialTokenAddressQueryConfig, type ConfidentialTransferAndCallParams, type ConfidentialTransferEvent, type ConfidentialTransferFromAndCallParams, type ConfidentialTransferFromParams, type ConfidentialTransferParams, type DecryptBalanceAsParams, type DecryptEndEvent, type DecryptErrorEvent, type EncryptedInput as DecryptInput, type PublicDecryptResult as DecryptPublicValuesResult, type DecryptResult, type DecryptStartEvent, type UserDecryptParams as DecryptValuesParams, type DelegateDecryptionParams, type DelegatedDecryptValuesMutationParams, type DelegatedUserDecryptParams as DelegatedDecryptValuesParams, type DelegationStatusData, type DelegationStatusQueryConfig, type DelegationSubmittedEvent, type EIP712TypedData, type EncryptEndEvent, type EncryptErrorEvent, type EncryptInput, type EncryptParams, type EncryptResult, type EncryptStartEvent, type EncryptedValue, type FinalizeUnwrapParams, type FinalizeUnwrapSubmittedEvent, type GenericSigner, type GenericStorage, type HasPermitQueryConfig, type IsConfidentialQueryConfig, type IsConfidentialTokenValidQueryConfig, type ListPairsQueryConfig, type MutationFactoryOptions, type OnChainEvent, type PendingUnshieldQueryConfig, type QueryClientLike, type QueryFactoryOptions, type QueryFilterLike, type QueryLike, type RawLog, type RelayerSDK, type ResumeUnshieldParams, type RevokeDelegationParams, type RevokeDelegationSubmittedEvent, type SetOperatorSubmittedEvent, type ShieldCallbacks, type ShieldOptions, type ShieldParams, type ShieldPath, type ShieldSubmittedEvent, type StrippedQueryOptionKeys, type Token, type TokenAddressQueryConfig, type TokenMetadata, type TokenMetadataQueryConfig, type TokenPairQueryConfig, type TokenPairsSliceQueryConfig, type TotalSupplyQueryConfig, type TransactionErrorEvent, type TransactionOperation, type TransactionReceipt, type TransactionResult, type TransferCallbacks, type TransferFromSubmittedEvent, type TransferOptions, type TransferSubmittedEvent, type TransportKeyPair, type UnderlyingAllowanceQueryConfig, type UnshieldAllParams, type UnshieldCallbacks, type UnshieldOptions, type UnshieldParams, type UnshieldPhase1SubmittedEvent, type UnshieldPhase2StartedEvent, type UnshieldPhase2SubmittedEvent, type UnwrapFinalizedEvent, type UnwrapParams, type UnwrapRequestedEvent, type UnwrapSubmittedEvent, type WalletAccount, type WalletAccountChange, type WalletAccountListener, type WrapEvent, type WrappedToken, type WrapperDiscoveryQueryConfig, type WrappersRegistryQueryConfig, type ZamaConfig, type ZamaSDK, type ZamaSDKEvent, type ZamaSDKEventInput, type ZamaSDKEventListener, ZamaSDKEvents, approveUnderlyingMutationOptions, batchDecryptBalancesAsMutationOptions, clearCredentialsMutationOptions, confidentialBalanceQueryOptions, confidentialBalancesQueryOptions, confidentialIsOperatorQueryOptions, confidentialSetOperatorMutationOptions, confidentialTokenAddressQueryOptions, confidentialTransferAndCallMutationOptions, confidentialTransferFromAndCallMutationOptions, confidentialTransferFromMutationOptions, confidentialTransferMutationOptions, decryptBalanceAsMutationOptions, decryptPublicValuesMutationOptions, decryptValuesQueryOptions, delegateDecryptionMutationOptions, delegatedDecryptValuesMutationOptions, delegationStatusQueryOptions, encryptMutationOptions, filterQueryOptions, finalizeUnwrapMutationOptions, grantPermitMutationOptions, hasPermitQueryOptions, hashFn, invalidateAfterApproveUnderlying, invalidateAfterSetOperator, invalidateAfterShield, invalidateAfterTransfer, invalidateAfterUnshield, invalidateAfterUnshieldSettled, invalidateAfterUnwrap, invalidateBalanceQueries, invalidateWagmiBalanceQueries, invalidateWalletLifecycleQueries, isConfidentialQueryOptions, isConfidentialTokenValidQueryOptions, isWrapperQueryOptions, listPairsQueryOptions, pendingUnshieldQueryOptions, resumeUnshieldMutationOptions, revokeDelegationMutationOptions, revokePermitsMutationOptions, shieldMutationOptions, tokenAddressQueryOptions, tokenMetadataQueryOptions, tokenPairQueryOptions, tokenPairsLengthQueryOptions, tokenPairsQueryOptions, tokenPairsSliceQueryOptions, totalSupplyQueryOptions, underlyingAllowanceQueryOptions, unshieldAllMutationOptions, unshieldMutationOptions, unwrapAllMutationOptions, unwrapMutationOptions, wrapperDiscoveryQueryOptions, zamaQueryKeys };
|
|
342
380
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/query/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{D as e,O as t,a as n,b as r,d as i,f as a,h as o,i as s,j as c,n as l,o as u,r as d,s as f,t as ee,v as te,x as p}from"../wrappers-registry-BWWG0aze.js";import{d as m,l as h,o as g,t as _}from"../token-TQ-VFHS4.js";import{n as v}from"../error-W1N-FGwV.js";import{i as y}from"../assertions-CnPIS0VN.js";import{getAddress as b,zeroAddress as x}from"viem";import{z as S}from"zod/mini";function ne(e){if(!C(e))return!1;let t=e.constructor;if(t===void 0)return!0;let n=t.prototype;return!(!C(n)||!n.hasOwnProperty(`isPrototypeOf`))}function C(e){return Object.prototype.toString.call(e)===`[object Object]`}function w(e){let{gcTime:t,staleTime:n,enabled:r,select:i,refetchInterval:a,refetchOnMount:o,refetchOnWindowFocus:s,refetchOnReconnect:c,retry:l,retryDelay:u,retryOnMount:d,queryFn:f,queryKey:ee,queryKeyHashFn:te,initialData:p,initialDataUpdatedAt:m,placeholderData:h,structuralSharing:g,throwOnError:_,meta:v,query:y,pollingInterval:b,...x}=e;return x}function T(e){return JSON.stringify(e,(e,t)=>ne(t)?Object.keys(t).toSorted().reduce((e,n)=>(e[n]=t[n],e),{}):typeof t==`bigint`?t.toString():t)}const E=e=>e.map(e=>b(e)),D=e=>e===void 0?void 0:b(e),O=e=>e?{walletAddress:b(e.address),walletChainId:e.chainId}:{},k={confidentialBalance:{all:[`zama.confidentialBalance`],token:e=>[`zama.confidentialBalance`,{tokenAddress:b(e)}],owner:(e,t,n)=>[`zama.confidentialBalance`,{tokenAddress:b(e),...O(n),...t?{owner:b(t)}:{}}]},confidentialBalances:{all:[`zama.confidentialBalances`],tokens:(e,t,n)=>[`zama.confidentialBalances`,{tokenAddresses:E(e),...O(n),...t?{owner:b(t)}:{}}]},tokenMetadata:{all:[`zama.tokenMetadata`],token:e=>[`zama.tokenMetadata`,{tokenAddress:b(e)}]},isConfidential:{all:[`zama.isConfidential`],token:e=>[`zama.isConfidential`,{tokenAddress:b(e)}]},isWrapper:{all:[`zama.isWrapper`],token:e=>[`zama.isWrapper`,{tokenAddress:b(e)}]},wrapperDiscovery:{all:[`zama.wrapperDiscovery`],token:(e,t,n)=>{let r=D(e),i=D(t),a=D(n);return[`zama.wrapperDiscovery`,{...r?{tokenAddress:r}:{},...i?{erc20Address:i}:{},...a?{registryAddress:a}:{}}]}},underlyingAllowance:{all:[`zama.underlyingAllowance`],token:e=>[`zama.underlyingAllowance`,{tokenAddress:b(e)}],scope:(e,t)=>[`zama.underlyingAllowance`,{tokenAddress:b(e),...t?{owner:b(t)}:{}}]},confidentialIsOperator:{all:[`zama.confidentialIsOperator`],token:e=>{let t=D(e);return[`zama.confidentialIsOperator`,t?{tokenAddress:t}:{}]},scope:(e,t,n)=>{let r=D(e),i=D(t),a=D(n);return[`zama.confidentialIsOperator`,{...r?{tokenAddress:r}:{},...i?{holder:i}:{},...a?{spender:a}:{}}]}},totalSupply:{all:[`zama.totalSupply`],token:e=>[`zama.totalSupply`,{tokenAddress:b(e)}]},hasPermit:{all:[`zama.hasPermit`],scope:(e,t)=>[`zama.hasPermit`,{...O(t),contractAddresses:E(e).toSorted()}]},delegationStatus:{all:[`zama.delegationStatus`],contract:e=>{let t=D(e);return[`zama.delegationStatus`,t?{contractAddress:t}:{}]},scope:(e,t,n)=>{let r=D(e),i=D(t),a=D(n);return[`zama.delegationStatus`,{...r?{contractAddress:r}:{},...i?{delegatorAddress:i}:{},...a?{delegateAddress:a}:{}}]}},decryption:{all:[`zama.decryption`],encryptedValue:(e,t)=>[`zama.decryption`,{encryptedValue:e,...t===void 0?{}:{contractAddress:b(t)}}],encryptedInputs:(e,t)=>[`zama.decryption`,{...O(t),encryptedInputs:[...e].toSorted((e,t)=>e.encryptedValue.localeCompare(t.encryptedValue)).map(e=>({encryptedValue:e.encryptedValue,contractAddress:b(e.contractAddress)}))}]},wrappersRegistry:{all:[`zama.wrappersRegistry`],chainId:()=>[`zama.wrappersRegistry`,{type:`chainId`}],tokenPairs:e=>[`zama.wrappersRegistry`,{type:`tokenPairs`,registryAddress:b(e)}],confidentialTokenAddress:(e,t)=>[`zama.wrappersRegistry`,{type:`confidentialTokenAddress`,registryAddress:b(e),tokenAddress:b(t)}],tokenAddress:(e,t)=>[`zama.wrappersRegistry`,{type:`tokenAddress`,registryAddress:b(e),confidentialTokenAddress:b(t)}],tokenPairsLength:e=>[`zama.wrappersRegistry`,{type:`tokenPairsLength`,registryAddress:b(e)}],tokenPairsSlice:(e,t,n)=>[`zama.wrappersRegistry`,{type:`tokenPairsSlice`,registryAddress:b(e),fromIndex:t,toIndex:n}],tokenPair:(e,t)=>[`zama.wrappersRegistry`,{type:`tokenPair`,registryAddress:b(e),index:t}],isConfidentialTokenValid:(e,t)=>[`zama.wrappersRegistry`,{type:`isConfidentialTokenValid`,registryAddress:b(e),confidentialTokenAddress:b(t)}],listPairs:(e,t,n,r)=>[`zama.wrappersRegistry`,{type:`listPairs`,registryAddress:b(e),page:t,pageSize:n,metadata:r}]}};function A(e,t){e.invalidateQueries({queryKey:k.underlyingAllowance.token(t)})}function j(e,t){M(e,t),A(e,t),W(e)}function M(e,t){e.invalidateQueries({queryKey:k.confidentialBalance.token(t)}),e.invalidateQueries({queryKey:k.confidentialBalances.all})}function N(e,t){M(e,t),A(e,t),W(e)}function P(e,t){M(e,t),A(e,t),W(e)}function F(e,t){M(e,t)}function I(e,t){A(e,t)}function L(e,t){e.invalidateQueries({queryKey:k.confidentialIsOperator.token(t)})}function R(e){return Array.isArray(e.queryKey)&&typeof e.queryKey[0]==`string`?e.queryKey[0].startsWith(`zama.`):!1}const z=S.enum([`balanceOf`,`confidentialBalanceOf`]),B=S.object({functionName:z}),V=S.object({contracts:S.array(S.unknown())});function H(e){if(B.safeParse(e).success)return!0;let t=V.safeParse(e);return t.success&&t.data.contracts.some(e=>B.safeParse(e).success)}function U(e){return Array.isArray(e.queryKey)&&e.queryKey.some(H)}function W(e){e.invalidateQueries({predicate:U})}function G(e){e.removeQueries({queryKey:k.decryption.all}),e.removeQueries({queryKey:k.hasPermit.all}),e.invalidateQueries({predicate:R}),W(e)}function K(e,t,n){let i=k.tokenMetadata.token(t);return{...w(n?.query??{}),queryKey:i,queryFn:async t=>{let[,{tokenAddress:n}]=t.queryKey,[i,a,o]=await Promise.all([e.provider.readContract(r(n)),e.provider.readContract(p(n)),e.provider.readContract(te(n))]);return{name:i,symbol:a,decimals:o}},staleTime:1/0,enabled:n?.query?.enabled!==!1}}function q(e,t,n){let r=k.isConfidential.token(t);return{...w(n?.query??{}),queryKey:r,queryFn:async t=>{let[,{tokenAddress:n}]=t.queryKey;try{return await e.provider.readContract(i(n))}catch(e){if(v(e))return!1;throw e}},staleTime:1/0,enabled:n?.query?.enabled!==!1}}function J(e,t,n){let r=k.isWrapper.token(t);return{...w(n?.query??{}),queryKey:r,queryFn:async t=>{let[,{tokenAddress:n}]=t.queryKey;try{return await e.provider.readContract(a(n))}catch(e){if(v(e))return!1;throw e}},staleTime:1/0,enabled:n?.query?.enabled!==!1}}function Y(t,n,r){let i=k.totalSupply.token(n);return{...w(r?.query??{}),queryKey:i,queryFn:async n=>{let[,{tokenAddress:r}]=n.queryKey;return t.provider.readContract(e(r))},staleTime:3e4,enabled:r?.query?.enabled!==!1}}function X(e,t){let n=k.wrapperDiscovery.token(t.tokenAddress,t.erc20Address,t.registryAddress);return{...w(t.query??{}),queryKey:n,queryFn:async t=>{let[,{erc20Address:n}]=t.queryKey;y(n,`wrapperDiscoveryQueryOptions: erc20Address`);let r=await e.getConfidentialToken(n);return r?r.confidentialTokenAddress:null},staleTime:1/0,enabled:!!(t.tokenAddress&&t.erc20Address&&t.registryAddress)&&t.query?.enabled!==!1}}function Z(e,t,n){let r=n.owner,i=n.query?.enabled!==!1,a=k.underlyingAllowance.scope(t,r);return{...w(n.query??{}),queryKey:a,queryFn:async t=>{let[,{tokenAddress:n,owner:r}]=t.queryKey;y(r,`underlyingAllowanceQueryOptions: owner`);let i=await e.provider.readContract(c(n));return e.provider.readContract(o(i,r,n))},staleTime:3e4,enabled:!!r&&i}}function re(e,n,r){let i=r.holder,a=r.spender,o=r.query?.enabled!==!1,s=k.confidentialIsOperator.scope(n,i,a);return{...w(r.query??{}),queryKey:s,queryFn:async n=>{let[,{tokenAddress:r,holder:i,spender:a}]=n.queryKey;return y(r,`confidentialIsOperatorQueryOptions: tokenAddress`),y(i,`confidentialIsOperatorQueryOptions: holder`),y(a,`confidentialIsOperatorQueryOptions: spender`),e.provider.readContract(t(r,i,a))},staleTime:3e4,enabled:!!(n&&i&&a)&&o}}function ie(e,t,n={}){let r=t.query??{};return{...w(r),queryKey:k.confidentialBalance.owner(t.tokenAddress,t.account,n.walletAccount),queryFn:async t=>{let[,{owner:n}]=t.queryKey;return y(n,`confidentialBalanceQueryOptions: owner`),e.balanceOf(n)},enabled:!!t.account&&n.walletAccount!==void 0&&r?.enabled!==!1}}function ae(e,t,n={}){let r=t?.account,i=n.walletAccount,a=t?.query??{},o=e.map(e=>e.address);return{...w(a),queryKey:k.confidentialBalances.tokens(o,r,i),queryFn:async t=>{let[,{owner:n}]=t.queryKey;return y(n,`confidentialBalancesQueryOptions: owner`),_.batchBalancesOf(e,n)},enabled:!!r&&e.length>0&&i!==void 0&&a?.enabled!==!1}}const Q=86400*1e3;function oe(e,t){let n=!!t.registryAddress&&t.query?.enabled!==!1,r=k.wrappersRegistry.tokenPairs(t.registryAddress??x);return{...w(t.query??{}),queryKey:r,queryFn:async t=>{let[,{registryAddress:n}]=t.queryKey;return e.provider.readContract(s(n))},staleTime:Q,enabled:n}}function se(e,t){let n=!!t.registryAddress&&!!t.tokenAddress&&t.query?.enabled!==!1,r=k.wrappersRegistry.confidentialTokenAddress(t.registryAddress??x,t.tokenAddress??x);return{...w(t.query??{}),queryKey:r,queryFn:async t=>{let[,{registryAddress:n,tokenAddress:r}]=t.queryKey;return e.provider.readContract(ee(n,r))},staleTime:Q,enabled:n}}function ce(e,t){let n=!!t.registryAddress&&!!t.confidentialTokenAddress&&t.query?.enabled!==!1,r=k.wrappersRegistry.tokenAddress(t.registryAddress??x,t.confidentialTokenAddress??x);return{...w(t.query??{}),queryKey:r,queryFn:async t=>{let[,{registryAddress:n,confidentialTokenAddress:r}]=t.queryKey;return e.provider.readContract(l(n,r))},staleTime:Q,enabled:n}}function le(e,t){let r=!!t.registryAddress&&t.query?.enabled!==!1,i=k.wrappersRegistry.tokenPairsLength(t.registryAddress??x);return{...w(t.query??{}),queryKey:i,queryFn:async t=>{let[,{registryAddress:r}]=t.queryKey;return e.provider.readContract(n(r))},staleTime:Q,enabled:r}}function ue(e,t){let n=!!t.registryAddress&&t.fromIndex!==void 0&&t.toIndex!==void 0&&t.query?.enabled!==!1,r=k.wrappersRegistry.tokenPairsSlice(t.registryAddress??x,String(t.fromIndex??0n),String(t.toIndex??0n));return{...w(t.query??{}),queryKey:r,queryFn:async t=>{let[,{registryAddress:n,fromIndex:r,toIndex:i}]=t.queryKey;return e.provider.readContract(u(n,BigInt(r),BigInt(i)))},staleTime:Q,enabled:n}}function de(e,t){let n=!!t.registryAddress&&t.index!==void 0&&t.query?.enabled!==!1,r=k.wrappersRegistry.tokenPair(t.registryAddress??x,String(t.index??0n));return{...w(t.query??{}),queryKey:r,queryFn:async t=>{let[,{registryAddress:n,index:r}]=t.queryKey;return e.provider.readContract(d(n,BigInt(r)))},staleTime:Q,enabled:n}}function fe(e,t){let n=!!t.registryAddress&&!!t.confidentialTokenAddress&&t.query?.enabled!==!1,r=k.wrappersRegistry.isConfidentialTokenValid(t.registryAddress??x,t.confidentialTokenAddress??x);return{...w(t.query??{}),queryKey:r,queryFn:async t=>{let[,{registryAddress:n,confidentialTokenAddress:r}]=t.queryKey;return e.provider.readContract(f(n,r))},staleTime:Q,enabled:n}}function pe(e,t){let n=!!t.registryAddress&&t.query?.enabled!==!1,r=k.wrappersRegistry.listPairs(t.registryAddress??x,t.page??1,t.pageSize??100,t.metadata??!1);return{...w(t.query??{}),queryKey:r,queryFn:async t=>{let[,{page:n,pageSize:r,metadata:i}]=t.queryKey;return e.listPairs({page:n,pageSize:r,metadata:i})},staleTime:e.ttlMs,enabled:n}}function me(e){return{mutationKey:[`zama.shield`,e.address],mutationFn:async({amount:t,...n})=>e.shield(t,n)}}function he(e){return{mutationKey:[`zama.confidentialTransfer`,e.address],mutationFn:async({to:t,amount:n,...r})=>e.confidentialTransfer(t,n,r)}}function ge(e){return{mutationKey:[`zama.confidentialTransferFrom`,e.address],mutationFn:async({from:t,to:n,amount:r,callbacks:i})=>e.confidentialTransferFrom(t,n,r,i)}}function _e(e){return{mutationKey:[`zama.confidentialSetOperator`,e.address],mutationFn:async({operator:t,until:n})=>e.setOperator(t,n)}}function ve(e){return{mutationKey:[`zama.approveUnderlying`,e.address],mutationFn:async({amount:t})=>e.approveUnderlying(t)}}function ye(e){return{mutationKey:[`zama.unshield`,e.address],mutationFn:async({amount:t,...n})=>e.unshield(t,n)}}function be(e){return{mutationKey:[`zama.unshieldAll`,e.address],mutationFn:async t=>e.unshieldAll(t||void 0)}}function xe(e){return{mutationKey:[`zama.resumeUnshield`,e.address],mutationFn:async({unwrapTxHash:t,...n})=>e.resumeUnshield(t,n)}}function Se(e){return{mutationKey:[`zama.unwrap`,e.address],mutationFn:async({amount:t})=>e.unwrap(t)}}function Ce(e){return{mutationKey:[`zama.unwrapAll`,e.address],mutationFn:async()=>e.unwrapAll()}}function we(e){return{mutationKey:[`zama.finalizeUnwrap`,e.address],mutationFn:async({unwrapRequestId:t})=>e.finalizeUnwrap(t)}}function Te(e){return{mutationKey:[`zama.encrypt`],mutationFn:async t=>e.encrypt(t)}}function Ee(e){return{mutationKey:[`zama.delegatedDecryptValues`],mutationFn:async t=>e.decryption.delegatedDecryptValues(t.encryptedInputs,t.delegatorAddress)}}function De(e){return{mutationKey:[`zama.decryptPublicValues`],mutationFn:async t=>e.decryption.decryptPublicValues(t),onSuccess:(e,t,n,r)=>{for(let[t,n]of Object.entries(e.clearValues))r.client.setQueryData(k.decryption.encryptedValue(t),n)}}}function $(e){return{mutationKey:[`zama.grantPermit`],mutationFn:t=>e.permits.grantPermit(t)}}function Oe(e,t,n={}){let r=t.query?.enabled!==!1;return{...w(t?.query??{}),queryKey:k.hasPermit.scope(t.contractAddresses,n.walletAccount),queryFn:t=>{let[,{contractAddresses:n}]=t.queryKey;return e.permits.hasPermit(n)},staleTime:0,gcTime:0,refetchOnMount:`always`,refetchOnWindowFocus:!1,enabled:r&&n.walletAccount!==void 0&&t.contractAddresses.length>0}}function ke(e){return{mutationKey:[`zama.revokePermits`],mutationFn:t=>t===void 0?e.permits.revokePermits():e.permits.revokePermits(t)}}function Ae(e){return{mutationKey:[`zama.clearCredentials`],mutationFn:()=>e.permits.clear()}}function je(e,t){return{mutationKey:[`zama.delegateDecryption`,t],mutationFn:async({delegateAddress:n,expirationDate:r})=>e.delegations.delegateDecryption({contractAddress:t,delegateAddress:n,expirationDate:r})}}function Me(e,t,n={}){return{queryKey:k.decryption.encryptedInputs(t,n.walletAccount),queryFn:t=>{let[,{encryptedInputs:n}]=t.queryKey;return e.decryption.decryptValues(n)},staleTime:1/0,enabled:t.length>0&&n.walletAccount!==void 0}}function Ne(e){return{mutationKey:[`zama.decryptBalanceAs`,e.address],mutationFn:async({delegatorAddress:t,accountAddress:n})=>e.decryptBalanceAs({delegatorAddress:t,accountAddress:n})}}function Pe(e){return{mutationKey:[`zama.batchDecryptBalancesAs`,...e.map(e=>e.address)],mutationFn:async t=>_.batchDecryptBalancesAs(e,t)}}function Fe(e,t){return{mutationKey:[`zama.revokeDelegation`,t],mutationFn:async({delegateAddress:n})=>e.delegations.revokeDelegation({contractAddress:t,delegateAddress:n})}}function Ie(e,t){return{...w(t.query??{}),queryKey:k.delegationStatus.scope(t.contractAddress,t.delegatorAddress,t.delegateAddress),queryFn:async t=>{let[,{contractAddress:n,delegatorAddress:r,delegateAddress:i}]=t.queryKey;y(n,`delegationStatusQueryOptions: contractAddress`),y(r,`delegationStatusQueryOptions: delegatorAddress`),y(i,`delegationStatusQueryOptions: delegateAddress`);let a=await e.relayer.getAclAddress(),o=await e.provider.readContract(m(a,r,i,n)),s;return s=o===0n?!1:o===h?!0:o>await e.provider.getBlockTimestamp(),{isActive:s,expiryTimestamp:o}},enabled:!!(t.contractAddress&&t.delegatorAddress&&t.delegateAddress)&&t.query?.enabled!==!1}}export{g as ZamaSDKEvents,ve as approveUnderlyingMutationOptions,Pe as batchDecryptBalancesAsMutationOptions,Ae as clearCredentialsMutationOptions,ie as confidentialBalanceQueryOptions,ae as confidentialBalancesQueryOptions,re as confidentialIsOperatorQueryOptions,_e as confidentialSetOperatorMutationOptions,se as confidentialTokenAddressQueryOptions,ge as confidentialTransferFromMutationOptions,he as confidentialTransferMutationOptions,Ne as decryptBalanceAsMutationOptions,De as decryptPublicValuesMutationOptions,Me as decryptValuesQueryOptions,je as delegateDecryptionMutationOptions,Ee as delegatedDecryptValuesMutationOptions,Ie as delegationStatusQueryOptions,Te as encryptMutationOptions,w as filterQueryOptions,we as finalizeUnwrapMutationOptions,$ as grantPermitMutationOptions,Oe as hasPermitQueryOptions,T as hashFn,I as invalidateAfterApproveUnderlying,L as invalidateAfterSetOperator,N as invalidateAfterShield,F as invalidateAfterTransfer,P as invalidateAfterUnshield,j as invalidateAfterUnwrap,M as invalidateBalanceQueries,W as invalidateWagmiBalanceQueries,G as invalidateWalletLifecycleQueries,q as isConfidentialQueryOptions,fe as isConfidentialTokenValidQueryOptions,J as isWrapperQueryOptions,pe as listPairsQueryOptions,xe as resumeUnshieldMutationOptions,Fe as revokeDelegationMutationOptions,ke as revokePermitsMutationOptions,me as shieldMutationOptions,ce as tokenAddressQueryOptions,K as tokenMetadataQueryOptions,de as tokenPairQueryOptions,le as tokenPairsLengthQueryOptions,oe as tokenPairsQueryOptions,ue as tokenPairsSliceQueryOptions,Y as totalSupplyQueryOptions,Z as underlyingAllowanceQueryOptions,be as unshieldAllMutationOptions,ye as unshieldMutationOptions,Ce as unwrapAllMutationOptions,Se as unwrapMutationOptions,X as wrapperDiscoveryQueryOptions,k as zamaQueryKeys};
|
|
1
|
+
import{A as e,N as t,a as n,b as r,d as i,f as a,h as o,i as s,k as c,n as l,o as u,r as d,s as f,t as p,v as ee,x as m}from"../wrappers-registry-C1oK8Bi6.js";import{d as h,l as g,o as _,t as v}from"../token-Bt33g0zQ.js";import{d as y,i as b}from"../assertions-zYseN5Xz.js";import{getAddress as x,zeroAddress as S}from"viem";import{z as C}from"zod/mini";function te(e){if(!w(e))return!1;let t=e.constructor;if(t===void 0)return!0;let n=t.prototype;return!(!w(n)||!n.hasOwnProperty(`isPrototypeOf`))}function w(e){return Object.prototype.toString.call(e)===`[object Object]`}function T(e){let{gcTime:t,staleTime:n,enabled:r,select:i,refetchInterval:a,refetchOnMount:o,refetchOnWindowFocus:s,refetchOnReconnect:c,retry:l,retryDelay:u,retryOnMount:d,queryFn:f,queryKey:p,queryKeyHashFn:ee,initialData:m,initialDataUpdatedAt:h,placeholderData:g,structuralSharing:_,throwOnError:v,meta:y,query:b,pollingInterval:x,...S}=e;return S}function E(e){return JSON.stringify(e,(e,t)=>te(t)?Object.keys(t).toSorted().reduce((e,n)=>(e[n]=t[n],e),{}):typeof t==`bigint`?t.toString():t)}const D=e=>e.map(e=>x(e)),O=e=>e===void 0?void 0:x(e),k=e=>e?{walletAddress:x(e.address),walletChainId:e.chainId}:{},A={confidentialBalance:{all:[`zama.confidentialBalance`],token:e=>[`zama.confidentialBalance`,{tokenAddress:x(e)}],owner:(e,t,n)=>[`zama.confidentialBalance`,{tokenAddress:x(e),...k(n),...t?{owner:x(t)}:{}}]},confidentialBalances:{all:[`zama.confidentialBalances`],tokens:(e,t,n)=>[`zama.confidentialBalances`,{tokenAddresses:D(e),...k(n),...t?{owner:x(t)}:{}}]},tokenMetadata:{all:[`zama.tokenMetadata`],token:e=>[`zama.tokenMetadata`,{tokenAddress:x(e)}]},isConfidential:{all:[`zama.isConfidential`],token:e=>[`zama.isConfidential`,{tokenAddress:x(e)}]},isWrapper:{all:[`zama.isWrapper`],token:e=>[`zama.isWrapper`,{tokenAddress:x(e)}]},wrapperDiscovery:{all:[`zama.wrapperDiscovery`],token:(e,t,n)=>{let r=O(e),i=O(t),a=O(n);return[`zama.wrapperDiscovery`,{...r?{tokenAddress:r}:{},...i?{erc20Address:i}:{},...a?{registryAddress:a}:{}}]}},underlyingAllowance:{all:[`zama.underlyingAllowance`],token:e=>[`zama.underlyingAllowance`,{tokenAddress:x(e)}],scope:(e,t)=>[`zama.underlyingAllowance`,{tokenAddress:x(e),...t?{owner:x(t)}:{}}]},confidentialIsOperator:{all:[`zama.confidentialIsOperator`],token:e=>{let t=O(e);return[`zama.confidentialIsOperator`,t?{tokenAddress:t}:{}]},scope:(e,t,n)=>{let r=O(e),i=O(t),a=O(n);return[`zama.confidentialIsOperator`,{...r?{tokenAddress:r}:{},...i?{holder:i}:{},...a?{spender:a}:{}}]}},totalSupply:{all:[`zama.totalSupply`],token:e=>[`zama.totalSupply`,{tokenAddress:x(e)}]},pendingUnshield:{all:[`zama.pendingUnshield`],token:e=>[`zama.pendingUnshield`,{tokenAddress:x(e)}]},hasPermit:{all:[`zama.hasPermit`],scope:(e,t)=>[`zama.hasPermit`,{...k(t),contractAddresses:D(e).toSorted()}]},delegationStatus:{all:[`zama.delegationStatus`],contract:e=>{let t=O(e);return[`zama.delegationStatus`,t?{contractAddress:t}:{}]},scope:(e,t,n)=>{let r=O(e),i=O(t),a=O(n);return[`zama.delegationStatus`,{...r?{contractAddress:r}:{},...i?{delegatorAddress:i}:{},...a?{delegateAddress:a}:{}}]}},decryption:{all:[`zama.decryption`],encryptedValue:(e,t)=>[`zama.decryption`,{encryptedValue:e,...t===void 0?{}:{contractAddress:x(t)}}],encryptedInputs:(e,t)=>[`zama.decryption`,{...k(t),encryptedInputs:[...e].toSorted((e,t)=>e.encryptedValue.localeCompare(t.encryptedValue)).map(e=>({encryptedValue:e.encryptedValue,contractAddress:x(e.contractAddress)}))}]},wrappersRegistry:{all:[`zama.wrappersRegistry`],chainId:()=>[`zama.wrappersRegistry`,{type:`chainId`}],tokenPairs:e=>[`zama.wrappersRegistry`,{type:`tokenPairs`,registryAddress:x(e)}],confidentialTokenAddress:(e,t)=>[`zama.wrappersRegistry`,{type:`confidentialTokenAddress`,registryAddress:x(e),tokenAddress:x(t)}],tokenAddress:(e,t)=>[`zama.wrappersRegistry`,{type:`tokenAddress`,registryAddress:x(e),confidentialTokenAddress:x(t)}],tokenPairsLength:e=>[`zama.wrappersRegistry`,{type:`tokenPairsLength`,registryAddress:x(e)}],tokenPairsSlice:(e,t,n)=>[`zama.wrappersRegistry`,{type:`tokenPairsSlice`,registryAddress:x(e),fromIndex:t,toIndex:n}],tokenPair:(e,t)=>[`zama.wrappersRegistry`,{type:`tokenPair`,registryAddress:x(e),index:t}],isConfidentialTokenValid:(e,t)=>[`zama.wrappersRegistry`,{type:`isConfidentialTokenValid`,registryAddress:x(e),confidentialTokenAddress:x(t)}],listPairs:(e,t,n,r)=>[`zama.wrappersRegistry`,{type:`listPairs`,registryAddress:x(e),page:t,pageSize:n,metadata:r}]}};function j(e,t){e.invalidateQueries({queryKey:A.underlyingAllowance.token(t)})}function M(e,t){e.invalidateQueries({queryKey:A.pendingUnshield.token(t)})}function N(e,t){P(e,t),j(e,t),M(e,t),q(e)}function P(e,t){e.invalidateQueries({queryKey:A.confidentialBalance.token(t)}),e.invalidateQueries({queryKey:A.confidentialBalances.all})}function F(e,t){P(e,t),j(e,t),q(e)}function I(e,t){P(e,t),j(e,t),M(e,t),q(e)}function L(e,t){M(e,t)}function R(e,t){P(e,t)}function z(e,t){j(e,t)}function B(e,t){e.invalidateQueries({queryKey:A.confidentialIsOperator.token(t)})}function V(e){return Array.isArray(e.queryKey)&&typeof e.queryKey[0]==`string`?e.queryKey[0].startsWith(`zama.`):!1}const H=C.enum([`balanceOf`,`confidentialBalanceOf`]),U=C.object({functionName:H}),W=C.object({contracts:C.array(C.unknown())});function G(e){if(U.safeParse(e).success)return!0;let t=W.safeParse(e);return t.success&&t.data.contracts.some(e=>U.safeParse(e).success)}function K(e){return Array.isArray(e.queryKey)&&e.queryKey.some(G)}function q(e){e.invalidateQueries({predicate:K})}function J(e){e.removeQueries({queryKey:A.decryption.all}),e.removeQueries({queryKey:A.hasPermit.all}),e.invalidateQueries({predicate:V}),q(e)}function Y(e,t,n){let i=A.tokenMetadata.token(t);return{...T(n?.query??{}),queryKey:i,queryFn:async t=>{let[,{tokenAddress:n}]=t.queryKey,[i,a,o]=await Promise.all([e.provider.readContract(r(n)),e.provider.readContract(m(n)),e.provider.readContract(ee(n))]);return{name:i,symbol:a,decimals:o}},staleTime:1/0,enabled:n?.query?.enabled!==!1}}function X(e,t,n){let r=A.isConfidential.token(t);return{...T(n?.query??{}),queryKey:r,queryFn:async t=>{let[,{tokenAddress:n}]=t.queryKey;try{return await e.provider.readContract(i(n))}catch(e){if(y(e))return!1;throw e}},staleTime:1/0,enabled:n?.query?.enabled!==!1}}function Z(e,t,n){let r=A.isWrapper.token(t);return{...T(n?.query??{}),queryKey:r,queryFn:async t=>{let[,{tokenAddress:n}]=t.queryKey;try{return await e.provider.readContract(a(n))}catch(e){if(y(e))return!1;throw e}},staleTime:1/0,enabled:n?.query?.enabled!==!1}}function Q(e,t,n){let r=A.totalSupply.token(t);return{...T(n?.query??{}),queryKey:r,queryFn:async t=>{let[,{tokenAddress:n}]=t.queryKey;return e.provider.readContract(c(n))},staleTime:3e4,enabled:n?.query?.enabled!==!1}}function ne(e,t){let n=A.wrapperDiscovery.token(t.tokenAddress,t.erc20Address,t.registryAddress);return{...T(t.query??{}),queryKey:n,queryFn:async t=>{let[,{erc20Address:n}]=t.queryKey;b(n,`wrapperDiscoveryQueryOptions: erc20Address`);let r=await e.getConfidentialToken(n);return r?r.confidentialTokenAddress:null},staleTime:1/0,enabled:!!(t.tokenAddress&&t.erc20Address&&t.registryAddress)&&t.query?.enabled!==!1}}function re(e,n,r){let i=r.owner,a=r.query?.enabled!==!1,s=A.underlyingAllowance.scope(n,i);return{...T(r.query??{}),queryKey:s,queryFn:async n=>{let[,{tokenAddress:r,owner:i}]=n.queryKey;b(i,`underlyingAllowanceQueryOptions: owner`);let a=await e.provider.readContract(t(r));return e.provider.readContract(o(a,i,r))},staleTime:3e4,enabled:!!i&&a}}function ie(e,t,n){let r=A.pendingUnshield.token(t);return{...T(n?.query??{}),queryKey:r,queryFn:async t=>{let[,{tokenAddress:n}]=t.queryKey;return e.createWrappedToken(n).getPendingUnshield()},staleTime:0,enabled:n?.query?.enabled!==!1}}function ae(t,n,r){let i=r.holder,a=r.spender,o=r.query?.enabled!==!1,s=A.confidentialIsOperator.scope(n,i,a);return{...T(r.query??{}),queryKey:s,queryFn:async n=>{let[,{tokenAddress:r,holder:i,spender:a}]=n.queryKey;return b(r,`confidentialIsOperatorQueryOptions: tokenAddress`),b(i,`confidentialIsOperatorQueryOptions: holder`),b(a,`confidentialIsOperatorQueryOptions: spender`),t.provider.readContract(e(r,i,a))},staleTime:3e4,enabled:!!(n&&i&&a)&&o}}function oe(e,t,n={}){let r=t.query??{};return{...T(r),queryKey:A.confidentialBalance.owner(t.tokenAddress,t.account,n.walletAccount),queryFn:async t=>{let[,{owner:n}]=t.queryKey;return b(n,`confidentialBalanceQueryOptions: owner`),e.balanceOf(n)},enabled:!!t.account&&n.walletAccount!==void 0&&r?.enabled!==!1}}function se(e,t,n={}){let r=t?.account,i=n.walletAccount,a=t?.query??{},o=e.map(e=>e.address);return{...T(a),queryKey:A.confidentialBalances.tokens(o,r,i),queryFn:async t=>{let[,{owner:n}]=t.queryKey;return b(n,`confidentialBalancesQueryOptions: owner`),v.batchBalancesOf(e,n)},enabled:!!r&&e.length>0&&i!==void 0&&a?.enabled!==!1}}function ce(e,t){let n=!!t.registryAddress&&t.query?.enabled!==!1,r=A.wrappersRegistry.tokenPairs(t.registryAddress??S);return{...T(t.query??{}),queryKey:r,queryFn:async t=>{let[,{registryAddress:n}]=t.queryKey;return e.provider.readContract(s(n))},staleTime:e.registry.ttlMs,enabled:n}}function le(e,t){let n=!!t.registryAddress&&!!t.tokenAddress&&t.query?.enabled!==!1,r=A.wrappersRegistry.confidentialTokenAddress(t.registryAddress??S,t.tokenAddress??S);return{...T(t.query??{}),queryKey:r,queryFn:async t=>{let[,{registryAddress:n,tokenAddress:r}]=t.queryKey;return e.provider.readContract(p(n,r))},staleTime:e.registry.ttlMs,enabled:n}}function ue(e,t){let n=!!t.registryAddress&&!!t.confidentialTokenAddress&&t.query?.enabled!==!1,r=A.wrappersRegistry.tokenAddress(t.registryAddress??S,t.confidentialTokenAddress??S);return{...T(t.query??{}),queryKey:r,queryFn:async t=>{let[,{registryAddress:n,confidentialTokenAddress:r}]=t.queryKey;return e.provider.readContract(l(n,r))},staleTime:e.registry.ttlMs,enabled:n}}function de(e,t){let r=!!t.registryAddress&&t.query?.enabled!==!1,i=A.wrappersRegistry.tokenPairsLength(t.registryAddress??S);return{...T(t.query??{}),queryKey:i,queryFn:async t=>{let[,{registryAddress:r}]=t.queryKey;return e.provider.readContract(n(r))},staleTime:e.registry.ttlMs,enabled:r}}function fe(e,t){let n=!!t.registryAddress&&t.fromIndex!==void 0&&t.toIndex!==void 0&&t.query?.enabled!==!1,r=A.wrappersRegistry.tokenPairsSlice(t.registryAddress??S,String(t.fromIndex??0n),String(t.toIndex??0n));return{...T(t.query??{}),queryKey:r,queryFn:async t=>{let[,{registryAddress:n,fromIndex:r,toIndex:i}]=t.queryKey;return e.provider.readContract(u(n,BigInt(r),BigInt(i)))},staleTime:e.registry.ttlMs,enabled:n}}function pe(e,t){let n=!!t.registryAddress&&t.index!==void 0&&t.query?.enabled!==!1,r=A.wrappersRegistry.tokenPair(t.registryAddress??S,String(t.index??0n));return{...T(t.query??{}),queryKey:r,queryFn:async t=>{let[,{registryAddress:n,index:r}]=t.queryKey;return e.provider.readContract(d(n,BigInt(r)))},staleTime:e.registry.ttlMs,enabled:n}}function me(e,t){let n=!!t.registryAddress&&!!t.confidentialTokenAddress&&t.query?.enabled!==!1,r=A.wrappersRegistry.isConfidentialTokenValid(t.registryAddress??S,t.confidentialTokenAddress??S);return{...T(t.query??{}),queryKey:r,queryFn:async t=>{let[,{registryAddress:n,confidentialTokenAddress:r}]=t.queryKey;return e.provider.readContract(f(n,r))},staleTime:e.registry.ttlMs,enabled:n}}function he(e,t){let n=!!t.registryAddress&&t.query?.enabled!==!1,r=A.wrappersRegistry.listPairs(t.registryAddress??S,t.page??1,t.pageSize??100,t.metadata??!1);return{...T(t.query??{}),queryKey:r,queryFn:async t=>{let[,{page:n,pageSize:r,metadata:i}]=t.queryKey;return e.listPairs({page:n,pageSize:r,metadata:i})},staleTime:e.ttlMs,enabled:n}}function ge(e){return{mutationKey:[`zama.shield`,e.address],mutationFn:async({amount:t,...n})=>e.shield(t,n)}}function _e(e){return{mutationKey:[`zama.confidentialTransfer`,e.address],mutationFn:async({to:t,amount:n,...r})=>e.confidentialTransfer(t,n,r)}}function ve(e){return{mutationKey:[`zama.confidentialTransferAndCall`,e.address],mutationFn:async({to:t,amount:n,data:r,...i})=>e.confidentialTransferAndCall(t,n,r,i)}}function ye(e){return{mutationKey:[`zama.confidentialTransferFrom`,e.address],mutationFn:async({from:t,to:n,amount:r,callbacks:i})=>e.confidentialTransferFrom(t,n,r,i)}}function be(e){return{mutationKey:[`zama.confidentialTransferFromAndCall`,e.address],mutationFn:async({from:t,to:n,amount:r,data:i,callbacks:a})=>e.confidentialTransferFromAndCall(t,n,r,i,a)}}function xe(e){return{mutationKey:[`zama.confidentialSetOperator`,e.address],mutationFn:async({operator:t,until:n})=>e.setOperator(t,n)}}function Se(e){return{mutationKey:[`zama.approveUnderlying`,e.address],mutationFn:async({amount:t})=>e.approveUnderlying(t)}}function Ce(e){return{mutationKey:[`zama.unshield`,e.address],mutationFn:async({amount:t,...n})=>e.unshield(t,n)}}function we(e){return{mutationKey:[`zama.unshieldAll`,e.address],mutationFn:async t=>e.unshieldAll(t||void 0)}}function Te(e){return{mutationKey:[`zama.resumeUnshield`,e.address],mutationFn:async({unwrapTxHash:t,...n})=>e.resumeUnshield(t,n)}}function Ee(e){return{mutationKey:[`zama.unwrap`,e.address],mutationFn:async({amount:t})=>e.unwrap(t)}}function De(e){return{mutationKey:[`zama.unwrapAll`,e.address],mutationFn:async()=>e.unwrapAll()}}function $(e){return{mutationKey:[`zama.finalizeUnwrap`,e.address],mutationFn:async({unwrapRequestId:t})=>e.finalizeUnwrap(t)}}function Oe(e){return{mutationKey:[`zama.encrypt`],mutationFn:async t=>e.encrypt(t)}}function ke(e){return{mutationKey:[`zama.delegatedDecryptValues`],mutationFn:async t=>e.decryption.delegatedDecryptValues(t.encryptedInputs,t.delegatorAddress)}}function Ae(e){return{mutationKey:[`zama.decryptPublicValues`],mutationFn:async t=>e.decryption.decryptPublicValues(t),onSuccess:(e,t,n,r)=>{for(let[t,n]of Object.entries(e.clearValues))r.client.setQueryData(A.decryption.encryptedValue(t),n)}}}function je(e){return{mutationKey:[`zama.grantPermit`],mutationFn:t=>e.permits.grantPermit(t)}}function Me(e,t,n={}){let r=t.query?.enabled!==!1;return{...T(t?.query??{}),queryKey:A.hasPermit.scope(t.contractAddresses,n.walletAccount),queryFn:t=>{let[,{contractAddresses:n}]=t.queryKey;return e.permits.hasPermit(n)},staleTime:0,gcTime:0,refetchOnMount:`always`,refetchOnWindowFocus:!1,enabled:r&&n.walletAccount!==void 0&&t.contractAddresses.length>0}}function Ne(e){return{mutationKey:[`zama.revokePermits`],mutationFn:t=>t===void 0?e.permits.revokePermits():e.permits.revokePermits(t)}}function Pe(e){return{mutationKey:[`zama.clearCredentials`],mutationFn:()=>e.permits.clear()}}function Fe(e,t){return{mutationKey:[`zama.delegateDecryption`,t],mutationFn:async({delegateAddress:n,expirationDate:r})=>e.delegations.delegateDecryption({contractAddress:t,delegateAddress:n,expirationDate:r})}}function Ie(e,t,n={}){return{queryKey:A.decryption.encryptedInputs(t,n.walletAccount),queryFn:t=>{let[,{encryptedInputs:n}]=t.queryKey;return e.decryption.decryptValues(n)},staleTime:1/0,enabled:t.length>0&&n.walletAccount!==void 0}}function Le(e){return{mutationKey:[`zama.decryptBalanceAs`,e.address],mutationFn:async({delegatorAddress:t,accountAddress:n})=>e.decryptBalanceAs({delegatorAddress:t,accountAddress:n})}}function Re(e){return{mutationKey:[`zama.batchDecryptBalancesAs`,...e.map(e=>e.address)],mutationFn:async t=>v.batchDecryptBalancesAs(e,t)}}function ze(e,t){return{mutationKey:[`zama.revokeDelegation`,t],mutationFn:async({delegateAddress:n})=>e.delegations.revokeDelegation({contractAddress:t,delegateAddress:n})}}function Be(e,t){return{...T(t.query??{}),queryKey:A.delegationStatus.scope(t.contractAddress,t.delegatorAddress,t.delegateAddress),queryFn:async t=>{let[,{contractAddress:n,delegatorAddress:r,delegateAddress:i}]=t.queryKey;b(n,`delegationStatusQueryOptions: contractAddress`),b(r,`delegationStatusQueryOptions: delegatorAddress`),b(i,`delegationStatusQueryOptions: delegateAddress`);let a=await e.relayer.getAclAddress(),o=await e.provider.readContract(h(a,r,i,n)),s;return s=o===0n?!1:o===g?!0:o>await e.provider.getBlockTimestamp(),{isActive:s,expiryTimestamp:o}},enabled:!!(t.contractAddress&&t.delegatorAddress&&t.delegateAddress)&&t.query?.enabled!==!1}}export{_ as ZamaSDKEvents,Se as approveUnderlyingMutationOptions,Re as batchDecryptBalancesAsMutationOptions,Pe as clearCredentialsMutationOptions,oe as confidentialBalanceQueryOptions,se as confidentialBalancesQueryOptions,ae as confidentialIsOperatorQueryOptions,xe as confidentialSetOperatorMutationOptions,le as confidentialTokenAddressQueryOptions,ve as confidentialTransferAndCallMutationOptions,be as confidentialTransferFromAndCallMutationOptions,ye as confidentialTransferFromMutationOptions,_e as confidentialTransferMutationOptions,Le as decryptBalanceAsMutationOptions,Ae as decryptPublicValuesMutationOptions,Ie as decryptValuesQueryOptions,Fe as delegateDecryptionMutationOptions,ke as delegatedDecryptValuesMutationOptions,Be as delegationStatusQueryOptions,Oe as encryptMutationOptions,T as filterQueryOptions,$ as finalizeUnwrapMutationOptions,je as grantPermitMutationOptions,Me as hasPermitQueryOptions,E as hashFn,z as invalidateAfterApproveUnderlying,B as invalidateAfterSetOperator,F as invalidateAfterShield,R as invalidateAfterTransfer,I as invalidateAfterUnshield,L as invalidateAfterUnshieldSettled,N as invalidateAfterUnwrap,P as invalidateBalanceQueries,q as invalidateWagmiBalanceQueries,J as invalidateWalletLifecycleQueries,X as isConfidentialQueryOptions,me as isConfidentialTokenValidQueryOptions,Z as isWrapperQueryOptions,he as listPairsQueryOptions,ie as pendingUnshieldQueryOptions,Te as resumeUnshieldMutationOptions,ze as revokeDelegationMutationOptions,Ne as revokePermitsMutationOptions,ge as shieldMutationOptions,ue as tokenAddressQueryOptions,Y as tokenMetadataQueryOptions,pe as tokenPairQueryOptions,de as tokenPairsLengthQueryOptions,ce as tokenPairsQueryOptions,fe as tokenPairsSliceQueryOptions,Q as totalSupplyQueryOptions,re as underlyingAllowanceQueryOptions,we as unshieldAllMutationOptions,Ce as unshieldMutationOptions,De as unwrapAllMutationOptions,Ee as unwrapMutationOptions,ne as wrapperDiscoveryQueryOptions,A as zamaQueryKeys};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|