@incodetech/core 2.3.0-rc.1 → 2.3.0-rc.3

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 (69) hide show
  1. package/dist/{BrowserDiagnosticsCryptoProvider-CU6kBvqv.esm.js → BrowserDiagnosticsCryptoProvider-C2E4mGEX.esm.js} +1 -1
  2. package/dist/{FaceDetectionProvider-BfhWkK90.esm.js → FaceDetectionProvider-DAVK6BAe.esm.js} +4 -4
  3. package/dist/ae-signature.esm.js +1 -1
  4. package/dist/{apiError-Budb6m6w.esm.js → apiError-BArJSmSN.esm.js} +1 -1
  5. package/dist/authentication.d.ts +2 -2
  6. package/dist/authentication.esm.js +2 -2
  7. package/dist/{authenticationManager-cMXhG70r.esm.js → authenticationManager-DNciG_Ri.esm.js} +3 -3
  8. package/dist/{authenticationManager-CjXBjC-c.d.ts → authenticationManager-DcTHmYmL.d.ts} +1 -1
  9. package/dist/{authenticationStateMachine-MOYz4HCf.esm.js → authenticationStateMachine-BFOcuSH6.esm.js} +2 -2
  10. package/dist/consent.d.ts +1 -1
  11. package/dist/{consentManager-BhYFeKiG.d.ts → consentManager-uhDPdU6i.d.ts} +8 -8
  12. package/dist/{deepsightLoader-DDv3vhXU.esm.js → deepsightLoader-DPJZSnHo.esm.js} +3 -3
  13. package/dist/document-capture.d.ts +1 -1
  14. package/dist/{documentCaptureManager-DensIj5F.d.ts → documentCaptureManager-DD0qtFdE.d.ts} +1 -1
  15. package/dist/dynamic-forms.esm.js +2 -2
  16. package/dist/{dynamicFormsManager-BbS-XMFc.esm.js → dynamicFormsManager-BDi3ffWG.esm.js} +1 -1
  17. package/dist/{dynamicFormsStateMachine-D8zHBCh4.esm.js → dynamicFormsStateMachine-B7-mpYDT.esm.js} +1 -1
  18. package/dist/ekyb.esm.js +3 -3
  19. package/dist/{ekybManager-5aiac8wL.esm.js → ekybManager-BfpqWpNP.esm.js} +1 -1
  20. package/dist/{ekybStateMachine-Bn2IE9rx.esm.js → ekybStateMachine-BGnzaF__.esm.js} +1 -1
  21. package/dist/electronic-signature.esm.js +1 -1
  22. package/dist/{electronicSignatureManager-BJJH0Tvi.esm.js → electronicSignatureManager-Bc8MLmTL.esm.js} +1 -1
  23. package/dist/extensibility.d.ts +8 -8
  24. package/dist/extensibility.esm.js +10 -10
  25. package/dist/{faceCaptureManagerFactory-BeUl8fl1.d.ts → faceCaptureManagerFactory-Cx-8SqRy.d.ts} +45 -37
  26. package/dist/{faceCaptureManagerFactory-B7Ms6pSs.esm.js → faceCaptureManagerFactory-qPW__uXd.esm.js} +1 -1
  27. package/dist/{faceCaptureSetup-bkAlr5d8.esm.js → faceCaptureSetup-DpM1YYl9.esm.js} +264 -42
  28. package/dist/{feature-management-E0mq0pMs.esm.js → feature-management-Bzr9uaS4.esm.js} +1 -1
  29. package/dist/feature-management.esm.js +1 -1
  30. package/dist/flow.esm.js +3 -3
  31. package/dist/{flowCompletionService-DJp1odGN.esm.js → flowCompletionService-D0qKFy5Y.esm.js} +1 -1
  32. package/dist/{flowServices-DjPFGs_D.esm.js → flowServices-CnyFU9Bz.esm.js} +4 -4
  33. package/dist/geolocation.esm.js +2 -2
  34. package/dist/{geolocationManager-D5906YXx.esm.js → geolocationManager-BqM__4xb.esm.js} +1 -1
  35. package/dist/{geolocationStateMachine-BVOduc3y.esm.js → geolocationStateMachine-DpxY4O3h.esm.js} +1 -1
  36. package/dist/id-selfie-flow.esm.js +8 -7
  37. package/dist/id.d.ts +2 -2
  38. package/dist/id.esm.js +4 -4
  39. package/dist/idCaptureDefaults-Cd-qOMUt.esm.js +282 -0
  40. package/dist/{idCaptureManager-rfV9dIXy.esm.js → idCaptureManager-CO4WBQQN.esm.js} +3 -3
  41. package/dist/{idCaptureManager-DKESug0R.d.ts → idCaptureManager-De7O0TOD.d.ts} +23 -4
  42. package/dist/{idCaptureServices-i1KxugN7.esm.js → idCaptureServices-CFuKdAW7.esm.js} +58 -11
  43. package/dist/{idCaptureStateMachine-Ne_PXth_.esm.js → idCaptureStateMachine-CzyZ_21z.esm.js} +210 -66
  44. package/dist/identity-reuse.d.ts +1 -1
  45. package/dist/{identityReuseManager-v2TH5g7e.d.ts → identityReuseManager-BFDI7iFK.d.ts} +4 -4
  46. package/dist/index.esm.js +1 -1
  47. package/dist/mandatory-consent.d.ts +1 -1
  48. package/dist/{mandatoryConsentManager-vhv1co_n.d.ts → mandatoryConsentManager-Csfl7_XQ.d.ts} +4 -4
  49. package/dist/{multipartRecordingService-OEgIRvqC.esm.js → multipartRecordingService-CuXLH4tK.esm.js} +446 -1
  50. package/dist/personhood.esm.js +4 -4
  51. package/dist/qe-signature.esm.js +1 -1
  52. package/dist/{runChildModule-CI1gGWN1.esm.js → runChildModule-CTeh8a1T.esm.js} +1 -1
  53. package/dist/{sdkVersion-BZh6dj53.esm.js → sdkVersion-DYlnESxD.esm.js} +1 -1
  54. package/dist/selfie.d.ts +2 -2
  55. package/dist/selfie.esm.js +5 -5
  56. package/dist/{selfieManager-B-2c1n_x.esm.js → selfieManager-CFGf-DmP.esm.js} +3 -3
  57. package/dist/{selfieManager-4RRLi21P.d.ts → selfieManager-jXqwqosi.d.ts} +1 -1
  58. package/dist/{selfieStateMachine-Bzx41R8d.esm.js → selfieStateMachine-BJVwANex.esm.js} +2 -2
  59. package/dist/{session-3LmvAU4S.esm.js → session-Cs6z9Stj.esm.js} +3 -3
  60. package/dist/session.esm.js +4 -4
  61. package/dist/{sessionInitializer-BFk33E67.esm.js → sessionInitializer-DKCQfxZ2.esm.js} +3 -3
  62. package/dist/{setup-BWG-hivt.esm.js → setup-B-qr0dC6.esm.js} +4 -4
  63. package/dist/{trueSightService-BN-Hzw82.esm.js → trueSightService-De306VXK.esm.js} +3 -3
  64. package/dist/video-selfie.esm.js +4 -5
  65. package/dist/{videoSelfieCameraWarmer-B8PcYqmz.esm.js → videoSelfieCameraWarmer-BRz5aQPN.esm.js} +3 -3
  66. package/dist/wasm.esm.js +1 -1
  67. package/dist/workflow.esm.js +14 -14
  68. package/package.json +3 -3
  69. package/dist/idCaptureDefaults-CbPA-Auz.esm.js +0 -727
