idmission-web-sdk 2.3.114 → 2.3.115

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.
@@ -211,7 +211,7 @@
211
211
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
212
212
  };
213
213
 
214
- var webSdkVersion = '2.3.114';
214
+ var webSdkVersion = '2.3.115';
215
215
 
216
216
  function getPlatform() {
217
217
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -8252,8 +8252,8 @@
8252
8252
 
8253
8253
  var DEFAULT_CDN_URL = 'https://websdk-cdn-dev.idmission.com/assets';
8254
8254
 
8255
- var defaultDocumentDetectorModelPath = "".concat(DEFAULT_CDN_URL, "/models/DocumentDetector/DocumentDetector-20250815_115859.tflite");
8256
- var defaultDocumentDetectorModelHash = '64LSaO2ctQsTkGJoZ6Et4v2KH28Fz1ettgkxD+qFg6frxY7ufL9l/lkjw2ljX2cR';
8255
+ var defaultDocumentDetectorModelPath = "".concat(DEFAULT_CDN_URL, "/models/DocumentDetector/DocumentDetector-20251018_121234.tflite");
8256
+ var defaultDocumentDetectorModelHash = 'cTLjb4g6H+a+RHnLaYrvVF8050qv/Ox04rMtxFXBDR6Xv8Pv+X//hsaO3K3jNPog';
8257
8257
 
8258
8258
  var defaultFocusModelPath = "".concat(DEFAULT_CDN_URL, "/models/Focus/Focus-20241008_102708.tflite");
8259
8259
  var defaultFocusModelHash = 'HTJNLB7QybtPXIIyUI9oNqW40vE5bgSV5V24R1wXLQHknNEVOSyDQDo/QzRgJ8jb';
@@ -8570,8 +8570,8 @@
8570
8570
  singlePage: 'Single page',
8571
8571
  none: 'None'
8572
8572
  };
8573
- var detector$1 = null;
8574
- var detectorSettings$1 = null;
8573
+ var detector = null;
8574
+ var detectorSettings = null;
8575
8575
  function loadDocumentDetector() {
8576
8576
  return __awaiter(this, arguments, void 0, function (modelAssetPath, scoreThreshold) {
8577
8577
  var _a, _b;
@@ -8584,7 +8584,7 @@
8584
8584
  return __generator(this, function (_c) {
8585
8585
  switch (_c.label) {
8586
8586
  case 0:
8587
- if (detector$1 && (detectorSettings$1 === null || detectorSettings$1 === void 0 ? void 0 : detectorSettings$1.modelAssetPath) === modelAssetPath && (detectorSettings$1 === null || detectorSettings$1 === void 0 ? void 0 : detectorSettings$1.scoreThreshold) === scoreThreshold) return [2 /*return*/, detector$1];
8587
+ if (detector && (detectorSettings === null || detectorSettings === void 0 ? void 0 : detectorSettings.modelAssetPath) === modelAssetPath && (detectorSettings === null || detectorSettings === void 0 ? void 0 : detectorSettings.scoreThreshold) === scoreThreshold) return [2 /*return*/, detector];
8588
8588
  closeDocumentDetector();
8589
8589
  return [4 /*yield*/, preloadDocumentDetectorDependencies()];
8590
8590
  case 1:
@@ -8605,20 +8605,20 @@
8605
8605
  runningMode: 'VIDEO'
8606
8606
  }])];
8607
8607
  case 3:
8608
- detector$1 = _c.sent();
8609
- detectorSettings$1 = {
8608
+ detector = _c.sent();
8609
+ detectorSettings = {
8610
8610
  modelAssetPath: modelAssetPath,
8611
8611
  scoreThreshold: scoreThreshold
8612
8612
  };
8613
- return [2 /*return*/, detector$1];
8613
+ return [2 /*return*/, detector];
8614
8614
  }
8615
8615
  });
8616
8616
  });
8617
8617
  }
