@incodetech/core 0.0.0-dev-20260729-9e7b030a → 0.0.0-dev-20260729-a31df3b7

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 (87) hide show
  1. package/dist/{FaceDetectionProvider-BHweGBEM.d.ts → FaceDetectionProvider-Mh6q3EbA.d.ts} +1 -2
  2. package/dist/IIdCaptureCapability-Cj_aceph.d.ts +231 -0
  3. package/dist/{IStorageCapability-B8IGxCwe.d.ts → IStorageCapability-ORkQfK3F.d.ts} +112 -1
  4. package/dist/ae-signature.esm.js +1 -1
  5. package/dist/{apiError-CzR7Y6Ua.esm.js → apiError-CS9ZMDr2.esm.js} +1 -1
  6. package/dist/authentication.d.ts +3 -3
  7. package/dist/authentication.esm.js +2 -2
  8. package/dist/{authenticationManager-CmkHvt7_.esm.js → authenticationManager-Cd4tefr2.esm.js} +2 -2
  9. package/dist/{authenticationManager-BGM8bpD0.d.ts → authenticationManager-Y2_MuGXy.d.ts} +1 -1
  10. package/dist/{authenticationStateMachine-O3acuOqq.esm.js → authenticationStateMachine-BnH1mizY.esm.js} +2 -2
  11. package/dist/consent.d.ts +1 -1
  12. package/dist/{consentManager-uhDPdU6i.d.ts → consentManager-5HWbGwOa.d.ts} +9 -9
  13. package/dist/{deepsightLoader-CaUpu0Dy.esm.js → deepsightLoader-CN4B5ugn.esm.js} +3 -3
  14. package/dist/{deepsightService-CR-CYdka.d.ts → deepsightService-DLVQS_RH.d.ts} +2 -112
  15. package/dist/document-capture.d.ts +1 -1
  16. package/dist/document-upload.d.ts +4 -4
  17. package/dist/{documentCaptureManager-pEqMY_Oo.d.ts → documentCaptureManager-DeSYkGWc.d.ts} +70 -70
  18. package/dist/dynamic-forms.esm.js +2 -2
  19. package/dist/{dynamicFormsManager-BxUgij0L.esm.js → dynamicFormsManager-B80PGYEF.esm.js} +1 -1
  20. package/dist/{dynamicFormsStateMachine-D0cEsDMH.esm.js → dynamicFormsStateMachine-B7R09HRI.esm.js} +1 -1
  21. package/dist/ekyb.esm.js +3 -3
  22. package/dist/{ekybManager-LicVPYug.esm.js → ekybManager-Cg_boKM5.esm.js} +1 -1
  23. package/dist/{ekybStateMachine-IgLa1nXx.esm.js → ekybStateMachine-CAXjJ2gA.esm.js} +1 -1
  24. package/dist/electronic-signature.esm.js +1 -1
  25. package/dist/{electronicSignatureManager-DqPJCXMG.esm.js → electronicSignatureManager-JuycNykG.esm.js} +1 -1
  26. package/dist/extensibility.d.ts +14 -14
  27. package/dist/extensibility.esm.js +8 -8
  28. package/dist/{faceCaptureManagerFactory-2W_XduCs.esm.js → faceCaptureManagerFactory-Cd1uQnGS.esm.js} +1 -1
  29. package/dist/{faceCaptureManagerFactory-B92LFT16.d.ts → faceCaptureManagerFactory-K8iLKaRl.d.ts} +5 -4
  30. package/dist/{faceCaptureSetup-D-9s0vUS.esm.js → faceCaptureSetup-CS7exiIh.esm.js} +3 -2
  31. package/dist/flow.d.ts +5 -5
  32. package/dist/flow.esm.js +3 -3
  33. package/dist/{flowCompletionService-D_DJ1dNA.esm.js → flowCompletionService-C77_-GvG.esm.js} +1 -1
  34. package/dist/{flowServices-ZgW3UGcz.esm.js → flowServices-BuSZYjB9.esm.js} +3 -3
  35. package/dist/geolocation.esm.js +2 -2
  36. package/dist/{geolocationManager-oLdeMbdy.esm.js → geolocationManager-D2ptN5BO.esm.js} +1 -1
  37. package/dist/{geolocationStateMachine-CSDKlrHE.esm.js → geolocationStateMachine-fOQUnMxw.esm.js} +1 -1
  38. package/dist/id-ocr.d.ts +1 -1
  39. package/dist/id-selfie-flow.d.ts +179 -0
  40. package/dist/id-selfie-flow.esm.js +917 -0
  41. package/dist/id.d.ts +3 -2
  42. package/dist/id.esm.js +3 -2
  43. package/dist/{idCaptureManager-DAsfVDWq.esm.js → idCaptureManager-BokR8KKO.esm.js} +2 -1
  44. package/dist/{idCaptureManager-B2w2CGuV.d.ts → idCaptureManager-wKz4MXR8.d.ts} +10 -2
  45. package/dist/idCaptureServices-C3nAZ64o.esm.js +353 -0
  46. package/dist/{idCaptureStateMachine-BMZCf9M7.esm.js → idCaptureStateMachine-CM8EP_MM.esm.js} +38 -374
  47. package/dist/{idOcrManager-DXc_xRN7.d.ts → idOcrManager-dLuxey6y.d.ts} +1 -1
  48. package/dist/identity-reuse.d.ts +1 -1
  49. package/dist/{identityReuseManager-v2TH5g7e.d.ts → identityReuseManager-D6pD4hcZ.d.ts} +1 -1
  50. package/dist/index.esm.js +1 -1
  51. package/dist/mandatory-consent.d.ts +2 -2
  52. package/dist/{mandatoryConsentManager-DOZSFZA2.d.ts → mandatoryConsentManager-DXlHM88Z.d.ts} +6 -6
  53. package/dist/manualReviewService-BnFXpAg9.esm.js +15 -0
  54. package/dist/{onDeviceFaceResults-D8FzOXsM.esm.js → onDeviceFaceResults-DFEU5wcC.esm.js} +3 -3
  55. package/dist/personhood.d.ts +4 -4
  56. package/dist/personhood.esm.js +3 -3
  57. package/dist/qe-signature.esm.js +1 -1
  58. package/dist/{recordingService-D6Hbc408.esm.js → recordingService-BwaHFQSV.esm.js} +2 -16
  59. package/dist/redirect-to-mobile.d.ts +2 -2
  60. package/dist/{redirectToMobileManager-BiVH2Ymm.d.ts → redirectToMobileManager-BD2PvT5B.d.ts} +1 -1
  61. package/dist/{runChildModule-CVKUUVl2.esm.js → runChildModule-1jsZfyb9.esm.js} +1 -1
  62. package/dist/selfie.d.ts +4 -4
  63. package/dist/selfie.esm.js +4 -4
  64. package/dist/{selfieManager-Cnw55Hp_.esm.js → selfieManager-hwv10r0j.esm.js} +2 -2
  65. package/dist/{selfieManager-CxeMb2tM.d.ts → selfieManager-tMxWiUk6.d.ts} +1 -1
  66. package/dist/{selfieStateMachine-D-wolitw.esm.js → selfieStateMachine-Cwb5y4OR.esm.js} +2 -2
  67. package/dist/{session-XugVyrIq.esm.js → session-DWfXLkyx.esm.js} +4 -4
  68. package/dist/session.esm.js +4 -4
  69. package/dist/{sessionInitializer-B3g2uAsl.esm.js → sessionInitializer-B58TmxdW.esm.js} +2 -2
  70. package/dist/{setup-BVuwm-QH.esm.js → setup-sxUVsl_J.esm.js} +4 -4
  71. package/dist/trueSight-D7YiTge6.esm.js +1 -0
  72. package/dist/{trueSightService-DGkNMx-E.esm.js → trueSightService-BIbE2pK1.esm.js} +1 -1
  73. package/dist/{types-4-pU2Nhm.d.ts → types-BsTkSXlg2.d.ts} +13 -232
  74. package/dist/{types-CrUhpMDP.d.ts → types-EELWyWpd.d.ts} +1 -1
  75. package/dist/{types-BBQjIaK4.d.ts → types-Hmd7U0JA.d.ts} +1 -1
  76. package/dist/video-selfie.d.ts +8 -100
  77. package/dist/video-selfie.esm.js +17 -608
  78. package/dist/videoSelfieCameraWarmer-lG-12ONu.esm.js +614 -0
  79. package/dist/videoSelfieStepDetector-144x423X.d.ts +117 -0
  80. package/dist/wasm.esm.js +1 -1
  81. package/dist/workflow.d.ts +1 -1
  82. package/dist/workflow.esm.js +14 -14
  83. package/package.json +8 -3
  84. package/dist/trueSight-DWfPmAL_.esm.js +0 -1
  85. /package/dist/{types-BX_XkMsQ.d.ts → types-BX_XkMsQ2.d.ts} +0 -0
  86. /package/dist/{types-BfgmV7s72.d.ts → types-BfgmV7s7.d.ts} +0 -0
  87. /package/dist/{types-DPIDuhut2.d.ts → types-DPIDuhut.d.ts} +0 -0
