@seams/wallet 0.5.0 → 0.5.1

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 (53) hide show
  1. package/dist/esm/sdk/export-private-key-viewer.js +55 -8809
  2. package/dist/esm/sdk/halo-border.js +8 -8892
  3. package/dist/esm/sdk/passkey-halo-loading.js +27 -8855
  4. package/dist/esm/sdk/tx-confirm-ui.js +206 -9575
  5. package/dist/esm/sdk/w3a-tx-confirmer.js +206 -8340
  6. package/dist/public/headers.manifest.json +1 -1
  7. package/dist/public/sdk/export-private-key-viewer.js +55 -8809
  8. package/dist/public/sdk/halo-border.js +8 -8892
  9. package/dist/public/sdk/passkey-halo-loading.js +27 -8855
  10. package/dist/public/sdk/tx-confirm-ui.js +206 -9575
  11. package/dist/public/sdk/w3a-tx-confirmer.js +206 -8340
  12. package/dist/public/sdk/workers/device-linking-key.worker.js +3 -8610
  13. package/dist/public/sdk/workers/ecdsa-derivation-client.worker.js +1 -12414
  14. package/dist/public/sdk/workers/ecdsa-online-client.worker.js +1 -624
  15. package/dist/public/sdk/workers/ecdsa-presign-client.worker.js +1 -1277
  16. package/dist/public/sdk/workers/email-otp.worker.js +7 -15666
  17. package/dist/public/sdk/workers/email_otp_runtime.js +3 -39
  18. package/dist/public/sdk/workers/email_otp_runtime_bg.wasm +0 -0
  19. package/dist/public/sdk/workers/evm-crypto.worker.js +5 -1157
  20. package/dist/public/sdk/workers/evm_crypto.wasm +0 -0
  21. package/dist/public/sdk/workers/evm_crypto_bg.wasm +0 -0
  22. package/dist/public/sdk/workers/near-signer.worker.js +2 -1631
  23. package/dist/public/sdk/workers/passkey-confirm.worker.js +1 -606
  24. package/dist/public/sdk/workers/passkey-mpc-export.worker.js +2 -5416
  25. package/dist/public/sdk/workers/passkey-mpc-session.worker.js +1 -1717
  26. package/dist/public/sdk/workers/shamir3pass.worker.js +4 -874
  27. package/dist/public/sdk/workers/shamir3pass_runtime.js +31 -84
  28. package/dist/public/sdk/workers/shamir3pass_runtime_bg.wasm +0 -0
  29. package/dist/public/sdk/workers/tempo-signer.worker.js +5 -987
  30. package/dist/public/sdk/workers/tempo_signer.wasm +0 -0
  31. package/dist/public/sdk/workers/tempo_signer_bg.wasm +0 -0
  32. package/dist/public/wallet-assets.manifest.json +2 -2
  33. package/dist/workers/device-linking-key.worker.js +3 -8610
  34. package/dist/workers/ecdsa-derivation-client.worker.js +1 -12414
  35. package/dist/workers/ecdsa-online-client.worker.js +1 -624
  36. package/dist/workers/ecdsa-presign-client.worker.js +1 -1277
  37. package/dist/workers/email-otp.worker.js +7 -15666
  38. package/dist/workers/email_otp_runtime.js +3 -39
  39. package/dist/workers/email_otp_runtime_bg.wasm +0 -0
  40. package/dist/workers/evm-crypto.worker.js +5 -1157
  41. package/dist/workers/evm_crypto.wasm +0 -0
  42. package/dist/workers/evm_crypto_bg.wasm +0 -0
  43. package/dist/workers/near-signer.worker.js +2 -1631
  44. package/dist/workers/passkey-confirm.worker.js +1 -606
  45. package/dist/workers/passkey-mpc-export.worker.js +2 -5416
  46. package/dist/workers/passkey-mpc-session.worker.js +1 -1717
  47. package/dist/workers/shamir3pass.worker.js +4 -874
  48. package/dist/workers/shamir3pass_runtime.js +31 -84
  49. package/dist/workers/shamir3pass_runtime_bg.wasm +0 -0
  50. package/dist/workers/tempo-signer.worker.js +5 -987
  51. package/dist/workers/tempo_signer.wasm +0 -0
  52. package/dist/workers/tempo_signer_bg.wasm +0 -0
  53. package/package.json +2 -2
