idmission-web-sdk 0.0.83 → 0.0.85

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.83';
53
+ var webSdkVersion = '0.0.85';
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,16 @@ 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 submit;
722
+ });
668
723
  onRequestFailure === null || onRequestFailure === void 0 ? void 0 : onRequestFailure(err);
669
724
  throw err;
670
725
  case 9:
@@ -710,6 +765,8 @@ var SubmissionProvider = function SubmissionProvider(_a) {
710
765
  method: 'POST',
711
766
  headers: apiHeaders(token),
712
767
  body: JSON.stringify(request)
768
+ })["catch"](function (e) {
769
+ throw new NetworkError(e.message);
713
770
  })];
714
771
  case 2:
715
772
  response = _f.sent();
@@ -734,10 +791,15 @@ var SubmissionProvider = function SubmissionProvider(_a) {
734
791
  e_2 = _f.sent();
735
792
  err = e_2;
736
793
  setSubmissionStatus(SubmissionStatus.FAILED);
737
- setSubmissionError(e_2 instanceof SubmissionError ? e_2 : new SubmissionError({
794
+ setSubmissionError(e_2 instanceof SubmissionError || e_2 instanceof NetworkError ? e_2 : new SubmissionError({
738
795
  statusCode: '',
739
796
  statusMessage: err.message
740
797
  }));
798
+ setRetrySubmission(function () {
799
+ return function () {
800
+ return null;
801
+ };
802
+ });
741
803
  onRequestFailure === null || onRequestFailure === void 0 ? void 0 : onRequestFailure(err);
742
804
  throw err;
743
805
  case 7:
@@ -765,11 +827,18 @@ var SubmissionProvider = function SubmissionProvider(_a) {
765
827
  }
766
828
  });
767
829
  }, [geolocationAttempts, geolocationEnabled, geolocationRequired]);
830
+ var onRetry = React.useCallback(function () {
831
+ if (!retrySubmission) return;
832
+ setSubmissionError(null);
833
+ setSubmissionStatus(SubmissionStatus.READY);
834
+ retrySubmission();
835
+ }, [retrySubmission]);
768
836
  var value = {
769
837
  submit: submit,
770
838
  submissionStatus: submissionStatus,
771
839
  submissionRequest: submissionRequest,
772
840
  submissionResponse: submissionResponse,
841
+ submissionError: submissionError,
773
842
  submissionEnvironment: environment,
774
843
  idFrontImage: idFrontImage,
775
844
  idBackImage: idBackImage,
@@ -793,9 +862,10 @@ var SubmissionProvider = function SubmissionProvider(_a) {
793
862
  };
794
863
  return /*#__PURE__*/React__default['default'].createElement(SubmissionContext.Provider, {
795
864
  value: value
796
- }, geolocationRequired && geolocationBlocked ? /*#__PURE__*/React__default['default'].createElement(GeolocationAccessDeniedOverlay, null) : submissionError ? /*#__PURE__*/React__default['default'].createElement(SubmissionErrorOverlay, {
797
- submissionError: submissionError
798
- }) : children);
865
+ }, geolocationRequired && geolocationBlocked ? /*#__PURE__*/React__default['default'].createElement(GeolocationAccessDeniedOverlay, null) : children, submissionError && /*#__PURE__*/React__default['default'].createElement(SubmissionErrorOverlay, {
866
+ error: submissionError,
867
+ onRetry: onRetry
868
+ }));
799
869
  };
800
870
 
801
871
  var DocumentType;
@@ -1484,12 +1554,10 @@ var useHighestResCaptureDevice = function useHighestResCaptureDevice(_a) {
1484
1554
  console.log('someone unplugged the continuity camera');
1485
1555
  releaseCameraAccess();
1486
1556
  cameraRef.current = null;
1487
- setTimeout(function () {
1488
- setIphoneContinuityCameraAvailable(false);
1489
- setIphoneContinuityCameraDenied(true);
1490
- setCaptureDevice(null);
1491
- setVideoDevice(null);
1492
- }, 1000);
1557
+ setIphoneContinuityCameraAvailable(false);
1558
+ setIphoneContinuityCameraDenied(true);
1559
+ setCaptureDevice(null);
1560
+ setVideoDevice(null);
1493
1561
  } else {
1494
1562
  console.log('someone unplugged the webcam');
1495
1563
  releaseCameraAccess();
@@ -9050,7 +9118,10 @@ var esTranslation = {
9050
9118
  'Please sign the box below': 'Por favor, hay que firmar en el recuadro de abajo',
9051
9119
  Accept: 'Aceptar',
9052
9120
  Clear: 'Borrar',
9053
- 'Video signature has been successfully captured!': 'La video firma ha sido exitosa.'
9121
+ 'Video signature has been successfully captured!': 'La video firma ha sido exitosa.',
9122
+ 'Network unreachable': 'No hay conexión a internet.',
9123
+ "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.",
9124
+ "We're sorry, an unexpected error has occurred.": "Lo sentimos, se ha producido un error inesperado."
9054
9125
  };
9055
9126
 
9056
9127
  var resources = {
@@ -11041,13 +11112,15 @@ var FaceLivenessCapture = function FaceLivenessCapture(_a) {
11041
11112
  _d = _a.verbiage,
11042
11113
  rawVerbiage = _d === void 0 ? {} : _d,
11043
11114
  debugMode = _a.debugMode;
11044
- var checkLiveness = React.useContext(SubmissionContext).checkLiveness;
11045
- var _e = React.useReducer(reducer$2, initialState$2),
11046
- state = _e[0],
11047
- dispatch = _e[1];
11048
- var _f = React.useState(null),
11049
- imageUrl = _f[0],
11050
- setImageUrl = _f[1];
11115
+ var _e = React.useContext(SubmissionContext),
11116
+ checkLiveness = _e.checkLiveness,
11117
+ submissionError = _e.submissionError;
11118
+ var _f = React.useReducer(reducer$2, initialState$2),
11119
+ state = _f[0],
11120
+ dispatch = _f[1];
11121
+ var _g = React.useState(null),
11122
+ imageUrl = _g[0],
11123
+ setImageUrl = _g[1];
11051
11124
  var onSelfieCaptured = React.useCallback(function (frame, face) {
11052
11125
  onCapture === null || onCapture === void 0 ? void 0 : onCapture();
11053
11126
  dispatch({
@@ -11063,7 +11136,7 @@ var FaceLivenessCapture = function FaceLivenessCapture(_a) {
11063
11136
  var isReady = state.requestState === 'CAPTURED';
11064
11137
  var isPassed = state.requestState === 'PASSED';
11065
11138
  React.useEffect(function () {
11066
- if (!frame || !face || !isReady) return;
11139
+ if (!frame || !face || !isReady || submissionError) return;
11067
11140
  dispatch({
11068
11141
  type: 'livenessChecking'
11069
11142
  });
@@ -11107,7 +11180,7 @@ var FaceLivenessCapture = function FaceLivenessCapture(_a) {
11107
11180
  });
11108
11181
  });
11109
11182
  })();
11110
- }, [checkLiveness, face, frame, isReady]);
11183
+ }, [checkLiveness, face, frame, isReady, submissionError]);
11111
11184
  React.useEffect(function () {
11112
11185
  if (isPassed && state.imageUrl) onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(state.imageUrl);
11113
11186
  }, [onSuccess, state.imageUrl, isPassed]);