@zama-fhe/sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +28 -0
- package/README.md +649 -0
- package/dist/chunk-AJFSZ47V.js +5115 -0
- package/dist/chunk-AJFSZ47V.js.map +1 -0
- package/dist/chunk-UE6IBC3M.js +101 -0
- package/dist/chunk-UE6IBC3M.js.map +1 -0
- package/dist/chunk-VRLLWHHL.js +278 -0
- package/dist/chunk-VRLLWHHL.js.map +1 -0
- package/dist/ethers/index.d.ts +37 -0
- package/dist/ethers/index.js +131 -0
- package/dist/ethers/index.js.map +1 -0
- package/dist/index.d.ts +32910 -0
- package/dist/index.js +2862 -0
- package/dist/index.js.map +1 -0
- package/dist/node/index.d.ts +158 -0
- package/dist/node/index.js +317 -0
- package/dist/node/index.js.map +1 -0
- package/dist/relayer-sdk.node-worker.d.ts +2 -0
- package/dist/relayer-sdk.node-worker.js +320 -0
- package/dist/relayer-sdk.node-worker.js.map +1 -0
- package/dist/relayer-sdk.types-CFkzNzRy.d.ts +293 -0
- package/dist/relayer-sdk.worker.d.ts +2 -0
- package/dist/relayer-sdk.worker.js +401 -0
- package/dist/relayer-sdk.worker.js.map +1 -0
- package/dist/relayer-utils-D_3834H0.d.ts +46 -0
- package/dist/token.types-CRs1iJh7.d.ts +447 -0
- package/dist/viem/index.d.ts +38 -0
- package/dist/viem/index.js +137 -0
- package/dist/viem/index.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
import { convertToBigIntRecord } from './chunk-UE6IBC3M.js';
|
|
2
|
+
|
|
3
|
+
// src/worker/relayer-sdk.worker.ts
|
|
4
|
+
var sdkInstance = null;
|
|
5
|
+
var sdkGlobal = null;
|
|
6
|
+
var relayerUrlBase = "";
|
|
7
|
+
var csrfTokenBase = "";
|
|
8
|
+
var CSRF_HEADER_NAME = "x-csrf-token";
|
|
9
|
+
var MUTATING_METHODS = /* @__PURE__ */ new Set(["POST", "PUT", "DELETE", "PATCH"]);
|
|
10
|
+
function sendSuccess(id, type, data, transfer) {
|
|
11
|
+
const response = {
|
|
12
|
+
id,
|
|
13
|
+
type,
|
|
14
|
+
success: true,
|
|
15
|
+
data
|
|
16
|
+
};
|
|
17
|
+
self.postMessage(response, transfer);
|
|
18
|
+
}
|
|
19
|
+
function sendError(id, type, error, statusCode) {
|
|
20
|
+
const response = {
|
|
21
|
+
id,
|
|
22
|
+
type,
|
|
23
|
+
success: false,
|
|
24
|
+
error
|
|
25
|
+
};
|
|
26
|
+
if (statusCode !== void 0) {
|
|
27
|
+
response.statusCode = statusCode;
|
|
28
|
+
}
|
|
29
|
+
self.postMessage(response);
|
|
30
|
+
}
|
|
31
|
+
var originalFetch = fetch;
|
|
32
|
+
function setupFetchInterceptor() {
|
|
33
|
+
globalThis.fetch = async (input, init) => {
|
|
34
|
+
const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
|
|
35
|
+
const method = init?.method?.toUpperCase() ?? "GET";
|
|
36
|
+
if (relayerUrlBase && url.startsWith(relayerUrlBase)) {
|
|
37
|
+
const headers = new Headers(init?.headers);
|
|
38
|
+
if (MUTATING_METHODS.has(method) && csrfTokenBase) {
|
|
39
|
+
headers.set(CSRF_HEADER_NAME, csrfTokenBase);
|
|
40
|
+
}
|
|
41
|
+
return originalFetch(input, {
|
|
42
|
+
...init,
|
|
43
|
+
headers,
|
|
44
|
+
credentials: "include"
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return originalFetch(input, init);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async function verifyIntegrity(content, expectedHash) {
|
|
51
|
+
const encoder = new TextEncoder();
|
|
52
|
+
const hashBuffer = await crypto.subtle.digest("SHA-384", encoder.encode(content));
|
|
53
|
+
const hashHex = Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
54
|
+
if (hashHex !== expectedHash) {
|
|
55
|
+
throw new Error(`CDN integrity check failed: expected SHA-384 ${expectedHash}, got ${hashHex}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async function loadSdkScript(cdnUrl, integrity) {
|
|
59
|
+
if (integrity) {
|
|
60
|
+
const response = await originalFetch(cdnUrl);
|
|
61
|
+
if (!response.ok) {
|
|
62
|
+
throw new Error(`Failed to fetch SDK: ${response.status} ${response.statusText}`);
|
|
63
|
+
}
|
|
64
|
+
await verifyIntegrity(await response.text(), integrity);
|
|
65
|
+
}
|
|
66
|
+
self.importScripts(cdnUrl);
|
|
67
|
+
}
|
|
68
|
+
async function handleInit(request) {
|
|
69
|
+
const { id, type, payload } = request;
|
|
70
|
+
const { cdnUrl, fhevmConfig, csrfToken, integrity } = payload;
|
|
71
|
+
try {
|
|
72
|
+
relayerUrlBase = fhevmConfig.relayerUrl ?? "";
|
|
73
|
+
csrfTokenBase = csrfToken;
|
|
74
|
+
setupFetchInterceptor();
|
|
75
|
+
await loadSdkScript(cdnUrl, integrity);
|
|
76
|
+
if (!self.relayerSDK) {
|
|
77
|
+
throw new Error("Failed to load relayerSDK from CDN");
|
|
78
|
+
}
|
|
79
|
+
sdkGlobal = self.relayerSDK;
|
|
80
|
+
await sdkGlobal.initSDK();
|
|
81
|
+
const config = {
|
|
82
|
+
...fhevmConfig,
|
|
83
|
+
batchRpcCalls: false
|
|
84
|
+
};
|
|
85
|
+
sdkInstance = await sdkGlobal.createInstance(config);
|
|
86
|
+
sendSuccess(id, type, { initialized: true });
|
|
87
|
+
} catch (error) {
|
|
88
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
89
|
+
console.error("[Worker] Init error:", message);
|
|
90
|
+
sendError(id, type, message);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async function handleEncrypt(request) {
|
|
94
|
+
const { id, type, payload } = request;
|
|
95
|
+
const { values, contractAddress, userAddress } = payload;
|
|
96
|
+
try {
|
|
97
|
+
if (!sdkInstance) {
|
|
98
|
+
throw new Error("SDK not initialized. Call INIT first.");
|
|
99
|
+
}
|
|
100
|
+
const input = sdkInstance.createEncryptedInput(contractAddress, userAddress);
|
|
101
|
+
for (const value of values) {
|
|
102
|
+
input.add64(value);
|
|
103
|
+
}
|
|
104
|
+
const encrypted = await input.encrypt();
|
|
105
|
+
const response = {
|
|
106
|
+
handles: encrypted.handles,
|
|
107
|
+
inputProof: encrypted.inputProof
|
|
108
|
+
};
|
|
109
|
+
const transferList = [
|
|
110
|
+
encrypted.inputProof.buffer,
|
|
111
|
+
...encrypted.handles.map((h) => h.buffer)
|
|
112
|
+
];
|
|
113
|
+
sendSuccess(id, type, response, transferList);
|
|
114
|
+
} catch (error) {
|
|
115
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
116
|
+
console.error("[Worker] Encrypt error:", message);
|
|
117
|
+
sendError(id, type, message);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function handleUserDecrypt(request) {
|
|
121
|
+
const { id, type, payload } = request;
|
|
122
|
+
try {
|
|
123
|
+
if (!sdkInstance) {
|
|
124
|
+
throw new Error("SDK not initialized. Call INIT first.");
|
|
125
|
+
}
|
|
126
|
+
const handleContractPairs = payload.handles.map((handle) => ({
|
|
127
|
+
handle,
|
|
128
|
+
contractAddress: payload.contractAddress
|
|
129
|
+
}));
|
|
130
|
+
const result = await sdkInstance.userDecrypt(
|
|
131
|
+
handleContractPairs,
|
|
132
|
+
payload.privateKey,
|
|
133
|
+
payload.publicKey,
|
|
134
|
+
payload.signature,
|
|
135
|
+
payload.signedContractAddresses,
|
|
136
|
+
payload.signerAddress,
|
|
137
|
+
payload.startTimestamp,
|
|
138
|
+
payload.durationDays
|
|
139
|
+
);
|
|
140
|
+
const response = {
|
|
141
|
+
clearValues: convertToBigIntRecord(result)
|
|
142
|
+
};
|
|
143
|
+
sendSuccess(id, type, response);
|
|
144
|
+
} catch (error) {
|
|
145
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
146
|
+
const statusCode = extractHttpStatus(error);
|
|
147
|
+
console.error("[Worker] UserDecrypt error:", message);
|
|
148
|
+
sendError(id, type, message, statusCode);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function extractHttpStatus(error) {
|
|
152
|
+
if (error == null || typeof error !== "object") return void 0;
|
|
153
|
+
const e = error;
|
|
154
|
+
if (typeof e.statusCode === "number") return e.statusCode;
|
|
155
|
+
if (typeof e.status === "number") return e.status;
|
|
156
|
+
if (e.cause != null && typeof e.cause === "object") {
|
|
157
|
+
const cause = e.cause;
|
|
158
|
+
if (typeof cause.statusCode === "number") return cause.statusCode;
|
|
159
|
+
if (typeof cause.status === "number") return cause.status;
|
|
160
|
+
}
|
|
161
|
+
return void 0;
|
|
162
|
+
}
|
|
163
|
+
async function handlePublicDecrypt(request) {
|
|
164
|
+
const { id, type, payload } = request;
|
|
165
|
+
try {
|
|
166
|
+
if (!sdkInstance) {
|
|
167
|
+
throw new Error("SDK not initialized. Call INIT first.");
|
|
168
|
+
}
|
|
169
|
+
const result = await sdkInstance.publicDecrypt(payload.handles);
|
|
170
|
+
const response = {
|
|
171
|
+
clearValues: convertToBigIntRecord(result.clearValues),
|
|
172
|
+
abiEncodedClearValues: result.abiEncodedClearValues,
|
|
173
|
+
decryptionProof: result.decryptionProof
|
|
174
|
+
};
|
|
175
|
+
sendSuccess(id, type, response);
|
|
176
|
+
} catch (error) {
|
|
177
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
178
|
+
console.error("[Worker] PublicDecrypt error:", message);
|
|
179
|
+
sendError(id, type, message);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function handleGenerateKeypair(request) {
|
|
183
|
+
const { id, type } = request;
|
|
184
|
+
try {
|
|
185
|
+
if (!sdkInstance) {
|
|
186
|
+
throw new Error("SDK not initialized. Call INIT first.");
|
|
187
|
+
}
|
|
188
|
+
const keypair = sdkInstance.generateKeypair();
|
|
189
|
+
const response = {
|
|
190
|
+
publicKey: keypair.publicKey,
|
|
191
|
+
privateKey: keypair.privateKey
|
|
192
|
+
};
|
|
193
|
+
sendSuccess(id, type, response);
|
|
194
|
+
} catch (error) {
|
|
195
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
196
|
+
console.error("[Worker] GenerateKeypair error:", message);
|
|
197
|
+
sendError(id, type, message);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function handleCreateEIP712(request) {
|
|
201
|
+
const { id, type, payload } = request;
|
|
202
|
+
try {
|
|
203
|
+
if (!sdkInstance) {
|
|
204
|
+
throw new Error("SDK not initialized. Call INIT first.");
|
|
205
|
+
}
|
|
206
|
+
const eip712 = sdkInstance.createEIP712(
|
|
207
|
+
payload.publicKey,
|
|
208
|
+
payload.contractAddresses,
|
|
209
|
+
payload.startTimestamp,
|
|
210
|
+
payload.durationDays
|
|
211
|
+
);
|
|
212
|
+
const response = {
|
|
213
|
+
domain: {
|
|
214
|
+
name: eip712.domain.name,
|
|
215
|
+
version: eip712.domain.version,
|
|
216
|
+
chainId: Number(eip712.domain.chainId),
|
|
217
|
+
verifyingContract: eip712.domain.verifyingContract
|
|
218
|
+
},
|
|
219
|
+
types: {
|
|
220
|
+
UserDecryptRequestVerification: eip712.types.UserDecryptRequestVerification.map(
|
|
221
|
+
(field) => ({
|
|
222
|
+
name: field.name,
|
|
223
|
+
type: field.type
|
|
224
|
+
})
|
|
225
|
+
)
|
|
226
|
+
},
|
|
227
|
+
message: {
|
|
228
|
+
publicKey: eip712.message.publicKey,
|
|
229
|
+
contractAddresses: [...eip712.message.contractAddresses],
|
|
230
|
+
startTimestamp: BigInt(eip712.message.startTimestamp),
|
|
231
|
+
durationDays: BigInt(eip712.message.durationDays),
|
|
232
|
+
extraData: eip712.message.extraData
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
sendSuccess(id, type, response);
|
|
236
|
+
} catch (error) {
|
|
237
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
238
|
+
console.error("[Worker] CreateEIP712 error:", message);
|
|
239
|
+
sendError(id, type, message);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
function handleCreateDelegatedEIP712(request) {
|
|
243
|
+
const { id, type, payload } = request;
|
|
244
|
+
try {
|
|
245
|
+
if (!sdkInstance) {
|
|
246
|
+
throw new Error("SDK not initialized. Call INIT first.");
|
|
247
|
+
}
|
|
248
|
+
const result = sdkInstance.createDelegatedUserDecryptEIP712(
|
|
249
|
+
payload.publicKey,
|
|
250
|
+
payload.contractAddresses,
|
|
251
|
+
payload.delegatorAddress,
|
|
252
|
+
payload.startTimestamp,
|
|
253
|
+
payload.durationDays
|
|
254
|
+
);
|
|
255
|
+
sendSuccess(id, type, result);
|
|
256
|
+
} catch (error) {
|
|
257
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
258
|
+
console.error("[Worker] CreateDelegatedEIP712 error:", message);
|
|
259
|
+
sendError(id, type, message);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
async function handleDelegatedUserDecrypt(request) {
|
|
263
|
+
const { id, type, payload } = request;
|
|
264
|
+
try {
|
|
265
|
+
if (!sdkInstance) {
|
|
266
|
+
throw new Error("SDK not initialized. Call INIT first.");
|
|
267
|
+
}
|
|
268
|
+
const handleContractPairs = payload.handles.map((handle) => ({
|
|
269
|
+
handle,
|
|
270
|
+
contractAddress: payload.contractAddress
|
|
271
|
+
}));
|
|
272
|
+
const result = await sdkInstance.delegatedUserDecrypt(
|
|
273
|
+
handleContractPairs,
|
|
274
|
+
payload.privateKey,
|
|
275
|
+
payload.publicKey,
|
|
276
|
+
payload.signature,
|
|
277
|
+
payload.signedContractAddresses,
|
|
278
|
+
payload.delegatorAddress,
|
|
279
|
+
payload.delegateAddress,
|
|
280
|
+
payload.startTimestamp,
|
|
281
|
+
payload.durationDays
|
|
282
|
+
);
|
|
283
|
+
const response = {
|
|
284
|
+
clearValues: convertToBigIntRecord(result)
|
|
285
|
+
};
|
|
286
|
+
sendSuccess(id, type, response);
|
|
287
|
+
} catch (error) {
|
|
288
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
289
|
+
console.error("[Worker] DelegatedUserDecrypt error:", message);
|
|
290
|
+
sendError(id, type, message);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
async function handleRequestZKProofVerification(request) {
|
|
294
|
+
const { id, type, payload } = request;
|
|
295
|
+
try {
|
|
296
|
+
if (!sdkInstance) {
|
|
297
|
+
throw new Error("SDK not initialized. Call INIT first.");
|
|
298
|
+
}
|
|
299
|
+
const result = await sdkInstance.requestZKProofVerification(payload.zkProof);
|
|
300
|
+
const transferList = [
|
|
301
|
+
result.inputProof.buffer,
|
|
302
|
+
...result.handles.map((h) => h.buffer)
|
|
303
|
+
];
|
|
304
|
+
sendSuccess(id, type, result, transferList);
|
|
305
|
+
} catch (error) {
|
|
306
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
307
|
+
console.error("[Worker] RequestZKProofVerification error:", message);
|
|
308
|
+
sendError(id, type, message);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
function handleGetPublicKey(request) {
|
|
312
|
+
const { id, type } = request;
|
|
313
|
+
try {
|
|
314
|
+
if (!sdkInstance) {
|
|
315
|
+
throw new Error("SDK not initialized. Call INIT first.");
|
|
316
|
+
}
|
|
317
|
+
const result = sdkInstance.getPublicKey();
|
|
318
|
+
const response = { result };
|
|
319
|
+
sendSuccess(id, type, response);
|
|
320
|
+
} catch (error) {
|
|
321
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
322
|
+
console.error("[Worker] GetPublicKey error:", message);
|
|
323
|
+
sendError(id, type, message);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
function handleGetPublicParams(request) {
|
|
327
|
+
const { id, type, payload } = request;
|
|
328
|
+
try {
|
|
329
|
+
if (!sdkInstance) {
|
|
330
|
+
throw new Error("SDK not initialized. Call INIT first.");
|
|
331
|
+
}
|
|
332
|
+
const result = sdkInstance.getPublicParams(
|
|
333
|
+
payload.bits
|
|
334
|
+
);
|
|
335
|
+
const response = { result };
|
|
336
|
+
sendSuccess(id, type, response);
|
|
337
|
+
} catch (error) {
|
|
338
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
339
|
+
console.error("[Worker] GetPublicParams error:", message);
|
|
340
|
+
sendError(id, type, message);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
function handleUpdateCsrf(request) {
|
|
344
|
+
const { id, type, payload } = request;
|
|
345
|
+
csrfTokenBase = payload.csrfToken;
|
|
346
|
+
sendSuccess(id, type, { updated: true });
|
|
347
|
+
}
|
|
348
|
+
self.onmessage = async (event) => {
|
|
349
|
+
const request = event.data;
|
|
350
|
+
try {
|
|
351
|
+
switch (request.type) {
|
|
352
|
+
case "INIT":
|
|
353
|
+
await handleInit(request);
|
|
354
|
+
break;
|
|
355
|
+
case "UPDATE_CSRF":
|
|
356
|
+
handleUpdateCsrf(request);
|
|
357
|
+
break;
|
|
358
|
+
case "ENCRYPT":
|
|
359
|
+
await handleEncrypt(request);
|
|
360
|
+
break;
|
|
361
|
+
case "USER_DECRYPT":
|
|
362
|
+
await handleUserDecrypt(request);
|
|
363
|
+
break;
|
|
364
|
+
case "PUBLIC_DECRYPT":
|
|
365
|
+
await handlePublicDecrypt(request);
|
|
366
|
+
break;
|
|
367
|
+
case "GENERATE_KEYPAIR":
|
|
368
|
+
handleGenerateKeypair(request);
|
|
369
|
+
break;
|
|
370
|
+
case "CREATE_EIP712":
|
|
371
|
+
handleCreateEIP712(request);
|
|
372
|
+
break;
|
|
373
|
+
case "CREATE_DELEGATED_EIP712":
|
|
374
|
+
handleCreateDelegatedEIP712(request);
|
|
375
|
+
break;
|
|
376
|
+
case "DELEGATED_USER_DECRYPT":
|
|
377
|
+
await handleDelegatedUserDecrypt(request);
|
|
378
|
+
break;
|
|
379
|
+
case "REQUEST_ZK_PROOF_VERIFICATION":
|
|
380
|
+
await handleRequestZKProofVerification(request);
|
|
381
|
+
break;
|
|
382
|
+
case "GET_PUBLIC_KEY":
|
|
383
|
+
handleGetPublicKey(request);
|
|
384
|
+
break;
|
|
385
|
+
case "GET_PUBLIC_PARAMS":
|
|
386
|
+
handleGetPublicParams(request);
|
|
387
|
+
break;
|
|
388
|
+
default:
|
|
389
|
+
console.error("[Worker] Unknown request type:", request.type);
|
|
390
|
+
}
|
|
391
|
+
} catch (err) {
|
|
392
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
393
|
+
sendError(
|
|
394
|
+
request?.id ?? "unknown",
|
|
395
|
+
request?.type ?? "UNKNOWN",
|
|
396
|
+
message
|
|
397
|
+
);
|
|
398
|
+
}
|
|
399
|
+
};
|
|
400
|
+
//# sourceMappingURL=relayer-sdk.worker.js.map
|
|
401
|
+
//# sourceMappingURL=relayer-sdk.worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/worker/relayer-sdk.worker.ts"],"names":[],"mappings":"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","file":"relayer-sdk.worker.js","sourcesContent":["/**\n * Web Worker for RelayerSDK FHE operations.\n * Handles CPU-intensive WASM operations off the main thread.\n */\n\nimport type {\n FhevmInstance,\n FhevmInstanceConfig,\n RelayerSDKGlobal,\n} from \"../relayer/relayer-sdk.types\";\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 InitRequest,\n InitResponseData,\n PublicDecryptRequest,\n PublicDecryptResponseData,\n RequestZKProofVerificationRequest,\n SuccessResponse,\n UpdateCsrfRequest,\n UpdateCsrfResponseData,\n UserDecryptRequest,\n UserDecryptResponseData,\n WorkerRequest,\n} from \"./worker.types\";\n\n// Global SDK instance and config\nlet sdkInstance: FhevmInstance | null = null;\nlet sdkGlobal: RelayerSDKGlobal | null = null;\n\n// Store relayer URL and CSRF token for fetch interception.\n// These globals are per-worker-instance. Do NOT convert to SharedWorker\n// without rearchitecting CSRF token management to be per-connection.\nlet relayerUrlBase: string = \"\";\nlet csrfTokenBase: string = \"\";\n\n// CSRF header name (must match server expectation)\nconst CSRF_HEADER_NAME = \"x-csrf-token\";\n\n// Mutating HTTP methods that require CSRF token (js-set-map-lookups)\nconst MUTATING_METHODS = new Set([\"POST\", \"PUT\", \"DELETE\", \"PATCH\"]);\n\n// Web Worker global scope with SDK\ninterface WorkerGlobalScopeWithSDK {\n relayerSDK?: RelayerSDKGlobal;\n postMessage: (message: unknown, transfer?: Transferable[]) => void;\n onmessage: ((event: MessageEvent<WorkerRequest>) => void) | null;\n importScripts: (...urls: string[]) => void;\n}\n\ndeclare const self: WorkerGlobalScopeWithSDK;\n\n/**\n * Send a success response back to the main thread.\n * Optionally transfers ArrayBuffers for zero-copy performance.\n */\nfunction sendSuccess<T>(\n id: string,\n type: WorkerRequest[\"type\"],\n data: T,\n transfer?: Transferable[],\n): void {\n const response: SuccessResponse<T> = {\n id,\n type,\n success: true,\n data,\n };\n self.postMessage(response, transfer);\n}\n\n/**\n * Send an error response back to the main thread.\n */\nfunction sendError(\n id: string,\n type: WorkerRequest[\"type\"],\n error: string,\n statusCode?: number,\n): void {\n const response: ErrorResponse = {\n id,\n type,\n success: false,\n error,\n };\n if (statusCode !== undefined) {\n response.statusCode = statusCode;\n }\n self.postMessage(response);\n}\n\n// Store original fetch for use in SDK loading\nconst originalFetch = fetch;\n\n/**\n * Set up fetch interceptor to add credentials and CSRF token for relayer requests.\n * Workers don't automatically include cookies, so we intercept fetch calls\n * targeting our relayer proxy to inject credentials and CSRF headers.\n */\nfunction setupFetchInterceptor(): void {\n globalThis.fetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {\n const url = typeof input === \"string\" ? input : input instanceof URL ? input.href : input.url;\n const method = init?.method?.toUpperCase() ?? \"GET\";\n\n // Only intercept requests to our relayer proxy\n if (relayerUrlBase && url.startsWith(relayerUrlBase)) {\n const headers = new Headers(init?.headers);\n\n // Add CSRF token for mutating requests\n if (MUTATING_METHODS.has(method) && csrfTokenBase) {\n headers.set(CSRF_HEADER_NAME, csrfTokenBase);\n }\n\n return originalFetch(input, {\n ...init,\n headers,\n credentials: \"include\",\n });\n }\n\n // Pass through other requests unchanged\n return originalFetch(input, init);\n };\n}\n\n/**\n * Verify a fetched script's SHA-384 hash matches the expected integrity value.\n */\nasync function verifyIntegrity(content: string, expectedHash: string): Promise<void> {\n const encoder = new TextEncoder();\n const hashBuffer = await crypto.subtle.digest(\"SHA-384\", encoder.encode(content));\n const hashHex = Array.from(new Uint8Array(hashBuffer))\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n if (hashHex !== expectedHash) {\n throw new Error(`CDN integrity check failed: expected SHA-384 ${expectedHash}, got ${hashHex}`);\n }\n}\n\n/**\n * Load SDK script from CDN.\n * When an integrity hash is provided, fetches the content first to verify the\n * SHA-384 digest, then loads via importScripts (which will hit the browser cache).\n * Uses importScripts directly — no blob: URLs — so this works in both regular\n * web apps and Chrome MV3 extensions.\n */\nasync function loadSdkScript(cdnUrl: string, integrity?: string): Promise<void> {\n if (integrity) {\n // Fetch the script content to verify integrity before execution\n const response = await originalFetch(cdnUrl);\n if (!response.ok) {\n throw new Error(`Failed to fetch SDK: ${response.status} ${response.statusText}`);\n }\n await verifyIntegrity(await response.text(), integrity);\n }\n\n // importScripts is not subject to CORS and will use the browser cache\n // when the integrity fetch already downloaded the content.\n self.importScripts(cdnUrl);\n}\n\n/**\n * Handle INIT request - load SDK and initialize WASM.\n */\nasync function handleInit(request: InitRequest): Promise<void> {\n const { id, type, payload } = request;\n const { cdnUrl, fhevmConfig, csrfToken, integrity } = payload;\n\n try {\n // Extract relayerUrl from config for fetch interception\n relayerUrlBase = fhevmConfig.relayerUrl ?? \"\";\n csrfTokenBase = csrfToken;\n\n // Set up fetch interceptor before loading SDK\n setupFetchInterceptor();\n\n // Load SDK via fetch + blob URL (avoids CORS issues with importScripts)\n await loadSdkScript(cdnUrl, integrity);\n\n if (!self.relayerSDK) {\n throw new Error(\"Failed to load relayerSDK from CDN\");\n }\n\n sdkGlobal = self.relayerSDK;\n\n // Initialize WASM\n await sdkGlobal.initSDK();\n\n // Create SDK instance with caller-provided config\n const config: FhevmInstanceConfig = {\n ...fhevmConfig,\n batchRpcCalls: false,\n };\n\n sdkInstance = await sdkGlobal.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(\"[Worker] Init error:\", message);\n sendError(id, type, message);\n }\n}\n\n/**\n * Handle ENCRYPT request.\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 INIT first.\");\n }\n\n const input = sdkInstance.createEncryptedInput(contractAddress, userAddress);\n\n for (const value of values) {\n input.add64(value);\n }\n\n const encrypted = await input.encrypt();\n\n const response: EncryptResponseData = {\n handles: encrypted.handles,\n inputProof: encrypted.inputProof,\n };\n\n // Transfer ArrayBuffers for zero-copy performance\n const transferList: Transferable[] = [\n encrypted.inputProof.buffer,\n ...encrypted.handles.map((h) => h.buffer),\n ];\n\n sendSuccess(id, type, response, transferList);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(\"[Worker] Encrypt error:\", message);\n sendError(id, type, message);\n }\n}\n\n/**\n * Handle USER_DECRYPT request.\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 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 const statusCode = extractHttpStatus(error);\n console.error(\"[Worker] UserDecrypt error:\", message);\n sendError(id, type, message, statusCode);\n }\n}\n\n/**\n * Extract an HTTP status code from an error, if present.\n * Relayer SDK errors may carry a `status` or `statusCode` property.\n */\nfunction extractHttpStatus(error: unknown): number | undefined {\n if (error == null || typeof error !== \"object\") return undefined;\n const e = error as Record<string, unknown>;\n if (typeof e.statusCode === \"number\") return e.statusCode;\n if (typeof e.status === \"number\") return e.status;\n // Check nested cause\n if (e.cause != null && typeof e.cause === \"object\") {\n const cause = e.cause as Record<string, unknown>;\n if (typeof cause.statusCode === \"number\") return cause.statusCode;\n if (typeof cause.status === \"number\") return cause.status;\n }\n return undefined;\n}\n\n/**\n * Handle PUBLIC_DECRYPT request.\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 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(\"[Worker] PublicDecrypt error:\", message);\n sendError(id, type, message);\n }\n}\n\n/**\n * Handle GENERATE_KEYPAIR request.\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 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(\"[Worker] GenerateKeypair error:\", message);\n sendError(id, type, message);\n }\n}\n\n/**\n * Handle CREATE_EIP712 request.\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 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(\"[Worker] CreateEIP712 error:\", message);\n sendError(id, type, message);\n }\n}\n\n/**\n * Handle CREATE_DELEGATED_EIP712 request.\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 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(\"[Worker] CreateDelegatedEIP712 error:\", message);\n sendError(id, type, message);\n }\n}\n\n/**\n * Handle DELEGATED_USER_DECRYPT request.\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 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(\"[Worker] DelegatedUserDecrypt error:\", message);\n sendError(id, type, message);\n }\n}\n\n/**\n * Handle REQUEST_ZK_PROOF_VERIFICATION request.\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 INIT first.\");\n }\n\n const result = await sdkInstance.requestZKProofVerification(payload.zkProof);\n\n // Transfer ArrayBuffers for zero-copy performance\n const transferList: Transferable[] = [\n result.inputProof.buffer,\n ...result.handles.map((h) => h.buffer),\n ];\n\n sendSuccess(id, type, result, transferList);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(\"[Worker] RequestZKProofVerification error:\", message);\n sendError(id, type, message);\n }\n}\n\n/**\n * Handle GET_PUBLIC_KEY request.\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 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(\"[Worker] GetPublicKey error:\", message);\n sendError(id, type, message);\n }\n}\n\n/**\n * Handle GET_PUBLIC_PARAMS request.\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 INIT first.\");\n }\n\n const result = sdkInstance.getPublicParams(\n payload.bits as keyof import(\"@zama-fhe/relayer-sdk/bundle\").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(\"[Worker] GetPublicParams error:\", message);\n sendError(id, type, message);\n }\n}\n\n/**\n * Handle UPDATE_CSRF request - update the stored CSRF token.\n */\nfunction handleUpdateCsrf(request: UpdateCsrfRequest): void {\n const { id, type, payload } = request;\n csrfTokenBase = payload.csrfToken;\n sendSuccess<UpdateCsrfResponseData>(id, type, { updated: true });\n}\n\n/**\n * Main message handler.\n */\nself.onmessage = async (event: MessageEvent<WorkerRequest>) => {\n const request = event.data;\n\n try {\n switch (request.type) {\n case \"INIT\":\n await handleInit(request);\n break;\n case \"UPDATE_CSRF\":\n handleUpdateCsrf(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(\"[Worker] 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"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { F as FHEKeypair, E as EIP712TypedData, a as EncryptParams, b as EncryptResult, U as UserDecryptParams, P as PublicDecryptResult, D as DelegatedUserDecryptParams } from './relayer-sdk.types-CFkzNzRy.js';
|
|
2
|
+
import { Address, KmsDelegatedUserDecryptEIP712Type, ZKProofLike, InputProofBytesType, FhevmInstanceConfig } from '@zama-fhe/relayer-sdk/bundle';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Interface for FHE relayer operations.
|
|
6
|
+
* Implemented by `RelayerWeb` (browser, via Web Worker + WASM) and `RelayerNode` (Node.js, direct).
|
|
7
|
+
*/
|
|
8
|
+
interface RelayerSDK {
|
|
9
|
+
/** Generate an FHE keypair (public + private key). */
|
|
10
|
+
generateKeypair(): Promise<FHEKeypair>;
|
|
11
|
+
/** Create EIP-712 typed data for signing an FHE decrypt credential. */
|
|
12
|
+
createEIP712(publicKey: string, contractAddresses: Address[], startTimestamp: number, durationDays?: number): Promise<EIP712TypedData>;
|
|
13
|
+
/** Encrypt plaintext values into FHE ciphertexts. */
|
|
14
|
+
encrypt(params: EncryptParams): Promise<EncryptResult>;
|
|
15
|
+
/** Decrypt FHE ciphertext handles using the user's own credentials. */
|
|
16
|
+
userDecrypt(params: UserDecryptParams): Promise<Record<string, bigint>>;
|
|
17
|
+
/** Decrypt FHE handles using the network public key (no credential needed). */
|
|
18
|
+
publicDecrypt(handles: string[]): Promise<PublicDecryptResult>;
|
|
19
|
+
/** Create EIP-712 typed data for a delegated user decrypt credential. */
|
|
20
|
+
createDelegatedUserDecryptEIP712(publicKey: string, contractAddresses: Address[], delegatorAddress: string, startTimestamp: number, durationDays?: number): Promise<KmsDelegatedUserDecryptEIP712Type>;
|
|
21
|
+
/** Decrypt FHE handles using delegated user credentials. */
|
|
22
|
+
delegatedUserDecrypt(params: DelegatedUserDecryptParams): Promise<Record<string, bigint>>;
|
|
23
|
+
/** Submit a ZK proof for on-chain verification. */
|
|
24
|
+
requestZKProofVerification(zkProof: ZKProofLike): Promise<InputProofBytesType>;
|
|
25
|
+
/** Fetch the FHE network public key. Returns `null` if not available. */
|
|
26
|
+
getPublicKey(): Promise<{
|
|
27
|
+
publicKeyId: string;
|
|
28
|
+
publicKey: Uint8Array;
|
|
29
|
+
} | null>;
|
|
30
|
+
/** Fetch FHE public parameters for a given bit size. Returns `null` if not available. */
|
|
31
|
+
getPublicParams(bits: number): Promise<{
|
|
32
|
+
publicParams: Uint8Array;
|
|
33
|
+
publicParamsId: string;
|
|
34
|
+
} | null>;
|
|
35
|
+
/** Terminate the relayer backend and release resources. */
|
|
36
|
+
terminate(): void;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Mainnet network configuration (chainId 1). */
|
|
40
|
+
declare const MainnetConfig: FhevmInstanceConfig;
|
|
41
|
+
/** Sepolia testnet network configuration (chainId 11155111). */
|
|
42
|
+
declare const SepoliaConfig: FhevmInstanceConfig;
|
|
43
|
+
/** Hardhat local network configuration (chainId 31337). */
|
|
44
|
+
declare const HardhatConfig: FhevmInstanceConfig;
|
|
45
|
+
|
|
46
|
+
export { HardhatConfig as H, MainnetConfig as M, type RelayerSDK as R, SepoliaConfig as S };
|