8618
8618
  function closeDocumentDetector() {
8619
- detector$1 === null || detector$1 === void 0 ? void 0 : detector$1.close();
8620
- detector$1 = null;
8621
- detectorSettings$1 = null;
8619
+ detector === null || detector === void 0 ? void 0 : detector.close();
8620
+ detector = null;
8621
+ detectorSettings = null;
8622
8622
  }
8623
8623
  function useLoadDocumentDetector(_a) {
8624
8624
  var _b = _a.shouldLoadModels,
@@ -8719,12 +8719,12 @@
8719
8719
  return __awaiter(this, void 0, void 0, function () {
8720
8720
  var startedAt, prediction, time, frameWidth, frameHeight;
8721
8721
  return __generator(this, function (_a) {
8722
- if (!detector$1) return [2 /*return*/, null];
8722
+ if (!detector) return [2 /*return*/, null];
8723
8723
  startedAt = performance.now();
8724
8724
  // Detectors can throw errors, for example when using custom URLs that
8725
8725
  // contain a model that doesn't provide the expected output.
8726
8726
  try {
8727
- prediction = detector$1.detectForVideo(frame, performance.now());
8727
+ prediction = detector.detectForVideo(frame, performance.now());
8728
8728
  time = performance.now() - startedAt;
8729
8729
  frameWidth = frame.width;
8730
8730
  frameHeight = frame.height;
@@ -15922,6 +15922,7 @@
15922
15922
  scaledHeight = _c.scaledHeight,
15923
15923
  xOffset = _c.xOffset,
15924
15924
  yOffset = _c.yOffset;
15925
+ if (!point) return /*#__PURE__*/React.createElement(React.Fragment, null);
15925
15926
  var left, top;
15926
15927
  if (horizontal) {
15927
15928
  left = point.x / videoWidth * scaledWidth - xOffset;
@@ -21011,136 +21012,6 @@
21011
21012
  var templateObject_1$n, templateObject_2$l;
21012
21013
 
21013
21014
  var defaultSelfieCaptureModelLoadTimeoutMs = 45000;
21014
- var detector = null;
21015
- var detectorSettings = null;
21016
- function loadFaceDetector() {
21017
- return __awaiter(this, arguments, void 0, function (modelAssetPath) {
21018
- var _a, _b;
21019
- if (modelAssetPath === void 0) {
21020
- modelAssetPath = defaultFaceDetectorModelPath;
21021
- }
21022
- return __generator(this, function (_c) {
21023
- switch (_c.label) {
21024
- case 0:
21025
- if (detector && (detectorSettings === null || detectorSettings === void 0 ? void 0 : detectorSettings.modelAssetPath) === modelAssetPath) return [2 /*return*/, detector];
21026
- closeFaceDetector();
21027
- return [4 /*yield*/, preloadFaceDetectorDependencies()];
21028
- case 1:
21029
- _c.sent();
21030
- if (modelCapabilities.delegate === 'NONE') {
21031
- throw new Error('No available delegate for face detector.');
21032
- }
21033
- _b = (_a = ya).createFromOptions;
21034
- return [4 /*yield*/, ao.forVisionTasks(visionTasksBasePath)];
21035
- case 2:
21036
- return [4 /*yield*/, _b.apply(_a, [_c.sent(), {
21037
- // canvas: document.createElement('canvas'),
21038
- baseOptions: {
21039
- modelAssetPath: modelAssetPath,
21040
- delegate: modelCapabilities.delegate
21041
- },
21042
- runningMode: 'VIDEO'
21043
- }])];
21044
- case 3:
21045
- detector = _c.sent();
21046
- detectorSettings = {
21047
- modelAssetPath: modelAssetPath
21048
- };
21049
- return [2 /*return*/, detector];
21050
- }
21051
- });
21052
- });
21053
- }
21054
- function closeFaceDetector() {
21055
- detector === null || detector === void 0 ? void 0 : detector.close();
21056
- detector = null;
21057
- detectorSettings = null;
21058
- }
21059
- function useLoadFaceDetector(_a) {
21060
- var onModelError = _a.onModelError,
21061
- _b = _a.modelLoadTimeoutMs,
21062
- modelLoadTimeoutMs = _b === void 0 ? defaultSelfieCaptureModelLoadTimeoutMs : _b,
21063
- videoRef = _a.videoRef;
21064
- var _c = React.useState('not-started'),
21065
- modelLoadState = _c[0],
21066
- setModelLoadState = _c[1];
21067
- var _d = React.useState(0),
21068
- modelDownloadProgress = _d[0],
21069
- setModelDownloadProgress = _d[1];
21070
- var _e = React.useState(null),
21071
- modelWarmingStartedAt = _e[0],
21072
- setModelWarmingStartedAt = _e[1];
21073
- var _f = React.useState(null),
21074
- modelError = _f[0],
21075
- setModelError = _f[1];
21076
- React.useEffect(function loadModel() {
21077
- var _this = this;
21078
- setModelLoadState('downloading');
21079
- setModelWarmingStartedAt(null);
21080
- var modelLoadTimeout = setTimeout(function () {
21081
- setModelError(new Error('Model loading time limit exceeded.'));
21082
- }, modelLoadTimeoutMs);
21083
- function handleDownloadProgress(event) {
21084
- setModelDownloadProgress(progressToPercentage(event.detail));
21085
- }
21086
- document.addEventListener('idmission.preloadProgress.faceDetection', handleDownloadProgress);
21087
- var cancelVideoReady = function cancelVideoReady() {};
21088
- loadFaceDetector().then(function (model) {
21089
- return __awaiter(_this, void 0, void 0, function () {
21090
- var _a, videoReady, cancel, cancelled;
21091
- return __generator(this, function (_b) {
21092
- switch (_b.label) {
21093
- case 0:
21094
- setModelDownloadProgress(100);
21095
- clearTimeout(modelLoadTimeout);
21096
- setModelLoadState('warming');
21097
- setModelWarmingStartedAt(performance.now());
21098
- return [4 /*yield*/, testFaceDetectionAgainstKnownImage(model)];
21099
- case 1:
21100
- _b.sent();
21101
- _a = waitForVideoReady(videoRef), videoReady = _a[0], cancel = _a[1];
21102
- cancelled = false;
21103
- cancelVideoReady = function cancelVideoReady() {
21104
- cancelled = true;
21105
- cancel();
21106
- };
21107
- return [4 /*yield*/, videoReady];
21108
- case 2:
21109
- _b.sent();
21110
- if (cancelled) return [2 /*return*/];
21111
- model.detectForVideo(videoRef.current, performance.now());
21112
- setModelLoadState('ready');
21113
- return [2 /*return*/];
21114
- }
21115
- });
21116
- });
21117
- })["catch"](function (e) {
21118
- setModelError(e);
21119
- setModelLoadState('error');
21120
- })["finally"](function () {
21121
- clearTimeout(modelLoadTimeout);
21122
- });
21123
- return function () {
21124
- log('unloading face detection model');
21125
- cancelVideoReady();
21126
- closeFaceDetector();
21127
- clearTimeout(modelLoadTimeout);
21128
- document.removeEventListener('idmission.preloadProgress.faceDetection', handleDownloadProgress);
21129
- };
21130
- }, [modelLoadTimeoutMs, videoRef]);
21131
- React.useEffect(function handleModelError() {
21132
- if (modelError) onModelError === null || onModelError === void 0 ? void 0 : onModelError(modelError);
21133
- }, [modelError, onModelError]);
21134
- return React.useMemo(function () {
21135
- return {
21136
- ready: modelLoadState === 'ready',
21137
- modelLoadState: modelLoadState,
21138
- modelDownloadProgress: modelDownloadProgress,
21139
- modelWarmingStartedAt: modelWarmingStartedAt,
21140
- modelError: modelError
21141
- };
21142
- }, [modelLoadState, modelDownloadProgress, modelWarmingStartedAt, modelError]);
21143
- }
21144
21015
  var lastFaceDetectionAt = 0;
21145
21016
  var lastFaceDetectionTime = 0;
21146
21017
  function setLastFaceDetectionAt(time) {
@@ -21190,24 +21061,68 @@
21190
21061
  if (lastNNosePairs.length > framesNeeded - 1) lastNNosePairs.length = framesNeeded - 1;
21191
21062
  }
21192
21063
  }
21193
- function makeFaceDetectorPrediction(imageData) {
21194
- if (!detector) return null;
21195
- var prediction = detector.detectForVideo(imageData, performance.now());
21196
- var faces = prediction.detections.map(function (d) {
21197
- return {
21198
- box: convertBoundingBox(d.boundingBox),
21199
- keypoints: d.keypoints.map(function (k) {
21200
- var _a;
21201
- return _assign(_assign({}, k), {
21202
- x: k.x * imageData.width,
21203
- y: k.y * imageData.height,
21204
- name: (_a = k.label) !== null && _a !== void 0 ? _a : ''
21205
- });
21206
- })
21207
- };
21064
+ function isFaceDetection(detection) {
21065
+ return detection.boundingBox && detection.categories.some(function (c) {
21066
+ return c.categoryName === 'Primary face' || c.categoryName === 'Secondary face';
21208
21067
  });
21209
- return _assign(_assign({}, prediction), {
21210
- faces: faces
21068
+ }
21069
+ function isNoseDetection(detection) {
21070
+ return detection.categories.some(function (c) {
21071
+ return c.categoryName === 'Nose';
21072
+ });
21073
+ }
21074
+ function makeFacePredictionWithDocumentDetector(frame) {
21075
+ return __awaiter(this, void 0, void 0, function () {
21076
+ var prediction, faceDetections, noseDetections, _i, _a, detection, faces, _b, faceDetections_1, d, faceBox, nose, _c, noseDetections_1, n, noseBox, cX, cY;
21077
+ return __generator(this, function (_d) {
21078
+ switch (_d.label) {
21079
+ case 0:
21080
+ return [4 /*yield*/, makeDocumentDetectorPrediction(frame)];
21081
+ case 1:
21082
+ prediction = _d.sent();
21083
+ if (!prediction) return [2 /*return*/, null];
21084
+ faceDetections = [];
21085
+ noseDetections = [];
21086
+ for (_i = 0, _a = prediction.detections; _i < _a.length; _i++) {
21087
+ detection = _a[_i];
21088
+ if (isNoseDetection(detection)) {
21089
+ noseDetections.push(detection);
21090
+ } else if (isFaceDetection(detection)) {
21091
+ faceDetections.push(detection);
21092
+ }
21093
+ }
21094
+ faces = [];
21095
+ for (_b = 0, faceDetections_1 = faceDetections; _b < faceDetections_1.length; _b++) {
21096
+ d = faceDetections_1[_b];
21097
+ faceBox = d.boundingBox;
21098
+ if (!faceBox) continue;
21099
+ nose = null;
21100
+ for (_c = 0, noseDetections_1 = noseDetections; _c < noseDetections_1.length; _c++) {
21101
+ n = noseDetections_1[_c];
21102
+ noseBox = n.boundingBox;
21103
+ if (!noseBox) continue;
21104
+ cX = noseBox.originX + noseBox.width / 2;
21105
+ cY = noseBox.originY + noseBox.height / 2;
21106
+ if (cX >= faceBox.originX && cX <= faceBox.originX + faceBox.width && cY >= faceBox.originY && cY <= faceBox.originY + faceBox.height) {
21107
+ nose = {
21108
+ x: cX,
21109
+ y: cY,
21110
+ name: 'nose'
21111
+ };
21112
+ break;
21113
+ }
21114
+ }
21115
+ faces.push({
21116
+ box: convertBoundingBox(d.boundingBox),
21117
+ keypoints: [null, null, nose, null, null]
21118
+ });
21119
+ }
21120
+ debug('faces', faces);
21121
+ return [2 /*return*/, _assign(_assign({}, prediction), {
21122
+ faces: faces
21123
+ })];
21124
+ }
21125
+ });
21211
21126
  });
21212
21127
  }
21213
21128
  function processFaceDetectorPrediction(_a) {
@@ -21235,13 +21150,9 @@
21235
21150
  // this represents the edge that the centroid of the face should not cross -- 12.5% of video width
21236
21151
  yCentroidBoundary = _h === void 0 ? 0.125 : _h,
21237
21152
  // this represents the edge that the centroid of the face should not cross -- 12.5% of video height
21238
- _j = _a.foreheadRatio,
21153
+ _j = _a.noseTrackingThreshold,
21239
21154
  // this represents the edge that the centroid of the face should not cross -- 12.5% of video height
21240
- foreheadRatio = _j === void 0 ? 0.275 : _j,
21241
- // we found that the bounding box ends at the brow and misses the forehead. this ratio represents how much we should extend the box to include the forehead.
21242
- _k = _a.noseTrackingThreshold,
21243
- // we found that the bounding box ends at the brow and misses the forehead. this ratio represents how much we should extend the box to include the forehead.
21244
- noseTrackingThreshold = _k === void 0 ? 0.2 : _k,
21155
+ noseTrackingThreshold = _j === void 0 ? 0.2 : _j,
21245
21156
  // this represents the maximum distance that the nose can be from the center of the face box -- 20% of the face box width or height
21246
21157
  minCaptureBrightnessThreshold = _a.minCaptureBrightnessThreshold,
21247
21158
  minCaptureRangeThreshold = _a.minCaptureRangeThreshold,
@@ -21268,10 +21179,10 @@
21268
21179
  var frameCX = videoWidth / 2;
21269
21180
  var frameCY = videoHeight / 2;
21270
21181
  // calculate head bounding box, with forehead extension
21271
- var foreheadSize = face.box.height * foreheadRatio;
21182
+ // const foreheadSize = face.box.height * foreheadRatio
21272
21183
  var headXMin = face.box.xMin;
21273
21184
  var headXMax = face.box.xMax;
21274
- var headYMin = face.box.yMin - foreheadSize;
21185
+ var headYMin = face.box.yMin; // - foreheadSize
21275
21186
  var headYMax = face.box.yMax;
21276
21187
  // calculate head centroids
21277
21188
  var headCX = (headXMin + headXMax) / 2;
@@ -21327,26 +21238,6 @@
21327
21238
  faceVisibilityTooLow: faceVisibilityTooLow
21328
21239
  };
21329
21240
  }
21330
- function testFaceDetectionAgainstKnownImage(detector) {
21331
- return new Promise(function (resolve, reject) {
21332
- var img = new Image();
21333
- img.crossOrigin = 'anonymous';
21334
- img.onload = function () {
21335
- var prediction = detector.detectForVideo(img, performance.now());
21336
- if (prediction.detections.length > 0) {
21337
- debug('face detection test result', prediction.detections);
21338
- resolve(void 0);
21339
- } else {
21340
- warn('face detection test failed');
21341
- reject(new Error('testFaceDetectionAgainstKnownImage failed to predict'));
21342
- }
21343
- };
21344
- img.onerror = function () {
21345
- return reject(new Error('testFaceDetectionAgainstKnownImage failed to load image'));
21346
- };
21347
- img.src = "".concat(DEFAULT_CDN_URL, "/head-test.jpg");
21348
- });
21349
- }
21350
21241
 
21351
21242
  function detectBrightnessAndContrast(frame, brightnessAverager) {
21352
21243
  var ctx = frame.getContext('2d');
@@ -21498,16 +21389,27 @@
21498
21389
  var canvasRef = React.useRef(null);
21499
21390
  var onPredictionHandler = React.useRef();
21500
21391
  var addToAverage = useRunningAvg(5).addToAverage;
21501
- var _f = useLoadFaceDetector({
21392
+ var _f = useLoadDocumentDetector({
21393
+ videoRef: videoRef,
21502
21394
  onModelError: onModelError,
21503
- modelLoadTimeoutMs: modelLoadTimeoutMs,
21504
- videoRef: videoRef
21395
+ modelLoadTimeoutMs: modelLoadTimeoutMs
21505
21396
  }),
21506
21397
  ready = _f.ready,
21507
21398
  modelLoadState = _f.modelLoadState,
21508
21399
  modelDownloadProgress = _f.modelDownloadProgress,
21509
21400
  modelWarmingStartedAt = _f.modelWarmingStartedAt,
21510
21401
  modelError = _f.modelError;
21402
+ // const {
21403
+ // ready,
21404
+ // modelLoadState,
21405
+ // modelDownloadProgress,
21406
+ // modelWarmingStartedAt,
21407
+ // modelError,
21408
+ // } = useLoadFaceDetector({
21409
+ // onModelError,
21410
+ // modelLoadTimeoutMs,
21411
+ // videoRef,
21412
+ // })
21511
21413
  var _g = useFrameLoop(React.useCallback(function () {
21512
21414
  return __awaiter(_this, void 0, void 0, function () {
21513
21415
  var vw, vh, ctx, thresholdsProvided, brightnessResults, brightness, range, variance, prediction, processed, e_1;
@@ -21521,19 +21423,21 @@
21521
21423
  ctx = canvasRef.current.getContext('2d');
21522
21424
  canvasRef.current.width = vw;
21523
21425
  canvasRef.current.height = vh;
21524
- if (!(ctx && videoRef.current.readyState === 4)) return [3 /*break*/, 4];
21426
+ if (!(ctx && videoRef.current.readyState === 4)) return [3 /*break*/, 5];
21525
21427
  ctx.translate(vw, 0);
21526
21428
  ctx.scale(-1, 1);
21527
21429
  ctx.drawImage(videoRef.current, 0, 0, vw, vh);
21528
21430
  _c.label = 1;
21529
21431
  case 1:
21530
- _c.trys.push([1, 3,, 4]);
21432
+ _c.trys.push([1, 4,, 5]);
21531
21433
  thresholdsProvided = minCaptureBrightnessThreshold !== undefined || minCaptureRangeThreshold !== undefined || minCaptureVarianceThreshold !== undefined;
21532
21434
  brightnessResults = thresholdsProvided ? detectBrightnessAndContrast(canvasRef.current, addToAverage) : undefined;
21533
21435
  brightness = brightnessResults === null || brightnessResults === void 0 ? void 0 : brightnessResults.brightness;
21534
21436
  range = brightnessResults === null || brightnessResults === void 0 ? void 0 : brightnessResults.range;
21535
21437
  variance = brightnessResults === null || brightnessResults === void 0 ? void 0 : brightnessResults.variance;
21536
- prediction = makeFaceDetectorPrediction(canvasRef.current);
21438
+ return [4 /*yield*/, makeFacePredictionWithDocumentDetector(canvasRef.current)];
21439
+ case 2:
21440
+ prediction = _c.sent();
21537
21441
  processed = processFaceDetectorPrediction({
21538
21442
  faces: (_a = prediction === null || prediction === void 0 ? void 0 : prediction.faces) !== null && _a !== void 0 ? _a : [],
21539
21443
  videoWidth: vw,
@@ -21549,15 +21453,15 @@
21549
21453
  setLastFaceDetectionAt(new Date().getTime());
21550
21454
  // setLastPrediction(processed)
21551
21455
  return [4 /*yield*/, (_b = onPredictionHandler.current) === null || _b === void 0 ? void 0 : _b.call(onPredictionHandler, processed)];
21552
- case 2:
21456
+ case 3:
21553
21457
  // setLastPrediction(processed)
21554
21458
  _c.sent();
21555
- return [3 /*break*/, 4];
21556
- case 3:
21459
+ return [3 /*break*/, 5];
21460
+ case 4:
21557
21461
  e_1 = _c.sent();
21558
21462
  error('caught face detection error', e_1);
21559
- return [3 /*break*/, 4];
21560
- case 4:
21463
+ return [3 /*break*/, 5];
21464
+ case 5:
21561
21465
  return [2 /*return*/];
21562
21466
  }
21563
21467
  });
@@ -24862,7 +24766,8 @@
24862
24766
  var rightEdge = videoWidth * (1 - headTrackingBoundaryPercentage);
24863
24767
  var topEdge = videoHeight * headTrackingBoundaryPercentage;
24864
24768
  var bottomEdge = videoHeight * (1 - headTrackingBoundaryPercentage);
24865
- var nearBoundary = !!face && (headTrackingBoundaryType === 'nose' ? face.keypoints[2].x < leftEdge || face.keypoints[2].x > rightEdge || face.keypoints[2].y < topEdge || face.keypoints[2].y > bottomEdge : (face === null || face === void 0 ? void 0 : face.box.xMin) < leftEdge || (face === null || face === void 0 ? void 0 : face.box.xMax) > rightEdge || (face === null || face === void 0 ? void 0 : face.box.yMin) < topEdge || (face === null || face === void 0 ? void 0 : face.box.yMax) > bottomEdge);
24769
+ var nose = face === null || face === void 0 ? void 0 : face.keypoints[2];
24770
+ var nearBoundary = !!face && !!nose && (headTrackingBoundaryType === 'nose' ? nose.x < leftEdge || nose.x > rightEdge || nose.y < topEdge || nose.y > bottomEdge : (face === null || face === void 0 ? void 0 : face.box.xMin) < leftEdge || (face === null || face === void 0 ? void 0 : face.box.xMax) > rightEdge || (face === null || face === void 0 ? void 0 : face.box.yMin) < topEdge || (face === null || face === void 0 ? void 0 : face.box.yMax) > bottomEdge);
24866
24771
  setLastFace(face);
24867
24772
  setHeadTrackingSatisfied(!!face && !nearBoundary);
24868
24773
  setNumFramesWithoutFaces(face ? 0 : function (n) {
@@ -25343,6 +25248,7 @@
25343
25248
  return n + 1;
25344
25249
  });
25345
25250
  setCaptureState(skipLivenessValidation ? 'CAPTURING_SELFIE' : 'CHECKING_LIVENESS');
25251
+ useVideoSignatureStore.getState().clearRecordedData();
25346
25252
  }, [onRetryClicked, skipLivenessValidation]);
25347
25253
  var onExitSignatureCapture = React.useCallback(function () {
25348
25254
  setAttempt(function (n) {
@@ -25810,6 +25716,16 @@
25810
25716
  clearRecordedData: function clearRecordedData() {
25811
25717
  clearVideoChunks();
25812
25718
  clearAudioChunks();
25719
+ set({
25720
+ videoUrl: null,
25721
+ audioUrl: null,
25722
+ isRecordingVideo: false,
25723
+ isRecordingAudio: false,
25724
+ videoRecordingStopped: false,
25725
+ audioRecordingStopped: false,
25726
+ videoRecordingIntentionallyStopped: false,
25727
+ audioRecordingIntentionallyStopped: false
25728
+ });
25813
25729
  }
25814
25730
  });
25815
25731
  }));
@@ -26092,10 +26008,10 @@
26092
26008
  var _14 = React.useState(null),
26093
26009
  videoStartsAt = _14[0],
26094
26010
  setVideoStartsAt = _14[1];
26095
- var _15 = React.useContext(SubmissionContext),
26011
+ var _15 = useSubmissionContext(),
26096
26012
  setIdCaptureVideoAudioStartsAt = _15.setIdCaptureVideoAudioStartsAt,
26097
26013
  setExpectedAudioText = _15.setExpectedAudioText;
26098
- var _16 = React.useContext(SelfieGuidanceModelsContext),
26014
+ var _16 = useSelfieGuidanceModelsContext(),
26099
26015
  startSelfieGuidance = _16.start,
26100
26016
  stopSelfieGuidance = _16.stop,
26101
26017
  onSelfiePredictionMade = _16.onPredictionMade,
@@ -26692,6 +26608,7 @@
26692
26608
  return n + 1;
26693
26609
  });
26694
26610
  setCaptureState('CAPTURING_ID');
26611
+ useVideoRecorderStore.getState().clearRecordedData();
26695
26612
  }, []);
26696
26613
  var isCapturingId = !skipIdCapture && ['LOADING', 'CAPTURING_ID'].includes(captureState);
26697
26614
  React.useEffect(function () {
@@ -26726,6 +26643,7 @@
26726
26643
  });
26727
26644
  }, [capturedIdDocumentType, (_b = classNames.idVideoCapture) === null || _b === void 0 ? void 0 : _b.guides, (_c = colors.idVideoCapture) === null || _c === void 0 ? void 0 : _c.guidesSatisfiedColor, (_d = colors.idVideoCapture) === null || _d === void 0 ? void 0 : _d.guidesUnsatisfiedColor, idCaptureGuideImages, (_e = verbiage.idVideoCapture) === null || _e === void 0 ? void 0 : _e.guides]);
26728
26645
  return /*#__PURE__*/React.createElement(CameraStoreProvider, {
26646
+ key: "camera-store-".concat(attempt),
26729
26647
  preferIphoneContinuityCamera: isCapturingId,
26730
26648
  preferFrontFacingCamera: !isCapturingId,
26731
26649
  requireMicrophoneAccess: !isCapturingId && !!readTextPrompt,
@@ -26737,6 +26655,7 @@
26737
26655
  classNames: classNames === null || classNames === void 0 ? void 0 : classNames.cameraStoreProvider,
26738
26656
  verbiage: verbiage === null || verbiage === void 0 ? void 0 : verbiage.cameraStoreProvider
26739
26657
  }, /*#__PURE__*/React.createElement(IdCaptureModelsProvider, {
26658
+ key: "id-capture-models-".concat(attempt),
26740
26659
  autoStart: false,
26741
26660
  documentDetectionModelUrl: (_g = (_f = idCaptureProps.assets) === null || _f === void 0 ? void 0 : _f.documentDetectionModelUrl) !== null && _g !== void 0 ? _g : '',
26742
26661
  focusModelUrl: (_j = (_h = idCaptureProps.assets) === null || _h === void 0 ? void 0 : _h.focusModelUrl) !== null && _j !== void 0 ? _j : '',
@@ -26744,6 +26663,7 @@
26744
26663
  modelLoadTimeoutMs: idCaptureModelLoadTimeoutMs,
26745
26664
  allowSinglePageIdCapture: idCaptureProps.allowSinglePageIdCapture
26746
26665
  }, /*#__PURE__*/React.createElement(SelfieGuidanceModelsProvider, {
26666
+ key: "selfie-guidance-models-".concat(attempt),
26747
26667
  autoStart: false,
26748
26668
  onModelError: faceLivenessProps === null || faceLivenessProps === void 0 ? void 0 : faceLivenessProps.onModelError,
26749
26669
  modelLoadTimeoutMs: faceLivenessProps === null || faceLivenessProps === void 0 ? void 0 : faceLivenessProps.modelLoadTimeoutMs,
@@ -26753,7 +26673,9 @@
26753
26673
  })), function () {
26754
26674
  switch (captureState) {
26755
26675
  case 'CAPTURING_ID':
26756
- return /*#__PURE__*/React.createElement(IdCaptureStateProvider, null, /*#__PURE__*/React.createElement(GuideOrientationContextProvider, null, /*#__PURE__*/React.createElement(IdCaptureWizard, _assign({
26676
+ return /*#__PURE__*/React.createElement(IdCaptureStateProvider, {
26677
+ key: "id-capture-state-".concat(attempt)
26678
+ }, /*#__PURE__*/React.createElement(GuideOrientationContextProvider, null, /*#__PURE__*/React.createElement(IdCaptureWizard, _assign({
26757
26679
  key: "id-capture-".concat(attempt),
26758
26680
  loadingOverlayMode: idCaptureLoadingOverlayMode,
26759
26681
  customOverlayContent: customOverlayContent,