@@ -1,27 +1,25 @@
1
1
  import { t as BrowserTimerProvider } from "./BrowserTimerProvider-BXhgNxLt.esm.js";
2
2
  import { n as revokeObjectURL } from "./IBrowserEnvironmentCapability-DEaRRk-R.esm.js";
3
3
  import { r as getToken, t as api } from "./api-Bx3gKW_y.esm.js";
4
- import { c as trueSightHintTransition, l as trueSightLog, r as noteTrueSightCaptureActivity } from "./trueSightService-DGkNMx-E.esm.js";
5
- import { t as getDisableIpify } from "./sessionInitializer-B3g2uAsl.esm.js";
6
- import { t as endpoints } from "./endpoints-DOfmJylF.esm.js";
7
- import "./trueSight-DWfPmAL_.esm.js";
4
+ import { c as trueSightHintTransition, l as trueSightLog, r as noteTrueSightCaptureActivity } from "./trueSightService-BIbE2pK1.esm.js";
5
+ import { t as getDisableIpify } from "./sessionInitializer-B58TmxdW.esm.js";
6
+ import "./trueSight-D7YiTge6.esm.js";
8
7
  import { t as addDeviceStats } from "./stats-6sK3f5pc.esm.js";
9
- import { n as isDesktop, t as isAndroid } from "./platform-Cd_yWGNG.esm.js";
10
- import "./session-XugVyrIq.esm.js";
8
+ import { t as isAndroid } from "./platform-Cd_yWGNG.esm.js";
9
+ import "./session-DWfXLkyx.esm.js";
11
10
  import { a as and, n as sendTo, r as assign, s as not, t as setup } from "./xstate.esm-Cf4e0Cfd.esm.js";
12
11
  import { n as fromPromise, t as fromCallback } from "./xstate-actors.esm-CtI5S0f4.esm.js";
13
12
  import { n as invokeRequestPermissionActor, t as checkPermission } from "./permissionServices-GFikEK6S.esm.js";
14
- import { _ as StreamCanvasProcessingSession, h as stopRecording$1, m as startRecording, p as createRecordingSession } from "./onDeviceFaceResults-D8FzOXsM.esm.js";
13
+ import { _ as StreamCanvasProcessingSession } from "./onDeviceFaceResults-DFEU5wcC.esm.js";
15
14
  import { t as sleep } from "./ITimerCapability-DgdDzp8G.esm.js";
16
15
  import { t as IncodeCanvas } from "./canvas-E1zGkel4.esm.js";
17
16
  import { t as getBrowser } from "./getBrowser-DNrQeL4T.esm.js";
18
- import { n as getBackCameraStream } from "./backCameraStream-BqiXcU28.esm.js";
19
17
  import { n as getWindowDimensions } from "./getDeviceClass-CeBiEayS.esm.js";