@@ -1,606 +1 @@
1
- // ../shared-ts/src/utils/normalize.ts
2
- function normalizeTrimmedString(value) {
3
- return String(value ?? "").trim();
4
- }
5
- function normalizeOptionalNonEmptyString(value) {
6
- const normalized = normalizeTrimmedString(value);
7
- return normalized || undefined;
8
- }
9
-
10
- // ../../node_modules/base-x/src/esm/index.js
11
- function base(ALPHABET) {
12
- if (ALPHABET.length >= 255) {
13
- throw new TypeError("Alphabet too long");
14
- }
15
- const BASE_MAP = new Uint8Array(256);
16
- for (let j = 0;j < BASE_MAP.length; j++) {
17
- BASE_MAP[j] = 255;
18
- }
19
- for (let i = 0;i < ALPHABET.length; i++) {
20
- const x = ALPHABET.charAt(i);
21
- const xc = x.charCodeAt(0);
22
- if (BASE_MAP[xc] !== 255) {
23
- throw new TypeError(x + " is ambiguous");
24
- }
25
- BASE_MAP[xc] = i;
26
- }
27
- const BASE = ALPHABET.length;
28
- const LEADER = ALPHABET.charAt(0);
29
- const FACTOR = Math.log(BASE) / Math.log(256);
30
- const iFACTOR = Math.log(256) / Math.log(BASE);
31
- function encode(source) {
32
- if (source instanceof Uint8Array) {} else if (ArrayBuffer.isView(source)) {
33
- source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);
34
- } else if (Array.isArray(source)) {
35
- source = Uint8Array.from(source);
36
- }
37
- if (!(source instanceof Uint8Array)) {
38
- throw new TypeError("Expected Uint8Array");
39
- }
40
- if (source.length === 0) {
41
- return "";
42
- }
43
- let zeroes = 0;
44
- let length = 0;
45
- let pbegin = 0;
46
- const pend = source.length;
47
- while (pbegin !== pend && source[pbegin] === 0) {
48
- pbegin++;
49
- zeroes++;
50
- }
51
- const size = (pend - pbegin) * iFACTOR + 1 >>> 0;
52
- const b58 = new Uint8Array(size);
53
- while (pbegin !== pend) {
54
- let carry = source[pbegin];
55
- let i = 0;
56
- for (let it1 = size - 1;(carry !== 0 || i < length) && it1 !== -1; it1--, i++) {
57
- carry += 256 * b58[it1] >>> 0;
58
- b58[it1] = carry % BASE >>> 0;
59
- carry = carry / BASE >>> 0;
60
- }
61
- if (carry !== 0) {
62
- throw new Error("Non-zero carry");
63
- }
64
- length = i;
65
- pbegin++;
66
- }
67
- let it2 = size - length;
68
- while (it2 !== size && b58[it2] === 0) {
69
- it2++;
70
- }
71
- let str = LEADER.repeat(zeroes);
72
- for (;it2 < size; ++it2) {
73
- str += ALPHABET.charAt(b58[it2]);
74
- }
75
- return str;
76
- }
77
- function decodeUnsafe(source) {
78
- if (typeof source !== "string") {
79
- throw new TypeError("Expected String");
80
- }
81
- if (source.length === 0) {
82
- return new Uint8Array;
83
- }
84
- let psz = 0;
85
- let zeroes = 0;
86
- let length = 0;
87
- while (source[psz] === LEADER) {
88
- zeroes++;
89
- psz++;
90
- }
91
- const size = (source.length - psz) * FACTOR + 1 >>> 0;
92
- const b256 = new Uint8Array(size);
93
- while (psz < source.length) {
94
- const charCode = source.charCodeAt(psz);
95
- if (charCode > 255) {
96
- return;
97
- }
98
- let carry = BASE_MAP[charCode];
99
- if (carry === 255) {
100
- return;
101
- }
102
- let i = 0;
103
- for (let it3 = size - 1;(carry !== 0 || i < length) && it3 !== -1; it3--, i++) {
104
- carry += BASE * b256[it3] >>> 0;
105
- b256[it3] = carry % 256 >>> 0;
106
- carry = carry / 256 >>> 0;
107
- }
108
- if (carry !== 0) {
109
- throw new Error("Non-zero carry");
110
- }
111
- length = i;
112
- psz++;
113
- }
114
- let it4 = size - length;
115
- while (it4 !== size && b256[it4] === 0) {
116
- it4++;
117
- }
118
- const vch = new Uint8Array(zeroes + (size - it4));
119
- let j = zeroes;
120
- while (it4 !== size) {
121
- vch[j++] = b256[it4++];
122
- }
123
- return vch;
124
- }
125
- function decode(string) {
126
- const buffer = decodeUnsafe(string);
127
- if (buffer) {
128
- return buffer;
129
- }
130
- throw new Error("Non-base" + BASE + " character");
131
- }
132
- return {
133
- encode,
134
- decodeUnsafe,
135
- decode
136
- };
137
- }
138
- var esm_default = base;
139
-
140
- // ../../node_modules/bs58/src/esm/index.js
141
- var ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
142
- var esm_default2 = esm_default(ALPHABET);
143
- // ../shared-ts/src/utils/validation.ts
144
- function isObject(x) {
145
- return x !== null && typeof x === "object";
146
- }
147
- function isString(x) {
148
- return typeof x === "string";
149
- }
150
- function isBoolean(x) {
151
- return typeof x === "boolean";
152
- }
153
-
154
- // ../shared-ts/src/utils/errors.ts
155
- function errorMessage(err) {
156
- try {
157
- if (typeof err === "string")
158
- return err;
159
- if (err && typeof err.message === "string") {
160
- return err.message;
161
- }
162
- return String(err ?? "");
163
- } catch {
164
- return "";
165
- }
166
- }
167
- function b64uField(prefix) {
168
- return `${prefix}B64u`;
169
- }
170
- var SENSITIVE_ERROR_FIELD_NAMES = [
171
- "nearPrivateKey",
172
- "near_private_key",
173
- "privateKey",
174
- "private_key",
175
- b64uField("seed"),
176
- "seed_b64u",
177
- b64uField("canonicalSeed"),
178
- "canonical_seed_b64u",
179
- b64uField("xClientBase"),
180
- "x_client_base_b64u",
181
- b64uField("clientOutputMask"),
182
- "client_output_mask_b64u",
183
- b64uField("clientRecoverableSecret"),
184
- "client_recoverable_secret_b64u",
185
- "prfOutput",
186
- "prf_output",
187
- "prfFirst",
188
- "prf_first",
189
- b64uField("prfFirst"),
190
- "prf_first_b64u",
191
- "prfSecond",
192
- "prf_second",
193
- b64uField("prfSecond"),
194
- "prf_second_b64u",
195
- b64uField("signingShare32"),
196
- "signing_share32_b64u",
197
- b64uField("clientNonceHandle"),
198
- "client_nonce_handle_b64u"
199
- ];
200
- function toError(e) {
201
- if (e instanceof Error)
202
- return e;
203
- const err = new Error(errorMessage(e));
204
- try {
205
- const src = e;
206
- if (typeof src?.name === "string")
207
- err.name = src.name;
208
- if (typeof src?.stack === "string")
209
- err.stack = src.stack;
210
- if (src && typeof src.code !== "undefined")
211
- err.code = src.code;
212
- if (src && typeof src.details !== "undefined")
213
- err.details = src.details;
214
- } catch {}
215
- return err;
216
- }
217
-
218
- // ../shared-ts/src/utils/base64.ts
219
- var base64Encode = (value) => {
220
- const bytes = ArrayBuffer.isView(value) ? new Uint8Array(value.buffer, value.byteOffset, value.byteLength) : new Uint8Array(value);
221
- let binary = "";
222
- for (let i = 0;i < bytes.length; i++) {
223
- binary += String.fromCharCode(bytes[i]);
224
- }
225
- return btoa(binary);
226
- };
227
- var base64UrlEncode = (value) => {
228
- return base64Encode(value).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
229
- };
230
-
231
- // ../shared-ts/src/utils/secureRandomId.ts
232
- var DEFAULT_SECURE_RANDOM_ID_BYTES = 32;
233
- function secureRandomBytes(length = DEFAULT_SECURE_RANDOM_ID_BYTES, label = "secure random bytes") {
234
- const byteLength = Math.max(1, Math.floor(Number(length) || 0));
235
- const cryptoApi = globalThis.crypto;
236
- if (typeof cryptoApi?.getRandomValues !== "function") {
237
- throw new Error(`WebCrypto getRandomValues is required for ${label}`);
238
- }
239
- return cryptoApi.getRandomValues(new Uint8Array(byteLength));
240
- }
241
- function secureRandomBase64Url(byteLength = DEFAULT_SECURE_RANDOM_ID_BYTES, label = "secure random id") {
242
- return base64UrlEncode(secureRandomBytes(byteLength, label));
243
- }
244
-
245
- // src/core/signingEngine/uiConfirm/awaitUserConfirmation.ts
246
- function awaitUserConfirmationV2(promptInput, opts = {}) {
247
- let prompt;
248
- let requestId;
249
- try {
250
- prompt = normalizeConfirmPrompt(promptInput);
251
- requestId = requestIdForPrompt(prompt);
252
- } catch (error) {
253
- return Promise.reject(new Error(`[signer-worker]: invalid confirmation prompt: ${toError(error).message}`));
254
- }
255
- return new Promise((resolve, reject) => {
256
- const channelToken = createChannelToken(requestId);
257
- let timeoutId;
258
- const cleanup = () => {
259
- if (timeoutId)
260
- clearTimeout(timeoutId);
261
- self.removeEventListener("message", onDecisionReceived);
262
- if (opts.signal)
263
- opts.signal.removeEventListener("abort", onAbort);
264
- };
265
- const onAbort = () => {
266
- cleanup();
267
- reject(new Error("[signer-worker]: confirmation aborted"));
268
- };
269
- const onDecisionReceived = (messageEvent) => {
270
- const env = messageEvent?.data;
271
- if (!isConfirmResponseEnvelope(env))
272
- return;
273
- if (!isValidUserConfirmOrigin(messageEvent))
274
- return;
275
- if (resolveEnvelopeRequestId(env) !== requestId)
276
- return;
277
- if (!isMatchingChannelToken(env, channelToken))
278
- return;
279
- cleanup();
280
- let response;
281
- try {
282
- response = env.data.confirmed ? buildConfirmedWorkerConfirmationResponse({
283
- requestId,
284
- data: env.data
285
- }) : env.data.walletSessionFailure ? {
286
- request_id: requestId,
287
- intent_digest: env.data.intentDigest,
288
- confirmed: false,
289
- registration_diagnostics: env.data.registrationDiagnostics,
290
- wallet_session_failure: env.data.walletSessionFailure
291
- } : {
292
- request_id: requestId,
293
- intent_digest: env.data.intentDigest,
294
- confirmed: false,
295
- registration_diagnostics: env.data.registrationDiagnostics,
296
- error: env.data.error
297
- };
298
- } catch (error) {
299
- return reject(toError(error));
300
- }
301
- return resolve(response);
302
- };
303
- self.addEventListener("message", onDecisionReceived);
304
- if (opts.timeoutMs && opts.timeoutMs > 0) {
305
- timeoutId = setTimeout(() => {
306
- cleanup();
307
- reject(new Error("[signer-worker]: confirmation timed out"));
308
- }, opts.timeoutMs);
309
- }
310
- if (opts.signal) {
311
- if (opts.signal.aborted) {
312
- cleanup();
313
- return reject(new Error("[signer-worker]: confirmation aborted"));
314
- }
315
- opts.signal.addEventListener("abort", onAbort);
316
- }
317
- try {
318
- const promptEnvelope = {
319
- type: "PROMPT_USER_CONFIRM_IN_JS_MAIN_THREAD" /* PROMPT_USER_CONFIRM_IN_JS_MAIN_THREAD */,
320
- requestId,
321
- channelToken,
322
- data: prompt
323
- };
324
- self.postMessage(promptEnvelope);
325
- } catch (postErr) {
326
- cleanup();
327
- console.error("[signer-worker][V2] postMessage failed", postErr);
328
- return reject(toError(postErr));
329
- }
330
- });
331
- }
332
- function normalizeConfirmPrompt(input) {
333
- if (!isObject(input)) {
334
- throw new Error("expected an object");
335
- }
336
- if (input.kind === "pending_request") {
337
- const requestId = normalizePromptRequestId(input.requestId);
338
- const requestToken = normalizePromptRequestToken(input.requestToken);
339
- return { kind: "pending_request", requestId, requestToken };
340
- }
341
- if (input.kind === "export_request") {
342
- if (!isObject(input.request)) {
343
- throw new Error("export request is missing");
344
- }
345
- normalizePromptRequestId(input.request.requestId);
346
- return input;
347
- }
348
- throw new Error("unsupported prompt kind");
349
- }
350
- function requestIdForPrompt(prompt) {
351
- switch (prompt.kind) {
352
- case "pending_request":
353
- return prompt.requestId;
354
- case "export_request":
355
- return normalizePromptRequestId(prompt.request.requestId);
356
- default:
357
- return assertNever(prompt);
358
- }
359
- }
360
- function normalizePromptRequestId(value) {
361
- if (!isString(value)) {
362
- throw new Error("missing requestId");
363
- }
364
- const requestId = value.trim();
365
- if (!requestId) {
366
- throw new Error("missing requestId");
367
- }
368
- return requestId;
369
- }
370
- function normalizePromptRequestToken(value) {
371
- if (!isString(value)) {
372
- throw new Error("missing requestToken");
373
- }
374
- const requestToken = value.trim();
375
- if (!requestToken) {
376
- throw new Error("missing requestToken");
377
- }
378
- return requestToken;
379
- }
380
- function assertNever(value) {
381
- throw new Error(`Unexpected confirmation prompt kind: ${String(value)}`);
382
- }
383
- function buildConfirmedWorkerConfirmationResponse(args) {
384
- const nonceLeases = normalizeNonceLeaseRefs(args.data.nonceLeases);
385
- const base2 = {
386
- request_id: args.requestId,
387
- confirmed: true,
388
- ...args.data.intentDigest ? { intent_digest: args.data.intentDigest } : {},
389
- ...args.data.credential ? { credential: args.data.credential } : {},
390
- ...args.data.operationStepUpPreparation ? { operation_step_up_preparation: args.data.operationStepUpPreparation } : {},
391
- ...args.data.otpCode ? { otp_code: args.data.otpCode } : {},
392
- ...args.data.emailOtpChallengeId ? { email_otp_challenge_id: args.data.emailOtpChallengeId } : {},
393
- ...args.data.registrationDiagnostics ? { registration_diagnostics: args.data.registrationDiagnostics } : {}
394
- };
395
- if (args.data.nearTransactionReadiness) {
396
- if (args.data.transactionContext || nonceLeases !== undefined) {
397
- throw new Error("Secure confirm NEAR readiness cannot include top-level transaction context");
398
- }
399
- return {
400
- ...base2,
401
- near_transaction_readiness: args.data.nearTransactionReadiness
402
- };
403
- }
404
- if (args.data.transactionContext) {
405
- if (!nonceLeases?.length) {
406
- throw new Error("Secure confirm transaction response requires nonceLeases");
407
- }
408
- return {
409
- ...base2,
410
- transaction_context: args.data.transactionContext,
411
- nonce_leases: nonceLeases
412
- };
413
- }
414
- if (nonceLeases !== undefined) {
415
- throw new Error("Secure confirm response nonceLeases require transactionContext");
416
- }
417
- return base2;
418
- }
419
- function normalizeNonceLeaseRefs(value) {
420
- if (value == null)
421
- return;
422
- if (!Array.isArray(value)) {
423
- throw new Error("Invalid secure confirm response nonceLeases: expected array");
424
- }
425
- return value.map(normalizeNonceLeaseRef);
426
- }
427
- function normalizeNonceLeaseRef(value) {
428
- if (!isObject(value)) {
429
- throw new Error("Invalid secure confirm response nonceLease: expected object");
430
- }
431
- const leaseId = normalizeNonceLeaseString(value.leaseId, "nonceLease.leaseId");
432
- const operationId = normalizeNonceLeaseString(value.operationId, "nonceLease.operationId");
433
- const operationFingerprint = normalizeNonceLeaseString(value.operationFingerprint, "nonceLease.operationFingerprint");
434
- const nonce = normalizeNonceLeaseString(value.nonce, "nonceLease.nonce");
435
- const batchId = value.batchId == null ? undefined : normalizeNonceLeaseString(value.batchId, "nonceLease.batchId");
436
- const txIndex = normalizeNonceLeaseTxIndex(value.txIndex);
437
- return {
438
- leaseId,
439
- operationId,
440
- operationFingerprint,
441
- nonce,
442
- ...batchId ? { batchId } : {},
443
- ...txIndex !== undefined ? { txIndex } : {}
444
- };
445
- }
446
- function normalizeNonceLeaseString(value, field) {
447
- if (!isString(value)) {
448
- throw new Error(`Invalid secure confirm response ${field}: expected string`);
449
- }
450
- const normalized = value.trim();
451
- if (!normalized) {
452
- throw new Error(`Invalid secure confirm response ${field}: expected non-empty string`);
453
- }
454
- return normalized;
455
- }
456
- function normalizeNonceLeaseTxIndex(value) {
457
- if (value == null)
458
- return;
459
- if (typeof value !== "number" || !Number.isSafeInteger(value)) {
460
- throw new Error("Invalid secure confirm response nonceLease.txIndex: expected safe integer");
461
- }
462
- return value;
463
- }
464
- function isConfirmResponseEnvelope(msg) {
465
- if (!isObject(msg))
466
- return false;
467
- if (msg.type !== "USER_PASSKEY_CONFIRM_RESPONSE" /* USER_PASSKEY_CONFIRM_RESPONSE */)
468
- return false;
469
- const data = msg.data;
470
- if (!isObject(data))
471
- return false;
472
- return isString(data.requestId) && isBoolean(data.confirmed);
473
- }
474
- function createChannelToken(requestId) {
475
- const seed = String(requestId || "").trim() || "sc";
476
- const randomPart = secureRandomBase64Url(32, "user confirmation channel tokens");
477
- return `${seed}:${randomPart}`;
478
- }
479
- function resolveEnvelopeRequestId(env) {
480
- const topLevelRequestId = isString(env.requestId) ? env.requestId.trim() : "";
481
- if (topLevelRequestId) {
482
- return topLevelRequestId;
483
- }
484
- return String(env.data.requestId || "").trim();
485
- }
486
- function isMatchingChannelToken(env, expectedChannelToken) {
487
- return (normalizeOptionalNonEmptyString(env.channelToken) || "") === expectedChannelToken;
488
- }
489
- function isValidUserConfirmOrigin(messageEvent) {
490
- const origin = messageEvent.origin.trim();
491
- if (!origin) {
492
- return true;
493
- }
494
- try {
495
- const selfOrigin = String(self.location?.origin || "").trim();
496
- return !!selfOrigin && origin === selfOrigin;
497
- } catch {
498
- return false;
499
- }
500
- }
501
-
502
- // src/core/signingEngine/workerManager/workers/passkey-confirm.worker.ts
503
- globalThis.awaitUserConfirmationV2 = awaitUserConfirmationV2;
504
- function asRecord(value) {
505
- return value && typeof value === "object" && !Array.isArray(value) ? value : null;
506
- }
507
- function asIncomingMessage(value) {
508
- const record = asRecord(value);
509
- return record ? {
510
- id: record.id,
511
- type: record.type,
512
- payload: record.payload
513
- } : {};
514
- }
515
- function postUserConfirmWorkerResponse(id, payload) {
516
- const response = payload.success === true ? {
517
- ...typeof id === "string" && id.trim() ? { id: id.trim() } : {},
518
- success: true,
519
- data: payload.data
520
- } : {
521
- ...typeof id === "string" && id.trim() ? { id: id.trim() } : {},
522
- success: false,
523
- error: payload.error
524
- };
525
- self.postMessage(response);
526
- }
527
- function forwardUserConfirmProgressToHost(value) {
528
- const envelope = asRecord(value);
529
- if (envelope)
530
- self.postMessage(envelope);
531
- }
532
- function parseSecureConfirmRequestPayload(value) {
533
- const record = asRecord(value);
534
- if (!record)
535
- return null;
536
- if ("request" in record)
537
- return null;
538
- const requestId = typeof record.requestId === "string" ? record.requestId.trim() : "";
539
- return requestId ? { requestId } : null;
540
- }
541
- self.onmessage = (event) => {
542
- const incoming = asIncomingMessage(event.data);
543
- const eventType = incoming.type;
544
- if (eventType === "USER_PASSKEY_CONFIRM_RESPONSE" /* USER_PASSKEY_CONFIRM_RESPONSE */)
545
- return;
546
- if (eventType === "USER_PASSKEY_CONFIRM_PROGRESS" /* USER_PASSKEY_CONFIRM_PROGRESS */) {
547
- forwardUserConfirmProgressToHost(event.data);
548
- return;
549
- }
550
- const id = incoming.id;
551
- if (eventType === "PING") {
552
- postUserConfirmWorkerResponse(id, { success: true, data: { ok: true } });
553
- return;
554
- }
555
- if (eventType === "SECURE_CONFIRM_REQUEST") {
556
- (async () => {
557
- try {
558
- const payload = asRecord(incoming.payload);
559
- const request = parseSecureConfirmRequestPayload(payload);
560
- if (!request) {
561
- postUserConfirmWorkerResponse(id, {
562
- success: false,
563
- error: "Invalid SECURE_CONFIRM_REQUEST payload: missing requestId"
564
- });
565
- return;
566
- }
567
- const requestToken = typeof id === "string" ? id.trim() : "";
568
- if (!requestToken) {
569
- postUserConfirmWorkerResponse(id, {
570
- success: false,
571
- error: "Invalid SECURE_CONFIRM_REQUEST message: missing id"
572
- });
573
- return;
574
- }
575
- await awaitUserConfirmationV2({
576
- kind: "pending_request",
577
- requestId: request.requestId,
578
- requestToken
579
- });
580
- postUserConfirmWorkerResponse(id, {
581
- success: true,
582
- data: { ok: true }
583
- });
584
- } catch (error) {
585
- postUserConfirmWorkerResponse(id, {
586
- success: false,
587
- error: error instanceof Error ? error.message : String(error)
588
- });
589
- }
590
- })();
591
- return;
592
- }
593
- if (typeof id === "string" && id.trim()) {
594
- postUserConfirmWorkerResponse(id, {
595
- success: false,
596
- error: `Unsupported UserConfirm worker message type: ${String(eventType)}`
597
- });
598
- }
599
- };
600
- self.onerror = (error) => {
601
- console.error("[passkey-confirm-worker] error:", error);
602
- };
603
- self.onunhandledrejection = (event) => {
604
- console.error("[passkey-confirm-worker] Unhandled promise rejection:", event.reason);
605
- event.preventDefault();
606
- };
1
+ function y($){return String($??"").trim()}function A($){return y($)||void 0}function g($){if($.length>=255)throw new TypeError("Alphabet too long");let Y=new Uint8Array(256);for(let J=0;J<Y.length;J++)Y[J]=255;for(let J=0;J<$.length;J++){let X=$.charAt(J),Z=X.charCodeAt(0);if(Y[Z]!==255)throw new TypeError(X+" is ambiguous");Y[Z]=J}let G=$.length,Q=$.charAt(0),_=Math.log(G)/Math.log(256),K=Math.log(256)/Math.log(G);function W(J){if(J instanceof Uint8Array);else if(ArrayBuffer.isView(J))J=new Uint8Array(J.buffer,J.byteOffset,J.byteLength);else if(Array.isArray(J))J=Uint8Array.from(J);if(!(J instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(J.length===0)return"";let X=0,Z=0,V=0,D=J.length;while(V!==D&&J[V]===0)V++,X++;let M=(D-V)*K+1>>>0,F=new Uint8Array(M);while(V!==D){let N=J[V],H=0;for(let B=M-1;(N!==0||H<Z)&&B!==-1;B--,H++)N+=256*F[B]>>>0,F[B]=N%G>>>0,N=N/G>>>0;if(N!==0)throw new Error("Non-zero carry");Z=H,V++}let U=M-Z;while(U!==M&&F[U]===0)U++;let j=Q.repeat(X);for(;U<M;++U)j+=$.charAt(F[U]);return j}function R(J){if(typeof J!=="string")throw new TypeError("Expected String");if(J.length===0)return new Uint8Array;let X=0,Z=0,V=0;while(J[X]===Q)Z++,X++;let D=(J.length-X)*_+1>>>0,M=new Uint8Array(D);while(X<J.length){let N=J.charCodeAt(X);if(N>255)return;let H=Y[N];if(H===255)return;let B=0;for(let h=D-1;(H!==0||B<V)&&h!==-1;h--,B++)H+=G*M[h]>>>0,M[h]=H%256>>>0,H=H/256>>>0;if(H!==0)throw new Error("Non-zero carry");V=B,X++}let F=D-V;while(F!==D&&M[F]===0)F++;let U=new Uint8Array(Z+(D-F)),j=Z;while(F!==D)U[j++]=M[F++];return U}function P(J){let X=R(J);if(X)return X;throw new Error("Non-base"+G+" character")}return{encode:W,decodeUnsafe:R,decode:P}}var z=g;var m="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",p=z(m);function q($){return $!==null&&typeof $==="object"}function C($){return typeof $==="string"}function I($){return typeof $==="boolean"}function c($){try{if(typeof $==="string")return $;if($&&typeof $.message==="string")return $.message;return String($??"")}catch{return""}}function L($){return`${$}B64u`}var I0=["nearPrivateKey","near_private_key","privateKey","private_key",L("seed"),"seed_b64u",L("canonicalSeed"),"canonical_seed_b64u",L("xClientBase"),"x_client_base_b64u",L("clientOutputMask"),"client_output_mask_b64u",L("clientRecoverableSecret"),"client_recoverable_secret_b64u","prfOutput","prf_output","prfFirst","prf_first",L("prfFirst"),"prf_first_b64u","prfSecond","prf_second",L("prfSecond"),"prf_second_b64u",L("signingShare32"),"signing_share32_b64u",L("clientNonceHandle"),"client_nonce_handle_b64u"];function k($){if($ instanceof Error)return $;let Y=new Error(c($));try{let G=$;if(typeof G?.name==="string")Y.name=G.name;if(typeof G?.stack==="string")Y.stack=G.stack;if(G&&typeof G.code!=="undefined")Y.code=G.code;if(G&&typeof G.details!=="undefined")Y.details=G.details}catch{}return Y}var d=($)=>{let Y=ArrayBuffer.isView($)?new Uint8Array($.buffer,$.byteOffset,$.byteLength):new Uint8Array($),G="";for(let Q=0;Q<Y.length;Q++)G+=String.fromCharCode(Y[Q]);return btoa(G)};var f=($)=>{return d($).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")};var x=32;function u($=x,Y="secure random bytes"){let G=Math.max(1,Math.floor(Number($)||0)),Q=globalThis.crypto;if(typeof Q?.getRandomValues!=="function")throw new Error(`WebCrypto getRandomValues is required for ${Y}`);return Q.getRandomValues(new Uint8Array(G))}function b($=x,Y="secure random id"){return f(u($,Y))}function E($,Y={}){let G,Q;try{G=l($),Q=t(G)}catch(_){return Promise.reject(new Error(`[signer-worker]: invalid confirmation prompt: ${k(_).message}`))}return new Promise((_,K)=>{let W=$0(Q),R,P=()=>{if(R)clearTimeout(R);if(self.removeEventListener("message",X),Y.signal)Y.signal.removeEventListener("abort",J)},J=()=>{P(),K(new Error("[signer-worker]: confirmation aborted"))},X=(Z)=>{let V=Z?.data;if(!e(V))return;if(!J0(Z))return;if(Y0(V)!==Q)return;if(!G0(V,W))return;P();let D;try{D=V.data.confirmed?o({requestId:Q,data:V.data}):V.data.walletSessionFailure?{request_id:Q,intent_digest:V.data.intentDigest,confirmed:!1,registration_diagnostics:V.data.registrationDiagnostics,wallet_session_failure:V.data.walletSessionFailure}:{request_id:Q,intent_digest:V.data.intentDigest,confirmed:!1,registration_diagnostics:V.data.registrationDiagnostics,error:V.data.error}}catch(M){return K(k(M))}return _(D)};if(self.addEventListener("message",X),Y.timeoutMs&&Y.timeoutMs>0)R=setTimeout(()=>{P(),K(new Error("[signer-worker]: confirmation timed out"))},Y.timeoutMs);if(Y.signal){if(Y.signal.aborted)return P(),K(new Error("[signer-worker]: confirmation aborted"));Y.signal.addEventListener("abort",J)}try{let Z={type:"PROMPT_USER_CONFIRM_IN_JS_MAIN_THREAD",requestId:Q,channelToken:W,data:G};self.postMessage(Z)}catch(Z){return P(),console.error("[signer-worker][V2] postMessage failed",Z),K(k(Z))}})}function l($){if(!q($))throw new Error("expected an object");if($.kind==="pending_request"){let Y=w($.requestId),G=n($.requestToken);return{kind:"pending_request",requestId:Y,requestToken:G}}if($.kind==="export_request"){if(!q($.request))throw new Error("export request is missing");return w($.request.requestId),$}throw new Error("unsupported prompt kind")}function t($){switch($.kind){case"pending_request":return $.requestId;case"export_request":return w($.request.requestId);default:return s($)}}function w($){if(!C($))throw new Error("missing requestId");let Y=$.trim();if(!Y)throw new Error("missing requestId");return Y}function n($){if(!C($))throw new Error("missing requestToken");let Y=$.trim();if(!Y)throw new Error("missing requestToken");return Y}function s($){throw new Error(`Unexpected confirmation prompt kind: ${String($)}`)}function o($){let Y=i($.data.nonceLeases),G={request_id:$.requestId,confirmed:!0,...$.data.intentDigest?{intent_digest:$.data.intentDigest}:{},...$.data.credential?{credential:$.data.credential}:{},...$.data.operationStepUpPreparation?{operation_step_up_preparation:$.data.operationStepUpPreparation}:{},...$.data.otpCode?{otp_code:$.data.otpCode}:{},...$.data.emailOtpChallengeId?{email_otp_challenge_id:$.data.emailOtpChallengeId}:{},...$.data.registrationDiagnostics?{registration_diagnostics:$.data.registrationDiagnostics}:{}};if($.data.nearTransactionReadiness){if($.data.transactionContext||Y!==void 0)throw new Error("Secure confirm NEAR readiness cannot include top-level transaction context");return{...G,near_transaction_readiness:$.data.nearTransactionReadiness}}if($.data.transactionContext){if(!Y?.length)throw new Error("Secure confirm transaction response requires nonceLeases");return{...G,transaction_context:$.data.transactionContext,nonce_leases:Y}}if(Y!==void 0)throw new Error("Secure confirm response nonceLeases require transactionContext");return G}function i($){if($==null)return;if(!Array.isArray($))throw new Error("Invalid secure confirm response nonceLeases: expected array");return $.map(a)}function a($){if(!q($))throw new Error("Invalid secure confirm response nonceLease: expected object");let Y=S($.leaseId,"nonceLease.leaseId"),G=S($.operationId,"nonceLease.operationId"),Q=S($.operationFingerprint,"nonceLease.operationFingerprint"),_=S($.nonce,"nonceLease.nonce"),K=$.batchId==null?void 0:S($.batchId,"nonceLease.batchId"),W=r($.txIndex);return{leaseId:Y,operationId:G,operationFingerprint:Q,nonce:_,...K?{batchId:K}:{},...W!==void 0?{txIndex:W}:{}}}function S($,Y){if(!C($))throw new Error(`Invalid secure confirm response ${Y}: expected string`);let G=$.trim();if(!G)throw new Error(`Invalid secure confirm response ${Y}: expected non-empty string`);return G}function r($){if($==null)return;if(typeof $!=="number"||!Number.isSafeInteger($))throw new Error("Invalid secure confirm response nonceLease.txIndex: expected safe integer");return $}function e($){if(!q($))return!1;if($.type!=="USER_PASSKEY_CONFIRM_RESPONSE")return!1;let Y=$.data;if(!q(Y))return!1;return C(Y.requestId)&&I(Y.confirmed)}function $0($){let Y=String($||"").trim()||"sc",G=b(32,"user confirmation channel tokens");return`${Y}:${G}`}function Y0($){let Y=C($.requestId)?$.requestId.trim():"";if(Y)return Y;return String($.data.requestId||"").trim()}function G0($,Y){return(A($.channelToken)||"")===Y}function J0($){let Y=$.origin.trim();if(!Y)return!0;try{let G=String(self.location?.origin||"").trim();return!!G&&Y===G}catch{return!1}}globalThis.awaitUserConfirmationV2=E;function T($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function Q0($){let Y=T($);return Y?{id:Y.id,type:Y.type,payload:Y.payload}:{}}function O($,Y){let G=Y.success===!0?{...typeof $==="string"&&$.trim()?{id:$.trim()}:{},success:!0,data:Y.data}:{...typeof $==="string"&&$.trim()?{id:$.trim()}:{},success:!1,error:Y.error};self.postMessage(G)}function V0($){let Y=T($);if(Y)self.postMessage(Y)}function X0($){let Y=T($);if(!Y)return null;if("request"in Y)return null;let G=typeof Y.requestId==="string"?Y.requestId.trim():"";return G?{requestId:G}:null}self.onmessage=($)=>{let Y=Q0($.data),G=Y.type;if(G==="USER_PASSKEY_CONFIRM_RESPONSE")return;if(G==="USER_PASSKEY_CONFIRM_PROGRESS"){V0($.data);return}let Q=Y.id;if(G==="PING"){O(Q,{success:!0,data:{ok:!0}});return}if(G==="SECURE_CONFIRM_REQUEST"){(async()=>{try{let _=T(Y.payload),K=X0(_);if(!K){O(Q,{success:!1,error:"Invalid SECURE_CONFIRM_REQUEST payload: missing requestId"});return}let W=typeof Q==="string"?Q.trim():"";if(!W){O(Q,{success:!1,error:"Invalid SECURE_CONFIRM_REQUEST message: missing id"});return}await E({kind:"pending_request",requestId:K.requestId,requestToken:W}),O(Q,{success:!0,data:{ok:!0}})}catch(_){O(Q,{success:!1,error:_ instanceof Error?_.message:String(_)})}})();return}if(typeof Q==="string"&&Q.trim())O(Q,{success:!1,error:`Unsupported UserConfirm worker message type: ${String(G)}`})};self.onerror=($)=>{console.error("[passkey-confirm-worker] error:",$)};self.onunhandledrejection=($)=>{console.error("[passkey-confirm-worker] Unhandled promise rejection:",$.reason),$.preventDefault()};