idmission-web-sdk 0.0.69 → 0.0.71

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.
@@ -0,0 +1,5 @@
1
+ import { ReactElement } from 'react';
2
+ export type ModelLoadingErrorOverlayProps = {
3
+ error: Error;
4
+ };
5
+ export declare const ModelLoadingErrorOverlay: ({ error, }: ModelLoadingErrorOverlayProps) => ReactElement;
@@ -0,0 +1,5 @@
1
+ import { SubmissionResponseStatus } from '../../contexts/SubmissionContext';
2
+ export declare class SubmissionError extends Error {
3
+ status: SubmissionResponseStatus;
4
+ constructor(status: SubmissionResponseStatus);
5
+ }
@@ -0,0 +1,6 @@
1
+ import { ReactElement } from 'react';
2
+ import { SubmissionError } from './SubmissionError';
3
+ export type SubmissionErrorOverlayProps = {
4
+ submissionError: SubmissionError;
5
+ };
6
+ export declare const SubmissionErrorOverlay: ({ submissionError, }: SubmissionErrorOverlayProps) => ReactElement;
@@ -106,12 +106,13 @@ export type SubmissionMetadata = {
106
106
  Resolution?: string;
107
107
  GeoLocation?: string;
108
108
  };
109
+ export type SubmissionResponseStatus = {
110
+ statusCode: string;
111
+ statusMessage?: string;
112
+ errorData?: string;
113
+ };
109
114
  export type SubmissionResponse = {
110
- status: {
111
- statusCode: string;
112
- statusMessage?: string;
113
- errorData?: string;
114
- };
115
+ status: SubmissionResponseStatus;
115
116
  resultData: Record<string, unknown>;
116
117
  };