20
- import { t as getDeviceClass } from "./getDeviceClass-BGmoQmjj.esm.js";
21
18
  import { t as StreamCanvasCapture } from "./StreamCanvasCapture-D2XcXCZ4.esm.js";
22
19
  import { n as needsMotionPrimeOnlyFromPermission, r as resolveStoredPermissionResult, t as isReadyForCaptureFromPermission } from "./permissionGuards-D0cdQjk6.esm.js";
23
- import { i as flagIdManualReview, n as preloadOpenViduProvider } from "./recordingService-D6Hbc408.esm.js";
24
- import { n as DEFAULT_ID_CAPTURE_THRESHOLDS$1, r as IdCaptureProvider } from "./idCaptureDefaults-BDS43fFL.esm.js";
20
+ import { n as flagIdManualReview } from "./manualReviewService-BnFXpAg9.esm.js";
21
+ import { n as DEFAULT_ID_CAPTURE_THRESHOLDS } from "./idCaptureDefaults-BDS43fFL.esm.js";
22
+ import { a as processId, c as stopStream, d as validateUploadResponse, f as ID_ERROR_CODES, i as preloadIdRecordingProvider, l as uploadIdImage, o as startRecordingSession, p as getIdCameraStream, r as initializeIdCapture, s as stopRecording, t as addBarcode, u as uploadManualIdFile } from "./idCaptureServices-C3nAZ64o.esm.js";
25
23
  //#region src/modules/id/digitalUpload/digitalUploadErrors.ts
26
24
  const TERMINAL_FAIL_REASONS = /* @__PURE__ */ new Set(["DIGITAL_ID_REQUESTED_BUT_OTHER_PROVIDED", "ID_TYPE_UNACCEPTABLE"]);
27
25
  function isKnownFailReason(reason) {
@@ -406,355 +404,11 @@ const imageFileToDataUrl = async (file, options = {}) => {
406
404
  }
407
405
  };
408
406
  //#endregion
409
- //#region src/modules/id/idCameraStream.ts
410
- async function getIdCameraStream(deviceId) {
411
- return getBackCameraStream(deviceId);
412
- }
413
- //#endregion
414
407
  //#region src/modules/id/manualUpload/types.ts
415
408
  const MANUAL_UPLOAD_MAX_RETRIES = 3;
416
409
  const MANUAL_UPLOAD_MAX_FILE_SIZE_BYTES = 5 * 1024 * 1024;
417
410
  const MANUAL_UPLOAD_EXHAUSTION_FORWARD_MS = 5e3;
418
411
  //#endregion
