idmission-web-sdk 1.0.76 → 1.0.78

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.
@@ -9,10 +9,10 @@ export type SelfieCaptureLoadingOverlayAssets = {
9
9
  export type SelfieCaptureLoadingOverlayClassNames = {
10
10
  container?: string;
11
11
  inner?: string;
12
- headingContainer?: string;
13
12
  heading?: string;
14
13
  imageContainer?: string;
15
14
  image?: string;
15
+ buttonsRow?: string;
16
16
  continueBtn?: string;
17
17
  cameraAccessDenied?: CameraAccessDeniedOverlayClassNames;
18
18
  };
@@ -1,6 +1,44 @@
1
- import { ReactElement } from 'react';
2
- import { CardData, LivenessCheckRequest, PersonalData, SubmissionAction, SubmissionEnvironment, SubmissionRequest, SubmissionResponse } from '../../contexts/SubmissionContext';
1
+ import React, { ReactElement } from 'react';
2
+ import { CaptureAttemptMetadata, CardData, LiveCheckResponse, LivenessCheckRequest, PersonalData, SubmissionAction, SubmissionEnvironment, SubmissionRequest, SubmissionResponse, SubmissionStatus } from '../../contexts/SubmissionContext';
3
+ import { UploadedDocument } from '../additional_document_capture/AdditionalDocumentCapture';
4
+ import { SignatureData } from '../signature_capture/data';
5
+ import { NetworkError, SubmissionError } from './Errors';
3
6
  export type TokenState = 'NOT_PARSED' | 'PARSING' | 'GOOD' | 'EXPIRED' | 'INVALID_FORMAT' | 'INVALID_SIGNATURE' | 'MISSING' | 'PUBLIC_KEY_LOAD_FAILED';
7
+ export type SubmissionState = {
8
+ submit: () => Promise<SubmissionResponse | null>;
9
+ submissionStatus: SubmissionStatus;
10
+ submissionRequest: SubmissionRequest | null;
11
+ submissionResponse: SubmissionResponse | null;
12
+ submissionError: SubmissionError | NetworkError | null;
13
+ submissionEnvironment: SubmissionEnvironment;
14
+ idFrontImage: string | null;
15
+ idBackImage: string | null;
16
+ passportImage: string | null;
17
+ selfieImage: string | null;
18
+ signatureData: SignatureData | null;
19
+ signatureVideoUrl: string | null;
20
+ idCaptureVideoUrl: string | null;
21
+ idCaptureVideoIdFrontImage: string | null;
22
+ idCaptureVideoIdBackImage: string | null;
23
+ additionalDocuments: UploadedDocument[] | null;
24
+ setIdFrontImage: (image: string) => void;
25
+ setIdBackImage: (image: string) => void;
26
+ setPassportImage: (image: string) => void;
27
+ setSelfieImage: (image: string) => void;
28
+ setSignatureData: (signatureData: SignatureData) => void;
29
+ setSignatureVideoUrl: (videoDataUrl: string) => void;
30
+ setIdCaptureVideoUrl: (videoDataUrl: string) => void;
31
+ setIdCaptureVideoIdFrontImage: (image: string) => void;
32
+ setIdCaptureVideoIdBackImage: (image: string) => void;
33
+ setAdditionalDocuments: (uploadedDocuments: UploadedDocument[]) => void;
34
+ logIdFrontCaptureAttempt: (attempt: CaptureAttemptMetadata) => void;
35
+ logIdBackCaptureAttempt: (attempt: CaptureAttemptMetadata) => void;
36
+ logSelfieCaptureAttempt: (attempt: CaptureAttemptMetadata) => void;
37
+ livenessCheckRequest: LivenessCheckRequest | null;
38
+ checkLiveness: (imageDataUrl: string) => Promise<LiveCheckResponse>;
39
+ retryLocationAccess: () => void;
40
+ };
41
+ export declare const SubmissionContext: React.Context<SubmissionState>;
4
42
  export type SubmissionProviderProps = {
5
43
  action: SubmissionAction;
6
44
  children: ReactElement;
@@ -18,6 +18,8 @@ export type IdVideoCaptureVerbiage = {
18
18
  };
19
19
  export type IdVideoCaptureProps = {
20
20
  onComplete?: (videoUrl: string) => void;
21
+ onIdFrontImageCaptured?: (imageUrl: string) => void;
22
+ onIdBackImageCaptured?: (imageUrl: string) => void;
21
23
  onFaceNotDetected?: () => void;
22
24
  idCardFrontDetectionThreshold?: number;
23
25
  idCardFrontFocusThreshold?: number;
@@ -31,4 +33,4 @@ export type IdVideoCaptureProps = {
31
33
  verbiage?: IdVideoCaptureVerbiage;
32
34
  debugMode?: boolean;
33
35
  };
34
- export declare const IdVideoCapture: ({ onComplete, onFaceNotDetected, idCardFrontDetectionThreshold, idCardFrontFocusThreshold, goodIdCardFrontFramesThreshold, showIdCardBackDurationMs, skipShowIdCardBack, readTextPrompt, readTextTimeoutDurationMs, assets, colors, verbiage: rawVerbiage, debugMode, }: IdVideoCaptureProps) => ReactElement;
36
+ export declare const IdVideoCapture: ({ onComplete, onIdFrontImageCaptured, onIdBackImageCaptured, onFaceNotDetected, idCardFrontDetectionThreshold, idCardFrontFocusThreshold, goodIdCardFrontFramesThreshold, showIdCardBackDurationMs, skipShowIdCardBack, readTextPrompt, readTextTimeoutDurationMs, assets, colors, verbiage: rawVerbiage, debugMode, }: IdVideoCaptureProps) => ReactElement;
@@ -1,7 +1,4 @@
1
- /// <reference types="react" />
2
1
  import { UploadedDocument } from '../components/additional_document_capture/AdditionalDocumentCapture';
3
- import { SignatureData } from '../components/signature_capture/data';
4
- import { NetworkError, SubmissionError } from '../components/submission/Errors';
5
2
  export declare enum SubmissionAction {
6
3
  NONE = "NONE",
7
4
  ENROLL = "ENROLL",
@@ -151,37 +148,6 @@ export type LiveCheckResponse = {
151
148
  cellPhone: 'true' | 'false';
152
149
  };
153
150
  };
154
- export type SubmissionState = {
155
- submit: () => Promise<SubmissionResponse | null>;
156
- submissionStatus: SubmissionStatus;
157
- submissionRequest: SubmissionRequest | null;
158
- submissionResponse: SubmissionResponse | null;
159
- submissionError: SubmissionError | NetworkError | null;
160
- submissionEnvironment: SubmissionEnvironment;
161
- idFrontImage: string | null;
162
- idBackImage: string | null;
163
- passportImage: string | null;
164
- selfieImage: string | null;
165
- signatureData: SignatureData | null;
166
- signatureVideoUrl: string | null;
167
- idCaptureVideoUrl: string | null;
168
- additionalDocuments: UploadedDocument[] | null;
169
- setIdFrontImage: (image: string) => void;
170
- setIdBackImage: (image: string) => void;
171
- setPassportImage: (image: string) => void;
172
- setSelfieImage: (image: string) => void;
173
- setSignatureData: (signatureData: SignatureData) => void;
174
- setSignatureVideoUrl: (videoDataUrl: string) => void;
175
- setIdCaptureVideoUrl: (videoDataUrl: string) => void;
176
- setAdditionalDocuments: (uploadedDocuments: UploadedDocument[]) => void;
177
- logIdFrontCaptureAttempt: (attempt: CaptureAttemptMetadata) => void;
178
- logIdBackCaptureAttempt: (attempt: CaptureAttemptMetadata) => void;
179
- logSelfieCaptureAttempt: (attempt: CaptureAttemptMetadata) => void;
180
- livenessCheckRequest: LivenessCheckRequest | null;
181
- checkLiveness: (imageDataUrl: string) => Promise<LiveCheckResponse>;
182
- retryLocationAccess: () => void;
183
- };
184
- export declare const SubmissionContext: import("react").Context<SubmissionState>;
185
151
  export declare function parseJwt(token: string): Record<string, unknown>;
186
152
  export declare function determineSubmissionHost(environment: SubmissionEnvironment, token?: string): string;
187
153
  export declare function determineSubmissionEndpoint(action: SubmissionAction, hasId: boolean, hasSelfie: boolean, hasToken: boolean): string;
@@ -46,7 +46,7 @@ var LanguageDetector__default = /*#__PURE__*/_interopDefaultLegacy(LanguageDetec
46
46
  var i18n__default = /*#__PURE__*/_interopDefaultLegacy(i18n);
47
47
  var SignatureCanvas__default = /*#__PURE__*/_interopDefaultLegacy(SignatureCanvas);
48
48
 
49
- var webSdkVersion = '1.0.76';
49
+ var webSdkVersion = '1.0.78';
50
50
 
51
51
  function getPlatform() {
52
52
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -88,72 +88,6 @@ var submissionHosts = {
88
88
  prod: 'https://api.idmission.com',
89
89
  demo: 'https://apidemo.idmission.com'
90
90
  };
91
- var SubmissionContext = /*#__PURE__*/React.createContext({
92
- submit: function submit() {
93
- return tslib.__awaiter(void 0, void 0, void 0, function () {
94
- return tslib.__generator(this, function (_a) {
95
- return [2 /*return*/, null];
96
- });
97
- });
98
- },
99
- submissionStatus: SubmissionStatus.READY,
100
- submissionRequest: null,
101
- submissionResponse: null,
102
- submissionError: null,
103
- submissionEnvironment: 'prod',
104
- idFrontImage: null,
105
- idBackImage: null,
106
- passportImage: null,
107
- selfieImage: null,
108
- signatureData: null,
109
- signatureVideoUrl: null,
110
- idCaptureVideoUrl: null,
111
- additionalDocuments: null,
112
- setIdFrontImage: function setIdFrontImage() {
113
- return null;
114
- },
115
- setIdBackImage: function setIdBackImage() {
116
- return null;
117
- },
118
- setPassportImage: function setPassportImage() {
119
- return null;
120
- },
121
- setSelfieImage: function setSelfieImage() {
122
- return null;
123
- },
124
- setSignatureData: function setSignatureData() {
125
- return null;
126
- },
127
- setSignatureVideoUrl: function setSignatureVideoUrl() {
128
- return null;
129
- },
130
- setIdCaptureVideoUrl: function setIdCaptureVideoUrl() {
131
- return null;
132
- },
133
- setAdditionalDocuments: function setAdditionalDocuments() {
134
- return null;
135
- },
136
- logIdFrontCaptureAttempt: function logIdFrontCaptureAttempt() {
137
- return null;
138
- },
139
- logIdBackCaptureAttempt: function logIdBackCaptureAttempt() {
140
- return null;
141
- },
142
- logSelfieCaptureAttempt: function logSelfieCaptureAttempt() {
143
- return null;
144
- },
145
- livenessCheckRequest: null,
146
- checkLiveness: function checkLiveness() {
147
- return tslib.__awaiter(void 0, void 0, void 0, function () {
148
- return tslib.__generator(this, function (_a) {
149
- throw new Error('checkLiveness is not implemented');
150
- });
151
- });
152
- },
153
- retryLocationAccess: function retryLocationAccess() {
154
- return null;
155
- }
156
- });
157
91
  function parseJwt(token) {
158
92
  var base64Url = token.split('.')[1];
159
93
  var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
@@ -642,6 +576,80 @@ var TokenPublicKeyErrorOverlay = function TokenPublicKeyErrorOverlay(_a) {
642
576
  }, "support@idmission.com"), ".")));
643
577
  };
644
578
 
579
+ var SubmissionContext = /*#__PURE__*/React.createContext({
580
+ submit: function submit() {
581
+ return tslib.__awaiter(void 0, void 0, void 0, function () {
582
+ return tslib.__generator(this, function (_a) {
583
+ return [2 /*return*/, null];
584
+ });
585
+ });
586
+ },
587
+ submissionStatus: SubmissionStatus.READY,
588
+ submissionRequest: null,
589
+ submissionResponse: null,
590
+ submissionError: null,
591
+ submissionEnvironment: 'prod',
592
+ idFrontImage: null,
593
+ idBackImage: null,
594
+ passportImage: null,
595
+ selfieImage: null,
596
+ signatureData: null,
597
+ signatureVideoUrl: null,
598
+ idCaptureVideoUrl: null,
599
+ idCaptureVideoIdFrontImage: null,
600
+ idCaptureVideoIdBackImage: null,
601
+ additionalDocuments: null,
602
+ setIdFrontImage: function setIdFrontImage() {
603
+ return null;
604
+ },
605
+ setIdBackImage: function setIdBackImage() {
606
+ return null;
607
+ },
608
+ setPassportImage: function setPassportImage() {
609
+ return null;
610
+ },
611
+ setSelfieImage: function setSelfieImage() {
612
+ return null;
613
+ },
614
+ setSignatureData: function setSignatureData() {
615
+ return null;
616
+ },
617
+ setSignatureVideoUrl: function setSignatureVideoUrl() {
618
+ return null;
619
+ },
620
+ setIdCaptureVideoUrl: function setIdCaptureVideoUrl() {
621
+ return null;
622
+ },
623
+ setIdCaptureVideoIdFrontImage: function setIdCaptureVideoIdFrontImage() {
624
+ return null;
625
+ },
626
+ setIdCaptureVideoIdBackImage: function setIdCaptureVideoIdBackImage() {
627
+ return null;
628
+ },
629
+ setAdditionalDocuments: function setAdditionalDocuments() {
630
+ return null;
631
+ },
632
+ logIdFrontCaptureAttempt: function logIdFrontCaptureAttempt() {
633
+ return null;
634
+ },
635
+ logIdBackCaptureAttempt: function logIdBackCaptureAttempt() {
636
+ return null;
637
+ },
638
+ logSelfieCaptureAttempt: function logSelfieCaptureAttempt() {
639
+ return null;
640
+ },
641
+ livenessCheckRequest: null,
642
+ checkLiveness: function checkLiveness() {
643
+ return tslib.__awaiter(void 0, void 0, void 0, function () {
644
+ return tslib.__generator(this, function (_a) {
645
+ throw new Error('checkLiveness is not implemented');
646
+ });
647
+ });
648
+ },
649
+ retryLocationAccess: function retryLocationAccess() {
650
+ return null;
651
+ }
652
+ });
645
653
  var SubmissionProvider = function SubmissionProvider(_a) {
646
654
  var action = _a.action,
647
655
  children = _a.children,
@@ -731,26 +739,32 @@ var SubmissionProvider = function SubmissionProvider(_a) {
731
739
  idCaptureVideoUrl = _6[0],
732
740
  setIdCaptureVideoUrl = _6[1];
733
741
  var _7 = React.useState(null),
734
- additionalDocuments = _7[0],
735
- setAdditionalDocuments = _7[1];
742
+ idCaptureVideoIdFrontImage = _7[0],
743
+ setIdCaptureVideoIdFrontImage = _7[1];
736
744
  var _8 = React.useState(null),
737
- geolocationResult = _8[0],
738
- setGeolocationResult = _8[1];
739
- var _9 = React.useState(0),
740
- geolocationAttempts = _9[0],
741
- setGeolocationAttempts = _9[1];
742
- var _10 = React.useState(false),
743
- geolocationBlocked = _10[0],
744
- setGeolocationBlocked = _10[1];
745
- var _11 = React.useState([]),
746
- idFrontCaptureAttempts = _11[0],
747
- setIdFrontCaptureAttempts = _11[1];
748
- var _12 = React.useState([]),
749
- idBackCaptureAttempts = _12[0],
750
- setIdBackCaptureAttempts = _12[1];
745
+ idCaptureVideoIdBackImage = _8[0],
746
+ setIdCaptureVideoIdBackImage = _8[1];
747
+ var _9 = React.useState(null),
748
+ additionalDocuments = _9[0],
749
+ setAdditionalDocuments = _9[1];
750
+ var _10 = React.useState(null),
751
+ geolocationResult = _10[0],
752
+ setGeolocationResult = _10[1];
753
+ var _11 = React.useState(0),
754
+ geolocationAttempts = _11[0],
755
+ setGeolocationAttempts = _11[1];
756
+ var _12 = React.useState(false),
757
+ geolocationBlocked = _12[0],
758
+ setGeolocationBlocked = _12[1];
751
759
  var _13 = React.useState([]),
752
- selfieCaptureAttempts = _13[0],
753
- setSelfieCaptureAttempts = _13[1];
760
+ idFrontCaptureAttempts = _13[0],
761
+ setIdFrontCaptureAttempts = _13[1];
762
+ var _14 = React.useState([]),
763
+ idBackCaptureAttempts = _14[0],
764
+ setIdBackCaptureAttempts = _14[1];
765
+ var _15 = React.useState([]),
766
+ selfieCaptureAttempts = _15[0],
767
+ setSelfieCaptureAttempts = _15[1];
754
768
  var logIdFrontCaptureAttempt = React.useCallback(function (attempt) {
755
769
  setIdFrontCaptureAttempts(function (attempts) {
756
770
  return tslib.__spreadArray(tslib.__spreadArray([], attempts, true), [attempt], false);
@@ -1096,12 +1110,12 @@ var SubmissionProvider = function SubmissionProvider(_a) {
1096
1110
  setSubmissionStatus(SubmissionStatus.READY);
1097
1111
  retrySubmission();
1098
1112
  }, [retrySubmission]);
1099
- var _14 = React.useState('NOT_PARSED'),
1100
- tokenState = _14[0],
1101
- setTokenState = _14[1];
1102
- var _15 = React.useState(null),
1103
- tokenError = _15[0],
1104
- setTokenError = _15[1];
1113
+ var _16 = React.useState('NOT_PARSED'),
1114
+ tokenState = _16[0],
1115
+ setTokenState = _16[1];
1116
+ var _17 = React.useState(null),
1117
+ tokenError = _17[0],
1118
+ setTokenError = _17[1];
1105
1119
  React.useEffect(function () {
1106
1120
  (function () {
1107
1121
  return tslib.__awaiter(void 0, void 0, void 0, function () {
@@ -1184,6 +1198,8 @@ var SubmissionProvider = function SubmissionProvider(_a) {
1184
1198
  signatureData: signatureData,
1185
1199
  signatureVideoUrl: signatureVideoUrl,
1186
1200
  idCaptureVideoUrl: idCaptureVideoUrl,
1201
+ idCaptureVideoIdFrontImage: idCaptureVideoIdFrontImage,
1202
+ idCaptureVideoIdBackImage: idCaptureVideoIdBackImage,
1187
1203
  additionalDocuments: additionalDocuments,
1188
1204
  setIdFrontImage: setIdFrontImage,
1189
1205
  setIdBackImage: setIdBackImage,
@@ -1192,6 +1208,8 @@ var SubmissionProvider = function SubmissionProvider(_a) {
1192
1208
  setSignatureData: setSignatureData,
1193
1209
  setSignatureVideoUrl: setSignatureVideoUrl,
1194
1210
  setIdCaptureVideoUrl: setIdCaptureVideoUrl,
1211
+ setIdCaptureVideoIdFrontImage: setIdCaptureVideoIdFrontImage,
1212
+ setIdCaptureVideoIdBackImage: setIdCaptureVideoIdBackImage,
1195
1213
  setAdditionalDocuments: setAdditionalDocuments,
1196
1214
  logIdFrontCaptureAttempt: logIdFrontCaptureAttempt,
1197
1215
  logIdBackCaptureAttempt: logIdBackCaptureAttempt,
@@ -10612,7 +10630,7 @@ var IdCaptureFallback = function IdCaptureFallback(_a) {
10612
10630
  accept: "image/*",
10613
10631
  onChange: onFileSelected,
10614
10632
  hidden: true
10615
- }), /*#__PURE__*/React__default['default'].createElement(StyledButtonsRow$6, {
10633
+ }), /*#__PURE__*/React__default['default'].createElement(StyledButtonsRow$7, {
10616
10634
  className: classNames.buttonsRow
10617
10635
  }, images.length < 2 && ( /*#__PURE__*/React__default['default'].createElement(LoaderButton, {
10618
10636
  variant: images.length > 0 ? 'secondary' : 'positive',
@@ -10638,7 +10656,7 @@ var Heading$7 = styled__default['default'].h3(templateObject_2$9 || (templateObj
10638
10656
  var Description$2 = styled__default['default'].p(templateObject_3$7 || (templateObject_3$7 = tslib.__makeTemplateObject(["\n margin-bottom: 8px;\n"], ["\n margin-bottom: 8px;\n"])));
10639
10657
  var Instruction = styled__default['default'].p(templateObject_4$3 || (templateObject_4$3 = tslib.__makeTemplateObject(["\n font-weight: bold;\n"], ["\n font-weight: bold;\n"])));
10640
10658
  var ImageCol = styled__default['default'].div(templateObject_5$1 || (templateObject_5$1 = tslib.__makeTemplateObject(["\n display: flex;\n justify-content: center;\n flex-grow: 1;\n flex-basis: 0;\n"], ["\n display: flex;\n justify-content: center;\n flex-grow: 1;\n flex-basis: 0;\n"])));
10641
- var StyledButtonsRow$6 = styled__default['default'](ButtonsRow)(templateObject_6 || (templateObject_6 = tslib.__makeTemplateObject(["\n margin-top: 32px;\n"], ["\n margin-top: 32px;\n"])));
10659
+ var StyledButtonsRow$7 = styled__default['default'](ButtonsRow)(templateObject_6 || (templateObject_6 = tslib.__makeTemplateObject(["\n margin-top: 32px;\n"], ["\n margin-top: 32px;\n"])));
10642
10660
  var templateObject_1$f, templateObject_2$9, templateObject_3$7, templateObject_4$3, templateObject_5$1, templateObject_6;
10643
10661
 
10644
10662
  var CaptureState;
@@ -11371,7 +11389,7 @@ var SelfieCaptureFallback = function SelfieCaptureFallback(_a) {
11371
11389
  accept: "image/*",
11372
11390
  onChange: onFileSelected,
11373
11391
  hidden: true
11374
- }), /*#__PURE__*/React__default['default'].createElement(StyledButtonsRow$5, {
11392
+ }), /*#__PURE__*/React__default['default'].createElement(StyledButtonsRow$6, {
11375
11393
  className: classNames.buttonsRow
11376
11394
  }, !image && ( /*#__PURE__*/React__default['default'].createElement(LoaderButton, {
11377
11395
  variant: "positive",
@@ -11398,7 +11416,7 @@ var StyledOverlayInner = styled__default['default'](OverlayInner)(templateObject
11398
11416
  var Heading$6 = styled__default['default'].h3(templateObject_2$7 || (templateObject_2$7 = tslib.__makeTemplateObject(["\n margin-bottom: 8px;\n"], ["\n margin-bottom: 8px;\n"])));
11399
11417
  var Description$1 = styled__default['default'].p(templateObject_3$6 || (templateObject_3$6 = tslib.__makeTemplateObject(["\n margin-bottom: 8px;\n"], ["\n margin-bottom: 8px;\n"])));
11400
11418
  var ImageContainer$5 = styled__default['default'](OverlayImageContainer)(templateObject_4$2 || (templateObject_4$2 = tslib.__makeTemplateObject(["\n margin-top: 32px;\n"], ["\n margin-top: 32px;\n"])));
11401
- var StyledButtonsRow$5 = styled__default['default'](ButtonsRow)(templateObject_5 || (templateObject_5 = tslib.__makeTemplateObject(["\n margin-top: 32px;\n"], ["\n margin-top: 32px;\n"])));
11419
+ var StyledButtonsRow$6 = styled__default['default'](ButtonsRow)(templateObject_5 || (templateObject_5 = tslib.__makeTemplateObject(["\n margin-top: 32px;\n"], ["\n margin-top: 32px;\n"])));
11402
11420
  var templateObject_1$d, templateObject_2$7, templateObject_3$6, templateObject_4$2, templateObject_5;
11403
11421
 
11404
11422
  var initialState$3 = {
@@ -11939,17 +11957,17 @@ var SelfieCaptureLoadingOverlay = function SelfieCaptureLoadingOverlay(_a) {
11939
11957
  className: classNames.container
11940
11958
  }, /*#__PURE__*/React__default['default'].createElement(OverlayInner, {
11941
11959
  className: classNames.inner
11942
- }, /*#__PURE__*/React__default['default'].createElement("div", {
11943
- className: classNames.headingContainer
11944
11960
  }, /*#__PURE__*/React__default['default'].createElement("h3", {
11945
11961
  className: classNames.heading
11946
- }, verbiage.headingText), /*#__PURE__*/React__default['default'].createElement(StyledGuidanceMessage, null, verbiage.removeEyeCoveringsText, /*#__PURE__*/React__default['default'].createElement("br", null), verbiage.avoidExcessiveBacklightingText)), /*#__PURE__*/React__default['default'].createElement(OverlayImageContainer, {
11962
+ }, verbiage.headingText), /*#__PURE__*/React__default['default'].createElement(StyledGuidanceMessage, null, verbiage.removeEyeCoveringsText, /*#__PURE__*/React__default['default'].createElement("br", null), verbiage.avoidExcessiveBacklightingText), /*#__PURE__*/React__default['default'].createElement(OverlayImageContainer, {
11947
11963
  className: classNames.imageContainer
11948
- }, /*#__PURE__*/React__default['default'].createElement(StyledImage, {
11964
+ }, /*#__PURE__*/React__default['default'].createElement("img", {
11949
11965
  className: classNames.image,
11950
11966
  alt: verbiage.headingText,
11951
11967
  src: assets.instructionImageUrl
11952
- })), /*#__PURE__*/React__default['default'].createElement(LoaderButton, {
11968
+ })), /*#__PURE__*/React__default['default'].createElement(StyledButtonsRow$5, {
11969
+ className: classNames.buttonsRow
11970
+ }, /*#__PURE__*/React__default['default'].createElement(LoaderButton, {
11953
11971
  variant: "positive",
11954
11972
  disabled: !cameraReady || !modelsReady,
11955
11973
  finished: cameraReady && modelsReady,
@@ -11959,14 +11977,14 @@ var SelfieCaptureLoadingOverlay = function SelfieCaptureLoadingOverlay(_a) {
11959
11977
  setDismissed(true);
11960
11978
  onDismissed === null || onDismissed === void 0 ? void 0 : onDismissed();
11961
11979
  }
11962
- }, cameraReady && modelsReady ? verbiage.continueText : modelsReady ? verbiage.cameraInitializingText : verbiage.modelsWarmingUpText), /*#__PURE__*/React__default['default'].createElement("div", {
11980
+ }, cameraReady && modelsReady ? verbiage.continueText : modelsReady ? verbiage.cameraInitializingText : verbiage.modelsWarmingUpText)), /*#__PURE__*/React__default['default'].createElement("div", {
11963
11981
  style: {
11964
11982
  display: 'none'
11965
11983
  }
11966
11984
  }, /*#__PURE__*/React__default['default'].createElement(CameraVideoTag, null))));
11967
11985
  };
11968
- var StyledGuidanceMessage = styled__default['default'](GuidanceMessage)(templateObject_1$c || (templateObject_1$c = tslib.__makeTemplateObject(["\n max-width: 280px;\n margin: 18px auto 12px;\n line-height: 1.5;\n padding: 12px 24px;\n"], ["\n max-width: 280px;\n margin: 18px auto 12px;\n line-height: 1.5;\n padding: 12px 24px;\n"])));
11969
- var StyledImage = styled__default['default'].img(templateObject_2$6 || (templateObject_2$6 = tslib.__makeTemplateObject(["\n position: relative;\n top: 5%;\n"], ["\n position: relative;\n top: 5%;\n"])));
11986
+ var StyledGuidanceMessage = styled__default['default'](GuidanceMessage)(templateObject_1$c || (templateObject_1$c = tslib.__makeTemplateObject(["\n padding: 12px 24px;\n font-weight: normal;\n line-height: 1.5;\n margin-bottom: -30px;\n"], ["\n padding: 12px 24px;\n font-weight: normal;\n line-height: 1.5;\n margin-bottom: -30px;\n"])));
11987
+ var StyledButtonsRow$5 = styled__default['default'](ButtonsRow)(templateObject_2$6 || (templateObject_2$6 = tslib.__makeTemplateObject(["\n flex-direction: column;\n padding-top: 25px;\n"], ["\n flex-direction: column;\n padding-top: 25px;\n"])));
11970
11988
  var templateObject_1$c, templateObject_2$6;
11971
11989
 
11972
11990
  var FaceLivenessSuccess = function FaceLivenessSuccess(_a) {
@@ -13286,6 +13304,8 @@ var IdVideoCaptureGuides = function IdVideoCaptureGuides(_a) {
13286
13304
  var IdVideoCapture = function IdVideoCapture(_a) {
13287
13305
  var _b, _c, _d, _e, _f, _g;
13288
13306
  var onComplete = _a.onComplete,
13307
+ onIdFrontImageCaptured = _a.onIdFrontImageCaptured,
13308
+ onIdBackImageCaptured = _a.onIdBackImageCaptured,
13289
13309
  onFaceNotDetected = _a.onFaceNotDetected,
13290
13310
  _h = _a.idCardFrontDetectionThreshold,
13291
13311
  idCardFrontDetectionThreshold = _h === void 0 ? 0.48 : _h,
@@ -13390,6 +13410,14 @@ var IdVideoCapture = function IdVideoCapture(_a) {
13390
13410
  }
13391
13411
  });
13392
13412
  }, [idCardFrontDetectionThreshold, onIdPredictionMade]);
13413
+ var captureCanvas = React.useRef(null);
13414
+ var captureFrame = React.useCallback(function () {
13415
+ if (!captureCanvas.current || !videoRef.current) return;
13416
+ drawToCanvas(captureCanvas.current, videoRef.current);
13417
+ var imageUrl = captureCanvas.current.toDataURL('image/jpeg', 0.98);
13418
+ clearCanvas(captureCanvas.current);
13419
+ return imageUrl;
13420
+ }, [videoRef]);
13393
13421
  var onIdBackCaptureComplete = React.useCallback(function () {
13394
13422
  if (readTextPrompt) {
13395
13423
  setRequestedAction('READ_TEXT');
@@ -13400,10 +13428,17 @@ var IdVideoCapture = function IdVideoCapture(_a) {
13400
13428
  React.useEffect(function () {
13401
13429
  (function () {
13402
13430
  return tslib.__awaiter(void 0, void 0, void 0, function () {
13431
+ var frame;
13403
13432
  return tslib.__generator(this, function (_a) {
13404
13433
  switch (_a.label) {
13405
13434
  case 0:
13406
13435
  if (!(goodFramesThresholdMet && requestedAction == 'SHOW_ID_FRONT')) return [3 /*break*/, 4];
13436
+ if (onIdFrontImageCaptured) {
13437
+ console.log('capturing front frame!');
13438
+ frame = captureFrame();
13439
+ console.log(frame);
13440
+ frame && onIdFrontImageCaptured(frame);
13441
+ }
13407
13442
  if (!skipShowIdCardBack) return [3 /*break*/, 3];
13408
13443
  if (!(skipShowIdCardBack === true)) return [3 /*break*/, 1];
13409
13444
  return [2 /*return*/, onIdBackCaptureComplete()];
@@ -13418,6 +13453,14 @@ var IdVideoCapture = function IdVideoCapture(_a) {
13418
13453
  setRequestedAction('FLIP_ID');
13419
13454
  setTimeout(function () {
13420
13455
  setRequestedAction('SHOW_ID_BACK');
13456
+ setTimeout(function () {
13457
+ if (onIdBackImageCaptured) {
13458
+ console.log('capturing rear frame!');
13459
+ var frame = captureFrame();
13460
+ console.log(frame);
13461
+ frame && onIdBackImageCaptured(frame);
13462
+ }
13463
+ }, showIdCardBackDurationMs - 1000);
13421
13464
  }, 3500);
13422
13465
  _a.label = 4;
13423
13466
  case 4:
@@ -13426,7 +13469,7 @@ var IdVideoCapture = function IdVideoCapture(_a) {
13426
13469
  });
13427
13470
  });
13428
13471
  })();
13429
- }, [goodFramesThresholdMet, onIdBackCaptureComplete, requestedAction, skipShowIdCardBack]);
13472
+ }, [captureFrame, goodFramesThresholdMet, onIdBackCaptureComplete, onIdBackImageCaptured, onIdFrontImageCaptured, requestedAction, showIdCardBackDurationMs, skipShowIdCardBack]);
13430
13473
  useTimeout(showIdCardBackDurationMs, onIdBackCaptureComplete, requestedAction !== 'SHOW_ID_BACK', false, requestedAction === 'SHOW_ID_BACK');
13431
13474
  var onReadTextTimeout = React.useCallback(function () {
13432
13475
  stopRecording();
@@ -13467,7 +13510,9 @@ var IdVideoCapture = function IdVideoCapture(_a) {
13467
13510
  return /*#__PURE__*/React__default['default'].createElement(PageContainer, {
13468
13511
  ref: ref,
13469
13512
  className: "flex"
13470
- }, /*#__PURE__*/React__default['default'].createElement(CameraVideoTag, null), requestedAction === 'READ_TEXT' ? ( /*#__PURE__*/React__default['default'].createElement("div", {
13513
+ }, /*#__PURE__*/React__default['default'].createElement(CameraVideoTag, null), /*#__PURE__*/React__default['default'].createElement(InvisibleCanvas, {
13514
+ ref: captureCanvas
13515
+ }), requestedAction === 'READ_TEXT' ? ( /*#__PURE__*/React__default['default'].createElement("div", {
13471
13516
  style: {
13472
13517
  position: 'absolute',
13473
13518
  width: '100%',
@@ -13509,9 +13554,9 @@ var IdVideoCapture = function IdVideoCapture(_a) {
13509
13554
  }
13510
13555
  }, timeRemaining), /*#__PURE__*/React__default['default'].createElement(LoaderButton, {
13511
13556
  variant: "positive",
13512
- finished: true,
13513
13557
  onClick: stopRecording,
13514
- colors: colors.readTextDoneBtn
13558
+ colors: colors.readTextDoneBtn,
13559
+ finished: true
13515
13560
  }, verbiage.readTextDoneBtnText)))) : ( /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(IdVideoCaptureGuides, {
13516
13561
  assets: assets.guides,
13517
13562
  verbiage: rawVerbiage.guides,
@@ -13616,7 +13661,9 @@ var VideoIdWizard = function VideoIdWizard(_a) {
13616
13661
  var _q = React.useContext(SubmissionContext),
13617
13662
  submissionStatus = _q.submissionStatus,
13618
13663
  idCaptureVideoUrl = _q.idCaptureVideoUrl,
13619
- setIdCaptureVideoUrl = _q.setIdCaptureVideoUrl;
13664
+ setIdCaptureVideoUrl = _q.setIdCaptureVideoUrl,
13665
+ setIdCaptureVideoIdFrontImage = _q.setIdCaptureVideoIdFrontImage,
13666
+ setIdCaptureVideoIdBackImage = _q.setIdCaptureVideoIdBackImage;
13620
13667
  var _r = React.useState('CAPTURING_ID'),
13621
13668
  captureState = _r[0],
13622
13669
  setCaptureState = _r[1];
@@ -13718,6 +13765,8 @@ var VideoIdWizard = function VideoIdWizard(_a) {
13718
13765
  return /*#__PURE__*/React__default['default'].createElement(IdVideoCapture, {
13719
13766
  key: "id-video-capture-".concat(attempt),
13720
13767
  onComplete: onVideoCaptureComplete,
13768
+ onIdFrontImageCaptured: setIdCaptureVideoIdFrontImage,
13769
+ onIdBackImageCaptured: setIdCaptureVideoIdBackImage,
13721
13770
  onFaceNotDetected: onVideoCaptureFaceNotDetected,
13722
13771
  idCardFrontDetectionThreshold: idCardFrontDetectionThreshold,
13723
13772
  idCardFrontFocusThreshold: idCardFrontFocusThreshold,