idmission-web-sdk 0.0.84 → 0.0.86

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.
@@ -3,3 +3,5 @@ export declare class SubmissionError extends Error {
3
3
  status: SubmissionResponseStatus;
4
4
  constructor(status: SubmissionResponseStatus);
5
5
  }
6
+ export declare class NetworkError extends Error {
7
+ }
@@ -1,6 +1,7 @@
1
1
  import { ReactElement } from 'react';
2
- import { SubmissionError } from './SubmissionError';
2
+ import { NetworkError, SubmissionError } from './Errors';
3
3
  export type SubmissionErrorOverlayProps = {
4
- submissionError: SubmissionError;
4
+ error: SubmissionError | NetworkError;
5
+ onRetry?: () => void;
5
6
  };
6
- export declare const SubmissionErrorOverlay: ({ submissionError, }: SubmissionErrorOverlayProps) => ReactElement;
7
+ export declare const SubmissionErrorOverlay: ({ error, onRetry, }: SubmissionErrorOverlayProps) => ReactElement;
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import { UploadedDocument } from '../components/additional_document_capture/AdditionalDocumentCapture';
3
3
  import { SignatureData } from '../components/signature_capture/data';
4
+ import { NetworkError, SubmissionError } from '../components/submission/Errors';
4
5
  export declare enum SubmissionAction {
5
6
  NONE = "NONE",
6
7
  ENROLL = "ENROLL",
@@ -153,6 +154,7 @@ export type SubmissionState = {
153
154
  submissionStatus: SubmissionStatus;
154
155
  submissionRequest: SubmissionRequest | null;
155
156
  submissionResponse: SubmissionResponse | null;
157
+ submissionError: SubmissionError | NetworkError | null;
156
158
  submissionEnvironment: SubmissionEnvironment;
157
159
  idFrontImage: string | null;
158
160
  idBackImage: string | null;
@@ -48,5 +48,8 @@ declare const _default: {
48
48
  Accept: string;
49
49
  Clear: string;
50
50
  'Video signature has been successfully captured!': string;
51
+ 'Network unreachable': string;
52
+ "We're having trouble reaching our services, please check your connection and try again.": string;
53
+ "We're sorry, an unexpected error has occurred.": string;
51
54
  };
52
55
  export default _default;
@@ -56,6 +56,9 @@ export declare const resources: {
56
56
  Accept: string;
57
57
  Clear: string;
58
58
  'Video signature has been successfully captured!': string;
59
+ 'Network unreachable': string;
60
+ "We're having trouble reaching our services, please check your connection and try again.": string;
61
+ "We're sorry, an unexpected error has occurred.": string;
59
62
  };
60
63
  };
61
64
  };
@@ -50,7 +50,7 @@ var tf__namespace = /*#__PURE__*/_interopNamespace(tf);
50
50
  var useResizeObserver__default = /*#__PURE__*/_interopDefaultLegacy(useResizeObserver);
51
51
  var SignatureCanvas__default = /*#__PURE__*/_interopDefaultLegacy(SignatureCanvas);
52
52
 
53
- var webSdkVersion = '0.0.84';
53
+ var webSdkVersion = '0.0.86';
54
54
 
55
55
  function getPlatform() {
56
56
  return window.platform;
@@ -86,6 +86,7 @@ var SubmissionContext = /*#__PURE__*/React.createContext({
86
86
  submissionStatus: SubmissionStatus.READY,
87
87
  submissionRequest: null,
88
88
  submissionResponse: null,
89
+ submissionError: null,
89
90
  submissionEnvironment: 'prod',
90
91
  idFrontImage: null,
91
92
  idBackImage: null,
@@ -378,40 +379,85 @@ var GeolocationAccessDeniedOverlay = function GeolocationAccessDeniedOverlay(_a)
378
379
  }, t('Retry')))));
379
380
  };
380
381
 
