idmission-web-sdk 1.0.58 → 1.0.60
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.
- package/README.md +2 -0
- package/dist/components/common/SelfieProgressPreview.d.ts +2 -1
- package/dist/components/customer_identification/CustomerIdentificationCapture.d.ts +4 -1
- package/dist/components/customer_verification/CustomerVerificationCapture.d.ts +4 -1
- package/dist/components/face_liveness/FaceLivenessCapture.d.ts +1 -0
- package/dist/components/submission/Errors.d.ts +5 -0
- package/dist/components/submission/SubmissionProvider.d.ts +1 -0
- package/dist/components/submission/TokenExpiredErrorOverlay.d.ts +2 -0
- package/dist/components/submission/TokenInvalidFormatErrorOverlay.d.ts +2 -0
- package/dist/components/submission/TokenInvalidSignatureErrorOverlay.d.ts +2 -0
- package/dist/components/submission/TokenMissingErrorOverlay.d.ts +2 -0
- package/dist/components/submission/TokenPublicKeyErrorOverlay.d.ts +5 -0
- package/dist/contexts/SubmissionContext.d.ts +1 -0
- package/dist/lib/locales/es/translation.d.ts +1 -0
- package/dist/lib/locales/index.d.ts +1 -0
- package/dist/sdk2.cjs.development.js +278 -28
- package/dist/sdk2.cjs.development.js.map +1 -1
- package/dist/sdk2.cjs.production.js +1 -1
- package/dist/sdk2.cjs.production.js.map +1 -1
- package/dist/sdk2.esm.js +278 -28
- package/dist/sdk2.esm.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +3 -1
- package/dist/index.js +0 -7
- package/dist/sdk2.umd.development.js +0 -19785
- package/dist/sdk2.umd.development.js.map +0 -1
- package/dist/sdk2.umd.production.js +0 -2
- package/dist/sdk2.umd.production.js.map +0 -1
package/README.md
CHANGED
|
@@ -293,6 +293,7 @@ Render a fullscreen capture component that analyzes frames from the user's front
|
|
|
293
293
|
<tr><td><code>guidanceRemoveEyeCoveringsText</code></td><td>Default: "Please remove your eye coverings (sunglasses, eye patch, etc.)..."</td></tr>
|
|
294
294
|
<tr><td><code>guidanceRemoveHeadCoveringsText</code></td><td>Default: "Please remove your head coverings (hat, scarf, etc.)..."</td></tr>
|
|
295
295
|
<tr><td><code>guidanceRemoveMaskText</code></td><td>Default: "Please remove your mask..."</td></tr>
|
|
296
|
+
<tr><td><code>progressPreviewText</code></td><td>Default: "Processing..."</td></tr>
|
|
296
297
|
<tr><td><code>success.headingText</code></td><td>Default: "Face liveness has been verified!"</td></tr>
|
|
297
298
|
<tr><td><code>success.retryBtnText</code></td><td>Default: "Retry"</td></tr>
|
|
298
299
|
<tr><td><code>success.doneBtnText</code></td><td>Default: "Done"</td></tr>
|
|
@@ -629,6 +630,7 @@ Render a fullscreen capture component that analyzes frames from the user's front
|
|
|
629
630
|
<tr><td><code>guidanceMoveBackText</code></td><td>Default: "Move back..."</td></tr>
|
|
630
631
|
<tr><td><code>guidanceMoveForwardText</code></td><td>Default: "Move forward..."</td></tr>
|
|
631
632
|
<tr><td><code>guidanceMoveToCenterText</code></td><td>Default: "Move to the center..."</td></tr>
|
|
633
|
+
<tr><td><code>progressPreviewText</code></td><td>Default: "Processing..."</td></tr>
|
|
632
634
|
<tr><td><code>success.headingText</code></td><td>Default: "Customer has been identified!"</td></tr>
|
|
633
635
|
<tr><td><code>success.retryBtnText</code></td><td>Default: "Retry"</td></tr>
|
|
634
636
|
<tr><td><code>success.doneBtnText</code></td><td>Default: "Done"</td></tr>
|
|
@@ -3,6 +3,7 @@ export declare const IdCaptureImagePreview: ({ text, imageUrl, }: {
|
|
|
3
3
|
text?: string | undefined;
|
|
4
4
|
imageUrl: string;
|
|
5
5
|
}) => React.JSX.Element;
|
|
6
|
-
export declare const SelfieProgressPreview: ({ imageUrl }: {
|
|
6
|
+
export declare const SelfieProgressPreview: ({ text, imageUrl, }: {
|
|
7
|
+
text: string;
|
|
7
8
|
imageUrl: string;
|
|
8
9
|
}) => React.JSX.Element;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { ReactElement } from 'react';
|
|
2
2
|
import { SelfieCaptureColors, SelfieCaptureVerbiage } from '../selfie_capture/SelfieCapture';
|
|
3
3
|
import { SubmissionRequest, SubmissionResponse } from '../../contexts/SubmissionContext';
|
|
4
|
+
import { CustomerSuppliedVerbiage } from '../../lib/locales';
|
|
4
5
|
export type CustomerIdentificationCaptureColors = SelfieCaptureColors;
|
|
5
|
-
export type CustomerIdentificationCaptureVerbiage = SelfieCaptureVerbiage
|
|
6
|
+
export type CustomerIdentificationCaptureVerbiage = SelfieCaptureVerbiage & {
|
|
7
|
+
progressPreviewText?: CustomerSuppliedVerbiage;
|
|
8
|
+
};
|
|
6
9
|
export type CustomerIdentificationCaptureProps = {
|
|
7
10
|
onCustomerMatched?: (resp: SubmissionResponse, req: SubmissionRequest) => void;
|
|
8
11
|
onCustomerNotMatched?: (resp: SubmissionResponse, req: SubmissionRequest) => void;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { ReactElement } from 'react';
|
|
2
2
|
import { SubmissionRequest, SubmissionResponse } from '../../contexts/SubmissionContext';
|
|
3
3
|
import { SelfieCaptureColors, SelfieCaptureVerbiage } from '../selfie_capture/SelfieCapture';
|
|
4
|
+
import { CustomerSuppliedVerbiage } from '../../lib/locales';
|
|
4
5
|
export type CustomerVerificationCaptureColors = SelfieCaptureColors;
|
|
5
|
-
export type CustomerVerificationCaptureVerbiage = SelfieCaptureVerbiage
|
|
6
|
+
export type CustomerVerificationCaptureVerbiage = SelfieCaptureVerbiage & {
|
|
7
|
+
progressPreviewText?: CustomerSuppliedVerbiage;
|
|
8
|
+
};
|
|
6
9
|
export type CustomerVerificationCaptureProps = {
|
|
7
10
|
onCustomerMatched?: (resp: SubmissionResponse, req: SubmissionRequest) => void;
|
|
8
11
|
onCustomerNotMatched?: (resp: SubmissionResponse, req: SubmissionRequest) => void;
|
|
@@ -6,6 +6,7 @@ export type FaceLivenessCaptureVerbiage = SelfieCaptureVerbiage & {
|
|
|
6
6
|
guidanceRemoveEyeCoveringsText?: CustomerSuppliedVerbiage;
|
|
7
7
|
guidanceRemoveHeadCoveringsText?: CustomerSuppliedVerbiage;
|
|
8
8
|
guidanceRemoveMaskText?: CustomerSuppliedVerbiage;
|
|
9
|
+
progressPreviewText?: CustomerSuppliedVerbiage;
|
|
9
10
|
};
|
|
10
11
|
export type FaceLivenessCaptureProps = {
|
|
11
12
|
onCapture?: () => void;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ReactElement } from 'react';
|
|
2
2
|
import { CardData, LivenessCheckRequest, PersonalData, SubmissionAction, SubmissionEnvironment, SubmissionRequest, SubmissionResponse } from '../../contexts/SubmissionContext';
|
|
3
|
+
export type TokenState = 'NOT_PARSED' | 'PARSING' | 'GOOD' | 'EXPIRED' | 'INVALID_FORMAT' | 'INVALID_SIGNATURE' | 'MISSING' | 'PUBLIC_KEY_LOAD_FAILED';
|
|
3
4
|
export type SubmissionProviderProps = {
|
|
4
5
|
action: SubmissionAction;
|
|
5
6
|
children: ReactElement;
|
|
@@ -181,6 +181,7 @@ export type SubmissionState = {
|
|
|
181
181
|
retryLocationAccess: () => void;
|
|
182
182
|
};
|
|
183
183
|
export declare const SubmissionContext: import("react").Context<SubmissionState>;
|
|
184
|
+
export declare function parseJwt(token: string): Record<string, unknown>;
|
|
184
185
|
export declare function determineSubmissionHost(environment: SubmissionEnvironment, token?: string): string;
|
|
185
186
|
export declare function determineSubmissionEndpoint(action: SubmissionAction, hasId: boolean, hasSelfie: boolean, hasToken: boolean): string;
|
|
186
187
|
export declare function liveCheckEndpoint(hasToken: boolean): string;
|
|
@@ -6,6 +6,7 @@ declare const _default: {
|
|
|
6
6
|
'Camera access blocked': string;
|
|
7
7
|
'Location access blocked': string;
|
|
8
8
|
Continue: string;
|
|
9
|
+
'Processing...': string;
|
|
9
10
|
'Your camera permission is disabled': string;
|
|
10
11
|
'This application requires access to your camera to continue. Please accept the permission once prompted by the browser. If the browser does not prompt for camera permissions, you must go to settings and provide camera access to the current browser.': string;
|
|
11
12
|
'Your location permission is disabled': string;
|
|
@@ -14,6 +14,7 @@ export declare const resources: {
|
|
|
14
14
|
'Camera access blocked': string;
|
|
15
15
|
'Location access blocked': string;
|
|
16
16
|
Continue: string;
|
|
17
|
+
'Processing...': string;
|
|
17
18
|
'Your camera permission is disabled': string;
|
|
18
19
|
'This application requires access to your camera to continue. Please accept the permission once prompted by the browser. If the browser does not prompt for camera permissions, you must go to settings and provide camera access to the current browser.': string;
|
|
19
20
|
'Your location permission is disabled': string;
|
|
@@ -7,6 +7,7 @@ var React = require('react');
|
|
|
7
7
|
var ReactDOM = require('react-dom/client');
|
|
8
8
|
var styled = require('styled-components');
|
|
9
9
|
var reactI18next = require('react-i18next');
|
|
10
|
+
var jsrsasign = require('jsrsasign');
|
|
10
11
|
var tf = require('@tensorflow/tfjs');
|
|
11
12
|
var useResizeObserver = require('use-resize-observer');
|
|
12
13
|
var LanguageDetector = require('i18next-browser-languagedetector');
|
|
@@ -46,7 +47,7 @@ var LanguageDetector__default = /*#__PURE__*/_interopDefaultLegacy(LanguageDetec
|
|
|
46
47
|
var i18n__default = /*#__PURE__*/_interopDefaultLegacy(i18n);
|
|
47
48
|
var SignatureCanvas__default = /*#__PURE__*/_interopDefaultLegacy(SignatureCanvas);
|
|
48
49
|
|
|
49
|
-
var webSdkVersion = '1.0.
|
|
50
|
+
var webSdkVersion = '1.0.60';
|
|
50
51
|
|
|
51
52
|
function getPlatform() {
|
|
52
53
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -418,6 +419,16 @@ var NetworkError = /** @class */function (_super) {
|
|
|
418
419
|
}
|
|
419
420
|
return NetworkError;
|
|
420
421
|
}(Error);
|
|
422
|
+
var TokenPublicKeyError = /** @class */function (_super) {
|
|
423
|
+
tslib.__extends(TokenPublicKeyError, _super);
|
|
424
|
+
function TokenPublicKeyError(err, host) {
|
|
425
|
+
var _this = _super.call(this, err.message) || this;
|
|
426
|
+
_this.err = err;
|
|
427
|
+
_this.host = host;
|
|
428
|
+
return _this;
|
|
429
|
+
}
|
|
430
|
+
return TokenPublicKeyError;
|
|
431
|
+
}(Error);
|
|
421
432
|
|
|
422
433
|
var SubmissionErrorOverlay = function SubmissionErrorOverlay(_a) {
|
|
423
434
|
var error = _a.error,
|
|
@@ -482,6 +493,161 @@ var NetworkErrorContent = function NetworkErrorContent(_a) {
|
|
|
482
493
|
}, retryText))));
|
|
483
494
|
};
|
|
484
495
|
|
|
496
|
+
var TokenMissingErrorOverlay = function TokenMissingErrorOverlay() {
|
|
497
|
+
return /*#__PURE__*/React__default['default'].createElement(OverlayContainer, null, /*#__PURE__*/React__default['default'].createElement(OverlayInner, {
|
|
498
|
+
style: {
|
|
499
|
+
justifyContent: 'center'
|
|
500
|
+
}
|
|
501
|
+
}, /*#__PURE__*/React__default['default'].createElement("h3", {
|
|
502
|
+
style: {
|
|
503
|
+
marginBottom: 8
|
|
504
|
+
}
|
|
505
|
+
}, "IDmission WebSDK failed to load"), /*#__PURE__*/React__default['default'].createElement("p", {
|
|
506
|
+
style: {
|
|
507
|
+
marginBottom: 0
|
|
508
|
+
}
|
|
509
|
+
}, "Required property ", /*#__PURE__*/React__default['default'].createElement("code", null, "submissionToken"), " is missing."), /*#__PURE__*/React__default['default'].createElement("p", {
|
|
510
|
+
style: {
|
|
511
|
+
lineHeight: '1.5rem'
|
|
512
|
+
}
|
|
513
|
+
}, "Please refer to the", ' ', /*#__PURE__*/React__default['default'].createElement("a", {
|
|
514
|
+
href: "https://www.npmjs.com/package/idmission-web-sdk#getting-started",
|
|
515
|
+
target: "_blank",
|
|
516
|
+
rel: "noreferrer"
|
|
517
|
+
}, "Getting Started"), ' ', "section of the documentation for information on how to use your credentials to generate a valid", ' ', /*#__PURE__*/React__default['default'].createElement("a", {
|
|
518
|
+
href: "https://jwt.io",
|
|
519
|
+
target: "_blank",
|
|
520
|
+
rel: "noreferrer"
|
|
521
|
+
}, "JSON Web Token"), ' ', "for your IDmission account. Every usage of the IDmission WebSDK must be authorized with a valid JWT from IDmission's servers.")));
|
|
522
|
+
};
|
|
523
|
+
|
|
524
|
+
var TokenInvalidFormatErrorOverlay = function TokenInvalidFormatErrorOverlay() {
|
|
525
|
+
return /*#__PURE__*/React__default['default'].createElement(OverlayContainer, null, /*#__PURE__*/React__default['default'].createElement(OverlayInner, {
|
|
526
|
+
style: {
|
|
527
|
+
justifyContent: 'center'
|
|
528
|
+
}
|
|
529
|
+
}, /*#__PURE__*/React__default['default'].createElement("h3", {
|
|
530
|
+
style: {
|
|
531
|
+
marginBottom: 8
|
|
532
|
+
}
|
|
533
|
+
}, "IDmission WebSDK failed to load"), /*#__PURE__*/React__default['default'].createElement("p", {
|
|
534
|
+
style: {
|
|
535
|
+
marginBottom: 0
|
|
536
|
+
}
|
|
537
|
+
}, "Required property ", /*#__PURE__*/React__default['default'].createElement("code", null, "submissionToken"), " is invalid."), /*#__PURE__*/React__default['default'].createElement("p", null, "JSON Web Tokens consist of three parts separated by dots (", /*#__PURE__*/React__default['default'].createElement("code", null, "."), "), which are:"), /*#__PURE__*/React__default['default'].createElement("div", {
|
|
538
|
+
style: {
|
|
539
|
+
display: 'flex'
|
|
540
|
+
}
|
|
541
|
+
}, /*#__PURE__*/React__default['default'].createElement("ul", {
|
|
542
|
+
style: {
|
|
543
|
+
display: 'inline',
|
|
544
|
+
margin: '0 auto'
|
|
545
|
+
}
|
|
546
|
+
}, /*#__PURE__*/React__default['default'].createElement("li", null, "Header"), /*#__PURE__*/React__default['default'].createElement("li", null, "Payload"), /*#__PURE__*/React__default['default'].createElement("li", null, "Signature"))), /*#__PURE__*/React__default['default'].createElement("p", null, "Therefore, a JWT typically looks like the following:", ' ', /*#__PURE__*/React__default['default'].createElement("code", null, "xxxxx.yyyyy.zzzzz")), /*#__PURE__*/React__default['default'].createElement("p", {
|
|
547
|
+
style: {
|
|
548
|
+
lineHeight: '1.5rem'
|
|
549
|
+
}
|
|
550
|
+
}, "Please refer to the", ' ', /*#__PURE__*/React__default['default'].createElement("a", {
|
|
551
|
+
href: "https://www.npmjs.com/package/idmission-web-sdk#getting-started",
|
|
552
|
+
target: "_blank",
|
|
553
|
+
rel: "noreferrer"
|
|
554
|
+
}, "Getting Started"), ' ', "section of the documentation for information on how to use your credentials to generate a valid", ' ', /*#__PURE__*/React__default['default'].createElement("a", {
|
|
555
|
+
href: "https://jwt.io",
|
|
556
|
+
target: "_blank",
|
|
557
|
+
rel: "noreferrer"
|
|
558
|
+
}, "JSON Web Token"), ' ', "for your IDmission account. Every usage of the IDmission WebSDK must be authorized with a valid JWT from IDmission's servers.")));
|
|
559
|
+
};
|
|
560
|
+
|
|
561
|
+
var TokenInvalidSignatureErrorOverlay = function TokenInvalidSignatureErrorOverlay() {
|
|
562
|
+
return /*#__PURE__*/React__default['default'].createElement(OverlayContainer, null, /*#__PURE__*/React__default['default'].createElement(OverlayInner, {
|
|
563
|
+
style: {
|
|
564
|
+
justifyContent: 'center'
|
|
565
|
+
}
|
|
566
|
+
}, /*#__PURE__*/React__default['default'].createElement("h3", {
|
|
567
|
+
style: {
|
|
568
|
+
marginBottom: 8
|
|
569
|
+
}
|
|
570
|
+
}, "IDmission WebSDK failed to load"), /*#__PURE__*/React__default['default'].createElement("p", {
|
|
571
|
+
style: {
|
|
572
|
+
marginBottom: 0
|
|
573
|
+
}
|
|
574
|
+
}, "Required property ", /*#__PURE__*/React__default['default'].createElement("code", null, "submissionToken"), " could not be validated."), /*#__PURE__*/React__default['default'].createElement("p", {
|
|
575
|
+
style: {
|
|
576
|
+
marginBottom: 0,
|
|
577
|
+
lineHeight: '1.5rem'
|
|
578
|
+
}
|
|
579
|
+
}, "The signature of your token could not be validated. Check your token generation routine, it's possible that some malicious behavior is at play. This can also happen if you attempt to manually modify your token before passing it to the IDmission WebSDK."), /*#__PURE__*/React__default['default'].createElement("p", {
|
|
580
|
+
style: {
|
|
581
|
+
marginBottom: 0,
|
|
582
|
+
lineHeight: '1.5rem'
|
|
583
|
+
}
|
|
584
|
+
}, "If you believe you have reached this page in error, please contact us at ", /*#__PURE__*/React__default['default'].createElement("a", {
|
|
585
|
+
href: "mailto:support@idmission.com"
|
|
586
|
+
}, "support@idmission.com"), ".")));
|
|
587
|
+
};
|
|
588
|
+
|
|
589
|
+
var TokenExpiredErrorOverlay = function TokenExpiredErrorOverlay() {
|
|
590
|
+
return /*#__PURE__*/React__default['default'].createElement(OverlayContainer, null, /*#__PURE__*/React__default['default'].createElement(OverlayInner, {
|
|
591
|
+
style: {
|
|
592
|
+
justifyContent: 'center'
|
|
593
|
+
}
|
|
594
|
+
}, /*#__PURE__*/React__default['default'].createElement("h3", {
|
|
595
|
+
style: {
|
|
596
|
+
marginBottom: 8
|
|
597
|
+
}
|
|
598
|
+
}, "IDmission WebSDK failed to load"), /*#__PURE__*/React__default['default'].createElement("p", {
|
|
599
|
+
style: {
|
|
600
|
+
marginBottom: 0
|
|
601
|
+
}
|
|
602
|
+
}, "Required property ", /*#__PURE__*/React__default['default'].createElement("code", null, "submissionToken"), " is expired."), /*#__PURE__*/React__default['default'].createElement("p", {
|
|
603
|
+
style: {
|
|
604
|
+
marginBottom: 0,
|
|
605
|
+
lineHeight: '1.5rem'
|
|
606
|
+
}
|
|
607
|
+
}, "Ensure you are generating a fresh token for each request to the IDmission WebSDK."), /*#__PURE__*/React__default['default'].createElement("p", {
|
|
608
|
+
style: {
|
|
609
|
+
lineHeight: '1.5rem'
|
|
610
|
+
}
|
|
611
|
+
}, "Please refer to the", ' ', /*#__PURE__*/React__default['default'].createElement("a", {
|
|
612
|
+
href: "https://www.npmjs.com/package/idmission-web-sdk#getting-started",
|
|
613
|
+
target: "_blank",
|
|
614
|
+
rel: "noreferrer"
|
|
615
|
+
}, "Getting Started"), ' ', "section of the documentation for information on how to use your credentials to generate a valid", ' ', /*#__PURE__*/React__default['default'].createElement("a", {
|
|
616
|
+
href: "https://jwt.io",
|
|
617
|
+
target: "_blank",
|
|
618
|
+
rel: "noreferrer"
|
|
619
|
+
}, "JSON Web Token"), ' ', "for your IDmission account. Every usage of the IDmission WebSDK must be authorized with a valid JWT from IDmission's servers.")));
|
|
620
|
+
};
|
|
621
|
+
|
|
622
|
+
var TokenPublicKeyErrorOverlay = function TokenPublicKeyErrorOverlay(_a) {
|
|
623
|
+
var error = _a.error;
|
|
624
|
+
return /*#__PURE__*/React__default['default'].createElement(OverlayContainer, null, /*#__PURE__*/React__default['default'].createElement(OverlayInner, {
|
|
625
|
+
style: {
|
|
626
|
+
justifyContent: 'center'
|
|
627
|
+
}
|
|
628
|
+
}, /*#__PURE__*/React__default['default'].createElement("h3", {
|
|
629
|
+
style: {
|
|
630
|
+
marginBottom: 8
|
|
631
|
+
}
|
|
632
|
+
}, "IDmission WebSDK failed to load"), /*#__PURE__*/React__default['default'].createElement("p", {
|
|
633
|
+
style: {
|
|
634
|
+
marginBottom: 0
|
|
635
|
+
}
|
|
636
|
+
}, (error === null || error === void 0 ? void 0 : error.host) ? ( /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, "Failed to reach ", /*#__PURE__*/React__default['default'].createElement("code", null, error.host), ".")) : ( /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, "Failed to obtain public key for ", /*#__PURE__*/React__default['default'].createElement("code", null, "submissionToken"), "."))), (error === null || error === void 0 ? void 0 : error.message) && ( /*#__PURE__*/React__default['default'].createElement("p", {
|
|
637
|
+
style: {
|
|
638
|
+
marginBottom: 0,
|
|
639
|
+
lineHeight: '1.5rem'
|
|
640
|
+
}
|
|
641
|
+
}, /*#__PURE__*/React__default['default'].createElement("code", null, error.message))), /*#__PURE__*/React__default['default'].createElement("p", {
|
|
642
|
+
style: {
|
|
643
|
+
marginBottom: 0,
|
|
644
|
+
lineHeight: '1.5rem'
|
|
645
|
+
}
|
|
646
|
+
}, "Please ensure that IDmission's servers can be reached. If you believe you have reached this page in error, please contact us at", ' ', /*#__PURE__*/React__default['default'].createElement("a", {
|
|
647
|
+
href: "mailto:support@idmission.com"
|
|
648
|
+
}, "support@idmission.com"), ".")));
|
|
649
|
+
};
|
|
650
|
+
|
|
485
651
|
var SubmissionProvider = function SubmissionProvider(_a) {
|
|
486
652
|
var action = _a.action,
|
|
487
653
|
children = _a.children,
|
|
@@ -933,6 +1099,64 @@ var SubmissionProvider = function SubmissionProvider(_a) {
|
|
|
933
1099
|
setSubmissionStatus(SubmissionStatus.READY);
|
|
934
1100
|
retrySubmission();
|
|
935
1101
|
}, [retrySubmission]);
|
|
1102
|
+
var _13 = React.useState('NOT_PARSED'),
|
|
1103
|
+
tokenState = _13[0],
|
|
1104
|
+
setTokenState = _13[1];
|
|
1105
|
+
var _14 = React.useState(null),
|
|
1106
|
+
tokenError = _14[0],
|
|
1107
|
+
setTokenError = _14[1];
|
|
1108
|
+
React.useEffect(function () {
|
|
1109
|
+
(function () {
|
|
1110
|
+
return tslib.__awaiter(void 0, void 0, void 0, function () {
|
|
1111
|
+
var parsed, iss, publicKey, resp, e_3, valid, exp;
|
|
1112
|
+
return tslib.__generator(this, function (_a) {
|
|
1113
|
+
switch (_a.label) {
|
|
1114
|
+
case 0:
|
|
1115
|
+
setTokenState('PARSING');
|
|
1116
|
+
if (!token) return [2 /*return*/, setTokenState('MISSING')];
|
|
1117
|
+
try {
|
|
1118
|
+
parsed = parseJwt(token);
|
|
1119
|
+
} catch (e) {
|
|
1120
|
+
console.error('error parsing token', e);
|
|
1121
|
+
return [2 /*return*/, setTokenState('INVALID_FORMAT')];
|
|
1122
|
+
}
|
|
1123
|
+
iss = parsed.iss;
|
|
1124
|
+
_a.label = 1;
|
|
1125
|
+
case 1:
|
|
1126
|
+
_a.trys.push([1, 3,, 4]);
|
|
1127
|
+
return [4 /*yield*/, fetch(iss).then(function (r) {
|
|
1128
|
+
return r.json();
|
|
1129
|
+
})];
|
|
1130
|
+
case 2:
|
|
1131
|
+
resp = _a.sent();
|
|
1132
|
+
publicKey = jsrsasign.KEYUTIL.getKey("-----BEGIN PUBLIC KEY-----\n".concat(resp.public_key, "\n-----END PUBLIC KEY-----"));
|
|
1133
|
+
return [3 /*break*/, 4];
|
|
1134
|
+
case 3:
|
|
1135
|
+
e_3 = _a.sent();
|
|
1136
|
+
console.error('error fetching public key', e_3);
|
|
1137
|
+
setTokenError(new TokenPublicKeyError(e_3, iss));
|
|
1138
|
+
return [2 /*return*/, setTokenState('PUBLIC_KEY_LOAD_FAILED')];
|
|
1139
|
+
case 4:
|
|
1140
|
+
valid = false;
|
|
1141
|
+
try {
|
|
1142
|
+
valid = jsrsasign.KJUR.jws.JWS.verifyJWT(token, publicKey, {
|
|
1143
|
+
alg: ['RS256']
|
|
1144
|
+
});
|
|
1145
|
+
} catch (e) {
|
|
1146
|
+
console.error('error validating token', e);
|
|
1147
|
+
}
|
|
1148
|
+
if (!valid) return [2 /*return*/, setTokenState('INVALID_SIGNATURE')];
|
|
1149
|
+
exp = parsed.exp;
|
|
1150
|
+
if (Date.now() >= exp * 1000) {
|
|
1151
|
+
return [2 /*return*/, setTokenState('EXPIRED')];
|
|
1152
|
+
}
|
|
1153
|
+
setTokenState('GOOD');
|
|
1154
|
+
return [2 /*return*/];
|
|
1155
|
+
}
|
|
1156
|
+
});
|
|
1157
|
+
});
|
|
1158
|
+
})();
|
|
1159
|
+
}, [token]);
|
|
936
1160
|
var value = {
|
|
937
1161
|
submit: submit,
|
|
938
1162
|
submissionStatus: submissionStatus,
|
|
@@ -963,6 +1187,23 @@ var SubmissionProvider = function SubmissionProvider(_a) {
|
|
|
963
1187
|
checkLiveness: checkLiveness,
|
|
964
1188
|
retryLocationAccess: retryLocationAccess
|
|
965
1189
|
};
|
|
1190
|
+
if (tokenState === 'MISSING') {
|
|
1191
|
+
return /*#__PURE__*/React__default['default'].createElement(TokenMissingErrorOverlay, null);
|
|
1192
|
+
}
|
|
1193
|
+
if (tokenState === 'INVALID_FORMAT') {
|
|
1194
|
+
return /*#__PURE__*/React__default['default'].createElement(TokenInvalidFormatErrorOverlay, null);
|
|
1195
|
+
}
|
|
1196
|
+
if (tokenState === 'INVALID_SIGNATURE') {
|
|
1197
|
+
return /*#__PURE__*/React__default['default'].createElement(TokenInvalidSignatureErrorOverlay, null);
|
|
1198
|
+
}
|
|
1199
|
+
if (tokenState === 'EXPIRED') {
|
|
1200
|
+
return /*#__PURE__*/React__default['default'].createElement(TokenExpiredErrorOverlay, null);
|
|
1201
|
+
}
|
|
1202
|
+
if (tokenState === 'PUBLIC_KEY_LOAD_FAILED') {
|
|
1203
|
+
return /*#__PURE__*/React__default['default'].createElement(TokenPublicKeyErrorOverlay, {
|
|
1204
|
+
error: tokenError
|
|
1205
|
+
});
|
|
1206
|
+
}
|
|
966
1207
|
return /*#__PURE__*/React__default['default'].createElement(SubmissionContext.Provider, {
|
|
967
1208
|
value: value
|
|
968
1209
|
}, geolocationRequired && geolocationBlocked ? ( /*#__PURE__*/React__default['default'].createElement(GeolocationAccessDeniedOverlay, null)) : children, submissionError && ( /*#__PURE__*/React__default['default'].createElement(SubmissionErrorOverlay, {
|
|
@@ -9167,7 +9408,8 @@ var IdCaptureImagePreview = function IdCaptureImagePreview(_a) {
|
|
|
9167
9408
|
})));
|
|
9168
9409
|
};
|
|
9169
9410
|
var SelfieProgressPreview = function SelfieProgressPreview(_a) {
|
|
9170
|
-
var
|
|
9411
|
+
var text = _a.text,
|
|
9412
|
+
imageUrl = _a.imageUrl;
|
|
9171
9413
|
return /*#__PURE__*/React__default['default'].createElement(ImagePreviewWrapper, null, /*#__PURE__*/React__default['default'].createElement(ImagePreviewText, null, /*#__PURE__*/React__default['default'].createElement(Spinner, {
|
|
9172
9414
|
"$size": 24,
|
|
9173
9415
|
"$color": "white",
|
|
@@ -9178,13 +9420,13 @@ var SelfieProgressPreview = function SelfieProgressPreview(_a) {
|
|
|
9178
9420
|
left: -3,
|
|
9179
9421
|
margin: '0 3px 0 -12px'
|
|
9180
9422
|
}
|
|
9181
|
-
}),
|
|
9423
|
+
}), text), /*#__PURE__*/React__default['default'].createElement(ImagePreviewImageWrapper, null, /*#__PURE__*/React__default['default'].createElement("img", {
|
|
9182
9424
|
src: imageUrl,
|
|
9183
9425
|
alt: ""
|
|
9184
9426
|
})));
|
|
9185
9427
|
};
|
|
9186
9428
|
var ImagePreviewWrapper = styled__default['default'].div(templateObject_1$5 || (templateObject_1$5 = tslib.__makeTemplateObject(["\n position: absolute;\n display: flex;\n flex-direction: column;\n height: 33%;\n bottom: 12px;\n right: 12px;\n"], ["\n position: absolute;\n display: flex;\n flex-direction: column;\n height: 33%;\n bottom: 12px;\n right: 12px;\n"])));
|
|
9187
|
-
var ImagePreviewText = styled__default['default'].div(templateObject_2$2 || (templateObject_2$2 = tslib.__makeTemplateObject(["\n display: block;\n position: absolute;\n top: -32px;\n font
|
|
9429
|
+
var ImagePreviewText = styled__default['default'].div(templateObject_2$2 || (templateObject_2$2 = tslib.__makeTemplateObject(["\n display: block;\n position: absolute;\n top: -32px;\n font: 14px -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,\n Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n color: white;\n text-align: center;\n margin: 0 auto;\n width: 100%;\n"], ["\n display: block;\n position: absolute;\n top: -32px;\n font: 14px -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,\n Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n color: white;\n text-align: center;\n margin: 0 auto;\n width: 100%;\n"])));
|
|
9188
9430
|
var ImagePreviewImageWrapper = styled__default['default'].div(templateObject_3$1 || (templateObject_3$1 = tslib.__makeTemplateObject(["\n position: relative;\n height: calc(100% - 8px);\n padding: 4px;\n border-radius: 4px;\n background: white;\n\n & > img {\n border-radius: 4px;\n width: auto;\n max-height: 100%;\n }\n"], ["\n position: relative;\n height: calc(100% - 8px);\n padding: 4px;\n border-radius: 4px;\n background: white;\n\n & > img {\n border-radius: 4px;\n width: auto;\n max-height: 100%;\n }\n"])));
|
|
9189
9431
|
var templateObject_1$5, templateObject_2$2, templateObject_3$1;
|
|
9190
9432
|
|
|
@@ -9198,6 +9440,7 @@ var esTranslation = {
|
|
|
9198
9440
|
'Camera access blocked': 'Acceso bloqueado a la cámara',
|
|
9199
9441
|
'Location access blocked': 'Acceso bloqueado a la localización',
|
|
9200
9442
|
Continue: 'Continuar',
|
|
9443
|
+
'Processing...': 'Procesando...',
|
|
9201
9444
|
'Your camera permission is disabled': 'El permiso de la cámara está desactivado',
|
|
9202
9445
|
'This application requires access to your camera to continue. Please accept the permission once prompted by the browser. If the browser does not prompt for camera permissions, you must go to settings and provide camera access to the current browser.': 'Esta aplicación requiere el acceso a la cámara para continuar. Hay que aceptar el permiso una vez que se muestre la ventana en el explorador. Si no aparece la ventana para otorgar permisos, entonces hay que dirigirse a Configuración y otorgar el permiso a la cámara en el explorador actual.',
|
|
9203
9446
|
'Your location permission is disabled': 'El permiso de la localización está desactivado',
|
|
@@ -11453,27 +11696,28 @@ var reducer$2 = function reducer(state, action) {
|
|
|
11453
11696
|
}
|
|
11454
11697
|
};
|
|
11455
11698
|
var FaceLivenessCapture = function FaceLivenessCapture(_a) {
|
|
11699
|
+
var _b;
|
|
11456
11700
|
var onCapture = _a.onCapture,
|
|
11457
11701
|
onSuccess = _a.onSuccess,
|
|
11458
11702
|
onTimeout = _a.onTimeout,
|
|
11459
11703
|
onExit = _a.onExit,
|
|
11460
|
-
|
|
11461
|
-
timeoutDurationMs =
|
|
11462
|
-
|
|
11463
|
-
colors =
|
|
11464
|
-
|
|
11465
|
-
rawVerbiage =
|
|
11704
|
+
_c = _a.timeoutDurationMs,
|
|
11705
|
+
timeoutDurationMs = _c === void 0 ? 15000 : _c,
|
|
11706
|
+
_d = _a.colors,
|
|
11707
|
+
colors = _d === void 0 ? {} : _d,
|
|
11708
|
+
_e = _a.verbiage,
|
|
11709
|
+
rawVerbiage = _e === void 0 ? {} : _e,
|
|
11466
11710
|
debugMode = _a.debugMode;
|
|
11467
|
-
var
|
|
11468
|
-
checkLiveness =
|
|
11469
|
-
submissionError =
|
|
11711
|
+
var _f = React.useContext(SubmissionContext),
|
|
11712
|
+
checkLiveness = _f.checkLiveness,
|
|
11713
|
+
submissionError = _f.submissionError;
|
|
11470
11714
|
var modelsError = React.useContext(HighPerformanceSelfieGuidanceModelsContext).error;
|
|
11471
|
-
var
|
|
11472
|
-
state =
|
|
11473
|
-
dispatch =
|
|
11474
|
-
var
|
|
11475
|
-
imageUrl =
|
|
11476
|
-
setImageUrl =
|
|
11715
|
+
var _g = React.useReducer(reducer$2, initialState$2),
|
|
11716
|
+
state = _g[0],
|
|
11717
|
+
dispatch = _g[1];
|
|
11718
|
+
var _h = React.useState(null),
|
|
11719
|
+
imageUrl = _h[0],
|
|
11720
|
+
setImageUrl = _h[1];
|
|
11477
11721
|
var rawCanvas = React.useRef(null);
|
|
11478
11722
|
var cropCanvas = React.useRef(null);
|
|
11479
11723
|
var onSelfieCaptured = React.useCallback(function (frame, face) {
|
|
@@ -11590,7 +11834,8 @@ var FaceLivenessCapture = function FaceLivenessCapture(_a) {
|
|
|
11590
11834
|
var verbiage = useTranslations(rawVerbiage, {
|
|
11591
11835
|
guidanceRemoveEyeCoveringsText: 'Please remove your eye coverings (sunglasses, eye patch, etc.)...',
|
|
11592
11836
|
guidanceRemoveHeadCoveringsText: 'Please remove your head coverings (hat, scarf, etc.)...',
|
|
11593
|
-
guidanceRemoveMaskText: 'Please remove your mask...'
|
|
11837
|
+
guidanceRemoveMaskText: 'Please remove your mask...',
|
|
11838
|
+
progressPreviewText: 'Processing...'
|
|
11594
11839
|
});
|
|
11595
11840
|
var guidanceMessage = state.eyeCoveringDetected ? verbiage.guidanceRemoveEyeCoveringsText : state.headCoveringDetected ? verbiage.guidanceRemoveHeadCoveringsText : state.maskDetected ? verbiage.guidanceRemoveMaskText : undefined;
|
|
11596
11841
|
if (modelsError) {
|
|
@@ -11611,9 +11856,10 @@ var FaceLivenessCapture = function FaceLivenessCapture(_a) {
|
|
|
11611
11856
|
colors: colors,
|
|
11612
11857
|
verbiage: verbiage,
|
|
11613
11858
|
debugMode: debugMode
|
|
11614
|
-
}), imageUrl && /*#__PURE__*/React__default['default'].createElement(SelfieProgressPreview, {
|
|
11615
|
-
imageUrl: imageUrl
|
|
11616
|
-
|
|
11859
|
+
}), imageUrl && ( /*#__PURE__*/React__default['default'].createElement(SelfieProgressPreview, {
|
|
11860
|
+
imageUrl: imageUrl,
|
|
11861
|
+
text: (_b = verbiage.progressPreviewText) !== null && _b !== void 0 ? _b : ''
|
|
11862
|
+
})));
|
|
11617
11863
|
};
|
|
11618
11864
|
|
|
11619
11865
|
var SelfieCaptureLoadingOverlay = function SelfieCaptureLoadingOverlay(_a) {
|
|
@@ -13508,6 +13754,7 @@ var CustomerVerificationCapture = function CustomerVerificationCapture(_a) {
|
|
|
13508
13754
|
}
|
|
13509
13755
|
}, [onCustomerMatched, onCustomerNotMatched, state.requestState, submissionRequest, submissionResponse]);
|
|
13510
13756
|
useTimeout(captureGuidanceTimeoutDurationMs, onCaptureGuidanceTimeout, ['VERIFIED', 'REJECTED'].includes(state.requestState), state.requestState === 'VERIFYING');
|
|
13757
|
+
var progressPreviewText = useVerbiage(verbiage.progressPreviewText, 'Processing...');
|
|
13511
13758
|
return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(InvisibleCanvas, {
|
|
13512
13759
|
ref: rawCanvas
|
|
13513
13760
|
}), /*#__PURE__*/React__default['default'].createElement(InvisibleCanvas, {
|
|
@@ -13519,9 +13766,10 @@ var CustomerVerificationCapture = function CustomerVerificationCapture(_a) {
|
|
|
13519
13766
|
colors: colors,
|
|
13520
13767
|
verbiage: verbiage,
|
|
13521
13768
|
debugMode: debugMode
|
|
13522
|
-
}), imageUrl && /*#__PURE__*/React__default['default'].createElement(SelfieProgressPreview, {
|
|
13523
|
-
imageUrl: imageUrl
|
|
13524
|
-
|
|
13769
|
+
}), imageUrl && ( /*#__PURE__*/React__default['default'].createElement(SelfieProgressPreview, {
|
|
13770
|
+
imageUrl: imageUrl,
|
|
13771
|
+
text: progressPreviewText
|
|
13772
|
+
})));
|
|
13525
13773
|
};
|
|
13526
13774
|
|
|
13527
13775
|
var CustomerVerificationSuccess = function CustomerVerificationSuccess(_a) {
|
|
@@ -13979,6 +14227,7 @@ var CustomerIdentificationCapture = function CustomerIdentificationCapture(_a) {
|
|
|
13979
14227
|
}
|
|
13980
14228
|
}, [onCustomerMatched, onCustomerNotMatched, state.requestState, submissionRequest, submissionResponse]);
|
|
13981
14229
|
useTimeout(captureGuidanceTimeoutDurationMs, onCaptureGuidanceTimeout, ['FOUND', 'NOT_FOUND'].includes(state.requestState), state.requestState === 'IDENTIFYING');
|
|
14230
|
+
var progressPreviewText = useVerbiage(verbiage.progressPreviewText, 'Processing...');
|
|
13982
14231
|
return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(InvisibleCanvas, {
|
|
13983
14232
|
ref: rawCanvas
|
|
13984
14233
|
}), /*#__PURE__*/React__default['default'].createElement(InvisibleCanvas, {
|
|
@@ -13990,9 +14239,10 @@ var CustomerIdentificationCapture = function CustomerIdentificationCapture(_a) {
|
|
|
13990
14239
|
colors: colors,
|
|
13991
14240
|
verbiage: verbiage,
|
|
13992
14241
|
debugMode: debugMode
|
|
13993
|
-
}), imageUrl && /*#__PURE__*/React__default['default'].createElement(SelfieProgressPreview, {
|
|
14242
|
+
}), imageUrl && ( /*#__PURE__*/React__default['default'].createElement(SelfieProgressPreview, {
|
|
14243
|
+
text: progressPreviewText,
|
|
13994
14244
|
imageUrl: imageUrl
|
|
13995
|
-
}));
|
|
14245
|
+
})));
|
|
13996
14246
|
};
|
|
13997
14247
|
|
|
13998
14248
|
var CustomerIdentificationSuccess = function CustomerIdentificationSuccess(_a) {
|