117
118
  export type LivenessCheckRequest = {
@@ -352,6 +352,41 @@ function getPlatform() {
352
352
  return window.platform;
353
353
  }
354
354
 
355
+ var SubmissionErrorOverlay = function SubmissionErrorOverlay(_a) {
356
+ var submissionError = _a.submissionError;
357
+ return /*#__PURE__*/React__default['default'].createElement(OverlayContainer, null, /*#__PURE__*/React__default['default'].createElement(OverlayInner, {
358
+ style: {
359
+ justifyContent: 'center'
360
+ }
361
+ }, /*#__PURE__*/React__default['default'].createElement("h3", {
362
+ style: {
363
+ marginBottom: 8
364
+ }
365
+ }, "We're sorry, an unexpected error has occurred."), submissionError.status.statusCode && /*#__PURE__*/React__default['default'].createElement("p", {
366
+ style: {
367
+ marginBottom: 0
368
+ }
369
+ }, /*#__PURE__*/React__default['default'].createElement("code", null, "Status: ", submissionError.status.statusCode)), /*#__PURE__*/React__default['default'].createElement("p", {
370
+ style: {
371
+ marginBottom: 0
372
+ }
373
+ }, /*#__PURE__*/React__default['default'].createElement("code", null, submissionError.message)), submissionError.status.errorData && /*#__PURE__*/React__default['default'].createElement("p", {
374
+ style: {
375
+ marginBottom: 0
376
+ }
377
+ }, /*#__PURE__*/React__default['default'].createElement("code", null, submissionError.status.errorData))));
378
+ };
379
+
380
+ var SubmissionError = function (_super) {
381
+ tslib.__extends(SubmissionError, _super);
382
+ function SubmissionError(status) {
383
+ var _this = _super.call(this, status.statusMessage) || this;
384
+ _this.status = status;
385
+ return _this;
386
+ }
387
+ return SubmissionError;
388
+ }(Error);
389
+
355
390
  var SubmissionProvider = function SubmissionProvider(_a) {
356
391
  var action = _a.action,
357
392
  children = _a.children,
@@ -393,44 +428,47 @@ var SubmissionProvider = function SubmissionProvider(_a) {
393
428
  submissionResponse = _o[0],
394
429
  setSubmissionResponse = _o[1];
395
430
  var _p = React.useState(null),
396
- idFrontImage = _p[0],
397
- setIdFrontImage = _p[1];
431
+ submissionError = _p[0],
432
+ setSubmissionError = _p[1];
398
433
  var _q = React.useState(null),
399
- idBackImage = _q[0],
400
- setIdBackImage = _q[1];
434
+ idFrontImage = _q[0],
435
+ setIdFrontImage = _q[1];
401
436
  var _r = React.useState(null),
402
- passportImage = _r[0],
403
- setPassportImage = _r[1];
437
+ idBackImage = _r[0],
438
+ setIdBackImage = _r[1];
404
439
  var _s = React.useState(null),
405
- selfieImage = _s[0],
406
- setSelfieImage = _s[1];
440
+ passportImage = _s[0],
441
+ setPassportImage = _s[1];
407
442
  var _t = React.useState(null),
408
- signatureData = _t[0],
409
- setSignatureData = _t[1];
443
+ selfieImage = _t[0],
444
+ setSelfieImage = _t[1];
410
445
  var _u = React.useState(null),
411
- signatureVideo = _u[0],
412
- setSignatureVideo = _u[1];
446
+ signatureData = _u[0],
447
+ setSignatureData = _u[1];
413
448
  var _v = React.useState(null),
414
- additionalDocuments = _v[0],
415
- setAdditionalDocuments = _v[1];
449
+ signatureVideo = _v[0],
450
+ setSignatureVideo = _v[1];
416
451
  var _w = React.useState(null),
417
- geolocationResult = _w[0],
418
- setGeolocationResult = _w[1];
419
- var _x = React.useState(0),
420
- geolocationAttempts = _x[0],
421
- setGeolocationAttempts = _x[1];
422
- var _y = React.useState(false),
423
- geolocationBlocked = _y[0],
424
- setGeolocationBlocked = _y[1];
425
- var _z = React.useState([]),
426
- idFrontCaptureAttempts = _z[0],
427
- setIdFrontCaptureAttempts = _z[1];
452
+ additionalDocuments = _w[0],
453
+ setAdditionalDocuments = _w[1];
454
+ var _x = React.useState(null),
455
+ geolocationResult = _x[0],
456
+ setGeolocationResult = _x[1];
457
+ var _y = React.useState(0),
458
+ geolocationAttempts = _y[0],
459
+ setGeolocationAttempts = _y[1];
460
+ var _z = React.useState(false),
461
+ geolocationBlocked = _z[0],
462
+ setGeolocationBlocked = _z[1];
428
463
  var _0 = React.useState([]),
429
- idBackCaptureAttempts = _0[0],
430
- setIdBackCaptureAttempts = _0[1];
464
+ idFrontCaptureAttempts = _0[0],
465
+ setIdFrontCaptureAttempts = _0[1];
431
466
  var _1 = React.useState([]),
432
- selfieCaptureAttempts = _1[0],
433
- setSelfieCaptureAttempts = _1[1];
467
+ idBackCaptureAttempts = _1[0],
468
+ setIdBackCaptureAttempts = _1[1];
469
+ var _2 = React.useState([]),
470
+ selfieCaptureAttempts = _2[0],
471
+ setSelfieCaptureAttempts = _2[1];
434
472
  var logIdFrontCaptureAttempt = React.useCallback(function (attempt) {
435
473
  setIdFrontCaptureAttempts(function (attempts) {
436
474
  return tslib.__spreadArray(tslib.__spreadArray([], attempts, true), [attempt], false);
@@ -448,10 +486,11 @@ var SubmissionProvider = function SubmissionProvider(_a) {
448
486
  }, []);
449
487
  var submit = React.useCallback(function () {
450
488
  return tslib.__awaiter(void 0, void 0, void 0, function () {
451
- var submissionResponse_1, submissionRequest_1, metadata, platform, onBeforeSubmitResult, host, endpoint, response, submissionResponse_2, e_1;
452
- var _a;
453
- return tslib.__generator(this, function (_b) {
454
- switch (_b.label) {
489
+ var submissionResponse_1, submissionRequest_1, metadata, platform, onBeforeSubmitResult, host, endpoint, response, _a, submissionResponse_2, e_1, err;
490
+ var _b;
491
+ var _c;
492
+ return tslib.__generator(this, function (_d) {
493
+ switch (_d.label) {
455
494
  case 0:
456
495
  if (action === SubmissionAction.NONE) {
457
496
  submissionResponse_1 = {
@@ -465,9 +504,9 @@ var SubmissionProvider = function SubmissionProvider(_a) {
465
504
  return [2, submissionResponse_1];
466
505
  }
467
506
  setSubmissionStatus(SubmissionStatus.SUBMITTING);
468
- _b.label = 1;
507
+ _d.label = 1;
469
508
  case 1:
470
- _b.trys.push([1, 6,, 7]);
509
+ _d.trys.push([1, 8,, 9]);
471
510
  submissionRequest_1 = {
472
511
  securityData: {
473
512
  userName: '',
@@ -530,7 +569,7 @@ var SubmissionProvider = function SubmissionProvider(_a) {
530
569
  submissionRequest_1.customerData.cardData = cardData;
531
570
  }
532
571
  if (enrollmentId) {
533
- (_a = submissionRequest_1.customerData).personalData || (_a.personalData = {});
572
+ (_c = submissionRequest_1.customerData).personalData || (_c.personalData = {});
534
573
  submissionRequest_1.customerData.personalData.uniqueNumber = enrollmentId;
535
574
  }
536
575
  if (webhooksClientTraceId) {
@@ -571,9 +610,9 @@ var SubmissionProvider = function SubmissionProvider(_a) {
571
610
  if (!onBeforeSubmit) return [3, 3];
572
611
  return [4, onBeforeSubmit(submissionRequest_1)];
573
612
  case 2:
574
- onBeforeSubmitResult = _b.sent();
613
+ onBeforeSubmitResult = _d.sent();
575
614
  if (onBeforeSubmitResult) submissionRequest_1 = onBeforeSubmitResult;
576
- _b.label = 3;
615
+ _d.label = 3;
577
616
  case 3:
578
617
  host = url || determineSubmissionHost(environment, token);
579
618
  endpoint = determineSubmissionEndpoint(action, !!(idFrontImage || idBackImage || passportImage), !!selfieImage, !!token);
@@ -583,50 +622,68 @@ var SubmissionProvider = function SubmissionProvider(_a) {
583
622
  body: JSON.stringify(submissionRequest_1)
584
623
  })];
585
624
  case 4:
586
- response = _b.sent();
587
- return [4, response.json()];
625
+ response = _d.sent();
626
+ if (!!response.ok) return [3, 6];
627
+ _a = SubmissionError.bind;
628
+ _b = {
629
+ statusCode: response.statusText
630
+ };
631
+ return [4, response.text()];
588
632
  case 5:
589
- submissionResponse_2 = _b.sent();
633
+ throw new (_a.apply(SubmissionError, [void 0, (_b.statusMessage = _d.sent(), _b)]))();
634
+ case 6:
635
+ return [4, response.json()];
636
+ case 7:
637
+ submissionResponse_2 = _d.sent();
638
+ if (submissionResponse_2.status.statusCode !== '000') {
639
+ throw new SubmissionError(submissionResponse_2.status);
640
+ }
590
641
  setSubmissionRequest(submissionRequest_1);
591
642
  setSubmissionResponse(submissionResponse_2);
592
643
  setSubmissionStatus(SubmissionStatus.SUBMITTED);
593
644
  onResponseReceived === null || onResponseReceived === void 0 ? void 0 : onResponseReceived(submissionResponse_2);
594
645
  return [2, submissionResponse_2];
595
- case 6:
596
- e_1 = _b.sent();
646
+ case 8:
647
+ e_1 = _d.sent();
648
+ err = e_1;
597
649
  setSubmissionStatus(SubmissionStatus.FAILED);
598
- onRequestFailure === null || onRequestFailure === void 0 ? void 0 : onRequestFailure(e_1);
650
+ setSubmissionError(e_1 instanceof SubmissionError ? e_1 : new SubmissionError({
651
+ statusCode: '',
652
+ statusMessage: err.message
653
+ }));
654
+ onRequestFailure === null || onRequestFailure === void 0 ? void 0 : onRequestFailure(err);
599
655
  return [2, null];
600
- case 7:
656
+ case 9:
601
657
  return [2];
602
658
  }
603
659
  });
604
660
  });
605
- }, [action, additionalDocuments, enrollmentId, environment, geolocationResult, idBackCaptureAttempts, idBackImage, idFrontCaptureAttempts, idFrontImage, onBeforeSubmit, onRequestFailure, onResponseReceived, passportImage, selfieCaptureAttempts, selfieImage, signatureData, token, url]);
661
+ }, [action, additionalDocuments, cardData, companyId, deduplicationEnabled, deduplicationSynchronous, enrollmentId, environment, geolocationResult, idBackCaptureAttempts, idBackImage, idFrontCaptureAttempts, idFrontImage, manualReviewRequired, onBeforeSubmit, onRequestFailure, onResponseReceived, passportImage, personalData, selfieCaptureAttempts, selfieImage, signatureData, token, url, verifyIdWithExternalDatabases, webhooksClientTraceId, webhooksEnabled, webhooksStripSpecialCharacters]);
606
662
  var checkLiveness = React.useCallback(function (imageDataUrl) {
607
663
  return tslib.__awaiter(void 0, void 0, void 0, function () {
608
- var request, host, endpoint, response, submissionResponse;
609
- var _a, _b, _c;
610
- return tslib.__generator(this, function (_d) {
611
- switch (_d.label) {
664
+ var request, host, endpoint, response, _a, submissionResponse_3, e_2, err;
665
+ var _b, _c, _d, _e;
666
+ return tslib.__generator(this, function (_f) {
667
+ switch (_f.label) {
612
668
  case 0:
613
- _a = {
669
+ _f.trys.push([0, 6,, 7]);
670
+ _b = {
614
671
  securityData: {
615
672
  userName: '',
616
673
  password: '',
617
674
  merchantId: 0
618
675
  }
619
676
  };
620
- _b = {};
621
677
  _c = {};
678
+ _d = {};
622
679
  return [4, dataUrlToBase64(imageDataUrl)];
623
680
  case 1:
624
- request = (_a.customerData = (_b.biometricData = (_c.selfie = _d.sent(), _c), _b), _a.additionalData = {
681
+ request = (_b.customerData = (_c.biometricData = (_d.selfie = _f.sent(), _d), _c), _b.additionalData = {
625
682
  uniqueRequestId: new Date().getTime().toString(),
626
683
  stripSpecialCharacters: 'Y',
627
684
  estimateAge: 'N',
628
685
  predictGender: 'N'
629
- }, _a);
686
+ }, _b);
630
687
  host = url || determineSubmissionHost(environment, token);
631
688
  endpoint = liveCheckEndpoint(!!token);
632
689
  return [4, fetch(host + endpoint, {
@@ -635,16 +692,40 @@ var SubmissionProvider = function SubmissionProvider(_a) {
635
692
  body: JSON.stringify(request)
636
693
  })];
637
694
  case 2:
638
- response = _d.sent();
639
- return [4, response.json()];
695
+ response = _f.sent();
696
+ if (!!response.ok) return [3, 4];
697
+ _a = SubmissionError.bind;
698
+ _e = {
699
+ statusCode: response.statusText
700
+ };
701
+ return [4, response.text()];
640
702
  case 3:
641
- submissionResponse = _d.sent();
642
- setSubmissionResponse(submissionResponse);
643
- return [2, submissionResponse];
703
+ throw new (_a.apply(SubmissionError, [void 0, (_e.statusMessage = _f.sent(), _e)]))();
704
+ case 4:
705
+ return [4, response.json()];
706
+ case 5:
707
+ submissionResponse_3 = _f.sent();
708
+ if (submissionResponse_3.status.statusCode !== '000') {
709
+ throw new SubmissionError(submissionResponse_3.status);
710
+ }
711
+ setSubmissionResponse(submissionResponse_3);
712
+ return [2, submissionResponse_3];
713
+ case 6:
714
+ e_2 = _f.sent();
715
+ err = e_2;
716
+ setSubmissionStatus(SubmissionStatus.FAILED);
717
+ setSubmissionError(e_2 instanceof SubmissionError ? e_2 : new SubmissionError({
718
+ statusCode: '',
719
+ statusMessage: err.message
720
+ }));
721
+ onRequestFailure === null || onRequestFailure === void 0 ? void 0 : onRequestFailure(err);
722
+ return [2, null];
723
+ case 7:
724
+ return [2];
644
725
  }
645
726
  });
646
727
  });
647
- }, [environment, token, url]);
728
+ }, [environment, onRequestFailure, token, url]);
648
729
  var retryLocationAccess = React.useCallback(function () {
649
730
  setGeolocationAttempts(function (n) {
650
731
  return n + 1;
@@ -692,7 +773,9 @@ var SubmissionProvider = function SubmissionProvider(_a) {
692
773
  };
693
774
  return /*#__PURE__*/React__default['default'].createElement(SubmissionContext.Provider, {
694
775
  value: value
695
- }, geolocationRequired && geolocationBlocked ? /*#__PURE__*/React__default['default'].createElement(GeolocationAccessDeniedOverlay, null) : children);
776
+ }, geolocationRequired && geolocationBlocked ? /*#__PURE__*/React__default['default'].createElement(GeolocationAccessDeniedOverlay, null) : submissionError ? /*#__PURE__*/React__default['default'].createElement(SubmissionErrorOverlay, {
777
+ submissionError: submissionError
778
+ }) : children);
696
779
  };
697
780
 
698
781
  var DocumentType;
@@ -7737,6 +7820,23 @@ function cropToBoundingBox(frame, bbox) {
7737
7820
  return canvas;
7738
7821
  }
7739
7822
 
7823
+ var ModelLoadingErrorOverlay = function ModelLoadingErrorOverlay(_a) {
7824
+ var error = _a.error;
7825
+ return /*#__PURE__*/React__default['default'].createElement(OverlayContainer, null, /*#__PURE__*/React__default['default'].createElement(OverlayInner, {
7826
+ style: {
7827
+ justifyContent: 'center'
7828
+ }
7829
+ }, /*#__PURE__*/React__default['default'].createElement("h3", {
7830
+ style: {
7831
+ marginBottom: 8
7832
+ }
7833
+ }, "We're sorry, an unexpected error has occurred."), /*#__PURE__*/React__default['default'].createElement("p", {
7834
+ style: {
7835
+ marginBottom: 0
7836
+ }
7837
+ }, /*#__PURE__*/React__default['default'].createElement("code", null, error.message))));
7838
+ };
7839
+
7740
7840
  var PREDICTION_POSITIONS = {
7741
7841
  boxes: 0,
7742
7842
  scores: 7,
@@ -7801,6 +7901,9 @@ var IdCaptureModelsProvider = function IdCaptureModelsProvider(_a) {
7801
7901
  var _k = React.useState(0),
7802
7902
  focusPredictionTime = _k[0],
7803
7903
  setFocusPredictionTime = _k[1];
7904
+ var _l = React.useState(null),
7905
+ loadingError = _l[0],
7906
+ setLoadingError = _l[1];
7804
7907
  React.useEffect(function () {
7805
7908
  setReady(false);
7806
7909
  var ddmUrl = documentDetectionModelUrl || defaultDocumentDetectionModelUrl;
@@ -7850,9 +7953,13 @@ var IdCaptureModelsProvider = function IdCaptureModelsProvider(_a) {
7850
7953
  });
7851
7954
  });
7852
7955
  }
7853
- loadModels().then(function () {
7854
- setReady(true);
7855
- });
7956
+ try {
7957
+ loadModels().then(function () {
7958
+ setReady(true);
7959
+ });
7960
+ } catch (e) {
7961
+ setLoadingError(e);
7962
+ }
7856
7963
  var webGLCanvas = getWebGLContext(2).canvas;
7857
7964
  webGLCanvas.addEventListener('webglcontextlost', reloadModels);
7858
7965
  return function () {
@@ -7946,7 +8053,9 @@ var IdCaptureModelsProvider = function IdCaptureModelsProvider(_a) {
7946
8053
  }, [detectionTime, focusPredictionTime, getBestFrame, makePrediction, onPredictionMade, ready, resetBestFrame, setThresholds, thresholds]);
7947
8054
  return /*#__PURE__*/React__default['default'].createElement(IdCaptureModelsContext.Provider, {
7948
8055
  value: value
7949
- }, children, /*#__PURE__*/React__default['default'].createElement(InvisibleCanvas, {
8056
+ }, loadingError ? /*#__PURE__*/React__default['default'].createElement(ModelLoadingErrorOverlay, {
8057
+ error: loadingError
8058
+ }) : children, /*#__PURE__*/React__default['default'].createElement(InvisibleCanvas, {
7950
8059
  ref: lastPredictionCanvas
7951
8060
  }), /*#__PURE__*/React__default['default'].createElement(InvisibleCanvas, {
7952
8061
  ref: bestPredictionCanvas
@@ -9766,18 +9875,30 @@ var HighPerformanceSelfieGuidanceModelsProvider = function HighPerformanceSelfie
9766
9875
  var detectorRef = React.useRef(null);
9767
9876
  var rafId = React.useRef(0);
9768
9877
  var loopId = React.useRef(0);
9878
+ var _f = React.useState(null),
9879
+ loadingError = _f[0],
9880
+ setLoadingError = _f[1];
9769
9881
  React.useEffect(function () {
9770
9882
  (function () {
9771
9883
  return tslib.__awaiter(void 0, void 0, void 0, function () {
9772
- var _a;
9884
+ var _a, e_1;
9773
9885
  return tslib.__generator(this, function (_b) {
9774
9886
  switch (_b.label) {
9775
9887
  case 0:
9776
9888
  setReady(false);
9889
+ _b.label = 1;
9890
+ case 1:
9891
+ _b.trys.push([1, 3,, 4]);
9777
9892
  _a = detectorRef;
9778
9893
  return [4, loadHighPerformanceFaceDetector()];
9779
- case 1:
9894
+ case 2:
9780
9895
  _a.current = _b.sent();
9896
+ return [3, 4];
9897
+ case 3:
9898
+ e_1 = _b.sent();
9899
+ setLoadingError(e_1);
9900
+ return [3, 4];
9901
+ case 4:
9781
9902
  setReady(true);
9782
9903
  return [2];
9783
9904
  }
@@ -9913,7 +10034,9 @@ var HighPerformanceSelfieGuidanceModelsProvider = function HighPerformanceSelfie
9913
10034
  }, [onPredictionMade, ready, start, stop]);
9914
10035
  return /*#__PURE__*/React__namespace.createElement(HighPerformanceSelfieGuidanceModelsContext.Provider, {
9915
10036
  value: value
9916
- }, children);
10037
+ }, loadingError ? /*#__PURE__*/React__namespace.createElement(ModelLoadingErrorOverlay, {
10038
+ error: loadingError
10039
+ }) : children);
9917
10040
  };
9918
10041
 
9919
10042
  var GuidanceMessageContainer = styled__default['default'].div(templateObject_1$4 || (templateObject_1$4 = tslib.__makeTemplateObject(["\n position: absolute;\n top: calc(", ");\n font-weight: bold;\n width: 100%;\n display: flex;\n"], ["\n position: absolute;\n top: calc(", ");\n font-weight: bold;\n width: 100%;\n display: flex;\n"])), function (_a) {