382
+ var SubmissionError = function (_super) {
383
+ tslib.__extends(SubmissionError, _super);
384
+ function SubmissionError(status) {
385
+ var _this = _super.call(this, status.statusMessage) || this;
386
+ _this.status = status;
387
+ return _this;
388
+ }
389
+ return SubmissionError;
390
+ }(Error);
391
+ var NetworkError = function (_super) {
392
+ tslib.__extends(NetworkError, _super);
393
+ function NetworkError() {
394
+ return _super !== null && _super.apply(this, arguments) || this;
395
+ }
396
+ return NetworkError;
397
+ }(Error);
398
+
381
399
  var SubmissionErrorOverlay = function SubmissionErrorOverlay(_a) {
382
- var submissionError = _a.submissionError;
400
+ var error = _a.error,
401
+ onRetry = _a.onRetry;
383
402
  return /*#__PURE__*/React__default['default'].createElement(OverlayContainer, null, /*#__PURE__*/React__default['default'].createElement(OverlayInner, {
384
403
  style: {
385
404
  justifyContent: 'center'
386
405
  }
387
- }, /*#__PURE__*/React__default['default'].createElement("h3", {
406
+ }, error instanceof NetworkError ? /*#__PURE__*/React__default['default'].createElement(NetworkErrorContent, {
407
+ error: error,
408
+ onRetry: onRetry
409
+ }) : /*#__PURE__*/React__default['default'].createElement(SubmissionErrorContent, {
410
+ error: error
411
+ })));
412
+ };
413
+ var SubmissionErrorContent = function SubmissionErrorContent(_a) {
414
+ var error = _a.error;
415
+ var t = reactI18next.useTranslation().t;
416
+ var headingText = t("We're sorry, an unexpected error has occurred.");
417
+ return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement("h3", {
388
418
  style: {
389
419
  marginBottom: 8
390
420
  }
391
- }, "We're sorry, an unexpected error has occurred."), submissionError.status.statusCode && /*#__PURE__*/React__default['default'].createElement("p", {
421
+ }, headingText), error.status.statusCode && /*#__PURE__*/React__default['default'].createElement("p", {
392
422
  style: {
393
423
  marginBottom: 0
394
424
  }
395
- }, /*#__PURE__*/React__default['default'].createElement("code", null, "Status: ", submissionError.status.statusCode)), /*#__PURE__*/React__default['default'].createElement("p", {
425
+ }, /*#__PURE__*/React__default['default'].createElement("code", null, "Status: ", error.status.statusCode)), /*#__PURE__*/React__default['default'].createElement("p", {
396
426
  style: {
397
427
  marginBottom: 0
398
428
  }
399
- }, /*#__PURE__*/React__default['default'].createElement("code", null, submissionError.message)), submissionError.status.errorData && /*#__PURE__*/React__default['default'].createElement("p", {
429
+ }, /*#__PURE__*/React__default['default'].createElement("code", null, error.message)), error.status.errorData && /*#__PURE__*/React__default['default'].createElement("p", {
400
430
  style: {
401
431
  marginBottom: 0
402
432
  }
403
- }, /*#__PURE__*/React__default['default'].createElement("code", null, submissionError.status.errorData))));
433
+ }, /*#__PURE__*/React__default['default'].createElement("code", null, error.status.errorData)));
434
+ };
435
+ var NetworkErrorContent = function NetworkErrorContent(_a) {
436
+ var onRetry = _a.onRetry;
437
+ var t = reactI18next.useTranslation().t;
438
+ var headingText = t('Network unreachable');
439
+ var messageText = t("We're having trouble reaching our services, please check your connection and try again.");
440
+ var retryText = t('Retry');
441
+ return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement("h3", {
442
+ style: {
443
+ marginBottom: 8
444
+ }
445
+ }, headingText), /*#__PURE__*/React__default['default'].createElement("p", {
446
+ style: {
447
+ marginBottom: 0
448
+ }
449
+ }, messageText), onRetry && /*#__PURE__*/React__default['default'].createElement("div", {
450
+ style: {
451
+ marginTop: 32
452
+ }
453
+ }, /*#__PURE__*/React__default['default'].createElement(LoaderButton, {
454
+ colors: {
455
+ backgroundColor: '#ea8557'
456
+ },
457
+ finished: true,
458
+ onClick: onRetry
459
+ }, retryText)));
404
460
  };
405
-
406
- var SubmissionError = function (_super) {
407
- tslib.__extends(SubmissionError, _super);
408
- function SubmissionError(status) {
409
- var _this = _super.call(this, status.statusMessage) || this;
410
- _this.status = status;
411
- return _this;
412
- }
413
- return SubmissionError;
414
- }(Error);
415
461
 