419
- //#region src/modules/id/types.ts
420
- const ID_ERROR_CODES = {
421
- UPLOAD_ERROR: "UPLOAD_ERROR",
422
- CLASSIFICATION_FAILED: "CLASSIFICATION_FAILED",
423
- LOW_SHARPNESS: "LOW_SHARPNESS",
424
- GLARE_DETECTED: "GLARE_DETECTED",
425
- WRONG_DOCUMENT_SIDE: "WRONG_DOCUMENT_SIDE",
426
- ID_TYPE_UNACCEPTABLE: "ID_TYPE_UNACCEPTABLE",
427
- READABILITY_ISSUE: "READABILITY_ISSUE",
428
- RETRY_EXHAUSTED_CONTINUE_TO_BACK: "RETRY_EXHAUSTED_CONTINUE_TO_BACK",
429
- RETRY_EXHAUSTED_SKIP_BACK: "RETRY_EXHAUSTED_SKIP_BACK",
430
- NO_MORE_TRIES: "NO_MORE_TRIES",
431
- UNEXPECTED_ERROR: "UNEXPECTED_ERROR",
432
- NO_TOKEN: "NO_TOKEN",
433
- PERMISSION_DENIED: "PERMISSION_DENIED",
434
- USER_CANCELLED: "USER_CANCELLED",
435
- SERVER: "SERVER_ERROR"
436
- };
437
- //#endregion
438
- //#region src/modules/id/idCaptureServices.ts
439
- /**
440
- * Camera constraints used for PRC warmup before ID capture.
441
- * Uses environment-facing camera on mobile devices (for back camera ID capture)
442
- * and user-facing camera on desktop.
443
- */
444
- function getPrcCameraConstraints() {
445
- if (isDesktop()) return { video: {
446
- facingMode: "user",
447
- height: { ideal: 480 },
448
- width: { ideal: 640 }
449
- } };
450
- return { video: {
451
- facingMode: "environment",
452
- height: { ideal: 720 }
453
- } };
454
- }
455
- function getUploadEndpoint(type, isSecondId) {
456
- if (isSecondId) return type === "front" ? endpoints.frontSecondId : endpoints.backSecondId;
457
- return type === "front" ? endpoints.frontId : endpoints.backId;
458
- }
459
- const SHARPNESS_THRESHOLD = 10;
460
- const GLARE_THRESHOLD = 10;
461
- const DEFAULT_ID_CAPTURE_THRESHOLDS = {
462
- blurThreshold: .2,
463
- blurChangeThreshold: .2,
464
- glareThreshold: .3,
465
- clsThreshold: .98,
466
- sideThreshold: .8,
467
- iouThreshold: .8,
468
- framesAggregationInterval: 3e3
469
- };
470
- const DEFAULT_ID_CAPTURE_SETTINGS = {
471
- isFixedMask: false,
472
- isIPhone14OrHigher: false,
473
- idType: "",
474
- blurCheckEnabled: false,
475
- glareCheckEnabled: false,
476
- faceQualityCheckEnabled: true,
477
- iouCheckEnabled: true,
478
- fpsLimitEnabled: false
479
- };
480
- async function initializeIdCapture(params) {
481
- const { config, deepsightService } = params;
482
- const provider = new IdCaptureProvider();
483
- await provider.initialize({});
484
- provider.setThresholds({
485
- ...DEFAULT_ID_CAPTURE_THRESHOLDS,
486
- ...config.thresholds,
487
- idDetectedTimeout: config.thresholds?.idDetectedTimeout ?? config.deviceIdleTimeout * 1e3,
488
- autocaptureTimeout: config.thresholds?.autocaptureTimeout ?? config.autoCaptureTimeout * 1e3
489
- });
490
- if (config.settings) provider.setSettings({
491
- ...DEFAULT_ID_CAPTURE_SETTINGS,
492
- ...config.settings
493
- });
494
- if (deepsightService && !params.stream) try {
495
- await deepsightService.performPrcCheck({ constraints: getPrcCameraConstraints() });
496
- } catch {}
497
- const { stream, fallbackLevel } = params.stream ? {
498
- stream: params.stream,
499
- fallbackLevel: params.cameraFallbackLevel
500
- } : await getIdCameraStream();
501
- const videoTrack = stream.getVideoTracks()[0];
502
- let captureResolution;
503
- if (videoTrack) {
504
- const settings = videoTrack.getSettings();
505
- if (typeof settings.width === "number" && typeof settings.height === "number") captureResolution = `${settings.width}x${settings.height}`;
506
- }
507
- if (deepsightService && videoTrack) deepsightService.metadata.updateCameraInfo(videoTrack);
508
- return {
509
- stream,
510
- provider,
511
- captureResolution,
512
- cameraFallbackLevel: fallbackLevel
513
- };
514
- }
515
- function stopStream(stream) {
516
- for (const track of stream.getTracks()) track.stop();
517
- }
518
- function validateUploadResponse(response, sessionState) {
519
- if (response.failReason === "ID_TYPE_UNACCEPTABLE") return {
520
- error: true,
521
- message: "ID type is not acceptable",
522
- messageDescription: "Please use a valid ID type",
523
- errorKey: ID_ERROR_CODES.ID_TYPE_UNACCEPTABLE
524
- };
525
- if (response.failReason === "WRONG_DOCUMENT_SIDE") return {
526
- error: true,
527
- message: "Wrong side of document",
528
- messageDescription: response.side === "back" ? "Please show the back side of your ID" : "Please show the front side of your ID",
529
- errorKey: ID_ERROR_CODES.WRONG_DOCUMENT_SIDE
530
- };
531
- if (!response.classification) return {
532
- error: true,
533
- message: "ID classification failed",
534
- errorKey: ID_ERROR_CODES.CLASSIFICATION_FAILED
535
- };
536
- const sharpnessThreshold = getDeviceClass() === "desktop" ? -1 : SHARPNESS_THRESHOLD;
537
- if (response.sharpness !== void 0 && sharpnessThreshold >= 0 && response.sharpness < sharpnessThreshold) return {
538
- error: true,
539
- message: "Image is not sharp enough",
540
- messageDescription: "Please ensure the image is clear and well-focused",
541
- errorKey: ID_ERROR_CODES.LOW_SHARPNESS
542
- };
543
- if (response.glare !== void 0 && response.glare < GLARE_THRESHOLD && !sessionState?.skipGlareFront && !sessionState?.skipGlareBack) return {
544
- error: true,
545
- message: "Glare detected on ID",
546
- messageDescription: "Please avoid bright reflections on your ID",
547
- errorKey: ID_ERROR_CODES.GLARE_DETECTED
548
- };
549
- }
550
- async function getExtraImages(params) {
551
- const extraImages = params.ageAssurance ? [params.type === "back" ? "croppedBackID" : "croppedFrontID"] : [];
552
- try {
553
- const res = await api.post(endpoints.getImages, { images: ["croppedIDFace", ...extraImages] }, { signal: params.signal });
554
- if (!res.ok) throw new Error(`Failed to get extra images: ${res.status}`);
555
- return res.data ?? {
556
- croppedIDFace: "",
557
- croppedFrontID: "",
558
- croppedBackID: ""
559
- };
560
- } catch {
561
- return {
562
- croppedIDFace: "",
563
- croppedFrontID: "",
564
- croppedBackID: ""
565
- };
566
- }
567
- }
568
- const getRealQualityValue = (value) => (1 - value) * 100;
569
- async function uploadIdImage(params) {
570
- const { type, image, onProgress, signal, metadata, ageAssurance, glare, sharpness, shouldSkipGlareBack, analyticsProvider, imageData, isSecondId, onlyFront, extractIdFace } = params;
571
- let finalMetadata = metadata;
572
- if (analyticsProvider && imageData) try {
573
- await analyticsProvider.analyzeFrame(imageData);
574
- analyticsProvider.update();
575
- finalMetadata = analyticsProvider.getMetadata();
576
- } catch (error) {
577
- console.warn("[IdCapture] Analytics failed:", error);
578
- }
579
- const endpoint = getUploadEndpoint(type, isSecondId);
580
- const body = {
581
- base64Image: image,
582
- metadata: finalMetadata
583
- };
584
- const queryParams = { imageType: "id" };
585
- if (onlyFront && type === "front") queryParams.onlyFront = true;
586
- if (shouldSkipGlareBack && type === "back") queryParams.glare = 0;
587
- else if (glare !== void 0) queryParams.glare = getRealQualityValue(glare);
588
- if (sharpness !== void 0) queryParams.sharpness = getRealQualityValue(sharpness);
589
- if (extractIdFace === false && type === "front") queryParams.extractIdFace = false;
590
- try {
591
- const res = await api.post(endpoint, body, {
592
- signal,
593
- query: queryParams,
594
- onUploadProgress: onProgress
595
- });
596
- if (!res.ok) throw new Error(`POST ${endpoint} failed: ${res.status} ${res.statusText}`);
597
- const response = res.data;
598
- const extraImages = await getExtraImages({
599
- type,
600
- ageAssurance,
601
- signal
602
- });
603
- const fullResponse = {
604
- ...response,
605
- originalImage: image,
606
- frontIdImage: type === "front" ? image : void 0,
607
- backIdImage: extraImages.croppedBackID,
608
- ...extraImages
609
- };
610
- onProgress?.(100);
611
- return fullResponse;
612
- } catch (error) {
613
- const errorMessage = error instanceof Error ? error.message : "Unknown error";
614
- throw new Error(`${ID_ERROR_CODES.UPLOAD_ERROR}: ${errorMessage}`);
615
- }
616
- }
617
- function buildStandardResolution(width, height) {
618
- return height > width ? {
619
- width: 1080,
620
- height: 1920
621
- } : {
622
- width: 1920,
623
- height: 1080
624
- };
625
- }
626
- function buildResolutionFromStream(stream) {
627
- const track = stream.getVideoTracks()[0];
628
- if (!track) return "1080x1920";
629
- const settings = track.getSettings();
630
- const width = settings.width;
631
- const height = settings.height;
632
- if (typeof width === "number" && typeof height === "number") {
633
- const standard = buildStandardResolution(width, height);
634
- return `${standard.width}x${standard.height}`;
635
- }
636
- return "1080x1920";
637
- }
638
- function preloadIdRecordingProvider(config) {
639
- if (config.enableIdRecording !== true) return;
640
- preloadOpenViduProvider();
641
- }
642
- async function createOpenViduRecordingProvider() {
643
- const { OpenViduRecordingProvider } = await import("./OpenViduRecordingProvider-Du98qevC.esm.js");
644
- return new OpenViduRecordingProvider();
645
- }
646
- async function startRecordingSession(params) {
647
- if (params.config.enableIdRecording !== true) return;
648
- if (params.existing) return params.existing;
649
- const provider = params.config.recording?.capability ?? await createOpenViduRecordingProvider();
650
- const clonedStream = params.stream.clone();
651
- const hasAudio = clonedStream.getAudioTracks().length > 0;
652
- const resolution = buildResolutionFromStream(clonedStream);
653
- const session = await createRecordingSession(params.type);
654
- const connection = await provider.connect({
655
- sessionToken: session.token,
656
- stream: clonedStream,
657
- events: {}
658
- });
659
- await startRecording({
660
- videoRecordingId: session.videoRecordingId,
661
- type: params.type,
662
- resolution,
663
- hasAudio
664
- });
665
- return {
666
- token: session.token,
667
- sessionId: session.sessionId,
668
- videoRecordingId: session.videoRecordingId,
669
- connection,
670
- resolution,
671
- hasAudio
672
- };
673
- }
674
- function stopRecording(session) {
675
- (async () => {
676
- try {
677
- await stopRecording$1(session.videoRecordingId);
678
- } finally {
679
- await session.connection.disconnect();
680
- }
681
- })();
682
- }
683
- async function processId(isSecondId = false, queueName = "", signal) {
684
- const endpoint = isSecondId ? endpoints.processSecondId : endpoints.processId;
685
- const url = queueName ? `${endpoint}?queueName=${queueName}` : endpoint;
686
- return { isDocumentExpired: (await api.post(url, {}, { signal })).data?.isDocumentExpired ?? false };
687
- }
688
- /**
689
- * Upload a user-selected image as front / back / passport ID.
690
- *
691
- * Uses the same request shape as the live-camera path (`uploadIdImage`):
692
- * JSON body `{ base64Image }` with default application/json Content-Type,
693
- * `captureType=UPLOAD` query param, `retry=true` when retrying.
694
- * Back is POSTed to `/omni/add/back-id/v2` (or `/omni/add/back-second-id/v2`
695
- * when `isSecondId`); front and passport go to `/omni/add/front-id/v2` (or
696
- * `/omni/add/front-second-id/v2` when `isSecondId`).
697
- *
698
- * The v2 endpoints reject raw `image/jpeg` bodies with 415, so the caller
699
- * must convert the File to base64 before calling this service.
700
- */
701
- async function uploadManualIdFile(params) {
702
- const { side, base64Image, retry, onlyFront, signal, isSecondId, extractIdFace } = params;
703
- const endpoint = getUploadEndpoint(side === "back" ? "back" : "front", isSecondId);
704
- const queryParams = { captureType: "UPLOAD" };
705
- if (retry) queryParams.retry = true;
706
- if (onlyFront && side === "front") queryParams.onlyFront = true;
707
- if (extractIdFace === false && side !== "back") queryParams.extractIdFace = false;
708
- const res = await api.post(endpoint, { base64Image }, {
709
- signal,
710
- query: queryParams
711
- });
712
- if (!res.ok) throw new Error(`POST ${endpoint} failed: ${res.status} ${res.statusText}`);
713
- return res.data;
714
- }
715
- /**
716
- * UTF-8-safe base64 encoding of a decoded barcode payload. Uses the browser
717
- * `TextEncoder` + `btoa` (always available in the SDK's target environment) so
718
- * non-ASCII payloads survive `btoa`, which only accepts Latin-1.
719
- */
720
- function barcodeToBase64(raw) {
721
- const bytes = new TextEncoder().encode(raw);
722
- let binary = "";
723
- bytes.forEach((byte) => {
724
- binary += String.fromCharCode(byte);
725
- });
726
- return btoa(binary);
727
- }
728
- /**
729
- * US Smart Capture: submits a decoded PDF417 barcode to
730
- * `POST /omni/add/barcode/v3`. The response drives the downstream front-capture
731
- * and Process ID skips (`forceFrontIdCapture` / `idValidationCompleted`).
732
- * Mirrors SDK 1's `addBarcode`. Throws (carrying `status`/`data`) on a non-OK
733
- * response so the caller can fall back to a full-frame upload. The
734
- * hardware-id token is injected by the shared `api` layer, as in `uploadIdImage`.
735
- */
736
- async function addBarcode(params) {
737
- const { rawBarcode, processId = true, metrics, signal } = params;
738
- const body = { base64Barcode: barcodeToBase64(rawBarcode) };
739
- if (metrics) {
740
- body.pdf417RowNumber = metrics.rowNumber;
741
- body.pdf417ColumnNumber = metrics.columnNumber;
742
- body.pdf417CodewordLengthInPixelsMin = metrics.codewordLengthInPixelsMin;
743
- body.pdf417CodewordLengthInPixelsMax = metrics.codewordLengthInPixelsMax;
744
- body.pdf417CorrectedErrorsCount = metrics.correctedErrorsCount;
745
- body.ecLevel = metrics.ecLevel;
746
- }
747
- const res = await api.post(endpoints.addBarcode, body, {
748
- query: { processId },
749
- signal
750
- });
751
- if (!res.ok) throw Object.assign(/* @__PURE__ */ new Error(`POST ${endpoints.addBarcode} failed: ${res.status} ${res.statusText}`), {
752
- status: res.status,
753
- data: res.data
754
- });
755
- return res.data;
756
- }
757
- //#endregion
758
412
  //#region src/modules/id/manualUpload/manualUploadServices.ts
