idmission-web-sdk 2.1.22 → 2.1.24

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.
@@ -1,4 +1,5 @@
1
1
  import ReactSignatureCanvas from 'react-signature-canvas';
2
+ import SignatureCanvas from 'react-signature-canvas';
2
3
  export type SignatureData = {
3
4
  clickX_simple: number[][];
4
5
  clickY_simple: number[][];
@@ -6,4 +7,5 @@ export type SignatureData = {
6
7
  pressure: string;
7
8
  fileContent: string;
8
9
  };
9
- export declare function signatureDataToIdmissionFormat(signatureCanvas: ReactSignatureCanvas): SignatureData;
10
+ export declare function signatureDataToIdmissionFormat(signatureCanvas: ReactSignatureCanvas, imageUrl?: string | null): SignatureData;
11
+ export declare function exportSignatureImage(signaturePad: SignatureCanvas, exportWidth?: number): Promise<string | null>;
@@ -22,10 +22,11 @@ export type VideoSignatureSuccessVerbiage = {
22
22
  };
23
23
  export type VideoSignatureSuccessProps = {
24
24
  videoUrl: string;
25
+ imageUrl: string;
25
26
  onDoneClick?: () => void;
26
27
  onRetryClick?: () => void;
27
28
  classNames?: VideoSignatureSuccessClassNames;
28
29
  colors?: VideoSignatureSuccessColors;
29
30
  verbiage?: VideoSignatureSuccessVerbiage;
30
31
  };
31
- export declare const VideoSignatureSuccess: ({ videoUrl, onDoneClick, onRetryClick, classNames, colors, verbiage: rawVerbiage, }: VideoSignatureSuccessProps) => ReactElement;
32
+ export declare const VideoSignatureSuccess: ({ videoUrl, imageUrl, onDoneClick, onRetryClick, classNames, colors, verbiage: rawVerbiage, }: VideoSignatureSuccessProps) => ReactElement;
@@ -234,7 +234,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
234
234
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
235
235
  };
236
236
 
237
- var webSdkVersion = '2.1.22';
237
+ var webSdkVersion = '2.1.24';
238
238
 
239
239
  function getPlatform() {
240
240
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -11772,15 +11772,14 @@ var AdditionalDocumentCaptureWizard = function AdditionalDocumentCaptureWizard(_
11772
11772
  });
11773
11773
  };
11774
11774
 
