@incodetech/core 0.0.0-dev-20260914-656e6757 → 0.0.0-dev-20260915-1e83a656

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 (67) hide show
  1. package/dist/{BrowserDiagnosticsCryptoProvider-CCQvC6Je.esm.js → BrowserDiagnosticsCryptoProvider-OJMavJQz.esm.js} +1 -1
  2. package/dist/{FaceDetectionProvider-Dz_zxzth.esm.js → FaceDetectionProvider-CWujhVWD.esm.js} +4 -4
  3. package/dist/ae-signature.esm.js +1 -1
  4. package/dist/{apiError-dPoZmip-.esm.js → apiError-DO9I5ydK.esm.js} +1 -1
  5. package/dist/authentication.esm.js +2 -2
  6. package/dist/{authenticationManager-kx--UIcD.esm.js → authenticationManager-D_1IoHik.esm.js} +3 -3
  7. package/dist/{authenticationStateMachine-GgtmM697.esm.js → authenticationStateMachine-CSb9j50d.esm.js} +2 -2
  8. package/dist/consent.d.ts +1 -1
  9. package/dist/{consentManager-5HWbGwOa.d.ts → consentManager-uhDPdU6i.d.ts} +9 -9
  10. package/dist/{deepsightLoader-CLFrwfgX.esm.js → deepsightLoader-DrRcGBbp.esm.js} +3 -3
  11. package/dist/document-capture.d.ts +1 -1
  12. package/dist/{documentCaptureManager-DD0qtFdE.d.ts → documentCaptureManager-DensIj5F.d.ts} +1 -1
  13. package/dist/dynamic-forms.esm.js +2 -2
  14. package/dist/{dynamicFormsManager-v80yAqNy.esm.js → dynamicFormsManager-Xo2J0LR-.esm.js} +1 -1
  15. package/dist/{dynamicFormsStateMachine-C2YYaamd.esm.js → dynamicFormsStateMachine-DCTBl39U.esm.js} +1 -1
  16. package/dist/ekyb.esm.js +3 -3
  17. package/dist/{ekybManager-BJOCBpFZ.esm.js → ekybManager-BYtX3uqP.esm.js} +1 -1
  18. package/dist/{ekybStateMachine-BP9BqHVy.esm.js → ekybStateMachine-C5mn42vC.esm.js} +1 -1
  19. package/dist/electronic-signature.esm.js +1 -1
  20. package/dist/{electronicSignatureManager-B85WICzC.esm.js → electronicSignatureManager-BGtmVYnW.esm.js} +1 -1
  21. package/dist/extensibility.d.ts +5 -5
  22. package/dist/extensibility.esm.js +10 -10
  23. package/dist/{faceCaptureManagerFactory-CbIMYS4-.esm.js → faceCaptureManagerFactory-jOdgsEsg.esm.js} +1 -1
  24. package/dist/{faceCaptureSetup-BlUhLA18.esm.js → faceCaptureSetup-BuI9bUDW.esm.js} +4 -4
  25. package/dist/{feature-management-DFmsuX0f.esm.js → feature-management-BEx5c9G9.esm.js} +1 -1
  26. package/dist/feature-management.esm.js +1 -1
  27. package/dist/flow.esm.js +3 -3
  28. package/dist/{flowCompletionService-CGROnLOn.esm.js → flowCompletionService-DFX3bbht.esm.js} +1 -1
  29. package/dist/{flowServices-B5FPMSB_.esm.js → flowServices-C7IuCG4r.esm.js} +4 -4
  30. package/dist/geolocation.esm.js +2 -2
  31. package/dist/{geolocationManager-COnUDd3H.esm.js → geolocationManager-B2ZC79qg.esm.js} +1 -1
  32. package/dist/{geolocationStateMachine-DLb2L18_.esm.js → geolocationStateMachine-C8U9DuMO.esm.js} +1 -1
  33. package/dist/id-ocr.d.ts +1 -1
  34. package/dist/id-selfie-flow.d.ts +1 -1
  35. package/dist/id-selfie-flow.esm.js +7 -7
  36. package/dist/id.esm.js +3 -3
  37. package/dist/{idCaptureDefaults-Cj1elqAi.esm.js → idCaptureDefaults-BqPUqWvx.esm.js} +272 -29
  38. package/dist/{idCaptureManager-ssRJRsGQ.esm.js → idCaptureManager-JfqtqR7F.esm.js} +3 -3
  39. package/dist/{idCaptureServices-BRq1TB4U.esm.js → idCaptureServices-DLL6vNtO.esm.js} +4 -4
  40. package/dist/{idCaptureStateMachine-DS6fNfwz.esm.js → idCaptureStateMachine-Dt-gpoLr.esm.js} +9 -9
  41. package/dist/{idOcrManager-CFlDwUvN.d.ts → idOcrManager-BF_cXZq8.d.ts} +1 -1
  42. package/dist/identity-reuse.d.ts +1 -1
  43. package/dist/{identityReuseManager-D6pD4hcZ.d.ts → identityReuseManager-v2TH5g7e.d.ts} +1 -1
  44. package/dist/index.esm.js +1 -1
  45. package/dist/mandatory-consent.d.ts +1 -1
  46. package/dist/{mandatoryConsentManager-CkK0Qzue.d.ts → mandatoryConsentManager-2O5wztkg.d.ts} +5 -5
  47. package/dist/{multipartRecordingService-B3C_zlev.esm.js → multipartRecordingService-CWxZ5mTi.esm.js} +13 -2
  48. package/dist/personhood.esm.js +4 -4
  49. package/dist/qe-signature.esm.js +1 -1
  50. package/dist/{runChildModule-0wMdwznt.esm.js → runChildModule-BOJWRUG7.esm.js} +1 -1
  51. package/dist/{sdkVersion-CIExIk-y.esm.js → sdkVersion-BpWCQ-V3.esm.js} +1 -1
  52. package/dist/selfie.esm.js +5 -5
  53. package/dist/{selfieManager-BVK8Yo__.esm.js → selfieManager-gOb5R-nd.esm.js} +3 -3
  54. package/dist/{selfieStateMachine-CnrxNcRk.esm.js → selfieStateMachine-B1Ni3iDU.esm.js} +2 -2
  55. package/dist/{session-c5Zk9ScZ.esm.js → session-2LBHdwZv.esm.js} +3 -3
  56. package/dist/session.esm.js +4 -4
  57. package/dist/{sessionInitializer-HuJ4OYs0.esm.js → sessionInitializer-CX84J4ZG.esm.js} +3 -3
  58. package/dist/{setup-ItT0ngv1.esm.js → setup-CokQ-yUA.esm.js} +4 -4
  59. package/dist/{trueSightService-Cmein6eU.esm.js → trueSightService-D03Z4v0r.esm.js} +2 -2
  60. package/dist/video-selfie.d.ts +1 -1
  61. package/dist/video-selfie.esm.js +5 -5
  62. package/dist/{videoSelfieCameraWarmer-Djel_Uco.esm.js → videoSelfieCameraWarmer-DVmyNivl.esm.js} +3 -3
  63. package/dist/{videoSelfieStepDetector-5YHFe0Mq.d.ts → videoSelfieStepDetector-Ct2y9wZo.d.ts} +41 -11
  64. package/dist/wasm.esm.js +1 -1
  65. package/dist/workflow.d.ts +4 -4
  66. package/dist/workflow.esm.js +14 -14
  67. package/package.json +1 -1