@@ -1,21 +1,21 @@
1
1
  import { t as getTimestamp } from "./IBrowserEnvironmentCapability-DEaRRk-R.esm.js";
2
2
  import { r as getToken, t as api } from "./api-Bx3gKW_y.esm.js";
3
- import { l as trueSightLog, m as isTrueSightTesting } from "./trueSightService-BN-Hzw82.esm.js";
4
- import "./sessionInitializer-BFk33E67.esm.js";
3
+ import { l as trueSightLog, m as isTrueSightTesting } from "./trueSightService-De306VXK.esm.js";
4
+ import "./sessionInitializer-DKCQfxZ2.esm.js";
5
5
  import { t as endpoints } from "./endpoints-B-3Q-LUw.esm.js";
6
6
  import { t as addDeviceStats } from "./stats-CZcy2J53.esm.js";
7
7
  import { t as isAndroid } from "./platform-DkcRc9JV.esm.js";
8
8
  import { i as assign, n as enqueueActions, r as sendTo, t as setup } from "./xstate.esm-BuFLFuzz.esm.js";
9
9
  import { n as fromPromise, t as fromCallback } from "./xstate-actors.esm-BXeQ-Ucz.esm.js";
10
10
  import { n as invokeRequestPermissionActor, t as checkPermission } from "./permissionServices-Bj_fyWtv.esm.js";
11
- import { a as sendLabelInspectionEvent, i as initializeDeepsightSession, r as initializeCamera, s as stopStream, t as FaceDetectionProvider } from "./FaceDetectionProvider-BfhWkK90.esm.js";
11
+ import { a as sendLabelInspectionEvent, i as initializeDeepsightSession, r as initializeCamera, s as stopStream, t as FaceDetectionProvider } from "./FaceDetectionProvider-DAVK6BAe.esm.js";
12
12
  import { t as FACE_ERROR_CODES } from "./types-BN5RPPIZ.esm.js";
13
13
  import { a as flagFaceManualReview, i as imageFileToDataUrl, n as runProtectedAttempt, r as cameraCycleProvider, s as PROTECTED_CAPTURE_TARGET, t as createCameraCycleOwnership } from "./createCameraCycleOwnership-CX3hJGKc.esm.js";
14
14
  import { n as releaseFaceAvatarWarmup, r as warmFaceAvatar, t as createFaceAvatar } from "./createFaceAvatar-BNHdeFj8.esm.js";
15
15
  import { t as IncodeCanvas } from "./canvas-BxFzWTt-.esm.js";
16
16
  import { n as needsMotionPrimeOnlyFromPermission, r as resolveStoredPermissionResult, t as isReadyForCaptureFromPermission } from "./permissionGuards-uYZYFu4J.esm.js";
17
17
  import { t as getDeviceClass } from "./getDeviceClass-5NYZg9s6.esm.js";
18
- import { n as getAdaptiveMediaRecorderOptions, t as MultipartRecordingService } from "./multipartRecordingService-OEgIRvqC.esm.js";
18
+ import { n as CameraCompositor, r as getAdaptiveMediaRecorderOptions, t as MultipartRecordingService } from "./multipartRecordingService-CuXLH4tK.esm.js";
19
19
  //#region src/internal/avatar/concealment.ts