11775
- function signatureDataToIdmissionFormat(signatureCanvas) {
11776
- var _a;
11777
- var dataURL = (_a = signatureCanvas.toDataURL()) !== null && _a !== void 0 ? _a : null;
11775
+ function signatureDataToIdmissionFormat(signatureCanvas, imageUrl) {
11776
+ imageUrl || (imageUrl = signatureCanvas.toDataURL());
11778
11777
  var signatureData = {
11779
11778
  clickX_simple: [],
11780
11779
  clickY_simple: [],
11781
11780
  time_simple: [],
11782
11781
  pressure: '',
11783
- fileContent: dataURL ? dataUrlToBase64Sync(dataURL) : ''
11782
+ fileContent: imageUrl ? dataUrlToBase64Sync(imageUrl) : ''
11784
11783
  };
11785
11784
  signatureCanvas.toData().forEach(function (stroke) {
11786
11785
  var xs = [];
@@ -11797,6 +11796,68 @@ function signatureDataToIdmissionFormat(signatureCanvas) {
11797
11796
  });
11798
11797
  return signatureData;
11799
11798
  }
11799
+ function exportSignatureImage(signaturePad_1) {
11800
+ return __awaiter(this, arguments, void 0, function (signaturePad, exportWidth) {
11801
+ var signatureCanvas, scaledHeight, svgB64Url, svgContent, scaledSvgContent, scaledSvgUrl;
11802
+ if (exportWidth === void 0) {
11803
+ exportWidth = 600;
11804
+ }
11805
+ return __generator(this, function (_a) {
11806
+ switch (_a.label) {
11807
+ case 0:
11808
+ signatureCanvas = signaturePad.getCanvas();
11809
+ scaledHeight = signatureCanvas.height * exportWidth / signatureCanvas.width;
11810
+ svgB64Url = signaturePad.getSignaturePad()._toSVG();
11811
+ svgContent = atob(svgB64Url.replace('data:image/svg+xml;base64,', ''));
11812
+ scaledSvgContent = svgContent.replace(/width="[0-9.]+"/, "width=\"".concat(exportWidth, "\"")).replace(/height="[0-9.]+"/, "height=\"".concat(scaledHeight, "\"")).replace(/viewBox="0 0 [0-9.]+ [0-9.]+"/, "viewBox=\"0 0 ".concat(signatureCanvas.width, " ").concat(signatureCanvas.height, "\""));
11813
+ scaledSvgUrl = 'data:image/svg+xml;base64,' + btoa(scaledSvgContent);
11814
+ return [4 /*yield*/, convertSVGtoImg(scaledSvgUrl)];
11815
+ case 1:
11816
+ return [2 /*return*/, _a.sent()];
11817
+ }
11818
+ });
11819
+ });
11820
+ }
11821
+ function loadImage(url) {
11822
+ return __awaiter(this, void 0, void 0, function () {
11823
+ var img;
11824
+ return __generator(this, function (_a) {
11825
+ img = document.createElement('img');
11826
+ img.src = url;
11827
+ return [2 /*return*/, new Promise(function (resolve, reject) {
11828
+ img.onload = function () {
11829
+ return resolve(img);
11830
+ };
11831
+ img.onerror = reject;
11832
+ })];
11833
+ });
11834
+ });
11835
+ }
11836
+ function convertSVGtoImg(svgData_1) {
11837
+ return __awaiter(this, arguments, void 0, function (svgData, format) {
11838
+ var img, canvas, ctx;
11839
+ if (format === void 0) {
11840
+ format = 'jpeg';
11841
+ }
11842
+ return __generator(this, function (_a) {
11843
+ switch (_a.label) {
11844
+ case 0:
11845
+ return [4 /*yield*/, loadImage(svgData)];
11846
+ case 1:
11847
+ img = _a.sent();
11848
+ canvas = document.createElement('canvas');
11849
+ canvas.width = img.naturalWidth;
11850
+ canvas.height = img.naturalHeight;
11851
+ ctx = canvas.getContext('2d');
11852
+ if (!ctx) return [2 /*return*/, null];
11853
+ ctx.fillStyle = 'white';
11854
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
11855
+ ctx.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight);
11856
+ return [2 /*return*/, canvas.toDataURL("image/".concat(format), 1.0)];
11857
+ }
11858
+ });
11859
+ });
11860
+ }
11800
11861
 
11801
11862
  var SignaturePaperBacking = styled__default.default.div(templateObject_1$c || (templateObject_1$c = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n ", "\n ", "\n ", "\n"], ["\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n ", "\n ", "\n ", "\n"])), function (props) {
11802
11863
  var _a, _b;
@@ -11840,9 +11901,21 @@ var SignatureCapture = function SignatureCapture(_a) {
11840
11901
  clearBtnText: 'Clear'
11841
11902
  });
11842
11903
  function onAcceptClicked() {
11843
- if (!signaturePad.current) return;
11844
- var signatureData = signatureDataToIdmissionFormat(signaturePad.current);
11845
- onAccept === null || onAccept === void 0 ? void 0 : onAccept(signatureData, signaturePad.current.toDataURL());
11904
+ return __awaiter(this, void 0, void 0, function () {
11905
+ var imageUrl, signatureData;
11906
+ return __generator(this, function (_a) {
11907
+ switch (_a.label) {
11908
+ case 0:
11909
+ if (!signaturePad.current) return [2 /*return*/];
11910
+ return [4 /*yield*/, exportSignatureImage(signaturePad.current)];
11911
+ case 1:
11912
+ imageUrl = _a.sent();
11913
+ signatureData = signatureDataToIdmissionFormat(signaturePad.current, imageUrl);
11914
+ onAccept === null || onAccept === void 0 ? void 0 : onAccept(signatureData, imageUrl !== null && imageUrl !== void 0 ? imageUrl : '');
11915
+ return [2 /*return*/];
11916
+ }
11917
+ });
11918
+ });
11846
11919
  }
11847
11920
  return /*#__PURE__*/React__namespace.default.createElement(PageContainer, {
11848
11921
  className: classNames.container
@@ -12175,13 +12248,24 @@ var VideoSignatureCapture = function VideoSignatureCapture(_a) {
12175
12248
  }
12176
12249
  }, [numFramesWithoutFaces, onFaceNotDetected]);
12177
12250
  function onAcceptClicked() {
12178
- var _a;
12179
- if (!signaturePad.current) return;
12180
- var signatureData = signatureDataToIdmissionFormat(signaturePad.current);
12181
- setSignatureData(signatureData);
12182
- setSignatureDataUrl(signaturePad.current.toDataURL());
12183
- stopRecordingVideo();
12184
- (_a = signatureRecorder.current) === null || _a === void 0 ? void 0 : _a.stop();
12251
+ return __awaiter(this, void 0, void 0, function () {
12252
+ var imageUrl;
12253
+ var _a;
12254
+ return __generator(this, function (_b) {
12255
+ switch (_b.label) {
12256
+ case 0:
12257
+ if (!signaturePad.current) return [2 /*return*/];
12258
+ return [4 /*yield*/, exportSignatureImage(signaturePad.current)];
12259
+ case 1:
12260
+ imageUrl = _b.sent();
12261
+ setSignatureDataUrl(imageUrl);
12262
+ setSignatureData(signatureDataToIdmissionFormat(signaturePad.current, imageUrl));
12263
+ stopRecordingVideo();
12264
+ (_a = signatureRecorder.current) === null || _a === void 0 ? void 0 : _a.stop();
12265
+ return [2 /*return*/];
12266
+ }
12267
+ });
12268
+ });
12185
12269
  }
12186
12270
  return /*#__PURE__*/React__namespace.default.createElement(PageContainer, {
12187
12271
  className: "flex ".concat((_b = classNames.container) !== null && _b !== void 0 ? _b : '')
@@ -12231,6 +12315,7 @@ var templateObject_1$a;
12231
12315
 
12232
12316
  var VideoSignatureSuccess = function VideoSignatureSuccess(_a) {
12233
12317
  var videoUrl = _a.videoUrl,
12318
+ imageUrl = _a.imageUrl,
12234
12319
  onDoneClick = _a.onDoneClick,
12235
12320
  onRetryClick = _a.onRetryClick,
12236
12321
  _b = _a.classNames,
@@ -12259,6 +12344,12 @@ var VideoSignatureSuccess = function VideoSignatureSuccess(_a) {
12259
12344
  controls: true,
12260
12345
  preload: "metadata",
12261
12346
  autoPlay: true
12347
+ }), /*#__PURE__*/React__namespace.default.createElement("img", {
12348
+ src: imageUrl,
12349
+ alt: "",
12350
+ style: {
12351
+ display: 'none'
12352
+ }
12262
12353
  })), /*#__PURE__*/React__namespace.default.createElement(ButtonsRow, {
12263
12354
  className: classNames.buttonsRow
12264
12355
  }, /*#__PURE__*/React__namespace.default.createElement(LoaderButton, {
@@ -12366,18 +12457,22 @@ var VideoSignatureWizard = function VideoSignatureWizard(_a) {
12366
12457
  });
12367
12458
  });
12368
12459
  }, [logCaptureMetadata, selfieImage, setSelfieImage]);
12460
+ var _p = React.useState(null),
12461
+ signatureImageUrl = _p[0],
12462
+ setSignatureImageUrl = _p[1];
12369
12463
  var onSignatureCaptureCompleted = React.useCallback(function (videoData, signatureData, signatureImageData) {
12370
12464
  setSignatureData(signatureData);
12371
12465
  setSignatureVideoUrl(URL.createObjectURL(videoData));
12466
+ setSignatureImageUrl(signatureImageData);
12372
12467
  setCaptureState('SUCCESS');
12373
12468
  onVideoCaptured === null || onVideoCaptured === void 0 ? void 0 : onVideoCaptured(videoData, signatureData, signatureImageData);
12374
12469
  }, [onVideoCaptured, setSignatureData, setSignatureVideoUrl]);
12375
12470
  var onSignatureCaptureFacesNotDetected = React.useCallback(function () {
12376
12471
  setCaptureState('CHECKING_LIVENESS');
12377
12472
  }, []);
12378
- var _p = React.useState(0),
12379
- attempt = _p[0],
12380
- setAttempt = _p[1];
12473
+ var _q = React.useState(0),
12474
+ attempt = _q[0],
12475
+ setAttempt = _q[1];
12381
12476
  var onExit = React.useCallback(function () {
12382
12477
  releaseCameraAccess();
12383
12478
  setAttempt(function (n) {
@@ -12429,6 +12524,7 @@ var VideoSignatureWizard = function VideoSignatureWizard(_a) {
12429
12524
  if (!showSuccessScreen) return;
12430
12525
  return /*#__PURE__*/React__namespace.default.createElement(VideoSignatureSuccess, {
12431
12526
  videoUrl: signatureVideoUrl !== null && signatureVideoUrl !== void 0 ? signatureVideoUrl : '',
12527
+ imageUrl: signatureImageUrl !== null && signatureImageUrl !== void 0 ? signatureImageUrl : '',
12432
12528
  onDoneClick: onComplete,
12433
12529
  onRetryClick: onRetry,
12434
12530
  classNames: classNames.success,