@@ -1,20 +1,161 @@
1
1
  import { b as resolveWasmSource, p as WASM_MODEL_FILES } from "./wasmWebClient-B7baE-Wf.esm.js";
2
- import { p as getBarcodeEnhanceModelUrl } from "./setup-ItT0ngv1.esm.js";
2
+ import { p as getBarcodeEnhanceModelUrl } from "./setup-CokQ-yUA.esm.js";
3
3
  import { s as wasmRuntime, t as getResolvedModelSource } from "./warmup-CUUnwYxe.esm.js";
4
4
  import { i as BaseWasmProvider } from "./safeStorage-B-trhxg6.esm.js";
5
5
  import { t as IncodeCanvas } from "./canvas-BxFzWTt-.esm.js";
6
+ //#region ../infra/src/media/cameraCompositorWorker.ts
7
+ /**
8
+ * Whether the worker transport is available here. Every probe must hold;
9
+ * anything missing routes `CameraCompositor` to its main-thread path.
10
+ */
11
+ function canUseCameraCompositorWorker() {
12
+ const g = globalThis;
13
+ return typeof g.MediaStreamTrackProcessor === "function" && typeof g.MediaStreamTrackGenerator === "function" && typeof g.Worker === "function" && typeof g.OffscreenCanvas === "function" && typeof g.VideoFrame === "function";
14
+ }
15
+ function createTrackProcessor(track) {
16
+ const Ctor = globalThis.MediaStreamTrackProcessor;
17
+ if (!Ctor) throw new Error("MediaStreamTrackProcessor unavailable");
18
+ return new Ctor({ track });
19
+ }
20
+ function createTrackGenerator() {
21
+ const Ctor = globalThis.MediaStreamTrackGenerator;
22
+ if (!Ctor) throw new Error("MediaStreamTrackGenerator unavailable");
23
+ return new Ctor({ kind: "video" });
24
+ }
25
+ /**
26
+ * The worker's entire logic. SELF-CONTAINED (serialized via toString into the
27
+ * blob): no module references. Frame loop: read → scale within the bound →
28
+ * write → close. The processor buffers at most one frame, so reads always
29
+ * yield the freshest frame; while paused, frames are still read and closed so
30
+ * the camera's frame pool stays healthy — an unclosed VideoFrame can stall the
31
+ * capture pipeline, which the recording must never do.
32
+ */
33
+ function cameraCompositorWorkerMain(scope) {
34
+ const g = globalThis;
35
+ let maxLongEdge = 1280;
36
+ let maxShortEdge = 720;
37
+ let canvas = null;
38
+ let ctx = null;
39
+ let writer = null;
40
+ let activeReader = null;
41
+ let generation = 0;
42
+ let paused = false;
43
+ let announceNextFrame = false;
44
+ const boundedSize = (width, height) => {
45
+ const scale = Math.min(1, maxLongEdge / Math.max(width, height), maxShortEdge / Math.min(width, height));
46
+ return {
47
+ width: Math.max(1, Math.round(width * scale)),
48
+ height: Math.max(1, Math.round(height * scale))
49
+ };
50
+ };
51
+ const scaled = (frame) => {
52
+ const size = boundedSize(frame.displayWidth, frame.displayHeight);
53
+ if (!canvas || !ctx || size.width === frame.displayWidth && size.height === frame.displayHeight) return frame;
54
+ if (canvas.width !== size.width || canvas.height !== size.height) {
55
+ canvas.width = size.width;
56
+ canvas.height = size.height;
57
+ }
58
+ ctx.drawImage(frame, 0, 0, size.width, size.height);
59
+ const out = new g.VideoFrame(canvas, { timestamp: frame.timestamp });
60
+ frame.close();
61
+ return out;
62
+ };
63
+ const pump = async (readable, gen) => {
64
+ const reader = readable.getReader();
65
+ activeReader = reader;
66
+ try {
67
+ for (;;) {
68
+ const { value: frame, done } = await reader.read();
69
+ if (done) {
70
+ if (gen === generation) scope.postMessage({ type: "ended" });
71
+ return;
72
+ }
73
+ if (gen !== generation) {
74
+ frame.close();
75
+ return;
76
+ }
77
+ if (paused || !writer) {
78
+ frame.close();
79
+ continue;
80
+ }
81
+ await writer.write(scaled(frame));
82
+ if (announceNextFrame) {
83
+ announceNextFrame = false;
84
+ scope.postMessage({ type: "frame" });
85
+ }
86
+ }
87
+ } catch (error) {
88
+ if (gen === generation) scope.postMessage({
89
+ type: "fatal",
90
+ message: String(error)
91
+ });
92
+ }
93
+ };
94
+ const switchSource = (readable) => {
95
+ generation += 1;
96
+ const previous = activeReader;
97
+ activeReader = null;
98
+ previous?.cancel().catch(() => {});
99
+ pump(readable, generation);
100
+ };
101
+ scope.onmessage = (event) => {
102
+ const message = event.data;
103
+ switch (message.type) {
104
+ case "start":
105
+ maxLongEdge = message.maxLongEdge;
106
+ maxShortEdge = message.maxShortEdge;
107
+ canvas = new g.OffscreenCanvas(1, 1);
108
+ ctx = canvas.getContext("2d");
109
+ writer = message.writable.getWriter();
110
+ announceNextFrame = true;
111
+ switchSource(message.readable);
112
+ break;
113
+ case "source":
114
+ switchSource(message.readable);
115
+ break;
116
+ case "pause":
117
+ paused = true;
118
+ break;
119
+ case "resume":
120
+ paused = false;
121
+ announceNextFrame = true;
122
+ break;
123
+ default: break;
124
+ }
125
+ };
126
+ }
127
+ /** Assembles the classic-worker script from the serialized worker main. */
128
+ function buildCameraCompositorWorkerSource() {
129
+ return [`const workerMain = ${cameraCompositorWorkerMain.toString()};`, "workerMain(self);"].join("\n");
130
+ }
131
+ //#endregion
6
132
  //#region ../infra/src/media/CameraCompositor.ts