416
462
  var SubmissionProvider = function SubmissionProvider(_a) {
417
463
  var action = _a.action,
@@ -457,44 +503,47 @@ var SubmissionProvider = function SubmissionProvider(_a) {
457
503
  submissionError = _p[0],
458
504
  setSubmissionError = _p[1];
459
505
  var _q = React.useState(null),
460
- idFrontImage = _q[0],
461
- setIdFrontImage = _q[1];
506
+ retrySubmission = _q[0],
507
+ setRetrySubmission = _q[1];
462
508
  var _r = React.useState(null),
463
- idBackImage = _r[0],
464
- setIdBackImage = _r[1];
509
+ idFrontImage = _r[0],
510
+ setIdFrontImage = _r[1];
465
511
  var _s = React.useState(null),
466
- passportImage = _s[0],
467
- setPassportImage = _s[1];
512
+ idBackImage = _s[0],
513
+ setIdBackImage = _s[1];
468
514
  var _t = React.useState(null),
469
- selfieImage = _t[0],
470
- setSelfieImage = _t[1];
515
+ passportImage = _t[0],
516
+ setPassportImage = _t[1];
471
517
  var _u = React.useState(null),
472
- signatureData = _u[0],
473
- setSignatureData = _u[1];
518
+ selfieImage = _u[0],
519
+ setSelfieImage = _u[1];
474
520
  var _v = React.useState(null),
475
- signatureVideo = _v[0],
476
- setSignatureVideo = _v[1];
521
+ signatureData = _v[0],
522
+ setSignatureData = _v[1];
477
523
  var _w = React.useState(null),
478
- additionalDocuments = _w[0],
479
- setAdditionalDocuments = _w[1];
524
+ signatureVideo = _w[0],
525
+ setSignatureVideo = _w[1];
480
526
  var _x = React.useState(null),
481
- geolocationResult = _x[0],
482
- setGeolocationResult = _x[1];
483
- var _y = React.useState(0),
484
- geolocationAttempts = _y[0],
485
- setGeolocationAttempts = _y[1];
486
- var _z = React.useState(false),
487
- geolocationBlocked = _z[0],
488
- setGeolocationBlocked = _z[1];
489
- var _0 = React.useState([]),
490
- idFrontCaptureAttempts = _0[0],
491
- setIdFrontCaptureAttempts = _0[1];
527
+ additionalDocuments = _x[0],
528
+ setAdditionalDocuments = _x[1];
529
+ var _y = React.useState(null),
530
+ geolocationResult = _y[0],
531
+ setGeolocationResult = _y[1];
532
+ var _z = React.useState(0),
533
+ geolocationAttempts = _z[0],
534
+ setGeolocationAttempts = _z[1];
535
+ var _0 = React.useState(false),
536
+ geolocationBlocked = _0[0],
537
+ setGeolocationBlocked = _0[1];
492
538
  var _1 = React.useState([]),
493
- idBackCaptureAttempts = _1[0],
494
- setIdBackCaptureAttempts = _1[1];
539
+ idFrontCaptureAttempts = _1[0],
540
+ setIdFrontCaptureAttempts = _1[1];
495
541
  var _2 = React.useState([]),
496
- selfieCaptureAttempts = _2[0],
497
- setSelfieCaptureAttempts = _2[1];
542
+ idBackCaptureAttempts = _2[0],
543
+ setIdBackCaptureAttempts = _2[1];
544
+ var _3 = React.useState([]),
545
+ selfieCaptureAttempts = _3[0],
546
+ setSelfieCaptureAttempts = _3[1];
498
547
  var logIdFrontCaptureAttempt = React.useCallback(function (attempt) {
499
548
  setIdFrontCaptureAttempts(function (attempts) {
500
549
  return tslib.__spreadArray(tslib.__spreadArray([], attempts, true), [attempt], false);
@@ -514,9 +563,10 @@ var SubmissionProvider = function SubmissionProvider(_a) {
514
563
  return tslib.__awaiter(void 0, void 0, void 0, function () {
515
564
  var submissionResponse_1, submissionRequest_1, onBeforeSubmitResult, host, endpoint, response, _a, submissionResponse_2, e_1, err;
516
565
  var _b;
517
- var _c;
518
- return tslib.__generator(this, function (_d) {
519
- switch (_d.label) {
566
+ var _c, _d;
567
+ var _e;
568
+ return tslib.__generator(this, function (_f) {
569
+ switch (_f.label) {
520
570
  case 0:
521
571
  if (action === SubmissionAction.NONE) {
522
572
  submissionResponse_1 = {
@@ -530,9 +580,9 @@ var SubmissionProvider = function SubmissionProvider(_a) {
530
580
  return [2, submissionResponse_1];
531
581
  }
532
582
  setSubmissionStatus(SubmissionStatus.SUBMITTING);
533
- _d.label = 1;
583
+ _f.label = 1;
534
584
  case 1:
535
- _d.trys.push([1, 8,, 9]);
585
+ _f.trys.push([1, 8,, 9]);
536
586
  submissionRequest_1 = {
537
587
  securityData: {
538
588
  userName: '',
@@ -595,7 +645,7 @@ var SubmissionProvider = function SubmissionProvider(_a) {
595
645
  submissionRequest_1.customerData.cardData = cardData;
596
646
  }
597
647
  if (enrollmentId) {
598
- (_c = submissionRequest_1.customerData).personalData || (_c.personalData = {});
648
+ (_e = submissionRequest_1.customerData).personalData || (_e.personalData = {});
599
649
  submissionRequest_1.customerData.personalData.uniqueNumber = enrollmentId;
600
650
  }
601
651
  if (webhooksClientTraceId) {
@@ -624,9 +674,9 @@ var SubmissionProvider = function SubmissionProvider(_a) {
624
674
  if (!onBeforeSubmit) return [3, 3];
625
675
  return [4, onBeforeSubmit(submissionRequest_1)];
626
676
  case 2:
627
- onBeforeSubmitResult = _d.sent();
677
+ onBeforeSubmitResult = _f.sent();
628
678
  if (onBeforeSubmitResult) submissionRequest_1 = onBeforeSubmitResult;
629
- _d.label = 3;
679
+ _f.label = 3;
630
680
  case 3:
631
681
  host = url || determineSubmissionHost(environment, token);
632
682
  endpoint = determineSubmissionEndpoint(action, !!(idFrontImage || idBackImage || passportImage), !!selfieImage, !!token);
@@ -634,21 +684,23 @@ var SubmissionProvider = function SubmissionProvider(_a) {
634
684
  method: 'POST',
635
685
  headers: apiHeaders(token),
636
686
  body: JSON.stringify(submissionRequest_1)
687
+ })["catch"](function (e) {
688
+ throw new NetworkError(e.message);
637
689
  })];
638
690
  case 4:
639
- response = _d.sent();
640
- if (!!response.ok) return [3, 6];
691
+ response = _f.sent();
692
+ if (!(!response || !response.ok)) return [3, 6];
641
693
  _a = SubmissionError.bind;
642
694
  _b = {
643
- statusCode: response.statusText
695
+ statusCode: (_c = response === null || response === void 0 ? void 0 : response.statusText) !== null && _c !== void 0 ? _c : '???'
644
696
  };
645
- return [4, response.text()];
697
+ return [4, response === null || response === void 0 ? void 0 : response.text()];
646
698
  case 5:
647
- throw new (_a.apply(SubmissionError, [void 0, (_b.statusMessage = _d.sent(), _b)]))();
699
+ throw new (_a.apply(SubmissionError, [void 0, (_b.statusMessage = (_d = _f.sent()) !== null && _d !== void 0 ? _d : 'No response was received', _b)]))();
648
700
  case 6:
649
701
  return [4, response.json()];
650
702
  case 7:
651
- submissionResponse_2 = _d.sent();
703
+ submissionResponse_2 = _f.sent();
652
704
  if (submissionResponse_2.status.statusCode !== '000') {
653
705
  throw new SubmissionError(submissionResponse_2.status);
654
706
  }
@@ -658,13 +710,18 @@ var SubmissionProvider = function SubmissionProvider(_a) {
658
710
  onResponseReceived === null || onResponseReceived === void 0 ? void 0 : onResponseReceived(submissionResponse_2);
659
711
  return [2, submissionResponse_2];
660
712
  case 8:
661
- e_1 = _d.sent();
713
+ e_1 = _f.sent();
662
714
  err = e_1;
663
715
  setSubmissionStatus(SubmissionStatus.FAILED);
664
- setSubmissionError(e_1 instanceof SubmissionError ? e_1 : new SubmissionError({
716
+ setSubmissionError(e_1 instanceof SubmissionError || e_1 instanceof NetworkError ? e_1 : new SubmissionError({
665
717
  statusCode: '',
666
718
  statusMessage: err.message
667
719
  }));
720
+ setRetrySubmission(function () {
721
+ return ['VERIFY', 'IDENTIFY'].includes(action) ? function () {
722
+ return null;
723
+ } : submit;
724
+ });
668
725
  onRequestFailure === null || onRequestFailure === void 0 ? void 0 : onRequestFailure(err);
669
726
  throw err;
670
727
  case 9:
@@ -710,6 +767,8 @@ var SubmissionProvider = function SubmissionProvider(_a) {
710
767
  method: 'POST',
711
768
  headers: apiHeaders(token),
712
769
  body: JSON.stringify(request)
770
+ })["catch"](function (e) {
771
+ throw new NetworkError(e.message);
713
772
  })];
714
773
  case 2:
715
774
  response = _f.sent();
@@ -734,10 +793,15 @@ var SubmissionProvider = function SubmissionProvider(_a) {
734
793
  e_2 = _f.sent();
735
794
  err = e_2;
736
795
  setSubmissionStatus(SubmissionStatus.FAILED);
737
- setSubmissionError(e_2 instanceof SubmissionError ? e_2 : new SubmissionError({
796
+ setSubmissionError(e_2 instanceof SubmissionError || e_2 instanceof NetworkError ? e_2 : new SubmissionError({
738
797
  statusCode: '',
739
798
  statusMessage: err.message
740
799
  }));
800
+ setRetrySubmission(function () {
801
+ return function () {
802
+ return null;
803
+ };
804
+ });
741
805
  onRequestFailure === null || onRequestFailure === void 0 ? void 0 : onRequestFailure(err);
742
806
  throw err;
743
807
  case 7:
@@ -765,11 +829,18 @@ var SubmissionProvider = function SubmissionProvider(_a) {
765
829
  }
766
830
  });
767
831
  }, [geolocationAttempts, geolocationEnabled, geolocationRequired]);
832
+ var onRetry = React.useCallback(function () {
833
+ if (!retrySubmission) return;
834
+ setSubmissionError(null);
835
+ setSubmissionStatus(SubmissionStatus.READY);
836
+ retrySubmission();
837
+ }, [retrySubmission]);
768
838
  var value = {
769
839
  submit: submit,
770
840
  submissionStatus: submissionStatus,
771
841
  submissionRequest: submissionRequest,
772
842
  submissionResponse: submissionResponse,
843
+ submissionError: submissionError,
773
844
  submissionEnvironment: environment,
774
845
  idFrontImage: idFrontImage,
775
846
  idBackImage: idBackImage,
@@ -793,9 +864,10 @@ var SubmissionProvider = function SubmissionProvider(_a) {
793
864
  };
794
865
  return /*#__PURE__*/React__default['default'].createElement(SubmissionContext.Provider, {
795
866
  value: value
796
- }, geolocationRequired && geolocationBlocked ? /*#__PURE__*/React__default['default'].createElement(GeolocationAccessDeniedOverlay, null) : submissionError ? /*#__PURE__*/React__default['default'].createElement(SubmissionErrorOverlay, {
797
- submissionError: submissionError
798
- }) : children);
867
+ }, geolocationRequired && geolocationBlocked ? /*#__PURE__*/React__default['default'].createElement(GeolocationAccessDeniedOverlay, null) : children, submissionError && /*#__PURE__*/React__default['default'].createElement(SubmissionErrorOverlay, {
868
+ error: submissionError,
869
+ onRetry: onRetry
870
+ }));
799
871
  };
800
872
 
801
873
  var DocumentType;
@@ -9048,7 +9120,10 @@ var esTranslation = {
9048
9120
  'Please sign the box below': 'Por favor, hay que firmar en el recuadro de abajo',
9049
9121
  Accept: 'Aceptar',
9050
9122
  Clear: 'Borrar',
9051
- 'Video signature has been successfully captured!': 'La video firma ha sido exitosa.'
9123
+ 'Video signature has been successfully captured!': 'La video firma ha sido exitosa.',
9124
+ 'Network unreachable': 'No hay conexión a internet.',
9125
+ "We're having trouble reaching our services, please check your connection and try again.": "Estamos teniendo problemas para alcanzar nuestros servicios, por favor verificar la conexi\xF3n a internet e intentar de nuevo.",
9126
+ "We're sorry, an unexpected error has occurred.": "Lo sentimos, se ha producido un error inesperado."
9052
9127
  };
9053
9128
 
9054
9129
  var resources = {
@@ -11039,13 +11114,15 @@ var FaceLivenessCapture = function FaceLivenessCapture(_a) {
11039
11114
  _d = _a.verbiage,
11040
11115
  rawVerbiage = _d === void 0 ? {} : _d,
11041
11116
  debugMode = _a.debugMode;
11042
- var checkLiveness = React.useContext(SubmissionContext).checkLiveness;
11043
- var _e = React.useReducer(reducer$2, initialState$2),
11044
- state = _e[0],
11045
- dispatch = _e[1];
11046
- var _f = React.useState(null),
11047
- imageUrl = _f[0],
11048
- setImageUrl = _f[1];
11117
+ var _e = React.useContext(SubmissionContext),
11118
+ checkLiveness = _e.checkLiveness,
11119
+ submissionError = _e.submissionError;
11120
+ var _f = React.useReducer(reducer$2, initialState$2),
11121
+ state = _f[0],
11122
+ dispatch = _f[1];
11123
+ var _g = React.useState(null),
11124
+ imageUrl = _g[0],
11125
+ setImageUrl = _g[1];
11049
11126
  var onSelfieCaptured = React.useCallback(function (frame, face) {
11050
11127
  onCapture === null || onCapture === void 0 ? void 0 : onCapture();
11051
11128
  dispatch({
@@ -11061,7 +11138,7 @@ var FaceLivenessCapture = function FaceLivenessCapture(_a) {
11061
11138
  var isReady = state.requestState === 'CAPTURED';
11062
11139
  var isPassed = state.requestState === 'PASSED';
11063
11140
  React.useEffect(function () {
11064
- if (!frame || !face || !isReady) return;
11141
+ if (!frame || !face || !isReady || submissionError) return;
11065
11142
  dispatch({
11066
11143
  type: 'livenessChecking'
11067
11144
  });
@@ -11105,7 +11182,7 @@ var FaceLivenessCapture = function FaceLivenessCapture(_a) {
11105
11182
  });
11106
11183
  });
11107
11184
  })();
11108
- }, [checkLiveness, face, frame, isReady]);
11185
+ }, [checkLiveness, face, frame, isReady, submissionError]);
11109
11186
  React.useEffect(function () {
11110
11187
  if (isPassed && state.imageUrl) onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(state.imageUrl);
11111
11188
  }, [onSuccess, state.imageUrl, isPassed]);
@@ -12880,6 +12957,7 @@ var CustomerVerificationCapture = function CustomerVerificationCapture(_a) {
12880
12957
  var _f = React.useContext(SubmissionContext),
12881
12958
  submit = _f.submit,
12882
12959
  submissionResponse = _f.submissionResponse,
12960
+ submissionError = _f.submissionError,
12883
12961
  selfieImage = _f.selfieImage,
12884
12962
  setSelfieImage = _f.setSelfieImage;
12885
12963
  var _g = React.useState(null),
@@ -12896,15 +12974,15 @@ var CustomerVerificationCapture = function CustomerVerificationCapture(_a) {
12896
12974
  }, []);
12897
12975
  var isReady = state.requestState === 'CAPTURED';
12898
12976
  React.useEffect(function () {
12899
- if (!frame || !face) return;
12977
+ if (!frame || !face || submissionError) return;
12900
12978
  var imageUrl = cropToShoulders(frame, face);
12901
12979
  setImageUrl(imageUrl);
12902
12980
  dataUrlToBase64(imageUrl).then(function (img) {
12903
12981
  setSelfieImage(img);
12904
12982
  });
12905
- }, [face, frame, setSelfieImage]);
12983
+ }, [face, frame, setSelfieImage, submissionError]);
12906
12984
  React.useEffect(function () {
12907
- if (!isReady || !selfieImage) return;
12985
+ if (!isReady || !selfieImage || submissionError) return;
12908
12986
  (function () {
12909
12987
  return tslib.__awaiter(void 0, void 0, void 0, function () {
12910
12988
  var submissionResponse_1, e_1;
@@ -12944,7 +13022,7 @@ var CustomerVerificationCapture = function CustomerVerificationCapture(_a) {
12944
13022
  });
12945
13023
  });
12946
13024
  })();
12947
- }, [isReady, onCustomerMatched, onCustomerNotMatched, selfieImage, state.requestState, submit]);
13025
+ }, [isReady, onCustomerMatched, onCustomerNotMatched, selfieImage, state.requestState, submissionError, submit]);
12948
13026
  React.useEffect(function () {
12949
13027
  if (!submissionResponse) return;
12950
13028
  if (state.requestState === 'VERIFIED') {