759
413
  const stripDataUrlPrefix = (dataUrl) => {
760
414
  const commaIndex = dataUrl.indexOf(",");
@@ -1434,7 +1088,7 @@ const runDetectionActor = fromCallback(({ input, sendBack }) => {
1434
1088
  fpsLimitEnabled: input.config.settings?.fpsLimitEnabled ?? false
1435
1089
  });
1436
1090
  const thresholds = {
1437
- ...DEFAULT_ID_CAPTURE_THRESHOLDS$1,
1091
+ ...DEFAULT_ID_CAPTURE_THRESHOLDS,
1438
1092
  ...input.config.thresholds,
1439
1093
  idDetectedTimeout: (input.config.deviceIdleTimeout ?? 10) * 1e3,
1440
1094
  autocaptureTimeout: (input.config.autoCaptureTimeout ?? 5) * 1e3
@@ -1662,7 +1316,7 @@ const startRecordingActor = fromPromise(async ({ input }) => {
1662
1316
  });
1663
1317
  const initializeDeepsightSessionActor = fromPromise(async ({ input }) => {
1664
1318
  if (!input.dependencies) return;
1665
- const { loadDeepsightSession } = await import("./deepsightLoader-CaUpu0Dy.esm.js");
1319
+ const { loadDeepsightSession } = await import("./deepsightLoader-CN4B5ugn.esm.js");
1666
1320
  return loadDeepsightSession({
1667
1321
  ds: input.ds,
1668
1322
  storage: input.dependencies.storage,
@@ -1746,6 +1400,7 @@ function getResetContextValues(context) {
1746
1400
  uploadResponse: void 0,
1747
1401
  decodedBarcode: null,
1748
1402
  barcodeFastPathAttempted: false,
1403
+ barcodeFastPathCaptured: false,
1749
1404
  recordingSession: void 0,
1750
1405
  attemptsRemaining: context.config.captureAttempts,
1751
1406
  expiredAttempts: 0,
@@ -2142,6 +1797,11 @@ const idCaptureMachine = setup({
2142
1797
  storeBarcodeResponse: assign(({ context, event }) => getBarcodeResponseValues(context, event)),
2143
1798
  storeDecodedBarcode: assign({ decodedBarcode: ({ event }) => event.decoded }),
2144
1799
  setBarcodeFastPathAttempted: assign({ barcodeFastPathAttempted: true }),
1800
+ markBarcodeFastPathCaptured: assign({
1801
+ barcodeFastPathCaptured: true,
1802
+ previewImageUrl: void 0
1803
+ }),
1804
+ clearBarcodeFastPathCaptured: assign({ barcodeFastPathCaptured: false }),
2145
1805
  setDetectionStatus: assign({ detectionStatus: ({ event, context }) => getDetectionStatusFromUpdate(context, event) }),
2146
1806
  setCounterValue: assign({ counterValue: ({ event }) => {
2147
1807
  if ("value" in event) return event.value;
@@ -2253,6 +1913,7 @@ const idCaptureMachine = setup({
2253
1913
  uploadResponse: void 0,
2254
1914
  decodedBarcode: null,
2255
1915
  barcodeFastPathAttempted: false,
1916
+ barcodeFastPathCaptured: false,
2256
1917
  recordingSession: void 0,
2257
1918
  attemptsRemaining: input.config.captureAttempts,
2258
1919
  expiredAttempts: 0,
@@ -2762,7 +2423,7 @@ const idCaptureMachine = setup({
2762
2423
  }),
2763
2424
  onDone: {
2764
2425
  target: "success",
2765
- actions: "storeBarcodeResponse"
2426
+ actions: ["storeBarcodeResponse", "markBarcodeFastPathCaptured"]
2766
2427
  },
2767
2428
  onError: { target: "detecting" }
2768
2429
  } },
@@ -2898,21 +2559,24 @@ const idCaptureMachine = setup({
2898
2559
  actions: ["flagIdManualReview"]
2899
2560
  }
2900
2561
  ] } },
2901
- success: { on: { NEXT_STEP: [
2902
- {
2903
- target: "#idCapture.mandatoryConsent",
2904
- guard: "hasMandatoryConsent"
2905
- },
2906
- {
2907
- target: "#idCapture.frontFinished",
2908
- guard: "shouldContinueToBack"
2909
- },
2910
- {
2911
- target: "#idCapture.backFinished",
2912
- guard: "shouldContinueToFront"
2913
- },
2914
- { target: "#idCapture.processing" }
2915
- ] } }
2562
+ success: {
2563
+ exit: "clearBarcodeFastPathCaptured",
2564
+ on: { NEXT_STEP: [
2565
+ {
2566
+ target: "#idCapture.mandatoryConsent",
2567
+ guard: "hasMandatoryConsent"
2568
+ },
2569
+ {
2570
+ target: "#idCapture.frontFinished",
2571
+ guard: "shouldContinueToBack"
2572
+ },
2573
+ {
2574
+ target: "#idCapture.backFinished",
2575
+ guard: "shouldContinueToFront"
2576
+ },
2577
+ { target: "#idCapture.processing" }
2578
+ ] }
2579
+ }
2916
2580
  }
2917
2581
  },
2918
2582
  mandatoryConsent: { on: {
@@ -3230,4 +2894,4 @@ const idCaptureMachine = setup({
3230
2894
  }
3231
2895
  });
3232
2896
  //#endregion
3233
- export { MANUAL_UPLOAD_MAX_RETRIES as _, initializeIdCapture as a, startRecordingSession as c, uploadIdImage as d, uploadManualIdFile as f, MANUAL_UPLOAD_MAX_FILE_SIZE_BYTES as g, MANUAL_UPLOAD_EXHAUSTION_FORWARD_MS as h, barcodeToBase64 as i, stopRecording as l, ID_ERROR_CODES as m, getManualUploadTabs as n, preloadIdRecordingProvider as o, validateUploadResponse as p, addBarcode as r, processId as s, idCaptureMachine as t, stopStream as u };
2897
+ export { MANUAL_UPLOAD_MAX_RETRIES as a, MANUAL_UPLOAD_MAX_FILE_SIZE_BYTES as i, getManualUploadTabs as n, MANUAL_UPLOAD_EXHAUSTION_FORWARD_MS as r, idCaptureMachine as t };
@@ -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" | "submitting" | "loading" | "inputting" | "readonly" | "validatingContinue", string, IdOcrInput, NonReducibleUnknown, EventObject, MetaObject, {
113
+ }>, never, "error" | "idle" | "success" | "finished" | "loading" | "submitting" | "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-v2TH5g7e.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-D6pD4hcZ.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" | "submitting" | "loading" | "documentsFound", string, IdentityReuseInput, NonReducibleUnknown, EventObject, MetaObject, {
128
+ }>, never, "error" | "idle" | "finished" | "loading" | "submitting" | "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, o as setup, r as isConfigured } from "./setup-BVuwm-QH.esm.js";
1
+ import { i as reset, o as setup, r as isConfigured } from "./setup-sxUVsl_J.esm.js";
2
2
  export { isConfigured, reset, setup };
@@ -1,3 +1,3 @@
1
- import { r as MandatoryConsentConfig } from "./types-BX_XkMsQ.js";
2
- import { a as MandatoryConsentActor, i as createMandatoryConsentManagerFromActor, n as MandatoryConsentState, o as mandatoryConsentMachine, r as createMandatoryConsentManager, t as MandatoryConsentManager } from "./mandatoryConsentManager-DOZSFZA2.js";
1
+ import { r as MandatoryConsentConfig } from "./types-BX_XkMsQ2.js";
2
+ import { a as MandatoryConsentActor, i as createMandatoryConsentManagerFromActor, n as MandatoryConsentState, o as mandatoryConsentMachine, r as createMandatoryConsentManager, t as MandatoryConsentManager } from "./mandatoryConsentManager-DXlHM88Z.js";
3
3
  export { type MandatoryConsentActor, type MandatoryConsentConfig, type MandatoryConsentManager, type MandatoryConsentState, createMandatoryConsentManager, createMandatoryConsentManagerFromActor, mandatoryConsentMachine };
@@ -2,7 +2,7 @@ import { A as StateMachine, C as StateValue, D as PromiseActorLogic, a as ActorR
2
2
  import "./StateMachine-EDpYWy0i.js";
3
3
  import { t as Manager } from "./Manager-CQQ99QOI.js";
4
4
  import "./Actor-iTq7YY48.js";
5
- import { n as MandatoryConsent, r as MandatoryConsentConfig, t as FetchMandatoryConsentResponse } from "./types-BX_XkMsQ.js";
5
+ import { n as MandatoryConsent, r as MandatoryConsentConfig, t as FetchMandatoryConsentResponse } from "./types-BX_XkMsQ2.js";
6
6
  //#region src/modules/mandatory-consent/mandatoryConsentStateMachine.d.ts
7
7
  type MandatoryConsentContext = {
8
8
  config: MandatoryConsentConfig;
@@ -61,18 +61,18 @@ declare const mandatoryConsentMachine: StateMachine<MandatoryConsentContext, {
61
61
  type: "clearError";
62
62
  params: NonReducibleUnknown;
63
63
  };
64
- toggleSigned: {
65
- type: "toggleSigned";
66
- params: NonReducibleUnknown;
67
- };
68
64
  resetContext: {
69
65
  type: "resetContext";
70
66
  params: NonReducibleUnknown;
71
67
  };
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" | "submitting" | "loading" | "display", string, MandatoryConsentInput, NonReducibleUnknown, EventObject, MetaObject, {
75
+ }, never, "error" | "idle" | "closed" | "finished" | "loading" | "submitting" | "display", string, MandatoryConsentInput, NonReducibleUnknown, EventObject, MetaObject, {
76
76
  readonly id: "mandatoryConsent";
77
77
  readonly initial: "idle";
78
78
  readonly context: ({ input }: {
@@ -0,0 +1,15 @@
1
+ import { t as api } from "./api-Bx3gKW_y.esm.js";
2
+ import { t as endpoints } from "./endpoints-DOfmJylF.esm.js";
3
+ //#region src/internal/manualReview/manualReviewService.ts
4
+ async function flagFaceManualReview() {
5
+ try {
6
+ await api.put(endpoints.updateSession, { manualSelfieCheckNeeded: true });
7
+ } catch {}
8
+ }
9
+ async function flagIdManualReview() {
10
+ try {
11
+ await api.put(endpoints.updateSession, { manualIdCheckNeeded: true });
12
+ } catch {}
13
+ }
14
+ //#endregion
15
+ export { flagIdManualReview as n, flagFaceManualReview as t };
@@ -1,8 +1,8 @@
1
1
  import { n as BaseWasmProvider, o as mlWasmJSApi_default } from "./WasmUtilProvider-D13sxEmA.esm.js";
2
2
  import { r as getToken, t as api } from "./api-Bx3gKW_y.esm.js";
3
- import { c as trueSightHintTransition, l as trueSightLog, r as noteTrueSightCaptureActivity } from "./trueSightService-DGkNMx-E.esm.js";
3
+ import { c as trueSightHintTransition, l as trueSightLog, r as noteTrueSightCaptureActivity } from "./trueSightService-BIbE2pK1.esm.js";
4
4
  import { t as endpoints } from "./endpoints-DOfmJylF.esm.js";
5
- import "./trueSight-DWfPmAL_.esm.js";
5
+ import "./trueSight-D7YiTge6.esm.js";
6
6
  import { t as addDeviceStats } from "./stats-6sK3f5pc.esm.js";
7
7
  import { a as isIPhone14OrHigher, n as isDesktop } from "./platform-Cd_yWGNG.esm.js";
8
8
  import { a as stopCameraStream, r as requestCameraAccess } from "./camera-BmFEyPP_.esm.js";
@@ -521,7 +521,7 @@ async function stopRecording(session) {
521
521
  }
522
522
  }
523
523
  async function initializeDeepsightSession(options) {
524
- const { loadDeepsightSession } = await import("./deepsightLoader-CaUpu0Dy.esm.js");
524
+ const { loadDeepsightSession } = await import("./deepsightLoader-CN4B5ugn.esm.js");
525
525
  return loadDeepsightSession({
526
526
  ds: options.ds,
527
527
  storage: options.storage
@@ -3,11 +3,11 @@ import "./StateMachine-EDpYWy0i.js";
3
3
  import { t as Manager } from "./Manager-CQQ99QOI.js";
4
4
  import "./Actor-iTq7YY48.js";
5
5
  import { t as CameraStream } from "./camera-9wWD-pwg.js";
6
- import { n as StreamCanvasCapture, r as IncodeCanvas, t as DeepsightService } from "./deepsightService-CR-CYdka.js";
7
- import { t as FaceDetectionProvider } from "./FaceDetectionProvider-BHweGBEM.js";
8
- import { t as IStorageCapability } from "./IStorageCapability-B8IGxCwe.js";
9
- import { n as DetectionStatus, s as IWasmUtilCapability } from "./types-BBQjIaK4.js";
6
+ import { o as IncodeCanvas, t as IStorageCapability } from "./IStorageCapability-ORkQfK3F.js";
7
+ import { t as FaceDetectionProvider } from "./FaceDetectionProvider-Mh6q3EbA.js";
8
+ import { n as DetectionStatus, s as IWasmUtilCapability } from "./types-Hmd7U0JA.js";
10
9
  import { n as PermissionStatus, t as PermissionResult } from "./types-BT-aiBYV.js";
10
+ import { n as StreamCanvasCapture, t as DeepsightService } from "./deepsightService-DLVQS_RH.js";
11
11
  //#region src/modules/personhood/types.d.ts
12
12
  /**
13
13
  * Head pose (degrees) computed per-frame from the WASM face detector.
@@ -2,15 +2,15 @@ import { t as WasmUtilProvider } from "./WasmUtilProvider-D13sxEmA.esm.js";
2
2
  import { t as BrowserStorageProvider } from "./BrowserStorageProvider-P6aUarE9.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-DGkNMx-E.esm.js";
5
+ import { b as getStoredHttpConfig, w as createApi$1, y as randomUUID } from "./trueSightService-BIbE2pK1.esm.js";
6
6
  import { n as eventModuleNames } from "./events-ethtfu2b.esm.js";
7
- import { _ as getDeviceFingerprintInfo, g as getThumbmarkId, n as getFingerprintEnabled, p as isBrowserSimulation, v as BrowserEnvironmentProvider } from "./sessionInitializer-B3g2uAsl.esm.js";
7
+ import { _ as getDeviceFingerprintInfo, g as getThumbmarkId, n as getFingerprintEnabled, p as isBrowserSimulation, v as BrowserEnvironmentProvider } from "./sessionInitializer-B58TmxdW.esm.js";
8
8
  import { t as endpoints } from "./endpoints-DOfmJylF.esm.js";
9
9
  import { c as createManager, o as createActor, r as assign, t as setup } from "./xstate.esm-Cf4e0Cfd.esm.js";
10
10
  import { n as fromPromise, t as fromCallback } from "./xstate-actors.esm-CtI5S0f4.esm.js";
11
11
  import { i as requestPermission, t as checkPermission } from "./permissionServices-GFikEK6S.esm.js";
12
12
  import { a as stopCameraStream, r as requestCameraAccess } from "./camera-BmFEyPP_.esm.js";
13
- import { f as stopStream, l as startDetection, s as initializeDeepsightSession, v as FaceDetectionProvider } from "./onDeviceFaceResults-D8FzOXsM.esm.js";
13
+ import { f as stopStream, l as startDetection, s as initializeDeepsightSession, v as FaceDetectionProvider } from "./onDeviceFaceResults-DFEU5wcC.esm.js";
14
14
  import { t as sleep } from "./ITimerCapability-DgdDzp8G.esm.js";
15
15
  import { t as StreamCanvasCapture } from "./StreamCanvasCapture-D2XcXCZ4.esm.js";
16
16
  //#region src/modules/personhood/personhoodServices.ts
@@ -1,4 +1,4 @@
1
- import { a as areAllConsented, i as QE_CONSENT_KEYS, n as electronicSignatureMachine, s as getDefaultConsentChecks, t as createElectronicSignatureManager } from "./electronicSignatureManager-DqPJCXMG.esm.js";
1
+ import { a as areAllConsented, i as QE_CONSENT_KEYS, n as electronicSignatureMachine, s as getDefaultConsentChecks, t as createElectronicSignatureManager } from "./electronicSignatureManager-JuycNykG.esm.js";
2
2
  //#region src/modules/qe-signature/index.ts
3
3
  function createQeSignatureManager(options) {
4
4
  return createElectronicSignatureManager({ config: {