7
133
  const MAX_COMPOSITE_LONG_EDGE = 1280;
8
134
  const MAX_COMPOSITE_SHORT_EDGE = 720;
9
135
  const FRAME_INTERVAL_TOLERANCE_RATIO = .9;
10
136
  const DEFAULT_RESUME_TIMEOUT_MS = 2e3;
11
137
  /**
12
- * Composites the *active* camera into a canvas and exposes the canvas as a
13
- * single, stable `MediaStream` to record. Switching cameras (front ↔ back)
14
- * just repoints what the canvas draws — the output stream and its audio track
15
- * are never replaced — so a single `MediaRecorder` produces one continuous
16
- * video that follows the camera switches (V1 parity), instead of restarting
17
- * per camera.
138
+ * Composites the *active* camera into a single, stable `MediaStream` to
139
+ * record. Switching cameras (front ↔ back) just repoints the source — the
140
+ * output stream and its audio track are never replaced — so a single
141
+ * `MediaRecorder` produces one continuous video that follows the camera
142
+ * switches (V1 parity), instead of restarting per camera.
143
+ *
144
+ * Two transports (ENG-55397):
145
+ * - **Worker (preferred, Chromium 94+):** camera track →
146
+ * `MediaStreamTrackProcessor` → worker scales on an `OffscreenCanvas` →
147
+ * `MediaStreamTrackGenerator`. The main thread is not in the frame path, so
148
+ * the recording stays at camera rate while the synchronous ID detection
149
+ * tick saturates the main thread (measured: 4–9 fps main-thread vs 30 fps
150
+ * worker on a Galaxy S21 under the same load).
151
+ * - **Main thread (fallback):** hidden `<video>` → rVFC/rAF → canvas →
152
+ * `captureStream`, for Safari, Firefox and strict-CSP hosts that block blob
153
+ * workers.
154
+ *
155
+ * A worker that dies mid-recording (GPU-process crash, OOM) is released at
156
+ * once; the composite track stays valid but receives no further frames, and
157
+ * the next `resume()` reports `timed-out` so the caller reacquires the camera
158
+ * instead of talking to a dead worker.
18
159
  *
19
160
  * The audio track from the initial stream is carried through unchanged across
20
161
  * video switches, so there's no audio glitch when the camera flips.
@@ -24,8 +165,11 @@ var CameraCompositor = class {
24
165
  this.canvas = null;
25
166
  this.ctx = null;
26
167
  this.video = null;
168
+ this.transport = null;
169
+ this.generator = null;
27
170
  this.frameRequestId = null;
28
171
  this.frameRequestKind = null;
172
+ this.sourceExceedsTargetFps = false;
29
173
  this.lastDrawTimeMs = null;
30
174
  this.lastVideoTimeSeconds = null;
31
175
  this.audioTrack = null;
@@ -41,29 +185,33 @@ var CameraCompositor = class {
41
185
  * `switchVideo` calls.
42
186
  */
43
187
  start(stream) {
44
- this.canvas = document.createElement("canvas");
45
- this.ctx = this.canvas.getContext("2d");
46
- this.video = document.createElement("video");
47
- this.video.muted = true;
48
- this.video.playsInline = true;
49
188
  this.audioTrack = stream.getAudioTracks()[0] ?? null;
50
- this.setVideoSource(stream);
51
- const composite = this.canvas.captureStream(this.fps);
189
+ const composite = this.startWorkerTransport(stream) ?? this.startMainThread(stream);
52
190
  if (this.audioTrack) composite.addTrack(this.audioTrack);
53
191
  this.composite = composite;
54
- this.startDrawLoop();
55
192
  return composite;
56
193
  }
57
194
  /**
58
- * Swap the camera feeding the canvas without interrupting the composite
195
+ * Swap the camera feeding the composite without interrupting the composite
59
196
  * stream. Pass a video-only stream (audio is kept from `start`). The previous
60
197
  * video track is stopped.
61
198
  */
62
199
  switchVideo(stream) {
63
200
  if (!this.composite) return;
64
201
  const previousVideoTrack = this.videoTrack;
65
- this.setVideoSource(stream);
66
- this.startDrawLoop();
202
+ if (this.transport) {
203
+ this.videoTrack = stream.getVideoTracks()[0] ?? null;
204
+ if (this.videoTrack) try {
205
+ const processor = createTrackProcessor(this.videoTrack);
206
+ this.postToWorker({
207
+ type: "source",
208
+ readable: processor.readable
209
+ }, [processor.readable]);
210
+ } catch {}
211
+ } else if (this.video) {
212
+ this.setVideoSource(stream);
213
+ this.startDrawLoop();
214
+ } else this.videoTrack = stream.getVideoTracks()[0] ?? null;
67
215
  if (previousVideoTrack) previousVideoTrack.stop();
68
216
  }
69
217
  /** The composite stream being recorded, if compositing is active. */
