@zama-fhe/sdk 1.0.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.
Files changed (38) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +801 -0
  3. package/dist/chunk-5QJTGZHY.js +101 -0
  4. package/dist/chunk-5QJTGZHY.js.map +1 -0
  5. package/dist/chunk-6JRD26PS.js +114 -0
  6. package/dist/chunk-6JRD26PS.js.map +1 -0
  7. package/dist/chunk-PHE3BSIB.js +5143 -0
  8. package/dist/chunk-PHE3BSIB.js.map +1 -0
  9. package/dist/chunk-UF47M3QR.js +32 -0
  10. package/dist/chunk-UF47M3QR.js.map +1 -0
  11. package/dist/chunk-WYWAO3QE.js +182 -0
  12. package/dist/chunk-WYWAO3QE.js.map +1 -0
  13. package/dist/cleartext/index.d.ts +45 -0
  14. package/dist/cleartext/index.js +522 -0
  15. package/dist/cleartext/index.js.map +1 -0
  16. package/dist/ethers/index.d.ts +86 -0
  17. package/dist/ethers/index.js +148 -0
  18. package/dist/ethers/index.js.map +1 -0
  19. package/dist/index.d.ts +33405 -0
  20. package/dist/index.js +3563 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/node/index.d.ts +195 -0
  23. package/dist/node/index.js +337 -0
  24. package/dist/node/index.js.map +1 -0
  25. package/dist/relayer-sdk-Dh9aQmBm.d.ts +39 -0
  26. package/dist/relayer-sdk.node-worker.d.ts +2 -0
  27. package/dist/relayer-sdk.node-worker.js +348 -0
  28. package/dist/relayer-sdk.node-worker.js.map +1 -0
  29. package/dist/relayer-sdk.types-CgHZ6qZn.d.ts +327 -0
  30. package/dist/relayer-sdk.worker.js +511 -0
  31. package/dist/relayer-sdk.worker.js.map +1 -0
  32. package/dist/relayer-utils-phBmWrNB.d.ts +10 -0
  33. package/dist/token.types-CUTkehsp.d.ts +299 -0
  34. package/dist/transfer-batcher-CNtrNMz6.d.ts +197 -0
  35. package/dist/viem/index.d.ts +58 -0
  36. package/dist/viem/index.js +143 -0
  37. package/dist/viem/index.js.map +1 -0
  38. package/package.json +90 -0