20
20
  /**
21
21
  * Maps a backend concealment option to the internal avatar flags. `OPTION_NONE`
@@ -496,7 +496,28 @@ var LocalRecordingProvider = class {
496
496
  recorder?.stream?.getTracks().forEach((track) => track.stop());
497
497
  });
498
498
  }
499
+ /**
500
+ * Discards the in-progress recording without producing a result: detaches
501
+ * the recorder's handlers, stops it, releases its cloned tracks and clears
502
+ * the flags. Idempotent, and safe after `stopRecording` or when never
503
+ * started. Mirrors `MultipartRecordingProvider.reset()` so an attempt that is
504
+ * released before finalization cannot leave a live camera clone behind
505
+ * (ENG-56648).
506
+ */
499
507
  reset() {
508
+ this.removeEventListeners();
509
+ const recorder = this.mediaRecorder;
510
+ if (recorder) {
511
+ recorder.ondataavailable = null;
512
+ recorder.onerror = null;
513
+ recorder.onstop = null;
514
+ if (recorder.state !== "inactive") try {
515
+ recorder.stop();
516
+ } catch {}
517
+ recorder.stream?.getTracks().forEach((track) => track.stop());
518
+ this.mediaRecorder = null;
519
+ }
520
+ this.stream = null;
500
521
  this._isRecording = false;
501
522
  this._error = null;
502
523
  this._hasError = false;
@@ -571,49 +592,146 @@ var LocalRecordingService = class {
571
592
  * the interview asynchronously by the backend's `selfie` scope consumer, so
572
593
  * its upload id must not be forwarded to `/omni/add/face` as a legacy
573
594
  * `recordingId`.
595
+ *
596
+ * The recording is scoped to the capture step (ENG-56648). The recorder
597
+ * records a stable `CameraCompositor` stream instead of a raw camera clone, so
598
+ * every attempt can end its own clone before PRC and POC run and the next
599
+ * attempt swaps a fresh clone into the same multipart upload. The owning
600
+ * controller completes the upload once the backend accepts a capture or the
601
+ * step ends without a retry.
574
602
  */
575
603
  var MultipartFaceRecordingService = class {
576
604
  constructor() {
577
605
  this.service = new MultipartRecordingService("selfie");
606
+ this.audioSource = [];
607
+ this.needsVideoSourceReplacement = false;
578
608
  this.pausedForAttempt = false;
609
+ this.startInFlight = false;
610
+ this.suspendRequested = false;
611
+ this.stopping = false;
579
612
  }
580
613
  async start(stream) {
581
- if (this.pausedForAttempt) {
582
- if (!this.service.resume()) throw new Error("Face recording did not resume");
583
- this.pausedForAttempt = false;
614
+ if (this.stopping) throw new Error("Face recording already completed");
615
+ if (this.compositor) {
616
+ await this.resume(stream);
617
+ return;
618
+ }
619
+ const recordingSource = stream.clone();
620
+ const compositor = new CameraCompositor({ fps: 30 });
621
+ this.startInFlight = true;
622
+ try {
623
+ const composite = compositor.start(recordingSource);
624
+ await this.service.start(composite);
625
+ } catch (error) {
626
+ compositor.stop();
627
+ recordingSource.getTracks().forEach((track) => track.stop());
628
+ this.service.cleanup();
629
+ throw error;
630
+ } finally {
631
+ this.startInFlight = false;
632
+ }
633
+ if (this.stopping) {
634
+ compositor.stop();
635
+ recordingSource.getTracks().forEach((track) => track.stop());
636
+ this.service.cleanup();
637
+ return;
638
+ }
639
+ this.compositor = compositor;
640
+ this.recordingSource = recordingSource;
641
+ this.audioSource = recordingSource.getAudioTracks();
642
+ if (this.suspendRequested) {
643
+ this.suspendRequested = false;
644
+ this.suspend();
645
+ }
646
+ }
647
+ /**
648
+ * Pauses the container and ends the camera clone on the calling thread. The
649
+ * composite stream and the upload stay open for the next attempt.
650
+ */
651
+ suspend() {
652
+ if (this.stopping) return;
653
+ if (!this.compositor) {
654
+ this.suspendRequested = this.startInFlight;
584
655
  return;
585
656
  }
586
- await this.service.start(stream);
657
+ if (!this.pausedForAttempt) this.pausedForAttempt = this.service.pause();
658
+ this.releaseCameraClone({ keepAudio: true });
659
+ this.needsVideoSourceReplacement = true;
587
660
  }
588
661
  async prepareUpload() {
589
- this.pausedForAttempt = this.service.pause();
662
+ this.suspend();
590
663
  return { recordingId: null };
591
664
  }
592
665
  async stop() {
593
- try {
594
- await this.service.stop();
595
- } finally {
596
- this.pausedForAttempt = false;
597
- }
666
+ await this.complete();
598
667
  return { recordingId: null };
599
668
  }
600
669
  pauseForBackground() {
601
- this.service.pause();
670
+ this.suspend();
602
671
  }
603
- async resumeFromBackground() {
604
- this.service.resume();
672
+ async resumeFromBackground(stream) {
673
+ if (!this.compositor || this.stopping) return;
674
+ await this.resume(stream);
605
675
  }
606
676
  async stopAndGetVideo() {
677
+ await this.complete();
678
+ return { videoBase64: void 0 };
679
+ }
680
+ cleanup() {
681
+ this.suspendRequested = false;
682
+ this.pausedForAttempt = false;
683
+ this.needsVideoSourceReplacement = false;
684
+ this.releaseCameraClone({ keepAudio: false });
685
+ this.compositor?.stop();
686
+ this.compositor = void 0;
687
+ this.recordingSource = void 0;
688
+ this.audioSource = [];
689
+ this.service.cleanup();
690
+ }
691
+ /** Swaps this attempt's camera clone into the composite and resumes. */
692
+ async resume(stream) {
693
+ const compositor = this.compositor;
694
+ if (!compositor) return;
695
+ if (this.needsVideoSourceReplacement) {
696
+ const recordingSource = stream.clone();
697
+ recordingSource.getAudioTracks().forEach((track) => track.stop());
698
+ compositor.switchVideo(recordingSource);
699
+ this.needsVideoSourceReplacement = false;
700
+ this.recordingSource = recordingSource;
701
+ const result = await compositor.resume();
702
+ if (result !== "resumed") throw new Error(`Face recording camera did not resume: ${result}`);
703
+ }
704
+ if (this.pausedForAttempt && !this.service.resume()) throw new Error("Face recording did not resume");
705
+ this.pausedForAttempt = false;
706
+ }
707
+ /**
708
+ * Completes the scoped upload. The camera clone ends synchronously before the
709
+ * drain so a step that ends mid-attempt never pins the camera; the composite
710
+ * stays alive until the recorder has emitted its final chunk.
711
+ */
712
+ async complete() {
713
+ this.stopping = true;
714
+ this.suspendRequested = false;
715
+ this.releaseCameraClone({ keepAudio: false });
607
716
  try {
608
717
  await this.service.stop();
609
718
  } finally {
719
+ this.compositor?.stop();
720
+ this.compositor = void 0;
721
+ this.recordingSource = void 0;
722
+ this.audioSource = [];
610
723
  this.pausedForAttempt = false;
724
+ this.needsVideoSourceReplacement = false;
611
725
  }
612
- return { videoBase64: void 0 };
613
726
  }
614
- cleanup() {
615
- this.pausedForAttempt = false;
616
- this.service.cleanup();
727
+ releaseCameraClone(options) {
728
+ try {
729
+ this.compositor?.pause();
730
+ } catch {}
731
+ const tracks = options.keepAudio ? this.recordingSource?.getVideoTracks() ?? [] : /* @__PURE__ */ new Set([...this.recordingSource?.getTracks() ?? [], ...this.audioSource]);
732
+ for (const track of tracks) try {
733
+ track.stop();
734
+ } catch {}
617
735
  }
618
736
  };
619
737
  /**
@@ -637,51 +755,88 @@ function createRecordingService(params) {
637
755
  //#endregion
638
756
  //#region src/internal/faceCapture/protectedFaceAttempt.ts
639
757
  const ON_DEVICE_MANUAL_CAPTURE_TIMEOUT_MS = 2147483647;
758
+ /**
759
+ * Recorder hooks for one protected face attempt.
760
+ *
761
+ * The recording service comes from the owner of the capture step (the face
762
+ * controller), so a step-scoped service (`suspend` present) is started or
763
+ * resumed by every attempt, paused with its camera clone ended before POC, and
764
+ * suspended again on release; only the controller completes it (ENG-56648).
765
+ * Per-attempt services (local video liveness, capture-only video) keep their
766
+ * stop-before-POC and cleanup-on-release behavior.
767
+ */
640
768
  var ProtectedFaceRecorderHooks = class {
641
- constructor(config, dependencies, delivery) {
642
- this.config = config;
643
- this.dependencies = dependencies;
769
+ constructor(config, delivery, getRecordingService) {
644
770
  this.delivery = delivery;
771
+ this.getRecordingService = getRecordingService;
772
+ this.disposed = false;
645
773
  this.mode = config.onDeviceFaceResultsSubmissionEnabled === true || config.enableFaceRecording !== true && config.deepsightLiveness !== "VIDEOLIVENESS" ? "none" : "finalizeBeforePoc";
646
774
  }
647
775
  async start(unprotectedStream) {
648
776
  if (this.mode === "none") return;
649
- const wasmUtil = await this.dependencies.getWasmUtil();
650
- this.service = createRecordingService({
651
- config: this.config,
652
- wasmUtil,
653
- sessionToken: getToken(),
654
- localDelivery: this.delivery === "local"
655
- });
656
- await this.service?.start(unprotectedStream);
777
+ const service = await this.getRecordingService();
778
+ if (!service) return;
779
+ this.service = service;
780
+ if (this.disposed) {
781
+ this.suspendOrCleanup();
782
+ return;
783
+ }
784
+ try {
785
+ await service.start(unprotectedStream);
786
+ } catch (error) {
787
+ if (service.suspend) {
788
+ service.suspend();
789
+ trueSightLog("warning", "recording", "faceScan", "face recording did not resume for this attempt");
790
+ return;
791
+ }
792
+ throw error;
793
+ }
794
+ if (this.disposed) this.suspendOrCleanup();
657
795
  }
658
796
  async prepareForPoc() {
659
- if (!this.service) return {};
797
+ const service = this.service;
798
+ if (!service) return {};
660
799
  if (this.delivery === "local") {
661
800
  try {
662
- const result = await this.service.stopAndGetVideo();
801
+ const result = await service.stopAndGetVideo();
663
802
  this.captureOnlyVideoBase64 = result.videoBase64;
664
803
  } catch {
665
804
  this.captureOnlyVideoBase64 = void 0;
666
805
  }
667
806
  return {};
668
807
  }
669
- return this.service.stop();
808
+ if (service.suspend) return service.prepareUpload();
809
+ return service.stop();
670
810
  }
671
811
  async resumeAfterPoc() {}
672
812
  pauseForBackground() {
673
813
  this.service?.pauseForBackground?.();
674
814
  }
675
815
  async resumeFromBackground(unprotectedStream) {
676
- await this.service?.resumeFromBackground?.(unprotectedStream);
816
+ const service = this.service;
817
+ if (!service?.resumeFromBackground || this.disposed) return;
818
+ try {
819
+ await service.resumeFromBackground(unprotectedStream);
820
+ } catch {
821
+ service.suspend?.();
822
+ trueSightLog("warning", "recording", "faceScan", "face recording did not resume after foreground");
823
+ }
677
824
  }
678
825
  dispose() {
826
+ this.disposed = true;
679
827
  try {
680
- this.service?.cleanup();
828
+ this.suspendOrCleanup();
681
829
  } finally {
682
830
  this.service = void 0;
683
831
  }
684
832
  }
833
+ /** Step-scoped services suspend (the owner completes them); others clean up. */
834
+ suspendOrCleanup() {
835
+ const service = this.service;
836
+ if (!service) return;
837
+ if (service.suspend) service.suspend();
838
+ else service.cleanup();
839
+ }
685
840
  takeCaptureOnlyVideo() {
686
841
  const video = this.captureOnlyVideoBase64;
687
842
  this.captureOnlyVideoBase64 = void 0;
@@ -705,9 +860,19 @@ var ProtectedFaceAttemptRuntime = class ProtectedFaceAttemptRuntime {
705
860
  this.recorderTransferred = false;
706
861
  this.pendingSignals = [];
707
862
  this.provider = options.faceDetection;
708
- this.recorder = new ProtectedFaceRecorderHooks(options.config, options.dependencies, options.delivery);
863
+ this.recorder = new ProtectedFaceRecorderHooks(options.config, options.delivery, options.getRecordingService ?? (() => this.createAttemptRecordingService()));
709
864
  this.cycleOwnership = createCameraCycleOwnership(options.cycle);
710
865
  }
866
+ /** Per-attempt fallback when no step owner supplies the recording service. */
867
+ async createAttemptRecordingService() {
868
+ const wasmUtil = await this.options.dependencies.getWasmUtil();
869
+ return createRecordingService({
870
+ config: this.options.config,
871
+ wasmUtil,
872
+ sessionToken: getToken(),
873
+ localDelivery: this.options.delivery === "local"
874
+ });
875
+ }
711
876
  get delivery() {
712
877
  return this.options.delivery;
713
878
  }
@@ -973,6 +1138,8 @@ function createProtectedFaceControllerActor(options) {
973
1138
  let committedPreview;
974
1139
  let pendingAutoPreview;
975
1140
  let recording = {};
1141
+ let stepRecording;
1142
+ let stepRecordingPending;
976
1143
  let generation = 0;
977
1144
  let active = true;
978
1145
  let diagnosticAttempt = 0;
@@ -991,6 +1158,48 @@ function createProtectedFaceControllerActor(options) {
991
1158
  if (!controllerInput) throw new Error("Protected face controller is not bound");
992
1159
  return controllerInput;
993
1160
  };
1161
+ /**
1162
+ * One recording service per capture step (ENG-56648). Every attempt of the
1163
+ * step starts or resumes it; `completeStepRecording` completes it when the
1164
+ * backend accepts a capture or the step ends without a retry.
1165
+ */
1166
+ const getStepRecordingService = () => {
1167
+ if (stepRecording) return Promise.resolve(stepRecording);
1168
+ if (stepRecordingPending) return stepRecordingPending;
1169
+ const input = getControllerInput();
1170
+ const pending = (async () => {
1171
+ const wasmUtil = await input.dependencies.getWasmUtil();
1172
+ if (!active) return;
1173
+ stepRecording ??= createRecordingService({
1174
+ config: input.config,
1175
+ wasmUtil,
1176
+ sessionToken: getToken(),
1177
+ localDelivery: options.delivery === "local"
1178
+ });
1179
+ return stepRecording;
1180
+ })();
1181
+ stepRecordingPending = pending;
1182
+ pending.finally(() => {
1183
+ if (stepRecordingPending === pending) stepRecordingPending = void 0;
1184
+ });
1185
+ return pending;
1186
+ };
1187
+ const completeStepRecording = () => {
1188
+ const service = stepRecording;
1189
+ stepRecording = void 0;
1190
+ if (!service) return;
1191
+ if (!service.suspend) {
1192
+ try {
1193
+ service.cleanup();
1194
+ } catch {}
1195
+ return;
1196
+ }
1197
+ service.stop().catch(() => void 0).finally(() => {
1198
+ try {
1199
+ service.cleanup();
1200
+ } catch {}
1201
+ });
1202
+ };
994
1203
  const ensureRuntime = () => {
995
1204
  if (!runtime) {
996
1205
  const input = getControllerInput();
@@ -1006,7 +1215,8 @@ function createProtectedFaceControllerActor(options) {
1006
1215
  acquireCamera: (provider) => initializeCamera({
1007
1216
  config: input.config,
1008
1217
  provider
1009
- })
1218
+ }),
1219
+ getRecordingService: getStepRecordingService
1010
1220
  });
1011
1221
  if (deepsightService) runtime.setDeepsightService(deepsightService);
1012
1222
  }
@@ -1250,12 +1460,16 @@ function createProtectedFaceControllerActor(options) {
1250
1460
  case "RESET":
1251
1461
  releaseCurrent("retry");
1252
1462
  return;
1463
+ case "COMPLETE_RECORDING":
1464
+ completeStepRecording();
1465
+ return;
1253
1466
  case "RELEASE": releaseCurrent(command.reason);
1254
1467
  }
1255
1468
  });
1256
1469
  return () => {
1257
1470
  active = false;
1258
1471
  releaseCurrent("externalStop");
1472
+ completeStepRecording();
1259
1473
  };
1260
1474
  });
1261
1475
  }
@@ -1491,6 +1705,10 @@ const faceCaptureMachine = setup({
1491
1705
  if (!isProtectedFaceControllerRunning(self)) return;
1492
1706
  enqueue.sendTo("protectedFaceController", { type: "RESET" });
1493
1707
  }),
1708
+ completeProtectedRecording: enqueueActions(({ enqueue, self }) => {
1709
+ if (!isProtectedFaceControllerRunning(self)) return;
1710
+ enqueue.sendTo("protectedFaceController", { type: "COMPLETE_RECORDING" });
1711
+ }),
1494
1712
  sendProtectedAutoCapture: enqueueActions(({ enqueue, self, event }) => {
1495
1713
  if (!isProtectedFaceControllerRunning(self)) return;
1496
1714
  enqueue.sendTo("protectedFaceController", {
@@ -1980,7 +2198,7 @@ const faceCaptureMachine = setup({
1980
2198
  }
1981
2199
  ] } },
1982
2200
  success: {
1983
- entry: "cleanup",
2201
+ entry: ["completeProtectedRecording", "cleanup"],
1984
2202
  after: { 3e3: { target: "#faceCapture.processing" } }
1985
2203
  }
1986
2204
  }
@@ -2026,7 +2244,7 @@ const faceCaptureMachine = setup({
2026
2244
  onError: { target: "finished" }
2027
2245
  } },
2028
2246
  terminalProcessing: {
2029
- entry: "cleanup",
2247
+ entry: ["completeProtectedRecording", "cleanup"],
2030
2248
  invoke: {
2031
2249
  id: "processFace",
2032
2250
  src: "processFace",
@@ -2055,7 +2273,11 @@ const faceCaptureMachine = setup({
2055
2273
  type: "final"
2056
2274
  },
2057
2275
  error: {
2058
- entry: ["stopMediaStream", "releaseAvatarWarmup"],
2276
+ entry: [
2277
+ "completeProtectedRecording",
2278
+ "stopMediaStream",
2279
+ "releaseAvatarWarmup"
2280
+ ],
2059
2281
  on: { RESET: {
2060
2282
  target: "idle",
2061
2283
  actions: ["resetProtectedController", "resetContext"]
@@ -1,5 +1,5 @@
1
1
  import { n as __toESM } from "./rolldown-runtime-FDOR9p9I.esm.js";
2
- import { t as SDK_VERSION } from "./sdkVersion-BZh6dj53.esm.js";
2
+ import { t as SDK_VERSION } from "./sdkVersion-DYlnESxD.esm.js";
3
3
  import { t as BrowserLazyImportProvider } from "./BrowserLazyImportProvider-BhoA957O.esm.js";
4
4
  let currentEnvironment;
5
5
  /** Effective tier: the explicitly-set value, else the default (see note above). */
@@ -1,2 +1,2 @@
1
- import { E as updateFeatureManagementUser, T as subscribeFeatureManagement, _ as getIsFeatureManagementInitialized, a as stringParam, d as ONBOARDING_WEB_SDK_PARAMETER_STORE, f as getExperiment, g as getFeatureParameterStore, h as getFeatureManagementVersion, i as numberParam, l as resolveExperiment, m as getFeatureGate, n as defineExperimentParams, o as EXPERIMENT_UNAVAILABLE_SENTINEL, p as getFeatureDynamicConfig, r as enumParam, s as exposeExperimentOnce, t as booleanParam, u as resolveExperimentOnce, x as logEvent, y as getLayer } from "./feature-management-E0mq0pMs.esm.js";
1
+ import { E as updateFeatureManagementUser, T as subscribeFeatureManagement, _ as getIsFeatureManagementInitialized, a as stringParam, d as ONBOARDING_WEB_SDK_PARAMETER_STORE, f as getExperiment, g as getFeatureParameterStore, h as getFeatureManagementVersion, i as numberParam, l as resolveExperiment, m as getFeatureGate, n as defineExperimentParams, o as EXPERIMENT_UNAVAILABLE_SENTINEL, p as getFeatureDynamicConfig, r as enumParam, s as exposeExperimentOnce, t as booleanParam, u as resolveExperimentOnce, x as logEvent, y as getLayer } from "./feature-management-Bzr9uaS4.esm.js";
2
2
  export { EXPERIMENT_UNAVAILABLE_SENTINEL, ONBOARDING_WEB_SDK_PARAMETER_STORE, booleanParam, defineExperimentParams, enumParam, exposeExperimentOnce, getExperiment, getFeatureDynamicConfig, getFeatureGate, getFeatureManagementVersion, getFeatureParameterStore, getIsFeatureManagementInitialized, getLayer, logEvent, numberParam, resolveExperiment, resolveExperimentOnce, stringParam, subscribeFeatureManagement, updateFeatureManagementUser };
package/dist/flow.esm.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { v as addEvent } from "./events-ijlbX_Wx.esm.js";
2
- import { a as resolveDashboardModuleConfig, c as getRequiredWasmPipelines, j as mergeDashboardConfig, l as normalizeFlowModules, n as getFlow, o as enrichFlowModuleConfig, r as preloadDashboardFlow, s as getNextRequiredWasmPipelines, t as completeDeferredActivation, u as resolveFlowModuleConfig } from "./flowServices-DjPFGs_D.esm.js";
2
+ import { a as resolveDashboardModuleConfig, c as getRequiredWasmPipelines, j as mergeDashboardConfig, l as normalizeFlowModules, n as getFlow, o as enrichFlowModuleConfig, r as preloadDashboardFlow, s as getNextRequiredWasmPipelines, t as completeDeferredActivation, u as resolveFlowModuleConfig } from "./flowServices-CnyFU9Bz.esm.js";
3
3
  import { i as assign, s as createActor, t as setup, u as createManager } from "./xstate.esm-BuFLFuzz.esm.js";
4
4
  import { n as fromPromise } from "./xstate-actors.esm-BXeQ-Ucz.esm.js";
5
- import { n as getFinishStatus, r as getTotalScoreStatus, t as classifyScoreStatus } from "./flowCompletionService-DJp1odGN.esm.js";
6
- import { n as attachFlowEventEmitter, t as runChildModule } from "./runChildModule-CI1gGWN1.esm.js";
5
+ import { n as getFinishStatus, r as getTotalScoreStatus, t as classifyScoreStatus } from "./flowCompletionService-D0qKFy5Y.esm.js";
6
+ import { n as attachFlowEventEmitter, t as runChildModule } from "./runChildModule-CTeh8a1T.esm.js";
7
7
  import { n as isAdvanceableError } from "./advanceableErrors-CpF2cBy6.esm.js";
8
8
  //#region src/modules/flow/noOpFlowModuleMachine.ts
9
9
  const noOpFlowModuleMachine = setup({}).createMachine({
@@ -1,6 +1,6 @@
1
1
  import { t as api } from "./api-Bx3gKW_y.esm.js";
2
2
  import { t as endpoints } from "./endpoints-B-3Q-LUw.esm.js";
3
- import { i as toIncodeApiError } from "./apiError-Budb6m6w.esm.js";
3
+ import { i as toIncodeApiError } from "./apiError-BArJSmSN.esm.js";
4
4
  //#region src/modules/flow/flowCompletionService.ts
5
5
  const getFinishStatus = async (flowId, signal) => {
6
6
  const url = `${endpoints.finishStatus}${flowId ? `?flowId=${flowId}` : ""}`;
@@ -1,10 +1,10 @@
1
1
  import { n as getWasmStatus } from "./warmup-CUUnwYxe.esm.js";
2
- import { E as updateFeatureManagementUser } from "./feature-management-E0mq0pMs.esm.js";
2
+ import { E as updateFeatureManagementUser } from "./feature-management-Bzr9uaS4.esm.js";
3
3
  import { r as getToken, t as api } from "./api-Bx3gKW_y.esm.js";
4
- import { i as initializeSession, l as whenSessionFingerprintSettled, r as getSessionFingerprintResult, u as getStandaloneFlowPolicy } from "./sessionInitializer-BFk33E67.esm.js";
4
+ import { i as initializeSession, l as whenSessionFingerprintSettled, r as getSessionFingerprintResult, u as getStandaloneFlowPolicy } from "./sessionInitializer-DKCQfxZ2.esm.js";
5
5
  import { t as endpoints } from "./endpoints-B-3Q-LUw.esm.js";
6
- import { i as toIncodeApiError } from "./apiError-Budb6m6w.esm.js";
7
- import "./session-3LmvAU4S.esm.js";
6
+ import { i as toIncodeApiError } from "./apiError-BArJSmSN.esm.js";
7
+ import "./session-Cs6z9Stj.esm.js";
8
8
  import { i as toEkycConfig } from "./ekycUtils-Dew1rBG0.esm.js";
9
9
  //#region src/modules/flow/dashboardConfig.ts
10
10
  function isPlainObject(value) {
@@ -1,3 +1,3 @@
1
- import { t as createGeolocationManager } from "./geolocationManager-D5906YXx.esm.js";
2
- import { t as geolocationMachine } from "./geolocationStateMachine-BVOduc3y.esm.js";
1
+ import { t as createGeolocationManager } from "./geolocationManager-BqM__4xb.esm.js";
2
+ import { t as geolocationMachine } from "./geolocationStateMachine-DpxY4O3h.esm.js";
3
3
  export { createGeolocationManager, geolocationMachine };
@@ -1,6 +1,6 @@
1
1
  import { n as eventModuleNames, o as createManagerInstrumentation } from "./events-ijlbX_Wx.esm.js";
2
2
  import { s as createActor, u as createManager } from "./xstate.esm-BuFLFuzz.esm.js";
3
- import { t as geolocationMachine } from "./geolocationStateMachine-BVOduc3y.esm.js";
3
+ import { t as geolocationMachine } from "./geolocationStateMachine-DpxY4O3h.esm.js";
4
4
  //#region ../infra/src/providers/browser/BrowserGeolocationProvider.ts
5
5
  var BrowserGeolocationProvider = class {
6
6
  getCurrentPosition() {
@@ -1,7 +1,7 @@
1
1
  import { t as api } from "./api-Bx3gKW_y.esm.js";
2
2
  import { t as endpoints } from "./endpoints-B-3Q-LUw.esm.js";
3
3
  import { a as isIOS, t as isAndroid } from "./platform-DkcRc9JV.esm.js";
4
- import { n as isConnectivityError } from "./apiError-Budb6m6w.esm.js";
4
+ import { n as isConnectivityError } from "./apiError-BArJSmSN.esm.js";
5
5
  import { i as assign, t as setup } from "./xstate.esm-BuFLFuzz.esm.js";
6
6
  import { n as fromPromise } from "./xstate-actors.esm-BXeQ-Ucz.esm.js";
7
7
  //#region src/modules/geolocation/geolocationServices.ts
@@ -1,18 +1,19 @@
1
- import { t as ensureWasmPipelines } from "./setup-BWG-hivt.esm.js";
1
+ import { t as ensureWasmPipelines } from "./setup-B-qr0dC6.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 { a as resolveDashboardModuleConfig, d as facingModeForStep } from "./flowServices-DjPFGs_D.esm.js";
4
+ import { a as resolveDashboardModuleConfig, d as facingModeForStep } from "./flowServices-CnyFU9Bz.esm.js";
5
5
  import { i as assign, r as sendTo, s as createActor, t as setup, u as createManager } from "./xstate.esm-BuFLFuzz.esm.js";
6
6
  import { n as fromPromise, t as fromCallback } from "./xstate-actors.esm-BXeQ-Ucz.esm.js";
7
- import { n as encryptSelfieImage, o as startDetection, t as FaceDetectionProvider } from "./FaceDetectionProvider-BfhWkK90.esm.js";
7
+ import { n as encryptSelfieImage, o as startDetection, t as FaceDetectionProvider } from "./FaceDetectionProvider-DAVK6BAe.esm.js";
8
8
  import { t as StreamCanvasProcessingSession } from "./StreamCanvasProcessingSession-CBnbTnOr.esm.js";
9
9
  import { n as getWindowDimensions } from "./getDeviceClass-CeBiEayS.esm.js";
10
10
  import { a as uploadSelfie, r as processFace } from "./selfieErrorUtils-UiQ46EBa.esm.js";
11
- import { i as CameraCompositor, n as DEFAULT_ID_CAPTURE_THRESHOLDS, r as IdCaptureProvider, t as DEFAULT_ID_CAPTURE_GEOMETRY } from "./idCaptureDefaults-CbPA-Auz.esm.js";
12
- import { g as ID_ERROR_CODES, h as validateUploadResponse, l as processId, p as uploadIdImage } from "./idCaptureServices-i1KxugN7.esm.js";
11
+ import { n as CameraCompositor } from "./multipartRecordingService-CuXLH4tK.esm.js";
12
+ import { n as DEFAULT_ID_CAPTURE_THRESHOLDS, r as IdCaptureProvider, t as DEFAULT_ID_CAPTURE_GEOMETRY } from "./idCaptureDefaults-Cd-qOMUt.esm.js";
13
+ import { _ as validateUploadResponse, h as uploadIdImage, u as processId, v as ID_ERROR_CODES } from "./idCaptureServices-CFuKdAW7.esm.js";
13
14
  import { t as StreamCanvasCapture } from "./StreamCanvasCapture-C9jtgBdT.esm.js";
14
- import { n as getFinishStatus } from "./flowCompletionService-DJp1odGN.esm.js";
15
- import { i as delay, n as defaultAcquireCamera, o as isSelfieValidationError, s as isWrongVideoSelfieIdSide } from "./videoSelfieCameraWarmer-B8PcYqmz.esm.js";
15
+ import { n as getFinishStatus } from "./flowCompletionService-D0qKFy5Y.esm.js";
16
+ import { i as delay, n as defaultAcquireCamera, o as isSelfieValidationError, s as isWrongVideoSelfieIdSide } from "./videoSelfieCameraWarmer-BRz5aQPN.esm.js";
16
17
  //#region src/modules/id-selfie-flow/idSelfieFlowStepDetector.ts
17
18
  /** Default autocapture window for the selfie step. */
18
19
  const SELFIE_AUTOCAPTURE_MS = 1e4;
package/dist/id.d.ts CHANGED
@@ -3,7 +3,7 @@ import { n as PermissionStatus, t as PermissionResult } from "./types-BEwVKkLJ.j
3
3
  import { t as CameraStream } from "./camera-9wWD-pwg.js";
4
4
  import { r as IdCaptureSettings, t as DetectionOrientation } from "./IIdCaptureCapability-RNiFhvXR.js";
5
5
  import { A as MANUAL_UPLOAD_MAX_FILE_SIZE_BYTES, B as DeviceWalletProvider, C as IdDocumentType, D as UploadIdResponse, E as IdFlowStep, F as DeviceWalletDecision, G as DigitalIdPlatformSupport, H as DIGITAL_ID_REGISTRY, I as DeviceWalletDecryptResponse, J as resolveDigitalIdImplementation, K as ResolvedDigitalIdRoute, L as DeviceWalletFailReason, M as ManualUploadContext, N as ManualUploadSide, P as ManualUploadTab, R as DeviceWalletOutput, S as IdCapturedImageData, T as IdErrorCode, U as DigitalIdDocumentType, V as DIGITAL_ID_DOCUMENT_TYPES, W as DigitalIdFunnelEntry, Y as DigitalIdProviderId, Z as RedirectReturnParams, _ as IdCaptureInput, a as CaptureOnlyResponse, b as IdCaptureOutput, c as DetectionStatus, d as IdCaptureContext, f as IdCaptureDependencies, g as IdCaptureGeometry, h as IdCaptureEvent, i as CaptureIdResponse, j as MANUAL_UPLOAD_MAX_RETRIES, k as MANUAL_UPLOAD_EXHAUSTION_FORWARD_MS, l as ID_ERROR_CODES, m as IdCaptureDigitalIdMethod, n as AcceptedDocumentType, o as CapturedImage, p as IdCaptureDigitalIdFlowType, q as isRedirectFlowType, r as AddBarcodeV3Response, s as DetectionArea, t as AcceptedDocument, u as IdCaptureConfig, v as IdCaptureMode, w as IdError, x as IdCaptureThresholds, y as IdCaptureOnlyConfig, z as DeviceWalletPlatform } from "./types-byBHOzCG2.js";
6
- import { A as prepareRecordingForCameraRetry, C as addBarcode, D as getRealQualityValue, E as finalizeRecordingSession, F as uploadIdImage, I as uploadManualIdFile, L as validateUploadResponse, M as startRecordingSession, N as stopRecording, O as initializeIdCapture, P as stopStream, S as ValidationError, T as disposeRecordingSession, _ as IdCaptureInitResult, a as CreateIdCaptureOnlyActorOptions, b as UploadIdImageParams, c as IdCaptureOnlyMachine, d as IdCaptureActor, f as createIdCaptureActor, g as FinalizedIdRecording, h as AddBarcodeParams, j as processId, k as pauseRecordingForAttempt, l as idCaptureOnlyMachine, m as idCaptureMachine, n as IdCaptureManager, o as IdCaptureOnlyActor, p as IdCaptureMachine, r as IdCaptureState, s as createIdCaptureOnlyActor, t as createIdCaptureManager, u as CreateIdCaptureActorOptions, v as InitializeIdCaptureParams, w as barcodeToBase64, x as UploadManualIdFileParams, y as StartRecordingParams } from "./idCaptureManager-DKESug0R.js";
6
+ import { A as pauseRecordingForAttempt, C as addBarcode, D as getRealQualityValue, E as finalizeRecordingSession, F as stopRecording, I as stopStream, L as uploadIdImage, M as processId, N as resumeRecordingAfterPause, O as initializeIdCapture, P as startRecordingSession, R as uploadManualIdFile, S as ValidationError, T as disposeRecordingSession, _ as IdCaptureInitResult, a as CreateIdCaptureOnlyActorOptions, b as UploadIdImageParams, c as IdCaptureOnlyMachine, d as IdCaptureActor, f as createIdCaptureActor, g as FinalizedIdRecording, h as AddBarcodeParams, j as prepareRecordingForCameraRetry, k as isSuspendableRecordingSession, l as idCaptureOnlyMachine, m as idCaptureMachine, n as IdCaptureManager, o as IdCaptureOnlyActor, p as IdCaptureMachine, r as IdCaptureState, s as createIdCaptureOnlyActor, t as createIdCaptureManager, u as CreateIdCaptureActorOptions, v as InitializeIdCaptureParams, w as barcodeToBase64, x as UploadManualIdFileParams, y as StartRecordingParams, z as validateUploadResponse } from "./idCaptureManager-De7O0TOD.js";
7
7
  //#region src/modules/id/deviceWallet/deviceWalletErrors.d.ts
8
8
  /**
9
9
  * Fail reason → i18n key for the device-wallet error screen (same shape as
@@ -47,4 +47,4 @@ declare function createIdCaptureOnlyManagerFromActor(actor: IdCaptureOnlyActor,
47
47
  */
48
48
  declare function createIdCaptureOnlyManager(options: CreateIdCaptureOnlyActorOptions): IdCaptureOnlyManager;
49
49
  //#endregion
50
- export { AcceptedDocument, AcceptedDocumentType, AddBarcodeParams, AddBarcodeV3Response, type CameraStream, CaptureIdResponse, CaptureOnlyResponse, CapturedImage, type CreateIdCaptureActorOptions, type CreateIdCaptureOnlyActorOptions, DEVICE_WALLET_ERROR_KEYS, DIGITAL_ID_DOCUMENT_TYPES, DIGITAL_ID_REGISTRY, DetectionArea, type DetectionOrientation, DetectionStatus, type DeviceWalletDecision, type DeviceWalletDecryptResponse, type DeviceWalletFailReason, type DeviceWalletOutput, type DeviceWalletPlatform, type DeviceWalletProvider, type DigitalIdDocumentType, type DigitalIdFunnelEntry, type DigitalIdPlatformSupport, type DigitalIdProviderId, FinalizedIdRecording, ID_ERROR_CODES, type IdCaptureActor, IdCaptureConfig, IdCaptureContext, IdCaptureDependencies, IdCaptureDigitalIdFlowType, IdCaptureDigitalIdMethod, IdCaptureEvent, IdCaptureGeometry, IdCaptureInitResult, IdCaptureInput, type IdCaptureMachine, type IdCaptureManager, IdCaptureMode, type IdCaptureOnlyActor, IdCaptureOnlyConfig, type IdCaptureOnlyMachine, type IdCaptureOnlyManager, IdCaptureOutput, type IdCaptureSettings, type IdCaptureState, IdCaptureThresholds, IdCapturedImageData, IdDocumentType, IdError, IdErrorCode, IdFlowStep, InitializeIdCaptureParams, MANUAL_UPLOAD_EXHAUSTION_FORWARD_MS, MANUAL_UPLOAD_MAX_FILE_SIZE_BYTES, MANUAL_UPLOAD_MAX_RETRIES, type ManualUploadContext, type ManualUploadSide, type ManualUploadTab, type PermissionResult, type PermissionStatus, type RedirectReturnParams, type ResolvedDigitalIdRoute, StartRecordingParams, UploadIdImageParams, UploadIdResponse, UploadManualIdFileParams, ValidationError, addBarcode, barcodeToBase64, createIdCaptureActor, createIdCaptureManager, createIdCaptureOnlyActor, createIdCaptureOnlyManager, createIdCaptureOnlyManagerFromActor, disposeRecordingSession, finalizeRecordingSession, getRealQualityValue, idCaptureMachine, idCaptureOnlyMachine, initializeIdCapture, isRedirectFlowType, pauseRecordingForAttempt, prepareRecordingForCameraRetry, processId, resolveDigitalIdImplementation, resolveWalletPlatform, startRecordingSession, stopRecording, stopStream, uploadIdImage, uploadManualIdFile, validateUploadResponse };
50
+ export { AcceptedDocument, AcceptedDocumentType, AddBarcodeParams, AddBarcodeV3Response, type CameraStream, CaptureIdResponse, CaptureOnlyResponse, CapturedImage, type CreateIdCaptureActorOptions, type CreateIdCaptureOnlyActorOptions, DEVICE_WALLET_ERROR_KEYS, DIGITAL_ID_DOCUMENT_TYPES, DIGITAL_ID_REGISTRY, DetectionArea, type DetectionOrientation, DetectionStatus, type DeviceWalletDecision, type DeviceWalletDecryptResponse, type DeviceWalletFailReason, type DeviceWalletOutput, type DeviceWalletPlatform, type DeviceWalletProvider, type DigitalIdDocumentType, type DigitalIdFunnelEntry, type DigitalIdPlatformSupport, type DigitalIdProviderId, FinalizedIdRecording, ID_ERROR_CODES, type IdCaptureActor, IdCaptureConfig, IdCaptureContext, IdCaptureDependencies, IdCaptureDigitalIdFlowType, IdCaptureDigitalIdMethod, IdCaptureEvent, IdCaptureGeometry, IdCaptureInitResult, IdCaptureInput, type IdCaptureMachine, type IdCaptureManager, IdCaptureMode, type IdCaptureOnlyActor, IdCaptureOnlyConfig, type IdCaptureOnlyMachine, type IdCaptureOnlyManager, IdCaptureOutput, type IdCaptureSettings, type IdCaptureState, IdCaptureThresholds, IdCapturedImageData, IdDocumentType, IdError, IdErrorCode, IdFlowStep, InitializeIdCaptureParams, MANUAL_UPLOAD_EXHAUSTION_FORWARD_MS, MANUAL_UPLOAD_MAX_FILE_SIZE_BYTES, MANUAL_UPLOAD_MAX_RETRIES, type ManualUploadContext, type ManualUploadSide, type ManualUploadTab, type PermissionResult, type PermissionStatus, type RedirectReturnParams, type ResolvedDigitalIdRoute, StartRecordingParams, UploadIdImageParams, UploadIdResponse, UploadManualIdFileParams, ValidationError, addBarcode, barcodeToBase64, createIdCaptureActor, createIdCaptureManager, createIdCaptureOnlyActor, createIdCaptureOnlyManager, createIdCaptureOnlyManagerFromActor, disposeRecordingSession, finalizeRecordingSession, getRealQualityValue, idCaptureMachine, idCaptureOnlyMachine, initializeIdCapture, isRedirectFlowType, isSuspendableRecordingSession, pauseRecordingForAttempt, prepareRecordingForCameraRetry, processId, resolveDigitalIdImplementation, resolveWalletPlatform, resumeRecordingAfterPause, startRecordingSession, stopRecording, stopStream, uploadIdImage, uploadManualIdFile, validateUploadResponse };
package/dist/id.esm.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { n as eventModuleNames } from "./events-ijlbX_Wx.esm.js";
2
2
  import { i as assign, s as createActor } from "./xstate.esm-BuFLFuzz.esm.js";
3
3
  import { n as fromPromise } from "./xstate-actors.esm-BXeQ-Ucz.esm.js";
4
- import { a as createIdProtectedCaptureController, c as DIGITAL_ID_DOCUMENT_TYPES, d as resolveDigitalIdImplementation, f as MANUAL_UPLOAD_EXHAUSTION_FORWARD_MS, h as resolveWalletPlatform, i as createIdCaptureOnlyDeliveryActor, l as DIGITAL_ID_REGISTRY, m as MANUAL_UPLOAD_MAX_RETRIES, n as provideIdProtectedCaptureController, p as MANUAL_UPLOAD_MAX_FILE_SIZE_BYTES, r as attachIdProtectedCaptureController, t as idCaptureMachine, u as isRedirectFlowType } from "./idCaptureStateMachine-Ne_PXth_.esm.js";
5
- import { n as createIdCaptureActor, r as createIdCaptureManagerFromActor, t as createIdCaptureManager } from "./idCaptureManager-rfV9dIXy.esm.js";
6
- import { a as getRealQualityValue, c as prepareRecordingForCameraRetry, d as stopRecording, f as stopStream, g as ID_ERROR_CODES, h as validateUploadResponse, i as finalizeRecordingSession, l as processId, m as uploadManualIdFile, n as barcodeToBase64, o as initializeIdCapture, p as uploadIdImage, r as disposeRecordingSession, s as pauseRecordingForAttempt, t as addBarcode, u as startRecordingSession, v as resolveIdCaptureThresholds } from "./idCaptureServices-i1KxugN7.esm.js";
4
+ import { a as createIdProtectedCaptureController, c as DIGITAL_ID_DOCUMENT_TYPES, d as resolveDigitalIdImplementation, f as MANUAL_UPLOAD_EXHAUSTION_FORWARD_MS, h as resolveWalletPlatform, i as createIdCaptureOnlyDeliveryActor, l as DIGITAL_ID_REGISTRY, m as MANUAL_UPLOAD_MAX_RETRIES, n as provideIdProtectedCaptureController, p as MANUAL_UPLOAD_MAX_FILE_SIZE_BYTES, r as attachIdProtectedCaptureController, t as idCaptureMachine, u as isRedirectFlowType } from "./idCaptureStateMachine-CzyZ_21z.esm.js";
5
+ import { n as createIdCaptureActor, r as createIdCaptureManagerFromActor, t as createIdCaptureManager } from "./idCaptureManager-CO4WBQQN.esm.js";
6
+ import { _ as validateUploadResponse, a as getRealQualityValue, b as resolveIdCaptureThresholds, c as pauseRecordingForAttempt, d as resumeRecordingAfterPause, f as startRecordingSession, g as uploadManualIdFile, h as uploadIdImage, i as finalizeRecordingSession, l as prepareRecordingForCameraRetry, m as stopStream, n as barcodeToBase64, o as initializeIdCapture, p as stopRecording, r as disposeRecordingSession, s as isSuspendableRecordingSession, t as addBarcode, u as processId, v as ID_ERROR_CODES } from "./idCaptureServices-CFuKdAW7.esm.js";
7
7
  import { t as invokeOnCaptureCallback } from "./invokeOnCaptureCallback-BjzPjJ_p.esm.js";
8
8
  //#region src/modules/id/deviceWallet/deviceWalletErrors.ts
9
9
  /**
@@ -213,4 +213,4 @@ function createIdCaptureOnlyManager(options) {
213
213
  return createIdCaptureOnlyManagerFromActor(createIdCaptureOnlyActor(options), options.config);
214
214
  }
215
215
  //#endregion
216
- export { DEVICE_WALLET_ERROR_KEYS, DIGITAL_ID_DOCUMENT_TYPES, DIGITAL_ID_REGISTRY, ID_ERROR_CODES, MANUAL_UPLOAD_EXHAUSTION_FORWARD_MS, MANUAL_UPLOAD_MAX_FILE_SIZE_BYTES, MANUAL_UPLOAD_MAX_RETRIES, addBarcode, barcodeToBase64, createIdCaptureActor, createIdCaptureManager, createIdCaptureOnlyActor, createIdCaptureOnlyManager, createIdCaptureOnlyManagerFromActor, disposeRecordingSession, finalizeRecordingSession, getRealQualityValue, idCaptureMachine, idCaptureOnlyMachine, initializeIdCapture, isRedirectFlowType, pauseRecordingForAttempt, prepareRecordingForCameraRetry, processId, resolveDigitalIdImplementation, resolveWalletPlatform, startRecordingSession, stopRecording, stopStream, uploadIdImage, uploadManualIdFile, validateUploadResponse };
216
+ export { DEVICE_WALLET_ERROR_KEYS, DIGITAL_ID_DOCUMENT_TYPES, DIGITAL_ID_REGISTRY, ID_ERROR_CODES, MANUAL_UPLOAD_EXHAUSTION_FORWARD_MS, MANUAL_UPLOAD_MAX_FILE_SIZE_BYTES, MANUAL_UPLOAD_MAX_RETRIES, addBarcode, barcodeToBase64, createIdCaptureActor, createIdCaptureManager, createIdCaptureOnlyActor, createIdCaptureOnlyManager, createIdCaptureOnlyManagerFromActor, disposeRecordingSession, finalizeRecordingSession, getRealQualityValue, idCaptureMachine, idCaptureOnlyMachine, initializeIdCapture, isRedirectFlowType, isSuspendableRecordingSession, pauseRecordingForAttempt, prepareRecordingForCameraRetry, processId, resolveDigitalIdImplementation, resolveWalletPlatform, resumeRecordingAfterPause, startRecordingSession, stopRecording, stopStream, uploadIdImage, uploadManualIdFile, validateUploadResponse };