@@ -73,26 +221,32 @@ var CameraCompositor = class {
73
221
  /** Pause source playback and drawing while the page is backgrounded. */
74
222
  pause() {
75
223
  this.finishResume("timed-out");
224
+ if (this.transport) {
225
+ this.postToWorker({ type: "pause" });
226
+ return;
227
+ }
76
228
  this.cancelDrawLoop();
77
229
  this.video?.pause();
78
230
  }
79
231
  /**
80
- * Restart source playback and wait for a genuinely new camera frame to be
81
- * drawn into the stable canvas stream. The caller must not resume encoding
82
- * until this resolves with `resumed`.
232
+ * Restart source playback and wait for a genuinely new camera frame to reach
233
+ * the stable composite stream. The caller must not resume encoding until
234
+ * this resolves with `resumed`.
83
235
  */
84
236
  async resume(signal) {
85
237
  const video = this.video;
86
- if (!video || !this.composite) return "timed-out";
238
+ if (!this.composite || !video && !this.transport) return "timed-out";
87
239
  if (this.audioTrack?.readyState === "ended") return "audio-ended";
88
240
  if (!this.videoTrack || this.videoTrack.readyState === "ended") return "video-ended";
89
241
  if (signal?.aborted) return "timed-out";
90
- try {
91
- await video.play();
92
- } catch {
93
- return "timed-out";
242
+ if (video && !this.transport) {
243
+ try {
244
+ await video.play();
245
+ } catch {
246
+ return "timed-out";
247
+ }
248
+ if (signal?.aborted) return "timed-out";
94
249
  }
95
- if (signal?.aborted) return "timed-out";
96
250
  this.finishResume("timed-out");
97
251
  return new Promise((resolve) => {
98
252
  const timeout = setTimeout(() => {
@@ -115,13 +269,20 @@ var CameraCompositor = class {
115
269
  resolve,
116
270
  timeout
117
271
  };
272
+ if (this.transport) {
273
+ this.postToWorker({ type: "resume" });
274
+ return;
275
+ }
118
276
  this.startDrawLoop(false);
119
277
  });
120
278
  }
121
- /** Stop compositing and release the canvas, audio, and video tracks. */
279
+ /** Stop compositing and release the worker, canvas, audio and video tracks. */
122
280
  stop() {
123
281
  this.finishResume("timed-out");
124
282
  this.cancelDrawLoop();
283
+ this.releaseWorker();
284
+ this.generator?.stop();
285
+ this.generator = null;
125
286
  this.videoTrack?.stop();
126
287
  this.audioTrack?.stop();
127
288
  this.composite?.getTracks().forEach((track) => track.stop());
@@ -133,8 +294,90 @@ var CameraCompositor = class {
133
294
  this.audioTrack = null;
134
295
  this.composite = null;
135
296
  }
297
+ /**
298
+ * Worker transport. Returns `null` — and leaves nothing behind — when the
299
+ * browser lacks insertable streams or a strict `worker-src` CSP blocks blob
300
+ * workers, so `start` falls through to the main-thread path. Never throws.
301
+ */
302
+ startWorkerTransport(stream) {
303
+ const track = stream.getVideoTracks()[0];
304
+ if (!track || !canUseCameraCompositorWorker()) return null;
305
+ let worker = null;
306
+ let generator = null;
307
+ let blobUrl = null;
308
+ try {
309
+ const processor = createTrackProcessor(track);
310
+ generator = createTrackGenerator();
311
+ blobUrl = URL.createObjectURL(new Blob([buildCameraCompositorWorkerSource()], { type: "text/javascript" }));
312
+ worker = new Worker(blobUrl);
313
+ worker.onmessage = (event) => this.onWorkerMessage(event.data);
314
+ worker.onerror = (event) => this.onWorkerMessage({
315
+ type: "fatal",
316
+ message: event?.message || "worker error"
317
+ });
318
+ const message = {
319
+ type: "start",
320
+ readable: processor.readable,
321
+ writable: generator.writable,
322
+ maxLongEdge: MAX_COMPOSITE_LONG_EDGE,
323
+ maxShortEdge: MAX_COMPOSITE_SHORT_EDGE
324
+ };
325
+ worker.postMessage(message, [processor.readable, generator.writable]);
326
+ } catch {
327
+ worker?.terminate();
328
+ generator?.stop();
329
+ if (blobUrl) URL.revokeObjectURL(blobUrl);
330
+ return null;
331
+ }
332
+ this.videoTrack = track;
333
+ this.transport = {
334
+ worker,
335
+ blobUrl
336
+ };
337
+ this.generator = generator;
338
+ return new MediaStream([generator]);
339
+ }
340
+ /** Terminates the worker and frees its blob; idempotent. */
341
+ releaseWorker() {
342
+ if (!this.transport) return;
343
+ this.transport.worker.terminate();
344
+ URL.revokeObjectURL(this.transport.blobUrl);
345
+ this.transport = null;
346
+ }
347
+ startMainThread(stream) {
348
+ this.canvas = document.createElement("canvas");
349
+ this.ctx = this.canvas.getContext("2d");
350
+ this.video = document.createElement("video");
351
+ this.video.muted = true;
352
+ this.video.playsInline = true;
353
+ this.setVideoSource(stream);
354
+ const composite = this.canvas.captureStream(this.fps);
355
+ this.startDrawLoop();
356
+ return composite;
357
+ }
358
+ postToWorker(message, transfer = []) {
359
+ this.transport?.worker.postMessage(message, transfer);
360
+ }
361
+ onWorkerMessage(message) {
362
+ if (!this.transport) return;
363
+ switch (message.type) {
364
+ case "frame":
365
+ this.finishResume("resumed");
366
+ break;
367
+ case "ended":
368
+ this.finishResume("video-ended");
369
+ break;
370
+ case "fatal":
371
+ this.releaseWorker();
372
+ this.finishResume("timed-out");
373
+ break;
374
+ default: break;
375
+ }
376
+ }
136
377
  setVideoSource(stream) {
137
378
  this.videoTrack = stream.getVideoTracks()[0] ?? null;
379
+ const sourceFps = this.videoTrack && typeof this.videoTrack.getSettings === "function" ? this.videoTrack.getSettings().frameRate : void 0;
380
+ this.sourceExceedsTargetFps = typeof sourceFps === "number" && sourceFps > this.fps;
138
381
  const video = this.video;
139
382
  if (!video) return;
140
383
  video.srcObject = new MediaStream(stream.getVideoTracks());
@@ -146,7 +389,7 @@ var CameraCompositor = class {
146
389
  if (resetSourceTime) this.lastVideoTimeSeconds = null;
147
390
  const draw = (timeMs) => {
148
391
  const elapsed = this.lastDrawTimeMs === null ? Infinity : timeMs - this.lastDrawTimeMs;
149
- if ((this.frameIntervalMs === 0 || elapsed >= this.frameIntervalMs * FRAME_INTERVAL_TOLERANCE_RATIO) && this.drawCurrentFrame()) {
392
+ if ((!(this.frameIntervalMs > 0 && (this.frameRequestKind !== "video" || this.sourceExceedsTargetFps)) || elapsed >= this.frameIntervalMs * FRAME_INTERVAL_TOLERANCE_RATIO) && this.drawCurrentFrame()) {
150
393
  this.lastDrawTimeMs = timeMs;
151
394
  this.finishResume("resumed");
152
395
  }
@@ -1,12 +1,12 @@
1
- import { l as BrowserStorageProvider } from "./setup-ItT0ngv1.esm.js";
1
+ import { l as BrowserStorageProvider } from "./setup-CokQ-yUA.esm.js";
2
2
  import { n as eventModuleNames, o as createManagerInstrumentation } from "./events-ijlbX_Wx.esm.js";
3
3
  import { t as topLevelStateName } from "./topLevelStateName-B5i2avbh.esm.js";
4
4
  import { s as createActor, u as createManager } from "./xstate.esm-BuFLFuzz.esm.js";
5
5
  import { t as setWasmDsFlagSync } from "./wasmDsFlagSync-B2e8p268.esm.js";
6
6
  import { t as BrowserVisibilityObserverProvider } from "./BrowserVisibilityObserverProvider-BrJN1B8A.esm.js";
7
7
  import { o as resetWasmMotionPrimedForModule, r as primeMotionFromUserGestureIfNeeded } from "./permissionServices-Bj_fyWtv.esm.js";
8
- import { a as createIdProtectedCaptureController, n as provideIdProtectedCaptureController, o as findIdProtectedCaptureController, s as getManualUploadTabs, t as idCaptureMachine } from "./idCaptureStateMachine-DS6fNfwz.esm.js";
9
- import { v as resolveCaptureOptimizingTreatment, y as resolveIdCaptureThresholds } from "./idCaptureServices-BRq1TB4U.esm.js";
8
+ import { a as createIdProtectedCaptureController, n as provideIdProtectedCaptureController, o as findIdProtectedCaptureController, s as getManualUploadTabs, t as idCaptureMachine } from "./idCaptureStateMachine-Dt-gpoLr.esm.js";
9
+ import { v as resolveCaptureOptimizingTreatment, y as resolveIdCaptureThresholds } from "./idCaptureServices-DLL6vNtO.esm.js";
10
10
  //#region src/modules/id/digitalUpload/instrumentation.ts
11
11
  const TERMINAL_REASONS = /* @__PURE__ */ new Set(["DIGITAL_ID_REQUESTED_BUT_OTHER_PROVIDED", "ID_TYPE_UNACCEPTABLE"]);
12
12
  function isHoldingState(value) {
@@ -1,5 +1,5 @@
1
- import { t as ensureWasmPipelines } from "./setup-ItT0ngv1.esm.js";
2
- import { i as numberParam, n as defineExperimentParams, t as booleanParam, u as resolveExperimentOnce } from "./feature-management-DFmsuX0f.esm.js";
1
+ import { t as ensureWasmPipelines } from "./setup-CokQ-yUA.esm.js";
2
+ import { i as numberParam, n as defineExperimentParams, t as booleanParam, u as resolveExperimentOnce } from "./feature-management-BEx5c9G9.esm.js";
3
3
  import { t as api } from "./api-Bx3gKW_y.esm.js";
4
4
  import { t as endpoints } from "./endpoints-D3B9mUHh.esm.js";
5
5
  import { i as isDesktop } from "./platform-DkcRc9JV.esm.js";
@@ -9,8 +9,8 @@ import { s as queryCameraPermission } from "./permissionServices-Bj_fyWtv.esm.js
9
9
  import { n as startRecording, r as stopRecording$1, t as createRecordingSession } from "./recordingsRepository-CCWy13M-.esm.js";
10
10
  import { a as isBackFacingTrack, n as getBackCameraStream } from "./backCameraStream-BOtyQowf.esm.js";
11
11
  import { t as getDeviceClass } from "./getDeviceClass-5NYZg9s6.esm.js";
12
- import { t as MultipartRecordingService } from "./multipartRecordingService-B3C_zlev.esm.js";
13
- import { i as CameraCompositor, n as DEFAULT_ID_CAPTURE_THRESHOLDS, r as IdCaptureProvider } from "./idCaptureDefaults-Cj1elqAi.esm.js";
12
+ import { t as MultipartRecordingService } from "./multipartRecordingService-CWxZ5mTi.esm.js";
13
+ import { i as CameraCompositor, n as DEFAULT_ID_CAPTURE_THRESHOLDS, r as IdCaptureProvider } from "./idCaptureDefaults-BqPUqWvx.esm.js";
14
14
  //#region src/internal/camera/cameraServices.ts
15
15
  function createCameraServices(camera) {
16
16
  return {
@@ -1,16 +1,16 @@
1
- import { l as BrowserStorageProvider } from "./setup-ItT0ngv1.esm.js";
1
+ import { l as BrowserStorageProvider } from "./setup-CokQ-yUA.esm.js";
2
2
  import { r as WasmUtilProvider } from "./safeStorage-B-trhxg6.esm.js";
3
3
  import { t as BrowserTimerProvider } from "./BrowserTimerProvider-BXhgNxLt.esm.js";
4
- import { s as exposeExperimentOnce } from "./feature-management-DFmsuX0f.esm.js";
4
+ import { s as exposeExperimentOnce } from "./feature-management-BEx5c9G9.esm.js";
5
5
  import { n as revokeObjectURL, t as getTimestamp } from "./IBrowserEnvironmentCapability-DEaRRk-R.esm.js";
6
6
  import { r as getToken, t as api } from "./api-Bx3gKW_y.esm.js";
7
- import { c as trueSightHintTransition, l as trueSightLog, m as isTrueSightTesting, r as noteTrueSightCaptureActivity } from "./trueSightService-Cmein6eU.esm.js";
7
+ import { c as trueSightHintTransition, l as trueSightLog, m as isTrueSightTesting, r as noteTrueSightCaptureActivity } from "./trueSightService-D03Z4v0r.esm.js";
8
8
  import { n as eventModuleNames, s as recordExperimentAssignmentOnce } from "./events-ijlbX_Wx.esm.js";
9
- import { t as getDisableIpify } from "./sessionInitializer-HuJ4OYs0.esm.js";
9
+ import { t as getDisableIpify } from "./sessionInitializer-CX84J4ZG.esm.js";
10
10
  import { t as endpoints } from "./endpoints-D3B9mUHh.esm.js";
11
11
  import { t as addDeviceStats } from "./stats-DkK-f8JT.esm.js";
12
12
  import { a as isIOS, s as isIPad, t as isAndroid, u as isMacOsSafari } from "./platform-DkcRc9JV.esm.js";
13
- import "./session-c5Zk9ScZ.esm.js";
13
+ import "./session-2LBHdwZv.esm.js";
14
14
  import { c as not, i as assign, l as raise, n as enqueueActions, o as and, r as sendTo, t as setup } from "./xstate.esm-BuFLFuzz.esm.js";
15
15
  import { n as fromPromise, t as fromCallback } from "./xstate-actors.esm-BXeQ-Ucz.esm.js";
16
16
  import { n as getUrlSearchParam, t as buildUrlWithSearchParams } from "./urlUtils-D6phjq1-.esm.js";
@@ -24,8 +24,8 @@ import { t as sleep } from "./ITimerCapability-DgdDzp8G.esm.js";
24
24
  import { t as getBrowser } from "./getBrowser-Cbe1C4Tn.esm.js";
25
25
  import { n as getWindowDimensions } from "./getDeviceClass-CeBiEayS.esm.js";
26
26
  import { n as runVirtualCameraCheck, t as frameSources } from "./virtualCameraCheck-WOloJ-do.esm.js";
27
- import { n as DEFAULT_ID_CAPTURE_THRESHOLDS, r as IdCaptureProvider } from "./idCaptureDefaults-Cj1elqAi.esm.js";
28
- import { S as getIdCameraStream, _ as ID_ERROR_CODES, a as getRealQualityValue, b as CAPTURE_OPTIMIZING, d as startRecordingSession, f as stopRecording, g as validateUploadResponse, h as uploadManualIdFile, i as finalizeRecordingSession, l as prepareRecordingForCameraRetry, m as uploadIdImage, o as initializeIdCapture, p as stopStream, r as disposeRecordingSession, t as addBarcode, u as processId, x as OPTIMIZING_WATCHDOG_MARGIN_MS, y as resolveIdCaptureThresholds } from "./idCaptureServices-BRq1TB4U.esm.js";
27
+ import { n as DEFAULT_ID_CAPTURE_THRESHOLDS, r as IdCaptureProvider } from "./idCaptureDefaults-BqPUqWvx.esm.js";
28
+ import { S as getIdCameraStream, _ as ID_ERROR_CODES, a as getRealQualityValue, b as CAPTURE_OPTIMIZING, d as startRecordingSession, f as stopRecording, g as validateUploadResponse, h as uploadManualIdFile, i as finalizeRecordingSession, l as prepareRecordingForCameraRetry, m as uploadIdImage, o as initializeIdCapture, p as stopStream, r as disposeRecordingSession, t as addBarcode, u as processId, x as OPTIMIZING_WATCHDOG_MARGIN_MS, y as resolveIdCaptureThresholds } from "./idCaptureServices-DLL6vNtO.esm.js";
29
29
  import { t as StreamCanvasCapture } from "./StreamCanvasCapture-C9jtgBdT.esm.js";
30
30
  //#region src/modules/id/digitalUpload/digitalUploadErrors.ts
31
31
  const TERMINAL_FAIL_REASONS = /* @__PURE__ */ new Set(["DIGITAL_ID_REQUESTED_BUT_OTHER_PROVIDED", "ID_TYPE_UNACCEPTABLE"]);
@@ -1781,7 +1781,7 @@ fromPromise(async ({ input }) => {
1781
1781
  });
1782
1782
  fromPromise(async ({ input }) => {
1783
1783
  if (!input.dependencies) return;
1784
- const { loadDeepsightSession } = await import("./deepsightLoader-CLFrwfgX.esm.js");
1784
+ const { loadDeepsightSession } = await import("./deepsightLoader-DrRcGBbp.esm.js");
1785
1785
  return loadDeepsightSession({
1786
1786
  ds: input.ds,
1787
1787
  storage: input.dependencies.storage,
@@ -2224,7 +2224,7 @@ function cleanup(service) {
2224
2224
  service.cleanup();
2225
2225
  } catch {}
2226
2226
  }
2227
- function createIdMetadataPreparationCoordinator(load = async (input) => (await import("./deepsightLoader-CLFrwfgX.esm.js")).loadDeepsightSession(input)) {
2227
+ function createIdMetadataPreparationCoordinator(load = async (input) => (await import("./deepsightLoader-DrRcGBbp.esm.js")).loadDeepsightSession(input)) {
2228
2228
  let disposed = false;
2229
2229
  let preparation;
2230
2230
  let service;
@@ -110,7 +110,7 @@ declare const idOcrStateMachine: StateMachine<IdOcrContext, {
110
110
  type: "shouldProceedWithoutSubmitToSecondId";
111
111
  params: unknown;
112
112
  };
113
- }>, never, "error" | "idle" | "success" | "finished" | "loading" | "submitting" | "inputting" | "readonly" | "validatingContinue", string, IdOcrInput, NonReducibleUnknown, EventObject, MetaObject, {
113
+ }>, never, "error" | "idle" | "success" | "finished" | "submitting" | "loading" | "inputting" | "readonly" | "validatingContinue", string, IdOcrInput, NonReducibleUnknown, EventObject, MetaObject, {
114
114
  readonly id: "idOcr";
115
115
  readonly initial: "idle";
116
116
  readonly context: ({ input }: {
@@ -1,2 +1,2 @@
1
- import { c as identityReuseMachine, d as ReusableDocument, f as SubmitResponse, i as createIdentityReuseManagerFromActor, l as FetchDocumentsResponse, n as IdentityReuseState, o as SCAN_NEW_DOCUMENT, r as createIdentityReuseManager, s as SelectedDocumentId, t as IdentityReuseManager, u as IdentityReuseConfig } from "./identityReuseManager-D6pD4hcZ.js";
1
+ import { c as identityReuseMachine, d as ReusableDocument, f as SubmitResponse, i as createIdentityReuseManagerFromActor, l as FetchDocumentsResponse, n as IdentityReuseState, o as SCAN_NEW_DOCUMENT, r as createIdentityReuseManager, s as SelectedDocumentId, t as IdentityReuseManager, u as IdentityReuseConfig } from "./identityReuseManager-v2TH5g7e.js";
2
2
  export { type FetchDocumentsResponse, type IdentityReuseConfig, type IdentityReuseManager, type IdentityReuseState, type ReusableDocument, SCAN_NEW_DOCUMENT, type SelectedDocumentId, type SubmitResponse, createIdentityReuseManager, createIdentityReuseManagerFromActor, identityReuseMachine };
@@ -125,7 +125,7 @@ declare const identityReuseMachine: StateMachine<IdentityReuseContext, {
125
125
  type: "hasSelection";
126
126
  params: unknown;
127
127
  };
128
- }>, never, "error" | "idle" | "finished" | "loading" | "submitting" | "documentsFound", string, IdentityReuseInput, NonReducibleUnknown, EventObject, MetaObject, {
128
+ }>, never, "error" | "idle" | "finished" | "submitting" | "loading" | "documentsFound", string, IdentityReuseInput, NonReducibleUnknown, EventObject, MetaObject, {
129
129
  readonly id: "identityReuse";
130
130
  readonly initial: "idle";
131
131
  readonly context: ({ input }: {
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import { i as reset, r as isConfigured, s as setup } from "./setup-ItT0ngv1.esm.js";
1
+ import { i as reset, r as isConfigured, s as setup } from "./setup-CokQ-yUA.esm.js";
2
2
  export { isConfigured, reset, setup };
@@ -1,3 +1,3 @@
1
1
  import { r as MandatoryConsentConfig } from "./types-9_esGTPj.js";
2
- import { a as MandatoryConsentActor, i as createMandatoryConsentManagerFromActor, n as MandatoryConsentState, o as mandatoryConsentMachine, r as createMandatoryConsentManager, t as MandatoryConsentManager } from "./mandatoryConsentManager-CkK0Qzue.js";
2
+ import { a as MandatoryConsentActor, i as createMandatoryConsentManagerFromActor, n as MandatoryConsentState, o as mandatoryConsentMachine, r as createMandatoryConsentManager, t as MandatoryConsentManager } from "./mandatoryConsentManager-2O5wztkg.js";
3
3
  export { type MandatoryConsentActor, type MandatoryConsentConfig, type MandatoryConsentManager, type MandatoryConsentState, createMandatoryConsentManager, createMandatoryConsentManagerFromActor, mandatoryConsentMachine };
@@ -53,6 +53,10 @@ declare const mandatoryConsentMachine: StateMachine<MandatoryConsentContext, {
53
53
  type: "setConsent";
54
54
  params: NonReducibleUnknown;
55
55
  };
56
+ toggleSigned: {
57
+ type: "toggleSigned";
58
+ params: NonReducibleUnknown;
59
+ };
56
60
  setError: {
57
61
  type: "setError";
58
62
  params: NonReducibleUnknown;
@@ -65,14 +69,10 @@ declare const mandatoryConsentMachine: StateMachine<MandatoryConsentContext, {
65
69
  type: "resetContext";
66
70
  params: NonReducibleUnknown;
67
71
  };
68
- toggleSigned: {
69
- type: "toggleSigned";
70
- params: NonReducibleUnknown;
71
- };
72
72
  }>, {
73
73
  type: "canSubmit";
74
74
  params: unknown;
75
- }, never, "error" | "idle" | "closed" | "finished" | "loading" | "submitting" | "display", string, MandatoryConsentInput, NonReducibleUnknown, EventObject, MetaObject, {
75
+ }, never, "error" | "idle" | "closed" | "finished" | "submitting" | "loading" | "display", string, MandatoryConsentInput, NonReducibleUnknown, EventObject, MetaObject, {
76
76
  readonly id: "mandatoryConsent";
77
77
  readonly initial: "idle";
78
78
  readonly context: ({ input }: {
@@ -1,7 +1,7 @@
1
1
  import { t as BrowserTimerProvider } from "./BrowserTimerProvider-BXhgNxLt.esm.js";
2
2
  import { t as api } from "./api-Bx3gKW_y.esm.js";
3
3
  import { t as endpoints } from "./endpoints-D3B9mUHh.esm.js";
4
- import { a as isIOS } from "./platform-DkcRc9JV.esm.js";
4
+ import { a as isIOS, t as isAndroid } from "./platform-DkcRc9JV.esm.js";
5
5
  //#region ../infra/src/media/mediaRecorderOptions.ts
6
6
  /**
7
7
  * Picks a `MediaRecorder` mime type the current browser actually supports.
@@ -19,6 +19,17 @@ function getSupportedMediaRecorderMimeType() {
19
19
  return "";
20
20
  }
21
21
  /**
22
+ * Mime type for the multipart (video-selfie-service) recorder. Android
23
+ * Chromium gets hardware H.264 in fragmented MP4 first — the fragment shape
24
+ * the service already ingests from Safari. Measured on a Galaxy S21 under ID
25
+ * detection load (ENG-55397): 720p VP8 dropped 16% of frames, H.264 dropped
26
+ * none. Everything else keeps the WebM-first order.
27
+ */
28
+ function getMultipartRecorderMimeType() {
29
+ if (isAndroid() && MediaRecorder.isTypeSupported("video/mp4;codecs=avc1")) return "video/mp4;codecs=avc1";
30
+ return getSupportedMediaRecorderMimeType();
31
+ }
32
+ /**
22
33
  * `MediaRecorder` options tuned per platform — a higher bitrate on iOS, lower
23
34
  * elsewhere — paired with the supported mime type.
24
35
  */
@@ -89,7 +100,7 @@ var MultipartRecordingProvider = class {
89
100
  this.partNumber = 0;
90
101
  this.onPart = onPart;
91
102
  try {
92
- this.mimeType = getSupportedMediaRecorderMimeType();
103
+ this.mimeType = getMultipartRecorderMimeType();
93
104
  const recorder = new MediaRecorder(stream.clone(), {
94
105
  mimeType: this.mimeType,
95
106
  videoBitsPerSecond: VIDEO_BITS_PER_SECOND
@@ -1,16 +1,16 @@
1
- import { l as BrowserStorageProvider } from "./setup-ItT0ngv1.esm.js";
1
+ import { l as BrowserStorageProvider } from "./setup-CokQ-yUA.esm.js";
2
2
  import { r as WasmUtilProvider } from "./safeStorage-B-trhxg6.esm.js";
3
3
  import { t as BrowserTimerProvider } from "./BrowserTimerProvider-BXhgNxLt.esm.js";
4
4
  import { t as api } from "./api-Bx3gKW_y.esm.js";
5
- import { b as getStoredHttpConfig, w as createApi$1, y as randomUUID } from "./trueSightService-Cmein6eU.esm.js";
5
+ import { b as getStoredHttpConfig, w as createApi$1, y as randomUUID } from "./trueSightService-D03Z4v0r.esm.js";
6
6
  import { n as eventModuleNames } from "./events-ijlbX_Wx.esm.js";
7
- import { b as BrowserEnvironmentProvider, h as isBrowserSimulation, n as getFingerprintEnabled, v as getThumbmarkId, y as getDeviceFingerprintInfo } from "./sessionInitializer-HuJ4OYs0.esm.js";
7
+ import { b as BrowserEnvironmentProvider, h as isBrowserSimulation, n as getFingerprintEnabled, v as getThumbmarkId, y as getDeviceFingerprintInfo } from "./sessionInitializer-CX84J4ZG.esm.js";
8
8
  import { t as endpoints } from "./endpoints-D3B9mUHh.esm.js";
9
9
  import { i as assign, s as createActor, t as setup, u as createManager } from "./xstate.esm-BuFLFuzz.esm.js";
10
10
  import { n as fromPromise, t as fromCallback } from "./xstate-actors.esm-BXeQ-Ucz.esm.js";
11
11
  import { i as requestCameraAccess, o as stopCameraStream } from "./camera-sIa9ceW2.esm.js";
12
12
  import { i as requestPermission, t as checkPermission } from "./permissionServices-Bj_fyWtv.esm.js";
13
- import { i as initializeDeepsightSession, l as stopStream, o as startDetection, t as FaceDetectionProvider } from "./FaceDetectionProvider-Dz_zxzth.esm.js";
13
+ import { i as initializeDeepsightSession, l as stopStream, o as startDetection, t as FaceDetectionProvider } from "./FaceDetectionProvider-CWujhVWD.esm.js";
14
14
  import { t as sleep } from "./ITimerCapability-DgdDzp8G.esm.js";
15
15
  import { t as StreamCanvasCapture } from "./StreamCanvasCapture-C9jtgBdT.esm.js";
16
16
  //#region src/modules/personhood/personhoodServices.ts
@@ -1,4 +1,4 @@
1
- import { a as NAMIRIAL_QES_CONSENT_KEYS, c as areAllConsented, o as NAMIRIAL_QES_PROVIDER_CODE, r as electronicSignatureMachine, s as QE_CONSENT_KEYS, t as createElectronicSignatureManager, u as getDefaultConsentChecks } from "./electronicSignatureManager-B85WICzC.esm.js";
1
+ import { a as NAMIRIAL_QES_CONSENT_KEYS, c as areAllConsented, o as NAMIRIAL_QES_PROVIDER_CODE, r as electronicSignatureMachine, s as QE_CONSENT_KEYS, t as createElectronicSignatureManager, u as getDefaultConsentChecks } from "./electronicSignatureManager-BGtmVYnW.esm.js";
2
2
  //#region src/modules/qe-signature/index.ts
3
3
  function createQeSignatureManager(options) {
4
4
  return createElectronicSignatureManager({ config: {
@@ -1,5 +1,5 @@
1
1
  import { t as getTimestamp } from "./IBrowserEnvironmentCapability-DEaRRk-R.esm.js";
2
- import { a as notifyTrueSightManagerStopped, i as notifyTrueSightFlowEvent } from "./trueSightService-Cmein6eU.esm.js";
2
+ import { a as notifyTrueSightManagerStopped, i as notifyTrueSightFlowEvent } from "./trueSightService-D03Z4v0r.esm.js";
3
3
  import { C as createEventBus } from "./events-ijlbX_Wx.esm.js";
4
4
  import { s as createActor } from "./xstate.esm-BuFLFuzz.esm.js";
5
5
  import { t as fromCallback } from "./xstate-actors.esm-BXeQ-Ucz.esm.js";
@@ -1,4 +1,4 @@
1
1
  //#region src/internal/version/sdkVersion.ts
2
- const SDK_VERSION = "0.0.0-dev-20260914-656e6757";
2
+ const SDK_VERSION = "0.0.0-dev-20260915-1e83a656";
3
3
  //#endregion
4
4
  export { SDK_VERSION as t };
@@ -1,14 +1,14 @@
1
- import { l as BrowserStorageProvider } from "./setup-ItT0ngv1.esm.js";
1
+ import { l as BrowserStorageProvider } from "./setup-CokQ-yUA.esm.js";
2
2
  import { r as WasmUtilProvider } from "./safeStorage-B-trhxg6.esm.js";
3
3
  import { n as eventModuleNames } from "./events-ijlbX_Wx.esm.js";
4
4
  import { s as createActor } from "./xstate.esm-BuFLFuzz.esm.js";
5
5
  import { n as fromPromise } from "./xstate-actors.esm-BXeQ-Ucz.esm.js";
6
- import { n as createDefaultProtectedFaceControllerActor, t as faceCaptureMachine } from "./faceCaptureSetup-BlUhLA18.esm.js";
7
- import { t as createFaceCaptureManagerFromActor } from "./faceCaptureManagerFactory-CbIMYS4-.esm.js";
6
+ import { n as createDefaultProtectedFaceControllerActor, t as faceCaptureMachine } from "./faceCaptureSetup-BuI9bUDW.esm.js";
7
+ import { t as createFaceCaptureManagerFromActor } from "./faceCaptureManagerFactory-jOdgsEsg.esm.js";
8
8
  import { s as PROTECTED_CAPTURE_TARGET } from "./createCameraCycleOwnership-DQ5-F2oW.esm.js";
9
9
  import { r as processFace } from "./selfieErrorUtils-C77GXJH6.esm.js";
10
- import { t as selfieMachine } from "./selfieStateMachine-CnrxNcRk.esm.js";
11
- import { n as createSelfieManagerFromActor, t as createSelfieManager } from "./selfieManager-BVK8Yo__.esm.js";
10
+ import { t as selfieMachine } from "./selfieStateMachine-B1Ni3iDU.esm.js";
11
+ import { n as createSelfieManagerFromActor, t as createSelfieManager } from "./selfieManager-gOb5R-nd.esm.js";
12
12
  import { t as invokeOnCaptureCallback } from "./invokeOnCaptureCallback-BjzPjJ_p.esm.js";
13
13
  /**
14
14
  * Selfie state machine variant for the captureOnly flow. Shares the full base