@@ -0,0 +1,348 @@
1
+ import { convertToBigIntRecord } from './chunk-5QJTGZHY.js';
2
+ import { parentPort } from 'worker_threads';
3
+
4
+ if (!parentPort) {
5
+ throw new Error("This script must be run as a worker thread");
6
+ }
7
+ var port = parentPort;
8
+ var sdkInstance = null;
9
+ function sendSuccess(id, type, data, transfer) {
10
+ const response = { id, type, success: true, data };
11
+ port.postMessage(response, transfer);
12
+ }
13
+ function sendError(id, type, error) {
14
+ const response = { id, type, success: false, error };
15
+ port.postMessage(response);
16
+ }
17
+ async function handleNodeInit(request) {
18
+ const { id, type, payload } = request;
19
+ const { fhevmConfig } = payload;
20
+ try {
21
+ const nodeSdk = await import('@zama-fhe/relayer-sdk/node');
22
+ const config = {
23
+ ...fhevmConfig,
24
+ batchRpcCalls: false
25
+ };
26
+ sdkInstance = await nodeSdk.createInstance(config);
27
+ sendSuccess(id, type, { initialized: true });
28
+ } catch (error) {
29
+ const message = error instanceof Error ? error.message : String(error);
30
+ console.error("[NodeWorker] Init error:", message);
31
+ sendError(id, type, message);
32
+ }
33
+ }
34
+ async function handleEncrypt(request) {
35
+ const { id, type, payload } = request;
36
+ const { values, contractAddress, userAddress } = payload;
37
+ try {
38
+ if (!sdkInstance) {
39
+ throw new Error("SDK not initialized. Call NODE_INIT first.");
40
+ }
41
+ const input = sdkInstance.createEncryptedInput(contractAddress, userAddress);
42
+ for (const entry of values) {
43
+ const { value, type: fheType } = entry;
44
+ switch (fheType) {
45
+ case "ebool":
46
+ input.addBool(typeof value === "boolean" ? value : value !== 0n);
47
+ break;
48
+ case "euint8":
49
+ input.add8(typeof value === "boolean" ? value ? 1n : 0n : value);
50
+ break;
51
+ case "euint16":
52
+ input.add16(typeof value === "boolean" ? value ? 1n : 0n : value);
53
+ break;
54
+ case "euint32":
55
+ input.add32(typeof value === "boolean" ? value ? 1n : 0n : value);
56
+ break;
57
+ case "euint64":
58
+ input.add64(typeof value === "boolean" ? value ? 1n : 0n : value);
59
+ break;
60
+ case "euint128":
61
+ input.add128(typeof value === "boolean" ? value ? 1n : 0n : value);
62
+ break;
63
+ case "euint256":
64
+ input.add256(typeof value === "boolean" ? value ? 1n : 0n : value);
65
+ break;
66
+ case "eaddress":
67
+ input.addAddress(typeof value === "boolean" ? String(value) : String(value));
68
+ break;
69
+ default:
70
+ throw new Error(`Unsupported FHE type: ${fheType}`);
71
+ }
72
+ }
73
+ const encrypted = await input.encrypt();
74
+ const response = {
75
+ handles: encrypted.handles,
76
+ inputProof: encrypted.inputProof
77
+ };
78
+ const transferList = [
79
+ encrypted.inputProof.buffer,
80
+ ...encrypted.handles.map((h) => h.buffer)
81
+ ];
82
+ sendSuccess(id, type, response, transferList);
83
+ } catch (error) {
84
+ const message = error instanceof Error ? error.message : String(error);
85
+ console.error("[NodeWorker] Encrypt error:", message);
86
+ sendError(id, type, message);
87
+ }
88
+ }
89
+ async function handleUserDecrypt(request) {
90
+ const { id, type, payload } = request;
91
+ try {
92
+ if (!sdkInstance) {
93
+ throw new Error("SDK not initialized. Call NODE_INIT first.");
94
+ }
95
+ const handleContractPairs = payload.handles.map((handle) => ({
96
+ handle,
97
+ contractAddress: payload.contractAddress
98
+ }));
99
+ const result = await sdkInstance.userDecrypt(
100
+ handleContractPairs,
101
+ payload.privateKey,
102
+ payload.publicKey,
103
+ payload.signature,
104
+ payload.signedContractAddresses,
105
+ payload.signerAddress,
106
+ payload.startTimestamp,
107
+ payload.durationDays
108
+ );
109
+ const response = {
110
+ clearValues: convertToBigIntRecord(result)
111
+ };
112
+ sendSuccess(id, type, response);
113
+ } catch (error) {
114
+ const message = error instanceof Error ? error.message : String(error);
115
+ console.error("[NodeWorker] UserDecrypt error:", message);
116
+ sendError(id, type, message);
117
+ }
118
+ }
119
+ async function handlePublicDecrypt(request) {
120
+ const { id, type, payload } = request;
121
+ try {
122
+ if (!sdkInstance) {
123
+ throw new Error("SDK not initialized. Call NODE_INIT first.");
124
+ }
125
+ const result = await sdkInstance.publicDecrypt(payload.handles);
126
+ const response = {
127
+ clearValues: convertToBigIntRecord(result.clearValues),
128
+ abiEncodedClearValues: result.abiEncodedClearValues,
129
+ decryptionProof: result.decryptionProof
130
+ };
131
+ sendSuccess(id, type, response);
132
+ } catch (error) {
133
+ const message = error instanceof Error ? error.message : String(error);
134
+ console.error("[NodeWorker] PublicDecrypt error:", message);
135
+ sendError(id, type, message);
136
+ }
137
+ }
138
+ function handleGenerateKeypair(request) {
139
+ const { id, type } = request;
140
+ try {
141
+ if (!sdkInstance) {
142
+ throw new Error("SDK not initialized. Call NODE_INIT first.");
143
+ }
144
+ const keypair = sdkInstance.generateKeypair();
145
+ const response = {
146
+ publicKey: keypair.publicKey,
147
+ privateKey: keypair.privateKey
148
+ };
149
+ sendSuccess(id, type, response);
150
+ } catch (error) {
151
+ const message = error instanceof Error ? error.message : String(error);
152
+ console.error("[NodeWorker] GenerateKeypair error:", message);
153
+ sendError(id, type, message);
154
+ }
155
+ }
156
+ function handleCreateEIP712(request) {
157
+ const { id, type, payload } = request;
158
+ try {
159
+ if (!sdkInstance) {
160
+ throw new Error("SDK not initialized. Call NODE_INIT first.");
161
+ }
162
+ const eip712 = sdkInstance.createEIP712(
163
+ payload.publicKey,
164
+ payload.contractAddresses,
165
+ payload.startTimestamp,
166
+ payload.durationDays
167
+ );
168
+ const response = {
169
+ domain: {
170
+ name: eip712.domain.name,
171
+ version: eip712.domain.version,
172
+ chainId: Number(eip712.domain.chainId),
173
+ verifyingContract: eip712.domain.verifyingContract
174
+ },
175
+ types: {
176
+ UserDecryptRequestVerification: eip712.types.UserDecryptRequestVerification.map(
177
+ (field) => ({
178
+ name: field.name,
179
+ type: field.type
180
+ })
181
+ )
182
+ },
183
+ message: {
184
+ publicKey: eip712.message.publicKey,
185
+ contractAddresses: [...eip712.message.contractAddresses],
186
+ startTimestamp: BigInt(eip712.message.startTimestamp),
187
+ durationDays: BigInt(eip712.message.durationDays),
188
+ extraData: eip712.message.extraData
189
+ }
190
+ };
191
+ sendSuccess(id, type, response);
192
+ } catch (error) {
193
+ const message = error instanceof Error ? error.message : String(error);
194
+ console.error("[NodeWorker] CreateEIP712 error:", message);
195
+ sendError(id, type, message);
196
+ }
197
+ }
198
+ function handleCreateDelegatedEIP712(request) {
199
+ const { id, type, payload } = request;
200
+ try {
201
+ if (!sdkInstance) {
202
+ throw new Error("SDK not initialized. Call NODE_INIT first.");
203
+ }
204
+ const result = sdkInstance.createDelegatedUserDecryptEIP712(
205
+ payload.publicKey,
206
+ payload.contractAddresses,
207
+ payload.delegatorAddress,
208
+ payload.startTimestamp,
209
+ payload.durationDays
210
+ );
211
+ sendSuccess(id, type, result);
212
+ } catch (error) {
213
+ const message = error instanceof Error ? error.message : String(error);
214
+ console.error("[NodeWorker] CreateDelegatedEIP712 error:", message);
215
+ sendError(id, type, message);
216
+ }
217
+ }
218
+ async function handleDelegatedUserDecrypt(request) {
219
+ const { id, type, payload } = request;
220
+ try {
221
+ if (!sdkInstance) {
222
+ throw new Error("SDK not initialized. Call NODE_INIT first.");
223
+ }
224
+ const handleContractPairs = payload.handles.map((handle) => ({
225
+ handle,
226
+ contractAddress: payload.contractAddress
227
+ }));
228
+ const result = await sdkInstance.delegatedUserDecrypt(
229
+ handleContractPairs,
230
+ payload.privateKey,
231
+ payload.publicKey,
232
+ payload.signature,
233
+ payload.signedContractAddresses,
234
+ payload.delegatorAddress,
235
+ payload.delegateAddress,
236
+ payload.startTimestamp,
237
+ payload.durationDays
238
+ );
239
+ const response = {
240
+ clearValues: convertToBigIntRecord(result)
241
+ };
242
+ sendSuccess(id, type, response);
243
+ } catch (error) {
244
+ const message = error instanceof Error ? error.message : String(error);
245
+ console.error("[NodeWorker] DelegatedUserDecrypt error:", message);
246
+ sendError(id, type, message);
247
+ }
248
+ }
249
+ async function handleRequestZKProofVerification(request) {
250
+ const { id, type, payload } = request;
251
+ try {
252
+ if (!sdkInstance) {
253
+ throw new Error("SDK not initialized. Call NODE_INIT first.");
254
+ }
255
+ const result = await sdkInstance.requestZKProofVerification(payload.zkProof);
256
+ const transferList = [
257
+ result.inputProof.buffer,
258
+ ...result.handles.map((h) => h.buffer)
259
+ ];
260
+ sendSuccess(id, type, result, transferList);
261
+ } catch (error) {
262
+ const message = error instanceof Error ? error.message : String(error);
263
+ console.error("[NodeWorker] RequestZKProofVerification error:", message);
264
+ sendError(id, type, message);
265
+ }
266
+ }
267
+ function handleGetPublicKey(request) {
268
+ const { id, type } = request;
269
+ try {
270
+ if (!sdkInstance) {
271
+ throw new Error("SDK not initialized. Call NODE_INIT first.");
272
+ }
273
+ const result = sdkInstance.getPublicKey();
274
+ const response = { result };
275
+ sendSuccess(id, type, response);
276
+ } catch (error) {
277
+ const message = error instanceof Error ? error.message : String(error);
278
+ console.error("[NodeWorker] GetPublicKey error:", message);
279
+ sendError(id, type, message);
280
+ }
281
+ }
282
+ function handleGetPublicParams(request) {
283
+ const { id, type, payload } = request;
284
+ try {
285
+ if (!sdkInstance) {
286
+ throw new Error("SDK not initialized. Call NODE_INIT first.");
287
+ }
288
+ const result = sdkInstance.getPublicParams(
289
+ payload.bits
290
+ );
291
+ const response = { result };
292
+ sendSuccess(id, type, response);
293
+ } catch (error) {
294
+ const message = error instanceof Error ? error.message : String(error);
295
+ console.error("[NodeWorker] GetPublicParams error:", message);
296
+ sendError(id, type, message);
297
+ }
298
+ }
299
+ port.on("message", async (request) => {
300
+ try {
301
+ switch (request.type) {
302
+ case "NODE_INIT":
303
+ await handleNodeInit(request);
304
+ break;
305
+ case "ENCRYPT":
306
+ await handleEncrypt(request);
307
+ break;
308
+ case "USER_DECRYPT":
309
+ await handleUserDecrypt(request);
310
+ break;
311
+ case "PUBLIC_DECRYPT":
312
+ await handlePublicDecrypt(request);
313
+ break;
314
+ case "GENERATE_KEYPAIR":
315
+ handleGenerateKeypair(request);
316
+ break;
317
+ case "CREATE_EIP712":
318
+ handleCreateEIP712(request);
319
+ break;
320
+ case "CREATE_DELEGATED_EIP712":
321
+ handleCreateDelegatedEIP712(request);
322
+ break;
323
+ case "DELEGATED_USER_DECRYPT":
324
+ await handleDelegatedUserDecrypt(request);
325
+ break;
326
+ case "REQUEST_ZK_PROOF_VERIFICATION":
327
+ await handleRequestZKProofVerification(request);
328
+ break;
329
+ case "GET_PUBLIC_KEY":
330
+ handleGetPublicKey(request);
331
+ break;
332
+ case "GET_PUBLIC_PARAMS":
333
+ handleGetPublicParams(request);
334
+ break;
335
+ default:
336
+ console.error("[NodeWorker] Unknown request type:", request.type);
337
+ }
338
+ } catch (err) {
339
+ const message = err instanceof Error ? err.message : String(err);
340
+ sendError(
341
+ request?.id ?? "unknown",
342
+ request?.type ?? "UNKNOWN",
343
+ message
344
+ );
345
+ }
346
+ });
347
+ //# sourceMappingURL=relayer-sdk.node-worker.js.map
348
+ //# sourceMappingURL=relayer-sdk.node-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/worker/relayer-sdk.node-worker.ts"],"names":[],"mappings":"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","file":"relayer-sdk.node-worker.js","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 { parentPort, type Transferable } from \"node:worker_threads\";\nimport { convertToBigIntRecord } from \"../relayer/relayer-utils\";\nimport type {\n CreateDelegatedEIP712Request,\n CreateDelegatedEIP712ResponseData,\n CreateEIP712Request,\n CreateEIP712ResponseData,\n DelegatedUserDecryptRequest,\n DelegatedUserDecryptResponseData,\n EncryptRequest,\n EncryptResponseData,\n ErrorResponse,\n GenerateKeypairRequest,\n GenerateKeypairResponseData,\n GetPublicKeyRequest,\n GetPublicKeyResponseData,\n GetPublicParamsRequest,\n GetPublicParamsResponseData,\n InitResponseData,\n NodeInitRequest,\n PublicDecryptRequest,\n PublicDecryptResponseData,\n RequestZKProofVerificationRequest,\n SuccessResponse,\n UserDecryptRequest,\n UserDecryptResponseData,\n WorkerRequest,\n} from \"./worker.types\";\n\nif (!parentPort) {\n throw new Error(\"This script must be run as a worker thread\");\n}\n\nconst port = parentPort;\n\nlet sdkInstance: FhevmInstance | null = null;\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\nasync function handleNodeInit(request: NodeInitRequest): Promise<void> {\n const { id, type, payload } = request;\n const { fhevmConfig } = payload;\n\n try {\n const nodeSdk = await import(\"@zama-fhe/relayer-sdk/node\");\n\n const config: FhevmInstanceConfig = {\n ...fhevmConfig,\n batchRpcCalls: false,\n };\n\n sdkInstance = await nodeSdk.createInstance(config);\n\n sendSuccess<InitResponseData>(id, type, { initialized: true });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(\"[NodeWorker] Init error:\", message);\n sendError(id, type, message);\n }\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 if (!sdkInstance) {\n throw new Error(\"SDK not initialized. Call NODE_INIT first.\");\n }\n\n const input = sdkInstance.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(typeof value === \"boolean\" ? (value ? 1n : 0n) : value);\n break;\n case \"euint16\":\n input.add16(typeof value === \"boolean\" ? (value ? 1n : 0n) : value);\n break;\n case \"euint32\":\n input.add32(typeof value === \"boolean\" ? (value ? 1n : 0n) : value);\n break;\n case \"euint64\":\n input.add64(typeof value === \"boolean\" ? (value ? 1n : 0n) : value);\n break;\n case \"euint128\":\n input.add128(typeof value === \"boolean\" ? (value ? 1n : 0n) : value);\n break;\n case \"euint256\":\n input.add256(typeof value === \"boolean\" ? (value ? 1n : 0n) : value);\n break;\n case \"eaddress\":\n input.addAddress(typeof value === \"boolean\" ? String(value) : String(value));\n break;\n default:\n throw new Error(`Unsupported FHE type: ${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 console.error(\"[NodeWorker] Encrypt error:\", message);\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 if (!sdkInstance) {\n throw new Error(\"SDK not initialized. Call NODE_INIT first.\");\n }\n\n const handleContractPairs = payload.handles.map((handle) => ({\n handle,\n contractAddress: payload.contractAddress,\n }));\n\n const result = await sdkInstance.userDecrypt(\n handleContractPairs,\n payload.privateKey,\n payload.publicKey,\n payload.signature,\n payload.signedContractAddresses,\n payload.signerAddress,\n payload.startTimestamp,\n payload.durationDays,\n );\n\n const response: UserDecryptResponseData = {\n clearValues: convertToBigIntRecord(result),\n };\n\n sendSuccess(id, type, response);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(\"[NodeWorker] UserDecrypt error:\", message);\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 if (!sdkInstance) {\n throw new Error(\"SDK not initialized. Call NODE_INIT first.\");\n }\n\n const result = await sdkInstance.publicDecrypt(payload.handles);\n\n const response: PublicDecryptResponseData = {\n clearValues: convertToBigIntRecord(result.clearValues),\n abiEncodedClearValues: result.abiEncodedClearValues,\n decryptionProof: result.decryptionProof,\n };\n\n sendSuccess(id, type, response);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(\"[NodeWorker] PublicDecrypt error:\", message);\n sendError(id, type, message);\n }\n}\n\nfunction handleGenerateKeypair(request: GenerateKeypairRequest): void {\n const { id, type } = request;\n\n try {\n if (!sdkInstance) {\n throw new Error(\"SDK not initialized. Call NODE_INIT first.\");\n }\n\n const keypair = sdkInstance.generateKeypair();\n\n const response: GenerateKeypairResponseData = {\n publicKey: keypair.publicKey,\n privateKey: keypair.privateKey,\n };\n\n sendSuccess(id, type, response);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(\"[NodeWorker] GenerateKeypair error:\", message);\n sendError(id, type, message);\n }\n}\n\nfunction handleCreateEIP712(request: CreateEIP712Request): void {\n const { id, type, payload } = request;\n\n try {\n if (!sdkInstance) {\n throw new Error(\"SDK not initialized. Call NODE_INIT first.\");\n }\n\n const eip712 = sdkInstance.createEIP712(\n payload.publicKey,\n payload.contractAddresses,\n payload.startTimestamp,\n payload.durationDays,\n );\n\n const response: CreateEIP712ResponseData = {\n domain: {\n name: eip712.domain.name,\n version: eip712.domain.version,\n chainId: Number(eip712.domain.chainId),\n verifyingContract: eip712.domain.verifyingContract as `0x${string}`,\n },\n types: {\n UserDecryptRequestVerification: eip712.types.UserDecryptRequestVerification.map(\n (field) => ({\n name: field.name,\n type: field.type,\n }),\n ),\n },\n message: {\n publicKey: eip712.message.publicKey,\n contractAddresses: [...eip712.message.contractAddresses],\n startTimestamp: BigInt(eip712.message.startTimestamp),\n durationDays: BigInt(eip712.message.durationDays),\n extraData: eip712.message.extraData,\n },\n };\n\n sendSuccess(id, type, response);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(\"[NodeWorker] CreateEIP712 error:\", message);\n sendError(id, type, message);\n }\n}\n\nfunction handleCreateDelegatedEIP712(request: CreateDelegatedEIP712Request): void {\n const { id, type, payload } = request;\n\n try {\n if (!sdkInstance) {\n throw new Error(\"SDK not initialized. Call NODE_INIT first.\");\n }\n\n const result = sdkInstance.createDelegatedUserDecryptEIP712(\n payload.publicKey,\n payload.contractAddresses,\n payload.delegatorAddress,\n payload.startTimestamp,\n payload.durationDays,\n );\n\n sendSuccess<CreateDelegatedEIP712ResponseData>(id, type, result);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(\"[NodeWorker] CreateDelegatedEIP712 error:\", message);\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 if (!sdkInstance) {\n throw new Error(\"SDK not initialized. Call NODE_INIT first.\");\n }\n\n const handleContractPairs = payload.handles.map((handle) => ({\n handle,\n contractAddress: payload.contractAddress,\n }));\n\n const result = await sdkInstance.delegatedUserDecrypt(\n handleContractPairs,\n payload.privateKey,\n 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 = {\n clearValues: convertToBigIntRecord(result),\n };\n\n sendSuccess(id, type, response);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(\"[NodeWorker] DelegatedUserDecrypt error:\", message);\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 if (!sdkInstance) {\n throw new Error(\"SDK not initialized. Call NODE_INIT first.\");\n }\n\n const result = await sdkInstance.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 console.error(\"[NodeWorker] RequestZKProofVerification error:\", message);\n sendError(id, type, message);\n }\n}\n\nfunction handleGetPublicKey(request: GetPublicKeyRequest): void {\n const { id, type } = request;\n\n try {\n if (!sdkInstance) {\n throw new Error(\"SDK not initialized. Call NODE_INIT first.\");\n }\n\n const result = sdkInstance.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 console.error(\"[NodeWorker] GetPublicKey error:\", message);\n sendError(id, type, message);\n }\n}\n\nfunction handleGetPublicParams(request: GetPublicParamsRequest): void {\n const { id, type, payload } = request;\n\n try {\n if (!sdkInstance) {\n throw new Error(\"SDK not initialized. Call NODE_INIT first.\");\n }\n\n const result = sdkInstance.getPublicParams(\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 console.error(\"[NodeWorker] GetPublicParams error:\", message);\n sendError(id, type, message);\n }\n}\n\nport.on(\"message\", async (request: WorkerRequest) => {\n try {\n switch (request.type) {\n case \"NODE_INIT\":\n await handleNodeInit(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 handleGenerateKeypair(request);\n break;\n case \"CREATE_EIP712\":\n handleCreateEIP712(request);\n break;\n case \"CREATE_DELEGATED_EIP712\":\n 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 handleGetPublicKey(request);\n break;\n case \"GET_PUBLIC_PARAMS\":\n handleGetPublicParams(request);\n break;\n default:\n console.error(\"[NodeWorker] Unknown request type:\", (request as WorkerRequest).type);\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n sendError(\n request?.id ?? \"unknown\",\n request?.type ?? (\"UNKNOWN\" as WorkerRequest[\"type\"]),\n message,\n );\n }\n});\n"]}