@authme/identity-verification 2.4.8 → 2.7.0
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/assets/locale/en_US.json +272 -315
- package/assets/locale/ja_JP.json +272 -315
- package/assets/locale/old/en_US.json +18 -0
- package/assets/locale/old/ja_JP.json +18 -0
- package/assets/locale/old/zh_Hant_TW.json +18 -0
- package/assets/locale/zh_Hant_TW.json +272 -315
- package/assets/styles/style.css +207 -43
- package/index.cjs +1705 -381
- package/index.js +1709 -385
- package/package.json +6 -6
- package/src/lib/interface/config.interface.d.ts +43 -1
- package/src/lib/interface/result.model.d.ts +2 -0
- package/src/lib/lottie/scan.d.ts +5 -1
- package/src/lib/lottie/success.d.ts +4 -1
- package/src/lib/module/ocr.module.d.ts +1 -1
- package/src/lib/status/scan-view.status.d.ts +3 -0
- package/src/lib/ui/default-images.d.ts +1 -1
- package/src/lib/ui/ocr-flow.d.ts +31 -3
- package/src/lib/ui/ocr.ui.d.ts +42 -2
- package/src/lib/ui/shared.d.ts +1 -1
- package/src/lib/v2/component/countryCardType.d.ts +3 -0
- package/src/lib/v2/component/frameView.d.ts +2 -0
- package/src/lib/v2/index.d.ts +4 -0
- package/src/lib/v2/interface/index.d.ts +1 -0
- package/src/lib/v2/thickness.d.ts +76 -0
- package/src/lib/v2/ui/button.d.ts +1 -0
- package/src/lib/v2/ui/modal.d.ts +11 -0
- package/src/lib/v2/utilities/index.d.ts +6 -0
- /package/src/lib/ui/{basic.d.ts → basic/index.d.ts} +0 -0
package/index.js
CHANGED
|
@@ -5,9 +5,9 @@ import 'core-js/modules/es.array.includes.js';
|
|
|
5
5
|
import 'core-js/modules/es.string.includes.js';
|
|
6
6
|
import { getTranslateInstance, EventListenerService, TrackingEvent, generateStatus, StatusDescription, StatusView, StatusAction, AuthmeError, ErrorCode, Feature, StatusEvent, setRequestLoggingFunc, setAccessToken } from '@authme/core';
|
|
7
7
|
import { EAuthMeFASServiceStatus, EAuthMeIDCardAntiFraudStage as EAuthMeIDCardAntiFraudStage$1, EAuthMeCardClass as EAuthMeCardClass$1, AuthmeFunctionModule, MlEngine, EngineModule, EAuthMeEngineReturnCode } from '@authme/engine';
|
|
8
|
-
import { IdRecognitionCardType, CountryCode, EAuthMeCardClass, mapCardtypeToAuthmeClass, cardTypeTitle, cardTypeConfirmTitle, getRecognitionColumnOrder,
|
|
9
|
-
import { getCssVariable, RGBToLottieColor, colorToRGB, Icon, useState, clearCanvas, getImageData, hidePopup, showPopup, waitTime, TIME_UNIT, AuthmeError as AuthmeError$1, ErrorCode as ErrorCode$1, requestCamera, showElement, asyncOnLineShowErrorMessage, getCanvasSize, startSpinner, stopSpinner, showErrorMessage, hideElement, isIphone14proOrProMax, cropByRatio,
|
|
10
|
-
import { mergeMap, animationFrames, filter, tap, map, from, catchError, EMPTY, merge, fromEvent,
|
|
8
|
+
import { IdRecognitionCardType, CountryCode, EAuthMeCardClass, EAuthMeIDCardAntiFraudStatus, EAuthMeIDCardAntiFraudStage, thicknessDefaultConfig, mapCardtypeToAuthmeClass, cardTypeTitle, cardTypeConfirmTitle, getRecognitionColumnOrder, EAuthMeCardOCRStatus, EAuthMeMRZServiceStatus, saveExtraDoc, initScanDocumentResourceBase64, MRZService, init, initScanDocument, uploadFrameBase64, ResourceImageType, finishScanDocument, CardOCR, IdCardAntiFraudService, recognitionEncrypt, RecognitionFileType, twoWayAuthmeCardClassMap, getCardSubTypes, getCardTypes, confirmScan } from '@authme/id-recognition';
|
|
9
|
+
import { getCssVariable, RGBToLottieColor, colorToRGB, Icon, useState, clearCanvas, getImageData, isMobile, hidePopup, showPopup, waitTime, TIME_UNIT, AuthmeError as AuthmeError$1, ErrorCode as ErrorCode$1, requestCamera, showElement, asyncOnLineShowErrorMessage, getCanvasSize, startSpinner, stopSpinner, showErrorMessage, hideElement, dataURItoBlob, checkOnlineStatus, UintArrayToBlob, isIphone14proOrProMax, cropByRatio, asyncShowErrorMessage, switchCamera, asyncShowPopup, retryPromiseWithCondition, hideErrorMessage, backgroundRequest, debugTools, showErrorMessageEventName, RUN_FUNCTION_NAME, Storage, STORAGE_KEY, splitResult, combineResult, startLoadingSDK, stopLoadingSDK } from '@authme/util';
|
|
10
|
+
import { mergeMap, animationFrames, filter, tap, map, from, catchError, EMPTY, of, merge, fromEvent, concatAll, takeUntil, Subject, defer, switchMap, throttleTime, take, concatMap, throwError, finalize, Observable, interval, mapTo, firstValueFrom, shareReplay, switchMapTo, takeWhile as takeWhile$1, race } from 'rxjs';
|
|
11
11
|
import 'core-js/modules/es.regexp.to-string.js';
|
|
12
12
|
import { FasRecognitionResult, EAuthMeFASServiceStage, FasService, LivenessAPI, EAuthMeMouthStatus, LivenessResultStatus } from '@authme/liveness';
|
|
13
13
|
import 'core-js/modules/es.parse-float.js';
|
|
@@ -21,6 +21,7 @@ import 'core-js/modules/es.parse-int.js';
|
|
|
21
21
|
import 'core-js/modules/es.regexp.exec.js';
|
|
22
22
|
import 'core-js/modules/es.string.replace.js';
|
|
23
23
|
import 'core-js/modules/es.object.from-entries.js';
|
|
24
|
+
import { takeWhile, finalize as finalize$1 } from 'rxjs/operators';
|
|
24
25
|
import 'core-js/modules/es.array-buffer.slice.js';
|
|
25
26
|
import 'core-js/modules/es.typed-array.uint8-array.js';
|
|
26
27
|
import 'core-js/modules/es.typed-array.fill.js';
|
|
@@ -65,7 +66,7 @@ function __awaiter(thisArg, _arguments, P, generator) {
|
|
|
65
66
|
});
|
|
66
67
|
}
|
|
67
68
|
|
|
68
|
-
const LIVENESS_GUIDE_IMG = 'data:image/jpeg;base64,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';
|
|
69
|
+
const LIVENESS_GUIDE_IMG = '<svg width="327" height="275" viewBox="0 0 327 275" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="327" height="275" fill="#F8F8F8"/><path d="M94.4575 88.8376L67.3527 70.2703C65.5273 68.6387 63.2943 67.4476 60.8821 67.0724C57.5409 66.5502 53.5151 67.3987 52.7491 74.186C52.1297 79.7008 54.0204 85.1992 57.5735 89.4413L94.4575 138.03V88.8376Z" fill="#F8CCC7"/><path opacity="0.3" d="M116.709 27H231.892C244.165 27 254.139 36.9853 254.139 49.2711V274.462H94.4609V49.2711C94.4609 36.9853 104.436 27 116.709 27Z" fill="#43A2C2"/><path d="M117.245 45.9929H231.352C237.644 45.9929 242.761 51.0997 242.761 57.4139V274.463H105.836V57.3976C105.836 51.0997 110.937 45.9766 117.245 45.9766V45.9929Z" fill="white"/><path d="M120.359 259.957H227.832C229.592 259.957 231.027 261.393 231.027 263.155V274.478H117.164V263.155C117.164 261.393 118.598 259.957 120.359 259.957Z" fill="#00C1B6"/><path d="M271.819 274.46L271.51 243.639C271.51 243.639 275.405 162.223 255.26 153.723C255.26 153.723 238.651 150.688 238.407 185.604L236.956 226.508C236.956 226.508 209.917 235.073 206.07 274.46" fill="#F8CCC7"/><path d="M79.5461 242.401C79.5461 242.401 65.3336 221.892 67.9251 202.134C68.5445 197.369 70.7611 192.866 74.5424 189.913C76.1071 188.689 78.014 187.629 80.2795 187.074L94.4431 207.175V216.753C96.4152 222.039 99.3164 227.537 100.62 233.036C101.696 237.588 102.56 242.205 102.886 246.888C103.098 249.923 103.945 254.817 102.283 257.558C101.256 259.239 98.8927 259.484 97.0509 259.304C88.2659 258.488 83.8652 248.65 79.5461 242.417V242.401Z" fill="#F8CCC7"/><path d="M94.4587 207.175V216.752C96.4309 222.038 99.332 227.537 100.636 233.035C101.712 237.587 102.575 242.205 102.901 246.887C103.113 249.922 103.961 254.817 102.298 257.558C101.272 259.238 98.9083 259.483 97.0665 259.304C88.2815 258.488 83.8809 248.649 79.5617 242.417C79.5617 242.417 65.3492 221.908 67.9407 202.149C68.5601 197.385 70.7767 192.882 74.558 189.929C76.1227 188.705 78.0296 187.645 80.2951 187.09" stroke="#F2B1AC" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M88.2668 42.532C85.7568 40.7372 84.2084 39.7093 81.7962 39.3341C78.455 38.812 74.4292 39.6604 73.6631 46.4478C73.0438 51.9625 74.9344 57.4609 78.4876 61.703L94.4929 82.783V46.8067L88.2668 42.5483V42.532Z" fill="#F8CCC7"/><path d="M87.3713 202.868C87.3713 202.868 71.5941 182.701 66.9001 157.493C66.297 154.247 66.2481 150.902 67.0305 147.704C68.7418 140.705 74.6257 131.519 94.4612 137.213V163.269C94.4612 163.269 105.3 184.969 103.621 200.094C103.621 200.094 101.665 218.808 87.3876 202.868H87.3713Z" fill="#F8CCC7"/><path d="M94.4605 163.269C94.4605 163.269 105.299 184.969 103.62 200.094C103.62 200.094 101.665 218.808 87.3869 202.868C87.3869 202.868 71.6097 182.701 66.9157 157.493C66.3127 154.247 66.2638 150.902 67.0461 147.704C68.7575 140.705 74.6413 131.519 94.4768 137.213" stroke="#F2B1AC" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M217.398 119.43H224.081" stroke="white" stroke-miterlimit="10" stroke-linecap="round"/><path d="M222.668 117.195L224.64 119.398L222.391 121.65" stroke="white" stroke-linecap="round" stroke-linejoin="round"/><mask id="mask0_10140_795428" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="120" y="75" width="108" height="135"><path d="M174.096 209.362C203.558 209.362 227.441 179.485 227.441 142.63C227.441 105.775 203.558 75.8984 174.096 75.8984C144.634 75.8984 120.75 105.775 120.75 142.63C120.75 179.485 144.634 209.362 174.096 209.362Z" fill="white"/></mask><g mask="url(#mask0_10140_795428)"><path d="M206.662 179.129C206.662 179.129 274.058 185.362 233.946 232.498H126.864C126.864 232.498 89.5074 199.263 139.381 179.129H206.679H206.662Z" fill="#25608A"/><path d="M156.591 185.804L149.859 249.011L197.875 246.172L189.726 175.312H157.275L156.591 185.804Z" fill="#F8CCC7"/><path d="M128.234 137.375C128.234 137.375 116.075 137.897 117.297 150.264C117.297 150.264 118.943 158.227 133.27 159.401L128.217 137.375H128.234Z" fill="#F8CCC7"/><path d="M126.21 130.867L134.229 165.897C134.229 165.897 138.532 187.972 171.553 189.588C204.59 191.203 209.92 171.085 209.92 171.085L223.562 119.691C223.562 119.691 226.398 79.7823 178.415 75.9807C178.415 75.9807 116.854 71.5591 126.21 130.867Z" fill="#F8CCC7"/><path d="M207.705 208.105L171.326 230.393L147.562 209.737" stroke="#231815" stroke-linecap="round" stroke-linejoin="round"/><path d="M216.927 135.402C216.927 135.402 229.086 135.924 227.863 148.292C227.863 148.292 226.217 156.254 211.891 157.429L216.943 135.402H216.927Z" fill="#F8CCC7"/><path d="M192.27 146.123C194.727 146.123 196.719 144.129 196.719 141.669C196.719 139.209 194.727 137.215 192.27 137.215C189.812 137.215 187.82 139.209 187.82 141.669C187.82 144.129 189.812 146.123 192.27 146.123Z" fill="#231815"/><path d="M159.848 146.123C162.305 146.123 164.298 144.129 164.298 141.669C164.298 139.209 162.305 137.215 159.848 137.215C157.391 137.215 155.398 139.209 155.398 141.669C155.398 144.129 157.391 146.123 159.848 146.123Z" fill="#231815"/><path d="M176.07 143.887V157.755" stroke="#231815" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M171.75 168.492C171.75 168.492 175.01 170.499 180.388 168.492" stroke="#231815" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M156.459 186.992C156.459 186.992 167.607 194.449 191.126 187.661L192.088 195.835C192.088 195.835 178.136 204.695 155.562 195.427L156.459 186.992Z" fill="#272828"/><path d="M191.275 132.76L202.163 131.993L200.989 111.549L213.621 136.447H223.596C223.596 136.447 247.424 79.1627 202.098 80.3537C202.098 80.3537 164.627 46.319 125.233 86.6353C125.233 86.6353 101.176 117.586 126.195 139.743L138.011 138.585L141.255 112.545L191.275 132.76Z" fill="#272828"/></g><path d="M174.096 209.362C203.558 209.362 227.441 179.485 227.441 142.63C227.441 105.775 203.558 75.8984 174.096 75.8984C144.634 75.8984 120.75 105.775 120.75 142.63C120.75 179.485 144.634 209.362 174.096 209.362Z" stroke="#00C1B6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M174.1 195.685C198.128 195.685 217.607 171.427 217.607 141.504C217.607 111.582 198.128 87.3242 174.1 87.3242C150.072 87.3242 130.594 111.582 130.594 141.504C130.594 171.427 150.072 195.685 174.1 195.685Z" stroke="#00C1B6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 5"/></svg>';
|
|
69
70
|
const DEFAULT_ICON_URI = 'data:image/png;base64,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';
|
|
70
71
|
|
|
71
72
|
const defaultIdentityVerificationConfig = {
|
|
@@ -96,7 +97,9 @@ const defaultLivenessConfig = {
|
|
|
96
97
|
headerMode: 1,
|
|
97
98
|
showCloseButton: true,
|
|
98
99
|
subtitle: null,
|
|
99
|
-
uploadFullFrame: false
|
|
100
|
+
uploadFullFrame: false,
|
|
101
|
+
passive: false,
|
|
102
|
+
compareCustomerClientId: null
|
|
100
103
|
};
|
|
101
104
|
const defaultIdRecognitionConfig = {
|
|
102
105
|
icon: DEFAULT_ICON_URI,
|
|
@@ -115,7 +118,8 @@ const defaultIdRecognitionConfig = {
|
|
|
115
118
|
uploadFullFrame: true,
|
|
116
119
|
disablePassportConfirm: false,
|
|
117
120
|
antiFraudIMetalTagValidCountTh: false,
|
|
118
|
-
cardTypes: []
|
|
121
|
+
cardTypes: [],
|
|
122
|
+
cardTypeConfigs: []
|
|
119
123
|
};
|
|
120
124
|
|
|
121
125
|
function setCorrectViewHeight() {
|
|
@@ -7074,9 +7078,11 @@ const card_ud = () => ({
|
|
|
7074
7078
|
markers: []
|
|
7075
7079
|
});
|
|
7076
7080
|
|
|
7077
|
-
const success =
|
|
7078
|
-
|
|
7081
|
+
const success = params => {
|
|
7082
|
+
var _a;
|
|
7083
|
+
const authmeScannerSuccess = (_a = params === null || params === void 0 ? void 0 : params.color) !== null && _a !== void 0 ? _a : getCssVariable('--authme__upload_success', 'authme-container');
|
|
7079
7084
|
const lottieColor = authmeScannerSuccess ? RGBToLottieColor(colorToRGB(authmeScannerSuccess)) : [];
|
|
7085
|
+
const opacity = (params === null || params === void 0 ? void 0 : params.opacity) ? params.opacity * 100 : 100;
|
|
7080
7086
|
return {
|
|
7081
7087
|
v: '5.7.4',
|
|
7082
7088
|
fr: 29.9700012207031,
|
|
@@ -7816,7 +7822,7 @@ const success = () => {
|
|
|
7816
7822
|
ks: {
|
|
7817
7823
|
o: {
|
|
7818
7824
|
a: 0,
|
|
7819
|
-
k:
|
|
7825
|
+
k: opacity,
|
|
7820
7826
|
ix: 11
|
|
7821
7827
|
},
|
|
7822
7828
|
r: {
|
|
@@ -8619,11 +8625,16 @@ const arrow_down = () => {
|
|
|
8619
8625
|
};
|
|
8620
8626
|
};
|
|
8621
8627
|
|
|
8622
|
-
const scan =
|
|
8623
|
-
|
|
8628
|
+
const scan = params => {
|
|
8629
|
+
var _a, _b;
|
|
8630
|
+
const authmeScannning = (_a = params === null || params === void 0 ? void 0 : params.color) !== null && _a !== void 0 ? _a : getCssVariable('--authme__scanning', 'authme-container');
|
|
8631
|
+
const authmeScannningGradient = (_b = params === null || params === void 0 ? void 0 : params.gradient) !== null && _b !== void 0 ? _b : getCssVariable('--authme__scanning', 'authme-container');
|
|
8624
8632
|
const lottieColor = authmeScannning ? RGBToLottieColor(colorToRGB(authmeScannning)) : [];
|
|
8625
8633
|
const [r, g, b] = lottieColor.map(c => parseFloat(c.toFixed(3)));
|
|
8626
|
-
const
|
|
8634
|
+
const lottieColorGradient = authmeScannningGradient ? RGBToLottieColor(colorToRGB(authmeScannningGradient)) : [];
|
|
8635
|
+
const [rGradient, gGradient, bGradient] = lottieColorGradient.map(c => parseFloat(c.toFixed(3)));
|
|
8636
|
+
const opacity = (params === null || params === void 0 ? void 0 : params.opacity) ? params.opacity * 100 : 40;
|
|
8637
|
+
const lottieGradient = [0, rGradient, gGradient, bGradient, 0.5, r, g, b, 1, r, g, b, 0, 0.03, 0.5, 0.515, 1, 1];
|
|
8627
8638
|
return {
|
|
8628
8639
|
v: '5.9.2',
|
|
8629
8640
|
fr: 29.9700012207031,
|
|
@@ -8646,7 +8657,7 @@ const scan = () => {
|
|
|
8646
8657
|
ks: {
|
|
8647
8658
|
o: {
|
|
8648
8659
|
a: 0,
|
|
8649
|
-
k:
|
|
8660
|
+
k: opacity,
|
|
8650
8661
|
ix: 11
|
|
8651
8662
|
},
|
|
8652
8663
|
r: {
|
|
@@ -8804,7 +8815,7 @@ const scan = () => {
|
|
|
8804
8815
|
ks: {
|
|
8805
8816
|
o: {
|
|
8806
8817
|
a: 0,
|
|
8807
|
-
k:
|
|
8818
|
+
k: opacity,
|
|
8808
8819
|
ix: 11
|
|
8809
8820
|
},
|
|
8810
8821
|
r: {
|
|
@@ -23497,8 +23508,8 @@ const renderLivenessUI = config => {
|
|
|
23497
23508
|
config.videoContainer.appendChild(titleTextPanel);
|
|
23498
23509
|
config.videoContainer.appendChild(statusTextPanel);
|
|
23499
23510
|
// Set init text
|
|
23500
|
-
titleText.textContent = translateService.translate('liveness.
|
|
23501
|
-
statusText.textContent = translateService.translate('
|
|
23511
|
+
titleText.textContent = translateService.translate('sdk.liveness.detection.step');
|
|
23512
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.noFace');
|
|
23502
23513
|
setStatusTextTop({
|
|
23503
23514
|
maskHeight,
|
|
23504
23515
|
statusTextPanel,
|
|
@@ -23578,17 +23589,15 @@ const renderLivenessGuideUI = ({
|
|
|
23578
23589
|
ele.classList.add('liveness-guide-header-title');
|
|
23579
23590
|
const title = document.createElement('div');
|
|
23580
23591
|
title.classList.add('liveness-guide-header-title-text');
|
|
23581
|
-
title.textContent = translateService.translate('liveness.
|
|
23592
|
+
title.textContent = translateService.translate('sdk.liveness.detection.title');
|
|
23582
23593
|
ele.appendChild(title);
|
|
23583
23594
|
return ele;
|
|
23584
23595
|
};
|
|
23585
23596
|
const createLivenessGuideImg = () => {
|
|
23586
23597
|
const ele = document.createElement('div');
|
|
23587
23598
|
ele.classList.add('liveness-guide-img-container');
|
|
23588
|
-
const
|
|
23589
|
-
|
|
23590
|
-
img.src = LIVENESS_GUIDE_IMG;
|
|
23591
|
-
ele.appendChild(img);
|
|
23599
|
+
const svg = LIVENESS_GUIDE_IMG;
|
|
23600
|
+
ele.innerHTML = svg;
|
|
23592
23601
|
return ele;
|
|
23593
23602
|
};
|
|
23594
23603
|
const createLivenessHintGroup = () => {
|
|
@@ -23598,11 +23607,12 @@ const renderLivenessGuideUI = ({
|
|
|
23598
23607
|
};
|
|
23599
23608
|
const createLivenessHints = () => {
|
|
23600
23609
|
const ul = document.createElement('ul');
|
|
23601
|
-
|
|
23610
|
+
const descList = ['sdk.liveness.detection.infopageHint.face', 'sdk.liveness.detection.infopageHint.environment'];
|
|
23611
|
+
descList.forEach(desc => {
|
|
23602
23612
|
const li = document.createElement('li');
|
|
23603
|
-
li.textContent = translateService.translate(
|
|
23613
|
+
li.textContent = translateService.translate(desc);
|
|
23604
23614
|
ul.appendChild(li);
|
|
23605
|
-
}
|
|
23615
|
+
});
|
|
23606
23616
|
return ul;
|
|
23607
23617
|
};
|
|
23608
23618
|
const createContinueButtonDivide = () => {
|
|
@@ -23613,7 +23623,7 @@ const renderLivenessGuideUI = ({
|
|
|
23613
23623
|
const createContinueButton = () => {
|
|
23614
23624
|
const ele = document.createElement('div');
|
|
23615
23625
|
ele.classList.add('liveness-guid-continue-btn');
|
|
23616
|
-
ele.textContent = translateService.translate('
|
|
23626
|
+
ele.textContent = translateService.translate('sdk.general.start');
|
|
23617
23627
|
return ele;
|
|
23618
23628
|
};
|
|
23619
23629
|
const background = createLivenessBackground();
|
|
@@ -23686,7 +23696,7 @@ const sendFrame = (canvasSizeInfo, canvas, video, frameCallback, fps, bas64Forma
|
|
|
23686
23696
|
})), tap(() => received = true))))));
|
|
23687
23697
|
};
|
|
23688
23698
|
|
|
23689
|
-
const translateService = getTranslateInstance();
|
|
23699
|
+
const translateService$1 = getTranslateInstance();
|
|
23690
23700
|
var RESIZE_STYLE;
|
|
23691
23701
|
(function (RESIZE_STYLE) {
|
|
23692
23702
|
RESIZE_STYLE[RESIZE_STYLE["RESIZE_WIDTH_LIMIT"] = 320] = "RESIZE_WIDTH_LIMIT";
|
|
@@ -23701,15 +23711,35 @@ var RESIZE_EVENT;
|
|
|
23701
23711
|
function detectScreenResize$() {
|
|
23702
23712
|
const initWidth = window.outerWidth;
|
|
23703
23713
|
const initHeight = window.outerHeight;
|
|
23704
|
-
|
|
23705
|
-
|
|
23706
|
-
|
|
23714
|
+
let resize$;
|
|
23715
|
+
if (isMobile()) {
|
|
23716
|
+
if (!window.visualViewport) {
|
|
23717
|
+
return of(RESIZE_EVENT.PASS);
|
|
23707
23718
|
}
|
|
23708
|
-
|
|
23709
|
-
|
|
23710
|
-
|
|
23711
|
-
|
|
23712
|
-
|
|
23719
|
+
resize$ = merge(fromEvent(window.visualViewport, 'resize'), of(0)).pipe(map(() => {
|
|
23720
|
+
var _a, _b, _c;
|
|
23721
|
+
const scale = ((_a = window === null || window === void 0 ? void 0 : window.visualViewport) === null || _a === void 0 ? void 0 : _a.scale) || 1;
|
|
23722
|
+
const width = ((_b = window === null || window === void 0 ? void 0 : window.visualViewport) === null || _b === void 0 ? void 0 : _b.width) || window.outerWidth;
|
|
23723
|
+
const height = ((_c = window === null || window === void 0 ? void 0 : window.visualViewport) === null || _c === void 0 ? void 0 : _c.height) || window.outerHeight;
|
|
23724
|
+
if (width < RESIZE_STYLE.RESIZE_WIDTH_LIMIT || height < RESIZE_STYLE.RESIZE_HEIGHT_LIMIT) {
|
|
23725
|
+
return RESIZE_EVENT.SCREEN_RESOLUTION_TOO_LOW;
|
|
23726
|
+
}
|
|
23727
|
+
if (scale > 1.1) {
|
|
23728
|
+
return RESIZE_EVENT.SCREEN_SIZE_CHANGED;
|
|
23729
|
+
}
|
|
23730
|
+
return RESIZE_EVENT.PASS;
|
|
23731
|
+
}));
|
|
23732
|
+
} else {
|
|
23733
|
+
resize$ = merge(fromEvent(window, 'resize'), of(0)).pipe(map(() => {
|
|
23734
|
+
if (window.innerWidth < RESIZE_STYLE.RESIZE_WIDTH_LIMIT || window.innerHeight < RESIZE_STYLE.RESIZE_HEIGHT_LIMIT) {
|
|
23735
|
+
return RESIZE_EVENT.SCREEN_RESOLUTION_TOO_LOW;
|
|
23736
|
+
}
|
|
23737
|
+
if (window.outerWidth !== initWidth || window.outerHeight !== initHeight) {
|
|
23738
|
+
return RESIZE_EVENT.SCREEN_SIZE_CHANGED;
|
|
23739
|
+
}
|
|
23740
|
+
return RESIZE_EVENT.PASS;
|
|
23741
|
+
}));
|
|
23742
|
+
}
|
|
23713
23743
|
return resize$;
|
|
23714
23744
|
}
|
|
23715
23745
|
function handleScreenResizeError$(resize$, unsubscribe$, shouldResizeTriggerError) {
|
|
@@ -23717,10 +23747,10 @@ function handleScreenResizeError$(resize$, unsubscribe$, shouldResizeTriggerErro
|
|
|
23717
23747
|
hidePopup();
|
|
23718
23748
|
switch (x) {
|
|
23719
23749
|
case RESIZE_EVENT.SCREEN_SIZE_CHANGED:
|
|
23720
|
-
showPopup(translateService.translate('error.screenSizeChange.title'), translateService.translate('error.screenSizeChange.content'), false);
|
|
23750
|
+
showPopup(translateService$1.translate('sdk.general.error.screenSizeChange.title'), translateService$1.translate('sdk.general.error.screenSizeChange.content'), false);
|
|
23721
23751
|
break;
|
|
23722
23752
|
case RESIZE_EVENT.SCREEN_RESOLUTION_TOO_LOW:
|
|
23723
|
-
showPopup(translateService.translate('
|
|
23753
|
+
showPopup(translateService$1.translate('sdk.general.insufficientScreen.title'), translateService$1.translate('sdk.general.insufficientScreen.content'), false);
|
|
23724
23754
|
break;
|
|
23725
23755
|
}
|
|
23726
23756
|
}), map(x => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -23805,19 +23835,19 @@ function startLiveness(config) {
|
|
|
23805
23835
|
let errorMessage = undefined;
|
|
23806
23836
|
switch ((_f = (_e = (_d = error.cause) === null || _d === void 0 ? void 0 : _d.meta) === null || _e === void 0 ? void 0 : _e.responseContent) === null || _f === void 0 ? void 0 : _f.message) {
|
|
23807
23837
|
case INIT_RESPONSE_ERROR_MESSAGE__LivenessInavailable:
|
|
23808
|
-
errorMessage = '
|
|
23838
|
+
errorMessage = 'sdk.general.error.functionNotEnabled';
|
|
23809
23839
|
throwError = new AuthmeError(ErrorCode.EVENT_NAME_WRONG, INIT_RESPONSE_ERROR_MESSAGE__LivenessInavailable);
|
|
23810
23840
|
break;
|
|
23811
23841
|
case INIT_RESPONSE_ERROR_MESSAGE__NotAllowedNewEvent:
|
|
23812
|
-
errorMessage = '
|
|
23842
|
+
errorMessage = 'sdk.general.error.notAllowedNewEvent';
|
|
23813
23843
|
throwError = new AuthmeError(ErrorCode.EVENT_NAME_WRONG, INIT_RESPONSE_ERROR_MESSAGE__NotAllowedNewEvent);
|
|
23814
23844
|
break;
|
|
23815
23845
|
}
|
|
23816
23846
|
if (errorMessage) {
|
|
23817
|
-
yield asyncOnLineShowErrorMessage(translateService.translate(errorMessage), false);
|
|
23847
|
+
yield asyncOnLineShowErrorMessage(translateService.translate(errorMessage), translateService.translate('sdk.general.error.retry'), false);
|
|
23818
23848
|
} else {
|
|
23819
|
-
const defaultErrorMessage = `${translateService.translate('
|
|
23820
|
-
yield asyncOnLineShowErrorMessage(defaultErrorMessage, false);
|
|
23849
|
+
const defaultErrorMessage = `${translateService.translate('sdk.general.error.eventNameInvalid.title')} : ${translateService.translate('sdk.general.error.eventNameInvalid.content')}`;
|
|
23850
|
+
yield asyncOnLineShowErrorMessage(defaultErrorMessage, translateService.translate('sdk.general.error.retry'), false);
|
|
23821
23851
|
}
|
|
23822
23852
|
yield waitTime(SHOW_ERROR_MESSAGE_INTERVAL);
|
|
23823
23853
|
throw throwError;
|
|
@@ -23829,19 +23859,19 @@ function startLiveness(config) {
|
|
|
23829
23859
|
sendStatusDescription$2(fasRecognitionResultMapping(result.eStatus));
|
|
23830
23860
|
switch (result.eStatus) {
|
|
23831
23861
|
case FasRecognitionResult.NoFace:
|
|
23832
|
-
statusText.textContent = translateService.translate('
|
|
23862
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.noFace');
|
|
23833
23863
|
setBorderStatus('error');
|
|
23834
23864
|
break;
|
|
23835
23865
|
case FasRecognitionResult.FaceNotAtCenter:
|
|
23836
|
-
statusText.textContent = translateService.translate('
|
|
23866
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.faceNotAtCenter');
|
|
23837
23867
|
setBorderStatus('error');
|
|
23838
23868
|
break;
|
|
23839
23869
|
case FasRecognitionResult.FaceTooSmall:
|
|
23840
|
-
statusText.textContent = translateService.translate('
|
|
23870
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.getCloser');
|
|
23841
23871
|
setBorderStatus('error');
|
|
23842
23872
|
break;
|
|
23843
23873
|
case FasRecognitionResult.FaceTooLarge:
|
|
23844
|
-
statusText.textContent = translateService.translate('
|
|
23874
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.faceTooLarge');
|
|
23845
23875
|
if (result.eStage === EAuthMeFASServiceStage.Scale) {
|
|
23846
23876
|
setBorderStatus(null);
|
|
23847
23877
|
setFrameScaleSmall();
|
|
@@ -23850,31 +23880,31 @@ function startLiveness(config) {
|
|
|
23850
23880
|
}
|
|
23851
23881
|
break;
|
|
23852
23882
|
case FasRecognitionResult.NeedFaceToCamera:
|
|
23853
|
-
statusText.textContent = translateService.translate('
|
|
23883
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needFaceToCamera');
|
|
23854
23884
|
setBorderStatus('error');
|
|
23855
23885
|
break;
|
|
23856
23886
|
case FasRecognitionResult.FaceMasked:
|
|
23857
|
-
statusText.textContent = translateService.translate('
|
|
23887
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.noShelter');
|
|
23858
23888
|
setBorderStatus('error');
|
|
23859
23889
|
break;
|
|
23860
23890
|
case FasRecognitionResult.NeedOpenMouth:
|
|
23861
|
-
statusText.textContent = translateService.translate('
|
|
23891
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needOpenMouth');
|
|
23862
23892
|
setBorderStatus(null);
|
|
23863
23893
|
break;
|
|
23864
23894
|
case FasRecognitionResult.NeedCloseMouth:
|
|
23865
|
-
statusText.textContent = translateService.translate('
|
|
23895
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needCloseMouth');
|
|
23866
23896
|
setBorderStatus(null);
|
|
23867
23897
|
break;
|
|
23868
23898
|
case FasRecognitionResult.NeedSmile:
|
|
23869
|
-
statusText.textContent = translateService.translate('
|
|
23899
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needSmile');
|
|
23870
23900
|
setBorderStatus(null);
|
|
23871
23901
|
break;
|
|
23872
23902
|
case FasRecognitionResult.NeedOpenEyes:
|
|
23873
|
-
statusText.textContent = translateService.translate('
|
|
23903
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needOpenEyes');
|
|
23874
23904
|
setBorderStatus('error');
|
|
23875
23905
|
break;
|
|
23876
23906
|
case FasRecognitionResult.NeedMoreFrame:
|
|
23877
|
-
statusText.textContent = translateService.translate('
|
|
23907
|
+
statusText.textContent = translateService.translate('sdk.general.verify.success');
|
|
23878
23908
|
setBorderStatus('pass');
|
|
23879
23909
|
break;
|
|
23880
23910
|
case FasRecognitionResult.Pass:
|
|
@@ -23886,13 +23916,13 @@ function startLiveness(config) {
|
|
|
23886
23916
|
}
|
|
23887
23917
|
break;
|
|
23888
23918
|
case FasRecognitionResult.Error:
|
|
23889
|
-
statusText.textContent = translateService.translate('
|
|
23890
|
-
showErrorMessage(translateService.translate('
|
|
23919
|
+
statusText.textContent = translateService.translate('sdk.general.error.alert.serverError');
|
|
23920
|
+
showErrorMessage(translateService.translate('sdk.general.error.alert.serverError'), true);
|
|
23891
23921
|
break;
|
|
23892
23922
|
}
|
|
23893
23923
|
};
|
|
23894
23924
|
// Register Event
|
|
23895
|
-
fromEvent(window, 'offline').pipe(switchMap(() => asyncOnLineShowErrorMessage(translateService.translate('
|
|
23925
|
+
fromEvent(window, 'offline').pipe(switchMap(() => asyncOnLineShowErrorMessage(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'), true)), takeUntil(unsubscribe$)).subscribe();
|
|
23896
23926
|
fromEvent(window, 'resize').pipe(throttleTime(100), switchMap(() => getCanvasSize(video)), tap(canvasSizeInfo => {
|
|
23897
23927
|
config.setFrameSize(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight);
|
|
23898
23928
|
const maskHeight = window.outerHeight * 0.48;
|
|
@@ -23910,8 +23940,8 @@ function startLiveness(config) {
|
|
|
23910
23940
|
showCloseButton: config.livenessConfig.showCloseButton
|
|
23911
23941
|
}));
|
|
23912
23942
|
const step2 = of({}).pipe(tap(() => {
|
|
23913
|
-
startSpinner(translateService.translate('general.loading'), true);
|
|
23914
|
-
headerTitle.textContent = translateService.translate('liveness.header
|
|
23943
|
+
startSpinner(translateService.translate('sdk.general.loading'), true);
|
|
23944
|
+
headerTitle.textContent = translateService.translate('sdk.liveness.detection.header');
|
|
23915
23945
|
if (config.livenessConfig.subtitle) {
|
|
23916
23946
|
headerSubtitle.textContent = translateService.translate(config.livenessConfig.subtitle);
|
|
23917
23947
|
}
|
|
@@ -23989,7 +24019,7 @@ function startLiveness(config) {
|
|
|
23989
24019
|
// : of(resp).pipe(
|
|
23990
24020
|
// tap(() =>
|
|
23991
24021
|
// showErrorMessage(
|
|
23992
|
-
// translateService.translate('
|
|
24022
|
+
// translateService.translate('sdk.general.error.timeout.content')
|
|
23993
24023
|
// )
|
|
23994
24024
|
// ),
|
|
23995
24025
|
// switchMap(() => waitTime(2000)),
|
|
@@ -23997,9 +24027,9 @@ function startLiveness(config) {
|
|
|
23997
24027
|
// map(() => resp)
|
|
23998
24028
|
// )
|
|
23999
24029
|
// ),
|
|
24000
|
-
switchMap(resp => window.navigator.onLine ? of(resp) : from(asyncOnLineShowErrorMessage(translateService.translate('
|
|
24030
|
+
switchMap(resp => window.navigator.onLine ? of(resp) : from(asyncOnLineShowErrorMessage(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'), true)).pipe(map(() => resp))), tap(() => {
|
|
24001
24031
|
sendStatusDescription$2(StatusDescription.UploadingStart);
|
|
24002
|
-
startSpinner(translateService.translate('
|
|
24032
|
+
startSpinner(translateService.translate('sdk.general.uploading'), true);
|
|
24003
24033
|
}), switchMap(() => defer(() => config.onSuccess())))));
|
|
24004
24034
|
return of({}).pipe(() => {
|
|
24005
24035
|
var _a;
|
|
@@ -24179,24 +24209,51 @@ var OcrRotateAnimationName;
|
|
|
24179
24209
|
OcrRotateAnimationName["Bottom"] = "slideinBottom";
|
|
24180
24210
|
OcrRotateAnimationName["BottomToDefault"] = "slideinBottomToDefault";
|
|
24181
24211
|
})(OcrRotateAnimationName || (OcrRotateAnimationName = {}));
|
|
24182
|
-
|
|
24212
|
+
var OcrFrame;
|
|
24213
|
+
(function (OcrFrame) {
|
|
24214
|
+
OcrFrame["borderType"] = "cornered";
|
|
24215
|
+
OcrFrame["borderColor"] = "#FFF";
|
|
24216
|
+
OcrFrame[OcrFrame["borderOpacity"] = 1] = "borderOpacity";
|
|
24217
|
+
OcrFrame["lineColor"] = "#00C1B6";
|
|
24218
|
+
OcrFrame["lineGradient"] = "#7CFFF9";
|
|
24219
|
+
OcrFrame[OcrFrame["lineGradientOpacity"] = 0.5] = "lineGradientOpacity";
|
|
24220
|
+
OcrFrame["successColor"] = "#7CFFF9";
|
|
24221
|
+
OcrFrame[OcrFrame["successOpacity"] = 1] = "successOpacity";
|
|
24222
|
+
OcrFrame["textColor"] = "#FFF";
|
|
24223
|
+
OcrFrame[OcrFrame["textOpacity"] = 0.7] = "textOpacity";
|
|
24224
|
+
OcrFrame["imageColor"] = "#FFF";
|
|
24225
|
+
OcrFrame[OcrFrame["imageOpacity"] = 0.4] = "imageOpacity";
|
|
24226
|
+
})(OcrFrame || (OcrFrame = {}));
|
|
24227
|
+
const initScanAnimation = params => {
|
|
24228
|
+
var _a, _b, _c;
|
|
24229
|
+
lottie.destroy('scan');
|
|
24183
24230
|
lottie.loadAnimation({
|
|
24184
24231
|
container: params.scanAnimationContainer,
|
|
24185
24232
|
renderer: 'svg',
|
|
24186
24233
|
loop: true,
|
|
24187
24234
|
autoplay: true,
|
|
24188
24235
|
name: 'scan',
|
|
24189
|
-
animationData: scan(
|
|
24236
|
+
animationData: scan({
|
|
24237
|
+
color: (_a = params.scanColor) !== null && _a !== void 0 ? _a : OcrFrame.lineColor,
|
|
24238
|
+
gradient: (_b = params.scanGradient) !== null && _b !== void 0 ? _b : OcrFrame.lineGradient,
|
|
24239
|
+
opacity: (_c = params.scanOpacity) !== null && _c !== void 0 ? _c : OcrFrame.lineGradientOpacity
|
|
24240
|
+
})
|
|
24190
24241
|
});
|
|
24242
|
+
lottie.stop('scan');
|
|
24243
|
+
};
|
|
24244
|
+
const initSuccessAnimation = params => {
|
|
24245
|
+
lottie.destroy('success');
|
|
24191
24246
|
lottie.loadAnimation({
|
|
24192
|
-
container: params.
|
|
24247
|
+
container: params.animationContainer,
|
|
24193
24248
|
renderer: 'svg',
|
|
24194
24249
|
loop: false,
|
|
24195
24250
|
autoplay: true,
|
|
24196
24251
|
name: 'success',
|
|
24197
|
-
animationData: success(
|
|
24252
|
+
animationData: success({
|
|
24253
|
+
color: '#7CFFF9',
|
|
24254
|
+
opacity: 1
|
|
24255
|
+
})
|
|
24198
24256
|
});
|
|
24199
|
-
lottie.stop('scan');
|
|
24200
24257
|
lottie.stop('success');
|
|
24201
24258
|
};
|
|
24202
24259
|
const renderCameraSwitch = config => {
|
|
@@ -24244,14 +24301,17 @@ const renderOCRUI = config => {
|
|
|
24244
24301
|
//Statement
|
|
24245
24302
|
const statementContainer = document.createElement('div');
|
|
24246
24303
|
statementContainer.classList.add('statement');
|
|
24247
|
-
statementContainer.textContent = translateService.translate('
|
|
24304
|
+
statementContainer.textContent = translateService.translate('sdk.general.footer');
|
|
24248
24305
|
// Animation
|
|
24249
24306
|
const scanAnimationContainer = document.createElement('div');
|
|
24250
24307
|
scanAnimationContainer.classList.add('scan');
|
|
24251
24308
|
const successAnimationContainer = document.createElement('div');
|
|
24252
|
-
successAnimationContainer.classList.add('
|
|
24309
|
+
successAnimationContainer.classList.add('success_container');
|
|
24310
|
+
const successAnimationDom = document.createElement('div');
|
|
24311
|
+
successAnimationDom.classList.add('success');
|
|
24253
24312
|
const arrowAnimationContainer = document.createElement('div');
|
|
24254
|
-
arrowAnimationContainer.classList.add('
|
|
24313
|
+
arrowAnimationContainer.classList.add('arrow_container');
|
|
24314
|
+
successAnimationContainer.appendChild(successAnimationDom);
|
|
24255
24315
|
config.videoContainer.appendChild(titleTextPanel);
|
|
24256
24316
|
if (config.showStatement) {
|
|
24257
24317
|
config.videoContainer.appendChild(statementContainer);
|
|
@@ -24267,14 +24327,14 @@ const renderOCRUI = config => {
|
|
|
24267
24327
|
antiFraudInstructionContainer.classList.add('anti-fraud-instruction-container');
|
|
24268
24328
|
const instructionText = document.createElement('div');
|
|
24269
24329
|
instructionText.classList.add('anti-fraud-instruction-container__text');
|
|
24270
|
-
instructionText.textContent = translateService.translate('verify.fraudDescribe');
|
|
24330
|
+
instructionText.textContent = translateService.translate('sdk.guard.verify.guide.fraudDescribe');
|
|
24271
24331
|
const antiFraudInstructionAnimationContainer = document.createElement('div');
|
|
24272
24332
|
antiFraudInstructionAnimationContainer.classList.add('anti-fraud-instruction-animation-container');
|
|
24273
24333
|
const btnContainer = document.createElement('div');
|
|
24274
24334
|
btnContainer.classList.add('btn-container');
|
|
24275
24335
|
const confirmBtn = document.createElement('button');
|
|
24276
24336
|
confirmBtn.classList.add('confirm-btn');
|
|
24277
|
-
confirmBtn.textContent = translateService.translate('
|
|
24337
|
+
confirmBtn.textContent = translateService.translate('sdk.general.preparing');
|
|
24278
24338
|
confirmBtn.disabled = true;
|
|
24279
24339
|
btnContainer.appendChild(confirmBtn);
|
|
24280
24340
|
antiFraudInstructionContainer.appendChild(instructionText);
|
|
@@ -24287,7 +24347,7 @@ const renderOCRUI = config => {
|
|
|
24287
24347
|
confirmImageContainer.classList.add('confirm-image-container');
|
|
24288
24348
|
const imageTypeText = document.createElement('div');
|
|
24289
24349
|
imageTypeText.classList.add('image-type-text');
|
|
24290
|
-
imageTypeText.textContent = translateService.translate('
|
|
24350
|
+
imageTypeText.textContent = translateService.translate('sdk.general.frontSide');
|
|
24291
24351
|
const imageLine = document.createElement('div');
|
|
24292
24352
|
imageLine.classList.add('image-line');
|
|
24293
24353
|
const imageLineLineDesktop = document.createElement('div');
|
|
@@ -24300,10 +24360,10 @@ const renderOCRUI = config => {
|
|
|
24300
24360
|
imageFooter.classList.add('image-footer');
|
|
24301
24361
|
const retryBtn = document.createElement('button');
|
|
24302
24362
|
retryBtn.classList.add('btn-retry');
|
|
24303
|
-
retryBtn.textContent = translateService.translate('verify.
|
|
24363
|
+
retryBtn.textContent = translateService.translate('sdk.ocr.verify.retry');
|
|
24304
24364
|
const completeBtn = document.createElement('button');
|
|
24305
24365
|
completeBtn.classList.add('btn-complete');
|
|
24306
|
-
completeBtn.textContent = translateService.translate('verify.
|
|
24366
|
+
completeBtn.textContent = translateService.translate('sdk.ocr.verify.clear');
|
|
24307
24367
|
imageFooter.appendChild(completeBtn);
|
|
24308
24368
|
imageFooter.appendChild(retryBtn);
|
|
24309
24369
|
confirmImageContainer.appendChild(imageTypeText);
|
|
@@ -24312,10 +24372,6 @@ const renderOCRUI = config => {
|
|
|
24312
24372
|
confirmImageContainer.appendChild(imageLineLineDesktop);
|
|
24313
24373
|
confirmImageContainer.appendChild(imageFooter);
|
|
24314
24374
|
config.container.appendChild(confirmImageContainer);
|
|
24315
|
-
initAnimation({
|
|
24316
|
-
scanAnimationContainer,
|
|
24317
|
-
successAnimationContainer
|
|
24318
|
-
});
|
|
24319
24375
|
return {
|
|
24320
24376
|
antiFraudInstructionContainer,
|
|
24321
24377
|
titleTextPanel,
|
|
@@ -24326,6 +24382,7 @@ const renderOCRUI = config => {
|
|
|
24326
24382
|
lottieMask,
|
|
24327
24383
|
arrowAnimationContainer,
|
|
24328
24384
|
successAnimationContainer,
|
|
24385
|
+
successAnimationDom,
|
|
24329
24386
|
scanAnimationContainer,
|
|
24330
24387
|
antiFraudInstructionAnimationContainer,
|
|
24331
24388
|
confirmImageContainer,
|
|
@@ -24366,19 +24423,23 @@ function renderConfirmUI({
|
|
|
24366
24423
|
const keyMapping = {
|
|
24367
24424
|
[IdRecognitionCardType.IDCard]: 'idCard',
|
|
24368
24425
|
[IdRecognitionCardType.DriverLicense]: 'driverLicense',
|
|
24369
|
-
[IdRecognitionCardType.HealthCard]: '
|
|
24426
|
+
[IdRecognitionCardType.HealthCard]: 'HealthCard',
|
|
24370
24427
|
[IdRecognitionCardType.ResidentCard]: 'residentCard',
|
|
24371
24428
|
[IdRecognitionCardType.Passport]: 'passport'
|
|
24372
24429
|
};
|
|
24373
24430
|
elem.classList.add('data-type');
|
|
24374
|
-
elem.textContent = translate(cardType ? `
|
|
24431
|
+
elem.textContent = translate(cardType ? `sdk.ocr.verify.result.title.${keyMapping[cardType]}` : '');
|
|
24375
24432
|
}), _render('div', elem => {
|
|
24376
24433
|
elem.classList.add('data');
|
|
24377
24434
|
}, items.columns.map(column => _render('div', elem => {
|
|
24378
24435
|
elem.classList.add('data-column');
|
|
24379
24436
|
}, [_render('div', elem => {
|
|
24380
24437
|
elem.classList.add('title');
|
|
24381
|
-
|
|
24438
|
+
if (column === 'issueReason') {
|
|
24439
|
+
elem.textContent = translate('sdk.ocr.verify.result.issueType');
|
|
24440
|
+
} else {
|
|
24441
|
+
elem.textContent = translate('sdk.ocr.verify.result.' + column);
|
|
24442
|
+
}
|
|
24382
24443
|
}), column === 'address' ? _render('textarea', elem => {
|
|
24383
24444
|
var _a;
|
|
24384
24445
|
elem.name = column;
|
|
@@ -24386,7 +24447,7 @@ function renderConfirmUI({
|
|
|
24386
24447
|
elem.classList.add('content');
|
|
24387
24448
|
elem.classList.add('textarea');
|
|
24388
24449
|
elem.textContent = (_a = items.details[column]) !== null && _a !== void 0 ? _a : '';
|
|
24389
|
-
elem.placeholder = translate('
|
|
24450
|
+
elem.placeholder = translate('sdk.ocr.verify.result.placeHolder');
|
|
24390
24451
|
}) : _render('input', elem => {
|
|
24391
24452
|
var _a;
|
|
24392
24453
|
elem.value;
|
|
@@ -24394,7 +24455,7 @@ function renderConfirmUI({
|
|
|
24394
24455
|
elem.type = 'text';
|
|
24395
24456
|
elem.classList.add('content');
|
|
24396
24457
|
elem.value = (_a = items.details[column]) !== null && _a !== void 0 ? _a : '';
|
|
24397
|
-
elem.placeholder = translate('
|
|
24458
|
+
elem.placeholder = translate('sdk.ocr.verify.result.placeHolder');
|
|
24398
24459
|
})]))), _render('div', elem => {
|
|
24399
24460
|
elem.classList.add('d-flex');
|
|
24400
24461
|
elem.classList.add('justify-content-center');
|
|
@@ -24404,7 +24465,7 @@ function renderConfirmUI({
|
|
|
24404
24465
|
elem.classList.add('btn-success');
|
|
24405
24466
|
elem.classList.add('text-light');
|
|
24406
24467
|
elem.classList.add('confirm-btn');
|
|
24407
|
-
elem.textContent = translate('
|
|
24468
|
+
elem.textContent = translate('sdk.general.accept');
|
|
24408
24469
|
})])])]);
|
|
24409
24470
|
document.body.appendChild(confirmContainerElem);
|
|
24410
24471
|
return new Promise((resolve, reject) => {
|
|
@@ -24468,15 +24529,23 @@ function mirrorPoints(points) {
|
|
|
24468
24529
|
}));
|
|
24469
24530
|
}
|
|
24470
24531
|
const renderOCRMask = params => {
|
|
24532
|
+
let newCardPoints;
|
|
24533
|
+
let borderColor = '';
|
|
24534
|
+
let borderOpacity = OcrFrame.borderOpacity;
|
|
24535
|
+
let borderColorSuccess = '';
|
|
24536
|
+
let borderOpacitySuccess = OcrFrame.successOpacity;
|
|
24471
24537
|
const {
|
|
24472
24538
|
cardPoints,
|
|
24473
|
-
container
|
|
24474
|
-
cardFrameColor
|
|
24539
|
+
container
|
|
24475
24540
|
} = params;
|
|
24476
24541
|
const _cardPoints = params.mirrored ? mirrorPoints(cardPoints) : cardPoints;
|
|
24542
|
+
const windowWidth = container.offsetWidth;
|
|
24543
|
+
const windowHeight = container.offsetHeight;
|
|
24544
|
+
const radius = 10;
|
|
24545
|
+
let borderType = OcrFrame.borderType;
|
|
24477
24546
|
// 創建SVG元素
|
|
24478
24547
|
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
24479
|
-
svg.setAttribute('id', '
|
|
24548
|
+
svg.setAttribute('id', 'authme_frame_border');
|
|
24480
24549
|
svg.setAttribute('width', '100%');
|
|
24481
24550
|
svg.setAttribute('height', '100%');
|
|
24482
24551
|
svg.style.position = 'absolute';
|
|
@@ -24498,10 +24567,78 @@ const renderOCRMask = params => {
|
|
|
24498
24567
|
mask.appendChild(path);
|
|
24499
24568
|
defs.appendChild(mask);
|
|
24500
24569
|
svg.appendChild(defs);
|
|
24570
|
+
const rectOfFrame = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
|
|
24571
|
+
rectOfFrame.setAttribute('rx', '10');
|
|
24572
|
+
rectOfFrame.setAttribute('ry', '10');
|
|
24573
|
+
rectOfFrame.setAttribute('stroke', OcrFrame.borderColor);
|
|
24574
|
+
rectOfFrame.setAttribute('stroke-width', '3');
|
|
24575
|
+
rectOfFrame.setAttribute('fill', 'none');
|
|
24501
24576
|
const pathOfFrame = document.createElementNS('http://www.w3.org/2000/svg', 'path');
|
|
24502
24577
|
pathOfFrame.setAttribute('fill', 'none');
|
|
24503
|
-
pathOfFrame.setAttribute('stroke',
|
|
24578
|
+
pathOfFrame.setAttribute('stroke', OcrFrame.borderColor);
|
|
24504
24579
|
pathOfFrame.setAttribute('stroke-width', '3');
|
|
24580
|
+
const setBorderType = params => {
|
|
24581
|
+
var _a;
|
|
24582
|
+
const _mirrored = (_a = params.mirrored) !== null && _a !== void 0 ? _a : false;
|
|
24583
|
+
borderType = params.type;
|
|
24584
|
+
if (params.color) {
|
|
24585
|
+
borderColor = params.color;
|
|
24586
|
+
}
|
|
24587
|
+
if (params.strokeOpacity !== undefined) {
|
|
24588
|
+
borderOpacity = params.strokeOpacity;
|
|
24589
|
+
}
|
|
24590
|
+
if (params.type === 'bordered') {
|
|
24591
|
+
const rectX = newCardPoints[0].x * windowWidth;
|
|
24592
|
+
const rectY = newCardPoints[0].y * windowHeight;
|
|
24593
|
+
const rectWidth = newCardPoints[1].x * windowWidth - rectX;
|
|
24594
|
+
const rectHeight = newCardPoints[3].y * windowHeight - rectY;
|
|
24595
|
+
pathOfFrame.setAttribute('visibility', 'hidden');
|
|
24596
|
+
rectOfFrame.setAttribute('visibility', 'visible');
|
|
24597
|
+
rectOfFrame.setAttribute('x', rectX.toString());
|
|
24598
|
+
rectOfFrame.setAttribute('y', rectY.toString());
|
|
24599
|
+
rectOfFrame.setAttribute('width', rectWidth.toString());
|
|
24600
|
+
rectOfFrame.setAttribute('height', rectHeight.toString());
|
|
24601
|
+
rectOfFrame.setAttribute('stroke-opacity', borderOpacity.toString());
|
|
24602
|
+
svg.appendChild(rectOfFrame);
|
|
24603
|
+
} else {
|
|
24604
|
+
rectOfFrame.setAttribute('visibility', 'hidden');
|
|
24605
|
+
pathOfFrame.setAttribute('visibility', 'visible');
|
|
24606
|
+
// 掃描框的樣式,四個圓角
|
|
24607
|
+
const dFrame = newCardPoints.reduce((acc, {
|
|
24608
|
+
x,
|
|
24609
|
+
y
|
|
24610
|
+
}, index) => {
|
|
24611
|
+
var _a, _b;
|
|
24612
|
+
const lineRotio = 2;
|
|
24613
|
+
const previosPoint = (_a = newCardPoints[index - 1]) !== null && _a !== void 0 ? _a : newCardPoints[newCardPoints.length - 1];
|
|
24614
|
+
const nextPoint = (_b = newCardPoints[index + 1]) !== null && _b !== void 0 ? _b : newCardPoints[0];
|
|
24615
|
+
const _x1 = windowWidth * previosPoint.x;
|
|
24616
|
+
const _y1 = windowHeight * previosPoint.y;
|
|
24617
|
+
const _x2 = windowWidth * x;
|
|
24618
|
+
const _y2 = windowHeight * y;
|
|
24619
|
+
const _x3 = windowWidth * nextPoint.x;
|
|
24620
|
+
const _y3 = windowHeight * nextPoint.y;
|
|
24621
|
+
const v = new Vector({
|
|
24622
|
+
x: _x1,
|
|
24623
|
+
y: _y1
|
|
24624
|
+
}, {
|
|
24625
|
+
x: _x2,
|
|
24626
|
+
y: _y2
|
|
24627
|
+
});
|
|
24628
|
+
const vNext = new Vector({
|
|
24629
|
+
x: _x2,
|
|
24630
|
+
y: _y2
|
|
24631
|
+
}, {
|
|
24632
|
+
x: _x3,
|
|
24633
|
+
y: _y3
|
|
24634
|
+
});
|
|
24635
|
+
return `${acc} M ${_x2 - lineRotio * radius * v.unitVector.x},${_y2 - lineRotio * radius * v.unitVector.y} L ${_x2 - radius * v.unitVector.x}, ${_y2 - radius * v.unitVector.y} A 10, 10 0 0, ${_mirrored ? '0' : '1'} ${_x2 + radius * vNext.unitVector.x},${_y2 + radius * vNext.unitVector.y} L ${_x2 + lineRotio * radius * vNext.unitVector.x},${_y2 + lineRotio * radius * vNext.unitVector.y} `;
|
|
24636
|
+
}, '');
|
|
24637
|
+
pathOfFrame.setAttribute('d', dFrame);
|
|
24638
|
+
pathOfFrame.setAttribute('stroke-opacity', borderOpacity.toString());
|
|
24639
|
+
svg.appendChild(pathOfFrame);
|
|
24640
|
+
}
|
|
24641
|
+
};
|
|
24505
24642
|
// 創建帶有遮罩的長方形
|
|
24506
24643
|
const maskedRect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
|
|
24507
24644
|
maskedRect.setAttribute('width', '100%');
|
|
@@ -24509,12 +24646,10 @@ const renderOCRMask = params => {
|
|
|
24509
24646
|
maskedRect.setAttribute('fill', 'rgba(0, 0, 0, 0.65)');
|
|
24510
24647
|
maskedRect.setAttribute('mask', 'url(#hole)');
|
|
24511
24648
|
svg.appendChild(maskedRect);
|
|
24512
|
-
svg.appendChild(pathOfFrame);
|
|
24513
24649
|
// 添加SVG到容器
|
|
24514
24650
|
container.appendChild(svg);
|
|
24515
|
-
const
|
|
24516
|
-
|
|
24517
|
-
const newCardPoints = mirrored ? mirrorPoints(_newCardPoints) : _newCardPoints;
|
|
24651
|
+
const setCardPoints = (_newCardPoints, antiFraud = false, _mirrored = false) => {
|
|
24652
|
+
newCardPoints = _mirrored ? mirrorPoints(_newCardPoints) : _newCardPoints;
|
|
24518
24653
|
const d = newCardPoints.reduce((acc, {
|
|
24519
24654
|
x,
|
|
24520
24655
|
y
|
|
@@ -24545,9 +24680,9 @@ const renderOCRMask = params => {
|
|
|
24545
24680
|
x: _x3,
|
|
24546
24681
|
y: _y3
|
|
24547
24682
|
});
|
|
24548
|
-
return `${acc} ${command} ${_x2 - radius * v.unitVector.x},${_y2 - radius * v.unitVector.y} A 10,10 0 0, ${
|
|
24683
|
+
return `${acc} ${command} ${_x2 - radius * v.unitVector.x},${_y2 - radius * v.unitVector.y} A 10,10 0 0, ${_mirrored ? '0' : '1'} ${_x2 + radius * vNext.unitVector.x},${_y2 + radius * vNext.unitVector.y}`;
|
|
24549
24684
|
}, '') + ' Z'; // 結尾加上'Z'來關閉路徑
|
|
24550
|
-
|
|
24685
|
+
newCardPoints.reduce((acc, {
|
|
24551
24686
|
x,
|
|
24552
24687
|
y
|
|
24553
24688
|
}, index) => {
|
|
@@ -24577,31 +24712,126 @@ const renderOCRMask = params => {
|
|
|
24577
24712
|
x: _x3,
|
|
24578
24713
|
y: _y3
|
|
24579
24714
|
});
|
|
24580
|
-
return `${acc} M ${_x2 - lineRotio * radius * v.unitVector.x},${_y2 - lineRotio * radius * v.unitVector.y} L ${_x2 - radius * v.unitVector.x}, ${_y2 - radius * v.unitVector.y} A 10, 10 0 0, ${
|
|
24715
|
+
return `${acc} M ${_x2 - lineRotio * radius * v.unitVector.x},${_y2 - lineRotio * radius * v.unitVector.y} L ${_x2 - radius * v.unitVector.x}, ${_y2 - radius * v.unitVector.y} A 10, 10 0 0, ${_mirrored ? '0' : '1'} ${_x2 + radius * vNext.unitVector.x},${_y2 + radius * vNext.unitVector.y} L ${_x2 + lineRotio * radius * vNext.unitVector.x},${_y2 + lineRotio * radius * vNext.unitVector.y} `;
|
|
24581
24716
|
}, '');
|
|
24582
24717
|
path.setAttribute('d', d);
|
|
24583
|
-
|
|
24718
|
+
if (antiFraud) {
|
|
24719
|
+
setBorderType({
|
|
24720
|
+
type: borderType,
|
|
24721
|
+
mirrored: _mirrored
|
|
24722
|
+
});
|
|
24723
|
+
}
|
|
24584
24724
|
};
|
|
24585
|
-
|
|
24586
|
-
|
|
24725
|
+
function setBorderSuccess(color, opacity) {
|
|
24726
|
+
borderColorSuccess = color;
|
|
24727
|
+
borderOpacitySuccess = opacity;
|
|
24728
|
+
}
|
|
24729
|
+
function setCardBorderColor(status) {
|
|
24730
|
+
let color = borderColor;
|
|
24731
|
+
let opacity = borderOpacity;
|
|
24587
24732
|
switch (status) {
|
|
24588
24733
|
case 'error':
|
|
24589
|
-
color = 'var(--authme-scanner-error-color)';
|
|
24734
|
+
color = borderColor || 'var(--authme-scanner-error-color)';
|
|
24735
|
+
opacity = borderOpacity;
|
|
24590
24736
|
break;
|
|
24591
24737
|
case 'pass':
|
|
24592
|
-
color = 'var(--authme-scanning_color)';
|
|
24593
|
-
|
|
24594
|
-
default:
|
|
24595
|
-
color = '#fff';
|
|
24738
|
+
color = borderColorSuccess || 'var(--authme-scanning_color)';
|
|
24739
|
+
opacity = borderOpacitySuccess;
|
|
24596
24740
|
break;
|
|
24597
24741
|
}
|
|
24598
|
-
|
|
24599
|
-
|
|
24742
|
+
if (borderType === 'bordered') {
|
|
24743
|
+
rectOfFrame.setAttribute('stroke', color);
|
|
24744
|
+
rectOfFrame.setAttribute('stroke-opacity', opacity.toString());
|
|
24745
|
+
} else {
|
|
24746
|
+
pathOfFrame.setAttribute('stroke', color);
|
|
24747
|
+
pathOfFrame.setAttribute('stroke-opacity', opacity.toString());
|
|
24748
|
+
}
|
|
24749
|
+
}
|
|
24750
|
+
function frameImage(faceMode, zIndex, base64, color, opacity) {
|
|
24751
|
+
color = color !== null && color !== void 0 ? color : OcrFrame.imageColor;
|
|
24752
|
+
opacity = opacity !== null && opacity !== void 0 ? opacity : OcrFrame.imageOpacity;
|
|
24753
|
+
const rectX = newCardPoints[0].x * windowWidth;
|
|
24754
|
+
const rectY = newCardPoints[0].y * windowHeight;
|
|
24755
|
+
const rectWidth = newCardPoints[1].x * windowWidth - rectX;
|
|
24756
|
+
const rectHeight = newCardPoints[3].y * windowHeight - rectY;
|
|
24757
|
+
let domContainer = document.querySelector('#authme_frame_image');
|
|
24758
|
+
let domImage = document.querySelector('#authme_frame_image_svg');
|
|
24759
|
+
const domImageStyle = `
|
|
24760
|
+
width: 100%;
|
|
24761
|
+
height: 100%;
|
|
24762
|
+
background-color: ${color};
|
|
24763
|
+
opacity: ${opacity};
|
|
24764
|
+
-webkit-mask-image: url(data:image/svg+xml;base64,${base64});
|
|
24765
|
+
mask-image: url(data:image/svg+xml;base64,${base64});
|
|
24766
|
+
-webkit-mask-size: contain;
|
|
24767
|
+
mask-size: contain;
|
|
24768
|
+
mask-repeat: no-repeat no-repeat;
|
|
24769
|
+
mask-position: center center;
|
|
24770
|
+
`;
|
|
24771
|
+
if (!domContainer) {
|
|
24772
|
+
domContainer = document.createElement('div');
|
|
24773
|
+
domContainer.setAttribute('id', 'authme_frame_image');
|
|
24774
|
+
container.appendChild(domContainer);
|
|
24775
|
+
}
|
|
24776
|
+
if (!domImage) {
|
|
24777
|
+
domImage = document.createElement('div');
|
|
24778
|
+
domImage.setAttribute('id', 'authme_frame_image_svg');
|
|
24779
|
+
domContainer.appendChild(domImage);
|
|
24780
|
+
}
|
|
24781
|
+
if (faceMode === 'front') {
|
|
24782
|
+
domImage.classList.add('front');
|
|
24783
|
+
}
|
|
24784
|
+
domImage.setAttribute('style', domImageStyle);
|
|
24785
|
+
domImage.setAttribute('preserveAspectRatio', 'none');
|
|
24786
|
+
domContainer.setAttribute('style', `
|
|
24787
|
+
z-index: ${zIndex};
|
|
24788
|
+
position: absolute;
|
|
24789
|
+
left: ${rectX}px;
|
|
24790
|
+
top: ${rectY}px;
|
|
24791
|
+
width: ${rectWidth}px;
|
|
24792
|
+
height: ${rectHeight}px;
|
|
24793
|
+
opacity: ${opacity};
|
|
24794
|
+
`);
|
|
24795
|
+
}
|
|
24796
|
+
function frameText(zIndex, text, color, opacity) {
|
|
24797
|
+
color = color !== null && color !== void 0 ? color : OcrFrame.textColor;
|
|
24798
|
+
opacity = opacity !== null && opacity !== void 0 ? opacity : OcrFrame.textOpacity;
|
|
24799
|
+
const rectX = newCardPoints[0].x * windowWidth;
|
|
24800
|
+
const rectY = newCardPoints[0].y * windowHeight;
|
|
24801
|
+
const rectWidth = newCardPoints[1].x * windowWidth - rectX;
|
|
24802
|
+
const rectHeight = newCardPoints[3].y * windowHeight - rectY;
|
|
24803
|
+
let dom = document.querySelector('#authme_frame_text');
|
|
24804
|
+
if (!dom) {
|
|
24805
|
+
dom = document.createElement('div');
|
|
24806
|
+
dom.setAttribute('id', 'authme_frame_text');
|
|
24807
|
+
container.appendChild(dom);
|
|
24808
|
+
}
|
|
24809
|
+
dom.setAttribute('style', `
|
|
24810
|
+
z-index: ${zIndex};
|
|
24811
|
+
position: absolute;
|
|
24812
|
+
left: ${rectX}px;
|
|
24813
|
+
top: ${rectY}px;
|
|
24814
|
+
width: ${rectWidth}px;
|
|
24815
|
+
height: ${rectHeight}px;
|
|
24816
|
+
opacity: ${opacity};
|
|
24817
|
+
color: ${color};
|
|
24818
|
+
display: flex;
|
|
24819
|
+
align-items: center;
|
|
24820
|
+
justify-content: center;
|
|
24821
|
+
font-size: 60px;
|
|
24822
|
+
font-weight: 500;
|
|
24823
|
+
`);
|
|
24824
|
+
dom.textContent = text;
|
|
24825
|
+
}
|
|
24600
24826
|
// 初始化位置
|
|
24601
24827
|
setCardPoints(_cardPoints);
|
|
24602
24828
|
return {
|
|
24603
24829
|
setCardPoints,
|
|
24604
|
-
setCardBorderColor
|
|
24830
|
+
setCardBorderColor,
|
|
24831
|
+
setBorderType,
|
|
24832
|
+
frameImage,
|
|
24833
|
+
frameText,
|
|
24834
|
+
setBorderSuccess
|
|
24605
24835
|
};
|
|
24606
24836
|
};
|
|
24607
24837
|
|
|
@@ -24613,7 +24843,8 @@ const cardSvgStyle = `.d{fill:#f7f7f7;}.e{fill:#f2f2f2;}.f{fill:#ed5454;}.g{fill
|
|
|
24613
24843
|
function makeSvgTag(viewBox, styleSetting = '') {
|
|
24614
24844
|
const newSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
24615
24845
|
const style = makeStyleTag(styleSetting);
|
|
24616
|
-
newSvg.style['position'] = '
|
|
24846
|
+
newSvg.style['position'] = 'relative';
|
|
24847
|
+
newSvg.style['width'] = '100%';
|
|
24617
24848
|
newSvg.setAttribute('version', '1.1');
|
|
24618
24849
|
newSvg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
|
|
24619
24850
|
newSvg.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
|
|
@@ -24657,16 +24888,19 @@ function renderCardRotateAnimate(container) {
|
|
|
24657
24888
|
const {
|
|
24658
24889
|
cardMainGroup
|
|
24659
24890
|
} = createSvgCard();
|
|
24660
|
-
|
|
24661
|
-
|
|
24891
|
+
const div = document.createElement('div');
|
|
24892
|
+
div.setAttribute('class', 'arrow');
|
|
24893
|
+
div.style.transition = `opacity ${fadeDuration}ms`;
|
|
24894
|
+
div.style.opacity = '0';
|
|
24662
24895
|
cardSvg.style.transition = `transform ${aimateDuration}ms `;
|
|
24663
24896
|
cardSvg.style.zIndex = `var(--authme-layers-1-z-index)`;
|
|
24664
24897
|
frontArrowSvg.style.zIndex = `var(--authme-layers-2-z-index)`;
|
|
24665
24898
|
cardSvg.appendChild(cardMainGroup);
|
|
24666
|
-
|
|
24899
|
+
div.appendChild(cardSvg);
|
|
24667
24900
|
cardSvg.style.display = 'none';
|
|
24668
24901
|
frontArrowSvg.style.display = 'none';
|
|
24669
24902
|
backArrowSvg.style.display = 'none';
|
|
24903
|
+
container.appendChild(div);
|
|
24670
24904
|
return {
|
|
24671
24905
|
stopAnimate: () => {
|
|
24672
24906
|
if (rotateTimeout.length > 0) {
|
|
@@ -25000,7 +25234,7 @@ function renderCardRotateAnimate(container) {
|
|
|
25000
25234
|
});
|
|
25001
25235
|
}
|
|
25002
25236
|
function fadeAnimate(inOrOut) {
|
|
25003
|
-
|
|
25237
|
+
div.style.opacity = inOrOut === 'in' ? '0.8' : '0';
|
|
25004
25238
|
return new Promise(resolve => {
|
|
25005
25239
|
setTimeout(() => {
|
|
25006
25240
|
resolve(true);
|
|
@@ -25056,10 +25290,442 @@ function renderCardRotateAnimate(container) {
|
|
|
25056
25290
|
cardSvg.style.display = 'none';
|
|
25057
25291
|
frontArrowSvg.style.display = 'none';
|
|
25058
25292
|
backArrowSvg.style.display = 'none';
|
|
25059
|
-
//
|
|
25293
|
+
// div.removeChild(svg);
|
|
25060
25294
|
}
|
|
25061
25295
|
}
|
|
25062
25296
|
|
|
25297
|
+
const captureButton = () => {
|
|
25298
|
+
let dom = document.querySelector('#btn_capture');
|
|
25299
|
+
if (dom) {
|
|
25300
|
+
return dom;
|
|
25301
|
+
}
|
|
25302
|
+
const videoContainer = document.querySelector('.video-container');
|
|
25303
|
+
if (!videoContainer) {
|
|
25304
|
+
console.error('captureButton: videoContainer not found');
|
|
25305
|
+
return null;
|
|
25306
|
+
}
|
|
25307
|
+
dom = document.createElement('div');
|
|
25308
|
+
dom.id = 'btn_capture';
|
|
25309
|
+
const pictureInner = document.createElement('div');
|
|
25310
|
+
pictureInner.classList.add('inner');
|
|
25311
|
+
dom.appendChild(pictureInner);
|
|
25312
|
+
videoContainer.appendChild(dom);
|
|
25313
|
+
return dom;
|
|
25314
|
+
};
|
|
25315
|
+
|
|
25316
|
+
const modal = arg => {
|
|
25317
|
+
const authmeContainer = document.querySelector('.authme-container');
|
|
25318
|
+
if (!authmeContainer) {
|
|
25319
|
+
console.error('modal: authmeContainer not found');
|
|
25320
|
+
return;
|
|
25321
|
+
}
|
|
25322
|
+
function removeModal() {
|
|
25323
|
+
var _a;
|
|
25324
|
+
(_a = document.querySelector('.video-container__modal')) === null || _a === void 0 ? void 0 : _a.remove();
|
|
25325
|
+
}
|
|
25326
|
+
const domModal = document.createElement('div');
|
|
25327
|
+
const domHeaderContainer = document.createElement('div');
|
|
25328
|
+
const domHeader = document.createElement('div');
|
|
25329
|
+
const domContainer = document.createElement('div');
|
|
25330
|
+
const domTitle = document.createElement('div');
|
|
25331
|
+
const domSubtitle = document.createElement('div');
|
|
25332
|
+
const domImage = document.createElement('img');
|
|
25333
|
+
const domContent = document.createElement('div');
|
|
25334
|
+
const domFooter = document.createElement('div');
|
|
25335
|
+
const domClose = document.createElement('div');
|
|
25336
|
+
const domConfirm = document.createElement('div');
|
|
25337
|
+
const domCopyRight = document.createElement('div');
|
|
25338
|
+
domModal.classList.add('video-container__modal');
|
|
25339
|
+
domHeaderContainer.classList.add('video-container__modal-header-container');
|
|
25340
|
+
domHeader.classList.add('video-container__modal-header');
|
|
25341
|
+
domContainer.classList.add('video-container__modal-container');
|
|
25342
|
+
domTitle.classList.add('video-container__modal-title');
|
|
25343
|
+
domSubtitle.classList.add('video-container__modal-subtitle');
|
|
25344
|
+
domImage.classList.add('video-container__modal-image');
|
|
25345
|
+
domContent.classList.add('video-container__modal-content');
|
|
25346
|
+
domFooter.classList.add('video-container__modal-footer');
|
|
25347
|
+
domClose.classList.add('video-container__modal-close');
|
|
25348
|
+
domConfirm.classList.add('video-container__modal-confirm');
|
|
25349
|
+
domCopyRight.classList.add('video-container__modal-copy-right');
|
|
25350
|
+
domHeader.innerText = arg.header;
|
|
25351
|
+
domTitle.innerText = arg.title;
|
|
25352
|
+
domSubtitle.innerText = arg.subtitle;
|
|
25353
|
+
domImage.src = arg.image;
|
|
25354
|
+
domContent.innerHTML = arg.content;
|
|
25355
|
+
domClose.innerHTML = '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19.1943 6.41714C19.6393 5.97216 19.6393 5.2507 19.1943 4.80571C18.7493 4.36073 18.0278 4.36073 17.5829 4.80571L12 10.3886L6.41714 4.80572C5.97216 4.36073 5.2507 4.36073 4.80571 4.80571C4.36073 5.2507 4.36073 5.97216 4.80571 6.41714L10.3886 12L4.80571 17.5829C4.36073 18.0278 4.36073 18.7493 4.80571 19.1943C5.2507 19.6393 5.97216 19.6393 6.41714 19.1943L12 13.6114L17.5829 19.1943C18.0278 19.6393 18.7493 19.6393 19.1943 19.1943C19.6393 18.7493 19.6393 18.0278 19.1943 17.5829L13.6114 12L19.1943 6.41714Z" fill="#545454"/></svg>';
|
|
25356
|
+
domConfirm.innerText = arg.confirm;
|
|
25357
|
+
domClose.addEventListener('click', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
25358
|
+
if (arg.onClose) {
|
|
25359
|
+
yield arg.onClose();
|
|
25360
|
+
}
|
|
25361
|
+
removeModal();
|
|
25362
|
+
}));
|
|
25363
|
+
domConfirm.addEventListener('click', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
25364
|
+
if (arg.onConfirm) {
|
|
25365
|
+
yield arg.onConfirm();
|
|
25366
|
+
}
|
|
25367
|
+
removeModal();
|
|
25368
|
+
}));
|
|
25369
|
+
domHeaderContainer.appendChild(domHeader);
|
|
25370
|
+
domHeaderContainer.appendChild(domClose);
|
|
25371
|
+
domModal.appendChild(domHeaderContainer);
|
|
25372
|
+
domContainer.appendChild(domTitle);
|
|
25373
|
+
domContainer.appendChild(domSubtitle);
|
|
25374
|
+
domContainer.appendChild(domImage);
|
|
25375
|
+
domContainer.appendChild(domContent);
|
|
25376
|
+
domModal.appendChild(domContainer);
|
|
25377
|
+
domFooter.appendChild(domConfirm);
|
|
25378
|
+
domModal.appendChild(domFooter);
|
|
25379
|
+
if (arg.copyRight) {
|
|
25380
|
+
domCopyRight.innerText = arg.copyRight;
|
|
25381
|
+
domFooter.appendChild(domCopyRight);
|
|
25382
|
+
}
|
|
25383
|
+
authmeContainer.appendChild(domModal);
|
|
25384
|
+
};
|
|
25385
|
+
|
|
25386
|
+
const tiltFrame = isTilt => {
|
|
25387
|
+
var _a, _b, _c, _d;
|
|
25388
|
+
document.querySelector('.video-container');
|
|
25389
|
+
if (isTilt) {
|
|
25390
|
+
(_a = document.querySelector('#authme_frame_image')) === null || _a === void 0 ? void 0 : _a.classList.add('svg-tilt');
|
|
25391
|
+
(_b = document.querySelector('#authme_frame_image_svg')) === null || _b === void 0 ? void 0 : _b.classList.add('svg-tilt');
|
|
25392
|
+
} else {
|
|
25393
|
+
(_c = document.querySelector('#authme_frame_image')) === null || _c === void 0 ? void 0 : _c.classList.remove('svg-tilt');
|
|
25394
|
+
(_d = document.querySelector('#authme_frame_image_svg')) === null || _d === void 0 ? void 0 : _d.classList.remove('svg-tilt');
|
|
25395
|
+
}
|
|
25396
|
+
};
|
|
25397
|
+
const resetFrame = () => {
|
|
25398
|
+
const domContainer = document.querySelector('#authme_frame_image');
|
|
25399
|
+
const domImage = document.querySelector('#authme_frame_image_svg');
|
|
25400
|
+
if (domContainer) {
|
|
25401
|
+
domContainer.setAttribute('style', 'display: none');
|
|
25402
|
+
}
|
|
25403
|
+
if (domImage) {
|
|
25404
|
+
domImage.setAttribute('style', 'display: none');
|
|
25405
|
+
}
|
|
25406
|
+
};
|
|
25407
|
+
const countdownTimer = (time, doSomething) => {
|
|
25408
|
+
let end = false;
|
|
25409
|
+
const init = () => {
|
|
25410
|
+
const endTime = new Date().getTime() + time * 1000;
|
|
25411
|
+
const timer = setInterval(function () {
|
|
25412
|
+
const currentTime = new Date().getTime();
|
|
25413
|
+
const remainingTime = endTime - currentTime;
|
|
25414
|
+
if (remainingTime <= 0) {
|
|
25415
|
+
clearInterval(timer);
|
|
25416
|
+
end = true;
|
|
25417
|
+
if (doSomething) {
|
|
25418
|
+
doSomething();
|
|
25419
|
+
}
|
|
25420
|
+
}
|
|
25421
|
+
}, 300);
|
|
25422
|
+
};
|
|
25423
|
+
const getStatus = () => {
|
|
25424
|
+
return end;
|
|
25425
|
+
};
|
|
25426
|
+
return {
|
|
25427
|
+
init: init,
|
|
25428
|
+
end: getStatus
|
|
25429
|
+
};
|
|
25430
|
+
};
|
|
25431
|
+
|
|
25432
|
+
const translateService = getTranslateInstance();
|
|
25433
|
+
// TODO 處理參數
|
|
25434
|
+
const startThickness = (type, cardType, cardTypeConfig, setHintTextLocale, setCardPoints, setCardBorderColor, statusText, canvasSizeInfo$, showVideoElement, config, cardRotateByStage, getCardBorderPoint, setBorderType, setBorderSuccess, scanAnimationContainer, successAnimationContainer, frameImage, frameText, facingMode, ocrEngineConfig, sdkFlowTimeout = undefined, makeSDKFlowTimeout, image, video, retryBtn, completeBtn, confirmImageContainer) => {
|
|
25435
|
+
const videoToCanvas = (sizeInfo, data) => {
|
|
25436
|
+
const ctx2 = image.getContext('2d');
|
|
25437
|
+
image.width = sizeInfo.canvasWidth;
|
|
25438
|
+
image.height = sizeInfo.canvasHeight;
|
|
25439
|
+
if (data) {
|
|
25440
|
+
const imgData = ctx2.createImageData(image.width, image.height);
|
|
25441
|
+
imgData.data.set(data);
|
|
25442
|
+
ctx2.putImageData(imgData, 0, 0);
|
|
25443
|
+
} else {
|
|
25444
|
+
ctx2.drawImage(video, sizeInfo.startX, sizeInfo.startY, sizeInfo.width, sizeInfo.height, 0, 0, sizeInfo.canvasWidth, sizeInfo.canvasHeight);
|
|
25445
|
+
}
|
|
25446
|
+
};
|
|
25447
|
+
const checkConfirmImageManual = (sizeInfo, data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
25448
|
+
videoToCanvas(sizeInfo, data);
|
|
25449
|
+
showVideoElement(false);
|
|
25450
|
+
showElement(confirmImageContainer);
|
|
25451
|
+
const retryEvents = fromEvent(retryBtn, 'click').pipe(mapTo(true));
|
|
25452
|
+
const confirmEvents = fromEvent(completeBtn, 'click').pipe(mapTo(false));
|
|
25453
|
+
const allEvents$ = merge(retryEvents, confirmEvents);
|
|
25454
|
+
return yield firstValueFrom(allEvents$.pipe());
|
|
25455
|
+
});
|
|
25456
|
+
const generateImage = canvasSizeInfo => {
|
|
25457
|
+
return dataURItoBlob(image.toDataURL('image/jpeg', 0.85));
|
|
25458
|
+
// const ocrOriginImg = UintArrayToBlob(
|
|
25459
|
+
// canvasSizeInfo.width,
|
|
25460
|
+
// canvasSizeInfo.height,
|
|
25461
|
+
// data.data,
|
|
25462
|
+
// virtualCanvas
|
|
25463
|
+
// );
|
|
25464
|
+
//
|
|
25465
|
+
// return ocrOriginImg;
|
|
25466
|
+
};
|
|
25467
|
+
|
|
25468
|
+
const initThicknessFrame = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
25469
|
+
const cardMatchROI = config.getCardMatchROI ? yield config.getCardMatchROI() : undefined;
|
|
25470
|
+
yield cardRotateByStage(EAuthMeIDCardAntiFraudStage.Down, false, cardMatchROI);
|
|
25471
|
+
});
|
|
25472
|
+
const applyTextByResult = result => {
|
|
25473
|
+
if (!setCardBorderColor) return;
|
|
25474
|
+
statusText.classList.add('non-empty');
|
|
25475
|
+
switch (result.eStatus) {
|
|
25476
|
+
case EAuthMeIDCardAntiFraudStatus.PositionNotMatch:
|
|
25477
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.missmatch');
|
|
25478
|
+
sendStatusDescription$1(StatusDescription.PositionNotMatch);
|
|
25479
|
+
setCardBorderColor('error');
|
|
25480
|
+
break;
|
|
25481
|
+
case EAuthMeIDCardAntiFraudStatus.NeedMoreFrame:
|
|
25482
|
+
statusText.textContent = '';
|
|
25483
|
+
statusText.classList.remove('non-empty');
|
|
25484
|
+
sendStatusDescription$1(StatusDescription.NeedMoreFrame);
|
|
25485
|
+
setCardBorderColor('pass');
|
|
25486
|
+
break;
|
|
25487
|
+
case EAuthMeIDCardAntiFraudStatus.Detect:
|
|
25488
|
+
statusText.textContent = '';
|
|
25489
|
+
statusText.classList.remove('non-empty');
|
|
25490
|
+
sendStatusDescription$1(StatusDescription.NeedMoreFrame);
|
|
25491
|
+
setCardBorderColor('pass');
|
|
25492
|
+
break;
|
|
25493
|
+
case EAuthMeIDCardAntiFraudStatus.NoCard:
|
|
25494
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.noCard');
|
|
25495
|
+
sendStatusDescription$1(StatusDescription.NoCard);
|
|
25496
|
+
setCardBorderColor('error');
|
|
25497
|
+
break;
|
|
25498
|
+
case EAuthMeIDCardAntiFraudStatus.WrongCardType:
|
|
25499
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.wrongCardType');
|
|
25500
|
+
sendStatusDescription$1(StatusDescription.WrongCardType);
|
|
25501
|
+
setCardBorderColor('error');
|
|
25502
|
+
break;
|
|
25503
|
+
case EAuthMeIDCardAntiFraudStatus.CardThicknessFailed:
|
|
25504
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.CardThicknessFailed');
|
|
25505
|
+
sendStatusDescription$1(StatusDescription.CardThicknessFailed);
|
|
25506
|
+
setCardBorderColor('error');
|
|
25507
|
+
break;
|
|
25508
|
+
case EAuthMeIDCardAntiFraudStatus.Reflective:
|
|
25509
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.reflective');
|
|
25510
|
+
sendStatusDescription$1(StatusDescription.Reflective);
|
|
25511
|
+
setCardBorderColor('error');
|
|
25512
|
+
break;
|
|
25513
|
+
case EAuthMeIDCardAntiFraudStatus.Blur:
|
|
25514
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.blur');
|
|
25515
|
+
sendStatusDescription$1(StatusDescription.Blur);
|
|
25516
|
+
setCardBorderColor('error');
|
|
25517
|
+
break;
|
|
25518
|
+
case EAuthMeIDCardAntiFraudStatus.Gray:
|
|
25519
|
+
statusText.classList.remove('non-empty');
|
|
25520
|
+
statusText.textContent = '';
|
|
25521
|
+
sendStatusDescription$1(StatusDescription.Gray);
|
|
25522
|
+
setCardBorderColor('error');
|
|
25523
|
+
break;
|
|
25524
|
+
case EAuthMeIDCardAntiFraudStatus.Error:
|
|
25525
|
+
statusText.textContent = translateService.translate('sdk.general.error.alert.serverError');
|
|
25526
|
+
showErrorMessage(translateService.translate('sdk.general.error.alert.serverError'), true);
|
|
25527
|
+
sendStatusDescription$1(StatusDescription.Error);
|
|
25528
|
+
break;
|
|
25529
|
+
case EAuthMeIDCardAntiFraudStatus.NeedDeformationFrontal:
|
|
25530
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25531
|
+
break;
|
|
25532
|
+
case EAuthMeIDCardAntiFraudStatus.NeedDeformationLeft:
|
|
25533
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25534
|
+
break;
|
|
25535
|
+
case EAuthMeIDCardAntiFraudStatus.NeedDeformationRight:
|
|
25536
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25537
|
+
break;
|
|
25538
|
+
case EAuthMeIDCardAntiFraudStatus.NeedDeformationUp:
|
|
25539
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25540
|
+
break;
|
|
25541
|
+
case EAuthMeIDCardAntiFraudStatus.NeedDeformationDown:
|
|
25542
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25543
|
+
break;
|
|
25544
|
+
case EAuthMeIDCardAntiFraudStatus.CardCutByCamera:
|
|
25545
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.cardCutByCamera');
|
|
25546
|
+
break;
|
|
25547
|
+
case EAuthMeIDCardAntiFraudStatus.CardNotInROI:
|
|
25548
|
+
statusText.textContent = translateService.translate('verify.error.CardNotInROI');
|
|
25549
|
+
break;
|
|
25550
|
+
case EAuthMeIDCardAntiFraudStatus.CardTooSmall:
|
|
25551
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.getCloser');
|
|
25552
|
+
break;
|
|
25553
|
+
case EAuthMeIDCardAntiFraudStatus.NeedHoldCard:
|
|
25554
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needHoldCard');
|
|
25555
|
+
break;
|
|
25556
|
+
case EAuthMeIDCardAntiFraudStatus.StagePass:
|
|
25557
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.stagePass');
|
|
25558
|
+
setCardBorderColor('pass');
|
|
25559
|
+
break;
|
|
25560
|
+
case EAuthMeIDCardAntiFraudStatus.Pass:
|
|
25561
|
+
setCardBorderColor('pass');
|
|
25562
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.pass');
|
|
25563
|
+
break;
|
|
25564
|
+
case EAuthMeIDCardAntiFraudStatus.Failed:
|
|
25565
|
+
setCardBorderColor('error');
|
|
25566
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.pass');
|
|
25567
|
+
break;
|
|
25568
|
+
default:
|
|
25569
|
+
emptyStatusText();
|
|
25570
|
+
break;
|
|
25571
|
+
}
|
|
25572
|
+
function emptyStatusText() {
|
|
25573
|
+
setCardBorderColor(null);
|
|
25574
|
+
statusText.textContent = '';
|
|
25575
|
+
statusText.classList.remove('non-empty');
|
|
25576
|
+
}
|
|
25577
|
+
};
|
|
25578
|
+
const init = retry => canvasSizeInfo$.pipe(take(1), switchMap(canvasSizeInfo => from(config.setFrameSize(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight)).pipe(switchMap(() => checkOnlineStatus(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'))), tap(() => {
|
|
25579
|
+
if (!retry) {
|
|
25580
|
+
startSpinner(translateService.translate('sdk.general.loading'), true);
|
|
25581
|
+
}
|
|
25582
|
+
}), switchMap(() => config.thicknessStart ? config.thicknessStart(getCardBorderPoint(), type, setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationContainer, frameImage, frameText, facingMode, cardType, cardTypeConfig, retry) : of(thicknessDefaultConfig)), switchMap(result => {
|
|
25583
|
+
tiltFrame(true);
|
|
25584
|
+
if (result && result.thicknessWelcomeSetting && result.thicknessWelcomeSetting.welcome && !retry) {
|
|
25585
|
+
thicknessMode = cardTypeConfig.mode;
|
|
25586
|
+
return new Observable(observer => {
|
|
25587
|
+
const pageInfo = result.thicknessWelcomeSetting;
|
|
25588
|
+
modal({
|
|
25589
|
+
header: translateService.translate('sdk.thickness.detection.guide.title'),
|
|
25590
|
+
title: pageInfo.title.enable ? pageInfo.title.text : translateService.translate(thicknessDefaultConfig.thicknessWelcomeSetting.title.text),
|
|
25591
|
+
subtitle: pageInfo.subtitle ? pageInfo.subtitle.text : translateService.translate(thicknessDefaultConfig.thicknessWelcomeSetting.subtitle.text),
|
|
25592
|
+
image: pageInfo.imageShow.enable ? pageInfo.imageShow.src : translateService.translate(thicknessDefaultConfig.thicknessWelcomeSetting.imageShow.src),
|
|
25593
|
+
content: pageInfo.content.enable ? pageInfo.content.text : translateService.translate(thicknessDefaultConfig.thicknessWelcomeSetting.content.text),
|
|
25594
|
+
confirm: translateService.translate('sdk.general.continue'),
|
|
25595
|
+
onClose: () => {
|
|
25596
|
+
return observer.error({
|
|
25597
|
+
isSuccess: false,
|
|
25598
|
+
code: `${ErrorCode.USER_CANCEL}`,
|
|
25599
|
+
message: new AuthmeError(ErrorCode.USER_CANCEL).message,
|
|
25600
|
+
data: {}
|
|
25601
|
+
});
|
|
25602
|
+
},
|
|
25603
|
+
onConfirm: () => {
|
|
25604
|
+
observer.next(canvasSizeInfo);
|
|
25605
|
+
observer.complete();
|
|
25606
|
+
}
|
|
25607
|
+
});
|
|
25608
|
+
});
|
|
25609
|
+
} else {
|
|
25610
|
+
return of(canvasSizeInfo);
|
|
25611
|
+
}
|
|
25612
|
+
}), tap(() => {
|
|
25613
|
+
stopSpinner();
|
|
25614
|
+
if (!retry) {
|
|
25615
|
+
thicknessTimer.init();
|
|
25616
|
+
}
|
|
25617
|
+
}), map(() => canvasSizeInfo))));
|
|
25618
|
+
const autoDetectProcess = retry => init(retry).pipe(tap(() => {
|
|
25619
|
+
setStatusView(StatusView.Running);
|
|
25620
|
+
if (ocrEngineConfig.expiredIn && !sdkFlowTimeout) {
|
|
25621
|
+
sdkFlowTimeout = makeSDKFlowTimeout(ocrEngineConfig.expiredIn);
|
|
25622
|
+
}
|
|
25623
|
+
}), switchMap(canvasSizeInfo => {
|
|
25624
|
+
// 不用使用 await 等待 initThicknessFrame 完成, 因為這段是非同步的, 單純出 UI 而已
|
|
25625
|
+
initThicknessFrame();
|
|
25626
|
+
if (!config.onThicknessFrame) {
|
|
25627
|
+
return of(canvasSizeInfo);
|
|
25628
|
+
}
|
|
25629
|
+
return of(true).pipe(sendFrame(canvasSizeInfo, image, video, config.onThicknessFrame, ocrEngineConfig.fraudMaxFps, false, 'jpg', cardType, undefined, type), tap(x => applyTextByResult(x.result)), filter(({
|
|
25630
|
+
result
|
|
25631
|
+
}) => {
|
|
25632
|
+
if (result.eStatus === EAuthMeIDCardAntiFraudStatus.Pass) {
|
|
25633
|
+
statusText.textContent = translateService.translate('sdk.general.verify.success');
|
|
25634
|
+
}
|
|
25635
|
+
return result.eStatus === EAuthMeIDCardAntiFraudStatus.Pass || thicknessTimer.end();
|
|
25636
|
+
}), take(1),
|
|
25637
|
+
// tap(() => {
|
|
25638
|
+
// statusText.textContent = translateService.translate(
|
|
25639
|
+
// 'sdk.general.verify.success'
|
|
25640
|
+
// );
|
|
25641
|
+
// }),
|
|
25642
|
+
switchMap(({
|
|
25643
|
+
result
|
|
25644
|
+
}) => {
|
|
25645
|
+
if (thicknessTimer.end()) {
|
|
25646
|
+
startSpinner(translateService.translate('sdk.general.uploading'), true);
|
|
25647
|
+
videoToCanvas(canvasSizeInfo, result.imageData);
|
|
25648
|
+
return config.confirmThickness ? config.confirmThickness(generateImage(), cardType) : of(false);
|
|
25649
|
+
}
|
|
25650
|
+
return from(checkConfirmImageManual(canvasSizeInfo, result.imageData)).pipe(tap(() => applyTextByResult('')), switchMap(needRetry => {
|
|
25651
|
+
startSpinner(translateService.translate('sdk.general.uploading'), true);
|
|
25652
|
+
return needRetry ? of(true) : from(config.confirmThickness ? config.confirmThickness(generateImage(), cardType) : of(false)).pipe(tap(() => sendStatusAction$1(StatusAction.Uploading)), map(confirmResp => !confirmResp));
|
|
25653
|
+
}), switchMap(confirmResp => {
|
|
25654
|
+
showVideoElement(true);
|
|
25655
|
+
hideElement(confirmImageContainer);
|
|
25656
|
+
stopSpinner();
|
|
25657
|
+
if (confirmResp) {
|
|
25658
|
+
return autoDetectProcess(true);
|
|
25659
|
+
} else {
|
|
25660
|
+
return of(confirmResp);
|
|
25661
|
+
}
|
|
25662
|
+
}));
|
|
25663
|
+
}));
|
|
25664
|
+
}));
|
|
25665
|
+
const manualProcess = () => init(false).pipe(tap(() => {
|
|
25666
|
+
setStatusView(StatusView.Running);
|
|
25667
|
+
if (ocrEngineConfig.expiredIn && !sdkFlowTimeout) {
|
|
25668
|
+
sdkFlowTimeout = makeSDKFlowTimeout(ocrEngineConfig.expiredIn);
|
|
25669
|
+
}
|
|
25670
|
+
}), switchMap(() => {
|
|
25671
|
+
return new Observable(observer => {
|
|
25672
|
+
const captureBtn = captureButton();
|
|
25673
|
+
if (captureBtn) {
|
|
25674
|
+
showElement(captureBtn);
|
|
25675
|
+
}
|
|
25676
|
+
const interval$ = interval(400);
|
|
25677
|
+
const checkTimeout = interval$.pipe(takeWhile(() => !thicknessTimer.end()),
|
|
25678
|
+
// 當 end() 函數返回 false 時繼續
|
|
25679
|
+
finalize$1(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
25680
|
+
if (thicknessTimer.end()) {
|
|
25681
|
+
startSpinner(translateService.translate('sdk.general.uploading'), true);
|
|
25682
|
+
const sizeInfo = yield getCanvasSize(video);
|
|
25683
|
+
videoToCanvas(sizeInfo);
|
|
25684
|
+
if (config.confirmThickness) {
|
|
25685
|
+
yield config.confirmThickness(generateImage(), cardType);
|
|
25686
|
+
}
|
|
25687
|
+
hideElement(captureBtn);
|
|
25688
|
+
checkTimeout.unsubscribe();
|
|
25689
|
+
observer.next(sizeInfo);
|
|
25690
|
+
}
|
|
25691
|
+
}))).subscribe(() => {
|
|
25692
|
+
// 在每次 interval 發出值時執行的操作
|
|
25693
|
+
});
|
|
25694
|
+
fromEvent(captureBtn, 'click').pipe(switchMap(() => getCanvasSize(video)), switchMap(canvasSizeInfo => {
|
|
25695
|
+
return from(checkConfirmImageManual(canvasSizeInfo)).pipe(switchMap(needRetry => {
|
|
25696
|
+
startSpinner(translateService.translate('sdk.general.uploading'), true);
|
|
25697
|
+
return needRetry ? of(true) : from(config.confirmThickness ? config.confirmThickness(generateImage(), cardType) : of(false)).pipe(tap(() => sendStatusAction$1(StatusAction.Uploading)), map(confirmResp => !confirmResp));
|
|
25698
|
+
}), tap(confirmResp => {
|
|
25699
|
+
hideElement(confirmImageContainer);
|
|
25700
|
+
stopSpinner();
|
|
25701
|
+
showVideoElement(true);
|
|
25702
|
+
if (!confirmResp) {
|
|
25703
|
+
checkTimeout.unsubscribe(); // 取消 interval$ 的訂閱
|
|
25704
|
+
hideElement(captureBtn);
|
|
25705
|
+
observer.next(canvasSizeInfo);
|
|
25706
|
+
}
|
|
25707
|
+
}));
|
|
25708
|
+
}), map(confirmResp => {
|
|
25709
|
+
of(confirmResp);
|
|
25710
|
+
})).subscribe();
|
|
25711
|
+
});
|
|
25712
|
+
}));
|
|
25713
|
+
const thicknessTimer = countdownTimer(60); // TODO default 60 need get from server
|
|
25714
|
+
let thicknessMode = cardTypeConfig.mode;
|
|
25715
|
+
const point = getCardBorderPoint();
|
|
25716
|
+
setCardPoints(point.map(([x, y]) => ({
|
|
25717
|
+
x,
|
|
25718
|
+
y
|
|
25719
|
+
})), false);
|
|
25720
|
+
setCardBorderColor(null);
|
|
25721
|
+
setHintTextLocale();
|
|
25722
|
+
if (thicknessMode === 'auto') {
|
|
25723
|
+
return autoDetectProcess(false);
|
|
25724
|
+
} else {
|
|
25725
|
+
return manualProcess();
|
|
25726
|
+
}
|
|
25727
|
+
};
|
|
25728
|
+
|
|
25063
25729
|
const initEvenTrackingStatus = ocrConfig => {
|
|
25064
25730
|
setFeature$1(ocrConfig.needAntiFraud ? Feature.OCRFraud : Feature.OCR);
|
|
25065
25731
|
};
|
|
@@ -25124,6 +25790,7 @@ function startOCR(config) {
|
|
|
25124
25790
|
lottieMask,
|
|
25125
25791
|
arrowAnimationContainer,
|
|
25126
25792
|
scanAnimationContainer,
|
|
25793
|
+
successAnimationDom,
|
|
25127
25794
|
antiFraudInstructionAnimationContainer,
|
|
25128
25795
|
confirmImageContainer,
|
|
25129
25796
|
imageTypeText,
|
|
@@ -25139,7 +25806,11 @@ function startOCR(config) {
|
|
|
25139
25806
|
const cardPoints = getCardBorderPoint();
|
|
25140
25807
|
const {
|
|
25141
25808
|
setCardPoints,
|
|
25142
|
-
setCardBorderColor
|
|
25809
|
+
setCardBorderColor,
|
|
25810
|
+
setBorderType,
|
|
25811
|
+
frameImage,
|
|
25812
|
+
frameText,
|
|
25813
|
+
setBorderSuccess
|
|
25143
25814
|
} = renderOCRMask({
|
|
25144
25815
|
cardPoints: cardPoints.map(point => ({
|
|
25145
25816
|
x: point[0],
|
|
@@ -25168,9 +25839,18 @@ function startOCR(config) {
|
|
|
25168
25839
|
// fromEvent(window, 'resize').pipe(switchMapTo(getCanvasSize(video)))
|
|
25169
25840
|
);
|
|
25170
25841
|
|
|
25842
|
+
const currentType = (() => {
|
|
25843
|
+
const data = {};
|
|
25844
|
+
return (method, obj) => {
|
|
25845
|
+
if (method === 'set') {
|
|
25846
|
+
Object.assign(data, obj);
|
|
25847
|
+
}
|
|
25848
|
+
return data;
|
|
25849
|
+
};
|
|
25850
|
+
})();
|
|
25171
25851
|
function makeSDKFlowTimeout(expiredIn) {
|
|
25172
25852
|
return setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
25173
|
-
asyncShowErrorMessage(translateService.translate('
|
|
25853
|
+
asyncShowErrorMessage(translateService.translate('sdk.general.error.timeout.content'), false);
|
|
25174
25854
|
yield waitTime(3 * TIME_UNIT.SECOND);
|
|
25175
25855
|
timeout$.next({
|
|
25176
25856
|
isSuccess: false,
|
|
@@ -25194,7 +25874,7 @@ function startOCR(config) {
|
|
|
25194
25874
|
statusText.classList.add('non-empty');
|
|
25195
25875
|
switch (result.eStatus) {
|
|
25196
25876
|
case EAuthMeIDCardAntiFraudStatus.PositionNotMatch:
|
|
25197
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25877
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.missmatch');
|
|
25198
25878
|
sendStatusDescription$1(StatusDescription.PositionNotMatch);
|
|
25199
25879
|
setCardBorderColor('error');
|
|
25200
25880
|
break;
|
|
@@ -25211,22 +25891,22 @@ function startOCR(config) {
|
|
|
25211
25891
|
setCardBorderColor('pass');
|
|
25212
25892
|
break;
|
|
25213
25893
|
case EAuthMeIDCardAntiFraudStatus.NoCard:
|
|
25214
|
-
statusText.textContent = translateService.translate('verify.error.noCard');
|
|
25894
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.noCard');
|
|
25215
25895
|
sendStatusDescription$1(StatusDescription.NoCard);
|
|
25216
25896
|
setCardBorderColor('error');
|
|
25217
25897
|
break;
|
|
25218
25898
|
case EAuthMeIDCardAntiFraudStatus.WrongCardType:
|
|
25219
|
-
statusText.textContent = translateService.translate('verify.error.wrongCardType');
|
|
25899
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.wrongCardType');
|
|
25220
25900
|
sendStatusDescription$1(StatusDescription.WrongCardType);
|
|
25221
25901
|
setCardBorderColor('error');
|
|
25222
25902
|
break;
|
|
25223
25903
|
case EAuthMeIDCardAntiFraudStatus.Reflective:
|
|
25224
|
-
statusText.textContent = translateService.translate('verify.error.reflective');
|
|
25904
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.reflective');
|
|
25225
25905
|
sendStatusDescription$1(StatusDescription.Reflective);
|
|
25226
25906
|
setCardBorderColor('error');
|
|
25227
25907
|
break;
|
|
25228
25908
|
case EAuthMeIDCardAntiFraudStatus.Blur:
|
|
25229
|
-
statusText.textContent = translateService.translate('verify.error.blur');
|
|
25909
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.blur');
|
|
25230
25910
|
blurCount++;
|
|
25231
25911
|
sendStatusDescription$1(StatusDescription.Blur);
|
|
25232
25912
|
setCardBorderColor('error');
|
|
@@ -25238,55 +25918,55 @@ function startOCR(config) {
|
|
|
25238
25918
|
setCardBorderColor('error');
|
|
25239
25919
|
break;
|
|
25240
25920
|
case EAuthMeIDCardAntiFraudStatus.Error:
|
|
25241
|
-
statusText.textContent = translateService.translate('
|
|
25242
|
-
showErrorMessage(translateService.translate('
|
|
25921
|
+
statusText.textContent = translateService.translate('sdk.general.error.alert.serverError');
|
|
25922
|
+
showErrorMessage(translateService.translate('sdk.general.error.alert.serverError'), true);
|
|
25243
25923
|
sendStatusDescription$1(StatusDescription.Error);
|
|
25244
25924
|
break;
|
|
25245
25925
|
case EAuthMeIDCardAntiFraudStatus.NeedDeformationFrontal:
|
|
25246
25926
|
needDeformationCount++;
|
|
25247
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25927
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25248
25928
|
break;
|
|
25249
25929
|
case EAuthMeIDCardAntiFraudStatus.NeedDeformationLeft:
|
|
25250
25930
|
needDeformationCount++;
|
|
25251
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25931
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25252
25932
|
break;
|
|
25253
25933
|
case EAuthMeIDCardAntiFraudStatus.NeedDeformationRight:
|
|
25254
25934
|
needDeformationCount++;
|
|
25255
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25935
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25256
25936
|
break;
|
|
25257
25937
|
case EAuthMeIDCardAntiFraudStatus.NeedDeformationUp:
|
|
25258
25938
|
needDeformationCount++;
|
|
25259
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25939
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25260
25940
|
break;
|
|
25261
25941
|
case EAuthMeIDCardAntiFraudStatus.NeedDeformationDown:
|
|
25262
25942
|
needDeformationCount++;
|
|
25263
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25943
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25264
25944
|
break;
|
|
25265
25945
|
case EAuthMeIDCardAntiFraudStatus.CardCutByCamera:
|
|
25266
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25946
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.cardCutByCamera');
|
|
25267
25947
|
break;
|
|
25268
25948
|
case EAuthMeIDCardAntiFraudStatus.CardNotInROI:
|
|
25269
25949
|
statusText.textContent = translateService.translate('verify.error.CardNotInROI');
|
|
25270
25950
|
break;
|
|
25271
25951
|
case EAuthMeIDCardAntiFraudStatus.CardTooSmall:
|
|
25272
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25952
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.getCloser');
|
|
25273
25953
|
break;
|
|
25274
25954
|
case EAuthMeIDCardAntiFraudStatus.NeedHoldCard:
|
|
25275
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25955
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needHoldCard');
|
|
25276
25956
|
break;
|
|
25277
25957
|
case EAuthMeIDCardAntiFraudStatus.StagePass:
|
|
25278
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25958
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.stagePass');
|
|
25279
25959
|
stopAnimate();
|
|
25280
25960
|
previosAntiFraudAnimateTime = Date.now();
|
|
25281
25961
|
setCardBorderColor('pass');
|
|
25282
25962
|
break;
|
|
25283
25963
|
case EAuthMeIDCardAntiFraudStatus.Pass:
|
|
25284
25964
|
setCardBorderColor('pass');
|
|
25285
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25965
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.pass');
|
|
25286
25966
|
break;
|
|
25287
25967
|
case EAuthMeIDCardAntiFraudStatus.Failed:
|
|
25288
25968
|
setCardBorderColor('pass');
|
|
25289
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25969
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.pass');
|
|
25290
25970
|
break;
|
|
25291
25971
|
default:
|
|
25292
25972
|
emptyStatusText();
|
|
@@ -25307,7 +25987,7 @@ function startOCR(config) {
|
|
|
25307
25987
|
statusText.classList.remove('non-empty');
|
|
25308
25988
|
}
|
|
25309
25989
|
};
|
|
25310
|
-
const antiFraudStart$ = of(true).pipe(switchMap(() => checkOnlineStatus(translateService.translate('
|
|
25990
|
+
const antiFraudStart$ = of(true).pipe(switchMap(() => checkOnlineStatus(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'))), switchMap(() => canvasSizeInfo$), switchMap(canvasSizeInfo => from(config.setFrameSize(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight)).pipe(switchMap(() => config.antiFraudStart(getCardBorderPoint(), setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationDom, frameImage, frameText, facingMode)), tap(() => __awaiter(this, void 0, void 0, function* () {
|
|
25311
25991
|
setStatusView(StatusView.Aligning);
|
|
25312
25992
|
if (buttonDisable$) {
|
|
25313
25993
|
const cardMatchROI = config.getCardMatchROI ? yield config.getCardMatchROI() : undefined;
|
|
@@ -25337,7 +26017,7 @@ function startOCR(config) {
|
|
|
25337
26017
|
// }
|
|
25338
26018
|
// throw err;
|
|
25339
26019
|
// }),
|
|
25340
|
-
takeWhile(x => x.eStatus !== EAuthMeIDCardAntiFraudStatus.Pass,
|
|
26020
|
+
takeWhile$1(x => x.eStatus !== EAuthMeIDCardAntiFraudStatus.Pass,
|
|
25341
26021
|
// &&
|
|
25342
26022
|
// x.eStatus !== EAuthMeIDCardAntiFraudStatus.Failed,
|
|
25343
26023
|
true))), shareReplay(1));
|
|
@@ -25368,57 +26048,57 @@ function startOCR(config) {
|
|
|
25368
26048
|
if (!config.ocrConfig.needOCR && type === EAuthMeCardClass.TWN_IDCard_Front) {
|
|
25369
26049
|
return of(true);
|
|
25370
26050
|
}
|
|
25371
|
-
if (config.ocrConfig.needAntiFraud) {
|
|
25372
|
-
|
|
25373
|
-
|
|
25374
|
-
|
|
25375
|
-
|
|
25376
|
-
|
|
25377
|
-
|
|
25378
|
-
}
|
|
26051
|
+
// if (config.ocrConfig.needAntiFraud) {
|
|
26052
|
+
const point = getCardBorderPoint();
|
|
26053
|
+
setCardPoints(point.map(([x, y]) => ({
|
|
26054
|
+
x,
|
|
26055
|
+
y
|
|
26056
|
+
})), config.ocrConfig.needAntiFraud);
|
|
26057
|
+
setHintTextLocale();
|
|
26058
|
+
// }
|
|
25379
26059
|
const applyTextByResult = result => {
|
|
25380
26060
|
statusText.classList.add('non-empty');
|
|
25381
26061
|
switch (result.eStatus) {
|
|
25382
26062
|
case EAuthMeCardOCRStatus.NoCard:
|
|
25383
26063
|
case EAuthMeMRZServiceStatus.NotFound:
|
|
25384
|
-
statusText.textContent = translateService.translate('verify.error.noCard');
|
|
26064
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.noCard');
|
|
25385
26065
|
sendStatusDescription$1(StatusDescription.NoCard);
|
|
25386
26066
|
setCardBorderColor('error');
|
|
25387
26067
|
break;
|
|
25388
26068
|
case EAuthMeCardOCRStatus.WrongCardType:
|
|
25389
|
-
statusText.textContent = translateService.translate('verify.error.wrongCardType');
|
|
26069
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.wrongCardType');
|
|
25390
26070
|
sendStatusDescription$1(StatusDescription.WrongCardType);
|
|
25391
26071
|
setCardBorderColor('error');
|
|
25392
26072
|
break;
|
|
25393
26073
|
case EAuthMeCardOCRStatus.PositionNotMatch:
|
|
25394
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
26074
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.missmatch');
|
|
25395
26075
|
sendStatusDescription$1(StatusDescription.PositionNotMatch);
|
|
25396
26076
|
setCardBorderColor('error');
|
|
25397
26077
|
break;
|
|
25398
26078
|
case EAuthMeCardOCRStatus.Reflective:
|
|
25399
|
-
statusText.textContent = translateService.translate('verify.error.reflective');
|
|
26079
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.reflective');
|
|
25400
26080
|
sendStatusDescription$1(StatusDescription.Reflective);
|
|
25401
26081
|
setCardBorderColor('error');
|
|
25402
26082
|
break;
|
|
25403
26083
|
case EAuthMeCardOCRStatus.Blur:
|
|
25404
|
-
statusText.textContent = translateService.translate('verify.error.blur');
|
|
26084
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.blur');
|
|
25405
26085
|
sendStatusDescription$1(StatusDescription.Blur);
|
|
25406
26086
|
setCardBorderColor('error');
|
|
25407
26087
|
blurCount++;
|
|
25408
26088
|
break;
|
|
25409
26089
|
case EAuthMeMRZServiceStatus.RecogFailed:
|
|
25410
26090
|
case EAuthMeMRZServiceStatus.WrongCardType:
|
|
25411
|
-
statusText.textContent = translateService.translate('verify.error.wrongCardType');
|
|
26091
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.wrongCardType');
|
|
25412
26092
|
sendStatusDescription$1(StatusDescription.WrongCardType);
|
|
25413
26093
|
setCardBorderColor('error');
|
|
25414
26094
|
break;
|
|
25415
26095
|
case EAuthMeMRZServiceStatus.NotAligned:
|
|
25416
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
26096
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.missmatch');
|
|
25417
26097
|
sendStatusDescription$1(StatusDescription.NotAligned);
|
|
25418
26098
|
setCardBorderColor('error');
|
|
25419
26099
|
break;
|
|
25420
26100
|
case EAuthMeMRZServiceStatus.Reflective:
|
|
25421
|
-
statusText.textContent = translateService.translate('verify.error.reflective');
|
|
26101
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.reflective');
|
|
25422
26102
|
sendStatusDescription$1(StatusDescription.Reflective);
|
|
25423
26103
|
setCardBorderColor('error');
|
|
25424
26104
|
break;
|
|
@@ -25427,7 +26107,8 @@ function startOCR(config) {
|
|
|
25427
26107
|
showCameraSwitchButton(deviceMetas);
|
|
25428
26108
|
}
|
|
25429
26109
|
};
|
|
25430
|
-
const init = retry => canvasSizeInfo$.pipe(take(1), switchMap(canvasSizeInfo => from(config.setFrameSize(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight)).pipe(switchMap(() => checkOnlineStatus(translateService.translate('
|
|
26110
|
+
const init = retry => canvasSizeInfo$.pipe(take(1), switchMap(canvasSizeInfo => from(config.setFrameSize(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight)).pipe(switchMap(() => checkOnlineStatus(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'))), switchMap(() => config.ocrStart(getCardBorderPoint(), type, setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationDom, frameImage, frameText, facingMode, cardType, retry)), tap(() => {
|
|
26111
|
+
tiltFrame(false);
|
|
25431
26112
|
stopSpinner();
|
|
25432
26113
|
showElement(scanAnimationContainer);
|
|
25433
26114
|
scanAnimationContainer.style.width = `${cardSizeInfo.width + scanPadding}px`;
|
|
@@ -25455,7 +26136,7 @@ function startOCR(config) {
|
|
|
25455
26136
|
// }),
|
|
25456
26137
|
take(1), tap(() => {
|
|
25457
26138
|
setCardBorderColor('pass');
|
|
25458
|
-
statusText.textContent = translateService.translate('verify.
|
|
26139
|
+
statusText.textContent = translateService.translate('sdk.general.verify.success');
|
|
25459
26140
|
lottie.stop('scan');
|
|
25460
26141
|
hideElement(scanAnimationContainer);
|
|
25461
26142
|
}), switchMap(resp => of(true).pipe(tap(() => {
|
|
@@ -25463,23 +26144,60 @@ function startOCR(config) {
|
|
|
25463
26144
|
}), map(() => resp))), switchMap(({
|
|
25464
26145
|
result
|
|
25465
26146
|
}) => from(type === EAuthMeCardClass.Passport && config.ocrConfig.disablePassportConfirm ? of(false) : checkConfirmImage(result.imageData, result.iWidth, result.iHeight)).pipe(switchMap(needRetry => {
|
|
25466
|
-
startSpinner(translateService.translate('
|
|
26147
|
+
startSpinner(translateService.translate('sdk.general.uploading'));
|
|
25467
26148
|
return needRetry ? of(true) : from(config.confirmImage(type, cardType)).pipe(tap(() => sendStatusAction$1(StatusAction.Uploading)), map(confirmResp => !confirmResp));
|
|
25468
26149
|
}), tap(() => {
|
|
25469
26150
|
hideElement(confirmImageContainer);
|
|
26151
|
+
stopSpinner();
|
|
25470
26152
|
showVideoElement();
|
|
25471
26153
|
}), switchMap(needRetry => needRetry ? recognition(true) : of(true)))))));
|
|
25472
26154
|
return recognition(false);
|
|
25473
26155
|
}
|
|
25474
|
-
function createFlowByType(type, cardType) {
|
|
26156
|
+
function createFlowByType(type, cardType, cardTypeConfig) {
|
|
25475
26157
|
return of(true).pipe(tap(() => {
|
|
26158
|
+
currentType('set', {
|
|
26159
|
+
type,
|
|
26160
|
+
cardType
|
|
26161
|
+
});
|
|
25476
26162
|
setStatusEvent$1(cardClassMapping(type));
|
|
25477
26163
|
setUIByType(type, cardType);
|
|
25478
|
-
}), switchMap(() =>
|
|
25479
|
-
|
|
25480
|
-
|
|
25481
|
-
|
|
26164
|
+
}), switchMap(() => {
|
|
26165
|
+
if (type === EAuthMeCardClass.TWN_IDCard_Front && config.ocrConfig.needAntiFraud) {
|
|
26166
|
+
return from(startAntiFraud(type)).pipe(switchMap(() => {
|
|
26167
|
+
hideFrameUI(false);
|
|
26168
|
+
return startOCR(type, cardType);
|
|
26169
|
+
}));
|
|
26170
|
+
} else if (cardType.toLocaleLowerCase().includes('thickness')) {
|
|
26171
|
+
hideCameraSwitchButton();
|
|
26172
|
+
return startThickness(type, cardType, cardTypeConfig, setHintTextLocale, setCardPoints, setCardBorderColor, statusText, canvasSizeInfo$, showVideoElement, {
|
|
26173
|
+
getCardMatchROI: config.getCardMatchROI,
|
|
26174
|
+
setFrameSize: config.setFrameSize,
|
|
26175
|
+
thicknessStart: config.thicknessStart,
|
|
26176
|
+
onThicknessFrame: config.onThicknessFrame,
|
|
26177
|
+
confirmThickness: config.confirmThickness
|
|
26178
|
+
}, cardRotateByStage, getCardBorderPoint, setBorderType, setBorderSuccess, scanAnimationContainer, successAnimationDom, frameImage, frameText, facingMode, ocrEngineConfig, sdkFlowTimeout, makeSDKFlowTimeout, image, video, retryBtn, completeBtn, confirmImageContainer);
|
|
26179
|
+
} else if (cardType.toLocaleLowerCase().includes('front')) {
|
|
26180
|
+
hideFrameUI(false);
|
|
26181
|
+
return startOCR(type, cardType);
|
|
26182
|
+
} else if (cardType.toLocaleLowerCase().includes('back')) {
|
|
26183
|
+
hideFrameUI(false);
|
|
26184
|
+
return startOCR(type, cardType);
|
|
26185
|
+
} else if (cardType.toLocaleLowerCase().includes('passport')) {
|
|
26186
|
+
hideFrameUI(false);
|
|
26187
|
+
return startOCR(type, cardType);
|
|
26188
|
+
} else {
|
|
26189
|
+
console.error('unknow flow');
|
|
26190
|
+
return of(false);
|
|
26191
|
+
}
|
|
26192
|
+
})
|
|
26193
|
+
// tap(() => {
|
|
26194
|
+
// setStatusEvent(cardClassMapping(type));
|
|
26195
|
+
// setUIByType(type, cardType);
|
|
26196
|
+
// }),
|
|
26197
|
+
// switchMap(() => startOCR(type, cardType)),
|
|
26198
|
+
);
|
|
25482
26199
|
}
|
|
26200
|
+
|
|
25483
26201
|
function main() {
|
|
25484
26202
|
const flags = {
|
|
25485
26203
|
onConfirm: false
|
|
@@ -25491,9 +26209,9 @@ function startOCR(config) {
|
|
|
25491
26209
|
} = showAntiFraudLottie();
|
|
25492
26210
|
buttonDisable$ = buttonDisable;
|
|
25493
26211
|
} else {
|
|
25494
|
-
startSpinner(translateService.translate('general.loading'));
|
|
26212
|
+
startSpinner(translateService.translate('sdk.general.loading'));
|
|
25495
26213
|
}
|
|
25496
|
-
const flow$ = config.cardTypes.map(x => createFlowByType(mapCardtypeToAuthmeClass(x), x)).reduce((prev, cur) => prev.pipe(switchMap(() => cur)), canvasSizeInfo$.pipe(take(1), tap(() => {
|
|
26214
|
+
const flow$ = config.cardTypes.map((x, index) => createFlowByType(mapCardtypeToAuthmeClass(x), x, config.cardTypeConfigs[index])).reduce((prev, cur) => prev.pipe(switchMap(() => cur)), canvasSizeInfo$.pipe(take(1), tap(() => {
|
|
25497
26215
|
setUIByType(mapCardtypeToAuthmeClass(config.cardTypes[0]), config.cardTypes[0]);
|
|
25498
26216
|
}), switchMap(canvasSizeInfo => from(config.init(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight)).pipe(tap(x => ocrEngineConfig = x), tap(() => __awaiter(this, void 0, void 0, function* () {
|
|
25499
26217
|
if (config.ocrConfig.needAntiFraud) return;
|
|
@@ -25501,7 +26219,7 @@ function startOCR(config) {
|
|
|
25501
26219
|
})), tap(() => eventListenerService$1.start()))))).pipe(tap(() => {
|
|
25502
26220
|
sendStatusAction$1(StatusAction.Uploading);
|
|
25503
26221
|
hideElement(videoContainer);
|
|
25504
|
-
startSpinner(translateService.translate('
|
|
26222
|
+
startSpinner(translateService.translate('sdk.general.uploading'));
|
|
25505
26223
|
}), switchMap(() => config.onSuccess()), tap(() => {
|
|
25506
26224
|
setStatusEvent$1(cardClassResultMapping(config.acceptTypes[config.acceptTypes.length - 1]));
|
|
25507
26225
|
stopSpinner();
|
|
@@ -25541,20 +26259,28 @@ function startOCR(config) {
|
|
|
25541
26259
|
stopSpinner();
|
|
25542
26260
|
reset();
|
|
25543
26261
|
}));
|
|
25544
|
-
const cancel$ = fromEvent(closeIcon, 'click').pipe(
|
|
25545
|
-
|
|
25546
|
-
|
|
25547
|
-
|
|
26262
|
+
const cancel$ = fromEvent(closeIcon, 'click').pipe(switchMap(() => getCanvasSize(video)), concatMap(canvasSizeInfo => {
|
|
26263
|
+
const type = currentType('get', null).type;
|
|
26264
|
+
const cardType = currentType('get', null).cardType;
|
|
26265
|
+
const ctx = image.getContext('2d');
|
|
26266
|
+
const imageData = getImageData(image, ctx, video, canvasSizeInfo, false, 'jpg');
|
|
26267
|
+
const imageBlob = UintArrayToBlob(canvasSizeInfo.width, canvasSizeInfo.height, imageData.data);
|
|
26268
|
+
const cancelResultObj = {
|
|
25548
26269
|
isSuccess: false,
|
|
25549
26270
|
code: `${ErrorCode.USER_CANCEL}`,
|
|
25550
26271
|
message: new AuthmeError(ErrorCode.USER_CANCEL).message,
|
|
25551
26272
|
data: {}
|
|
25552
26273
|
};
|
|
25553
|
-
|
|
26274
|
+
const cancelResult = config.ocrCancel ? from(config.ocrCancel(type, cardType, imageBlob)).pipe(map(() => cancelResultObj)) : of(cancelResultObj);
|
|
26275
|
+
return cancelResult;
|
|
26276
|
+
}), takeUntil(unsubscribe$), finalize(() => {
|
|
26277
|
+
document.body.removeChild(container);
|
|
26278
|
+
sendStatusAction$1(StatusAction.BtnClose);
|
|
26279
|
+
}));
|
|
25554
26280
|
const detectScreenResizeError$ = handleScreenResizeError$(detectScreenResize$(), unsubscribe$, () => !flags.onConfirm);
|
|
25555
26281
|
return merge(flow$, cancel$, detectScreenResizeError$, timeout$).pipe(take(1));
|
|
25556
26282
|
}
|
|
25557
|
-
fromEvent(window, 'offline').pipe(switchMap(() => asyncOnLineShowErrorMessage(translateService.translate('
|
|
26283
|
+
fromEvent(window, 'offline').pipe(switchMap(() => asyncOnLineShowErrorMessage(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'), true)), takeUntil(unsubscribe$)).subscribe();
|
|
25558
26284
|
// resize
|
|
25559
26285
|
fromEvent(window, 'resize').pipe(switchMapTo(getCanvasSize(video)), switchMap(canvasSizeInfo => config.setFrameSize(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight, getCardBorderPoint())), tap(() => {
|
|
25560
26286
|
scanAnimationContainer.style.width = `${cardSizeInfo.width + scanPadding}px`;
|
|
@@ -25566,7 +26292,7 @@ function startOCR(config) {
|
|
|
25566
26292
|
showVideoElement(false);
|
|
25567
26293
|
showElement(antiFraudInstructionContainer);
|
|
25568
26294
|
showElement(lottieMask);
|
|
25569
|
-
setHeaderText(translateService.translate('verify.idCard'), translateService.translate('verify.header.
|
|
26295
|
+
setHeaderText(translateService.translate('verify.idCard'), translateService.translate('sdk.verify.header.stepper', {
|
|
25570
26296
|
current: 1,
|
|
25571
26297
|
total: 3
|
|
25572
26298
|
}));
|
|
@@ -25603,11 +26329,11 @@ function startOCR(config) {
|
|
|
25603
26329
|
function countdownTimer(countdown) {
|
|
25604
26330
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25605
26331
|
if (countdown <= 0 && !isTutorialFinish) {
|
|
25606
|
-
confirmBtn.innerText = translateService.translate('verify.
|
|
26332
|
+
confirmBtn.innerText = translateService.translate('sdk.guard.verify.guide.start');
|
|
25607
26333
|
yield finishTutorial(point);
|
|
25608
26334
|
return;
|
|
25609
26335
|
}
|
|
25610
|
-
confirmBtn.innerText = `${translateService.translate('verify.
|
|
26336
|
+
confirmBtn.innerText = `${translateService.translate('sdk.guard.verify.guide.start')} (${countdown})`;
|
|
25611
26337
|
setTimeout(() => {
|
|
25612
26338
|
countdownTimer(countdown - 1);
|
|
25613
26339
|
}, TIME_UNIT.SECOND);
|
|
@@ -25636,6 +26362,35 @@ function startOCR(config) {
|
|
|
25636
26362
|
return yield firstValueFrom(allEvents$.pipe());
|
|
25637
26363
|
});
|
|
25638
26364
|
}
|
|
26365
|
+
function hideFrameUI(flag) {
|
|
26366
|
+
const frameImageDom = document.querySelector('#authme_frame_image');
|
|
26367
|
+
const frameTextDom = document.querySelector('#authme_frame_text');
|
|
26368
|
+
if (frameImageDom) {
|
|
26369
|
+
if (flag) {
|
|
26370
|
+
hideElement(frameImageDom);
|
|
26371
|
+
} else {
|
|
26372
|
+
showElement(frameImageDom);
|
|
26373
|
+
}
|
|
26374
|
+
}
|
|
26375
|
+
if (frameTextDom) {
|
|
26376
|
+
if (flag) {
|
|
26377
|
+
hideElement(frameTextDom);
|
|
26378
|
+
} else {
|
|
26379
|
+
showElement(frameTextDom);
|
|
26380
|
+
}
|
|
26381
|
+
}
|
|
26382
|
+
}
|
|
26383
|
+
// function tiltFrame(isTilt: boolean) {
|
|
26384
|
+
// if (isTilt) {
|
|
26385
|
+
// videoContainer.classList.add('container-tilt');
|
|
26386
|
+
// document.querySelector('#authme_frame_border')?.classList.add('svg-tilt');
|
|
26387
|
+
// document.querySelector('#authme_frame_image')?.classList.add('svg-tilt');
|
|
26388
|
+
// } else {
|
|
26389
|
+
// videoContainer.classList.remove('container-tilt');
|
|
26390
|
+
// document.querySelector('#authme_frame_border')?.classList.remove('svg-tilt');
|
|
26391
|
+
// document.querySelector('#authme_frame_image')?.classList.remove('svg-tilt');
|
|
26392
|
+
// }
|
|
26393
|
+
// }
|
|
25639
26394
|
function setTopText(title) {
|
|
25640
26395
|
titleText.textContent = title;
|
|
25641
26396
|
}
|
|
@@ -25647,16 +26402,18 @@ function startOCR(config) {
|
|
|
25647
26402
|
function setTextByType(type, cardType) {
|
|
25648
26403
|
var _a, _b, _c;
|
|
25649
26404
|
const _typeMap = {
|
|
25650
|
-
EAuthMeCardClass_Passport: 'verify.passportFrontSide',
|
|
25651
|
-
EAuthMeCardClass_TWN_IDCard_Front: 'verify.idCardFrontSide',
|
|
25652
|
-
EAuthMeCardClass_TWN_IDCard_Back: 'verify.idCardBackSide',
|
|
25653
|
-
EAuthMeCardClass_TWN_DriverLicense_Front: 'verify.
|
|
25654
|
-
EAuthMeCardClass_TWN_DriverLicense_Back: 'verify.
|
|
25655
|
-
EAuthMeCardClass_TWN_ResidentCard_Front: 'verify.residentCardFrontSide',
|
|
25656
|
-
EAuthMeCardClass_TWN_ResidentCard_Back: 'verify.residentCardBackSide',
|
|
25657
|
-
EAuthMeCardClass_TWN_HealthCard_Front: 'verify.
|
|
26405
|
+
EAuthMeCardClass_Passport: 'sdk.ocr.verify.passportFrontSide',
|
|
26406
|
+
EAuthMeCardClass_TWN_IDCard_Front: 'sdk.ocr.verify.idCardFrontSide',
|
|
26407
|
+
EAuthMeCardClass_TWN_IDCard_Back: 'sdk.ocr.verify.idCardBackSide',
|
|
26408
|
+
EAuthMeCardClass_TWN_DriverLicense_Front: 'sdk.ocr.verify.driverFrontSide',
|
|
26409
|
+
EAuthMeCardClass_TWN_DriverLicense_Back: 'sdk.ocr.verify.driverBackSide',
|
|
26410
|
+
EAuthMeCardClass_TWN_ResidentCard_Front: 'sdk.ocr.verify.residentCardFrontSide',
|
|
26411
|
+
EAuthMeCardClass_TWN_ResidentCard_Back: 'sdk.ocr.verify.residentCardBackSide',
|
|
26412
|
+
EAuthMeCardClass_TWN_HealthCard_Front: 'sdk.ocr.verify.healthCardFrontSide',
|
|
25658
26413
|
EAuthMeCardClass_TWN_VehiclesLicense_Front: 'verify.vehiclesLicenseFrontSide'
|
|
26414
|
+
// EAuthMeCardClass_TWN_IDCard_Thickness: 'verify.idCardThickness',
|
|
25659
26415
|
};
|
|
26416
|
+
|
|
25660
26417
|
const typeMap = _typeMap;
|
|
25661
26418
|
let titleKey = typeMap[`${type}`];
|
|
25662
26419
|
if (typeMap[`${type}`] == null) {
|
|
@@ -25666,18 +26423,20 @@ function startOCR(config) {
|
|
|
25666
26423
|
titleText.textContent = translateService.translate(titleKey !== null && titleKey !== void 0 ? titleKey : 'verify.unexpected');
|
|
25667
26424
|
statusText.textContent = '';
|
|
25668
26425
|
statusText.classList.remove('non-empty');
|
|
25669
|
-
hintText.textContent = type.includes('Back') ? translateService.translate('
|
|
26426
|
+
hintText.textContent = type.includes('Back') ? translateService.translate('sdk.general.backSide') : translateService.translate('sdk.general.frontSide');
|
|
25670
26427
|
const _typeConfirmTextMap = {
|
|
25671
|
-
EAuthMeCardClass_Passport: 'verify.
|
|
25672
|
-
EAuthMeCardClass_TWN_IDCard_Front: 'verify.confirmIdCardFront',
|
|
25673
|
-
EAuthMeCardClass_TWN_IDCard_Back: 'verify.confirmIdCardBack',
|
|
25674
|
-
EAuthMeCardClass_TWN_DriverLicense_Front: 'verify.
|
|
25675
|
-
EAuthMeCardClass_TWN_DriverLicense_Back: 'verify.
|
|
25676
|
-
EAuthMeCardClass_TWN_ResidentCard_Front: 'verify.
|
|
25677
|
-
EAuthMeCardClass_TWN_ResidentCard_Back: 'verify.
|
|
25678
|
-
EAuthMeCardClass_TWN_HealthCard_Front: 'verify.
|
|
26428
|
+
EAuthMeCardClass_Passport: 'sdk.ocr.verify.confirmPassportFront',
|
|
26429
|
+
EAuthMeCardClass_TWN_IDCard_Front: 'sdk.ocr.verify.confirmIdCardFront',
|
|
26430
|
+
EAuthMeCardClass_TWN_IDCard_Back: 'sdk.ocr.verify.confirmIdCardBack',
|
|
26431
|
+
EAuthMeCardClass_TWN_DriverLicense_Front: 'sdk.ocr.verify.confirmDriverFront',
|
|
26432
|
+
EAuthMeCardClass_TWN_DriverLicense_Back: 'sdk.ocr.verify.confirmDriverBack',
|
|
26433
|
+
EAuthMeCardClass_TWN_ResidentCard_Front: 'sdk.ocr.verify.confirmResidentCardFront',
|
|
26434
|
+
EAuthMeCardClass_TWN_ResidentCard_Back: 'sdk.ocr.verify.confirmResidentCardBack',
|
|
26435
|
+
EAuthMeCardClass_TWN_HealthCard_Front: 'sdk.ocr.verify.confirmHealthCardFront',
|
|
25679
26436
|
EAuthMeCardClass_TWN_VehiclesLicense_Front: 'verify.confirmVehiclesLicenseFrontSide'
|
|
26437
|
+
// EAuthMeCardClass_TWN_IDCard_Thickness: 'verify.confirmIdCardThickness',
|
|
25680
26438
|
};
|
|
26439
|
+
|
|
25681
26440
|
const typeConfirmTextMap = _typeConfirmTextMap;
|
|
25682
26441
|
let titleConfirmKey = typeConfirmTextMap[type];
|
|
25683
26442
|
if (titleConfirmKey == null) {
|
|
@@ -25687,33 +26446,38 @@ function startOCR(config) {
|
|
|
25687
26446
|
}
|
|
25688
26447
|
function setHeaderByType(type) {
|
|
25689
26448
|
const typeMap = {
|
|
25690
|
-
EAuthMeCardClass_Passport: 'verify.header
|
|
25691
|
-
EAuthMeCardClass_TWN_IDCard_Front: 'verify.header
|
|
25692
|
-
EAuthMeCardClass_TWN_IDCard_Back: 'verify.header
|
|
25693
|
-
EAuthMeCardClass_TWN_DriverLicense_Front: 'verify.header
|
|
25694
|
-
EAuthMeCardClass_TWN_DriverLicense_Back: 'verify.header
|
|
25695
|
-
EAuthMeCardClass_TWN_HealthCard_Front: 'verify.header
|
|
26449
|
+
EAuthMeCardClass_Passport: 'sdk.verify.passport.header',
|
|
26450
|
+
EAuthMeCardClass_TWN_IDCard_Front: 'sdk.verify.idCard.header',
|
|
26451
|
+
EAuthMeCardClass_TWN_IDCard_Back: 'sdk.verify.idCard.header',
|
|
26452
|
+
EAuthMeCardClass_TWN_DriverLicense_Front: 'sdk.verify.driverLicense.header',
|
|
26453
|
+
EAuthMeCardClass_TWN_DriverLicense_Back: 'sdk.verify.driverLicense.header',
|
|
26454
|
+
EAuthMeCardClass_TWN_HealthCard_Front: 'sdk.verify.healthCard.header',
|
|
26455
|
+
EAuthMeCardClass_JPN_IDCard_Front: 'sdk.verify.myNumberCard.header',
|
|
26456
|
+
EAuthMeCardClass_JPN_IDCard_Back: 'sdk.verify.myNumberCard.header',
|
|
26457
|
+
EAuthMeCardClass_JPN_IDCard_Thickness: 'sdk.verify.myNumberCard.header',
|
|
26458
|
+
EAuthMeCardClass_TWN_ResidentCard_Front: 'sdk.verify.residentCard.header',
|
|
26459
|
+
EAuthMeCardClass_TWN_ResidentCard_Back: 'sdk.verify.residentCard.header'
|
|
25696
26460
|
};
|
|
25697
26461
|
if (type.includes('Health') || type.includes('Passport')) {
|
|
25698
|
-
setHeaderText(translateService.translate(typeMap[type]), translateService.translate('verify.header.
|
|
26462
|
+
setHeaderText(translateService.translate(typeMap[type]), translateService.translate('sdk.verify.header.stepper', {
|
|
25699
26463
|
current: 1,
|
|
25700
26464
|
total: 1
|
|
25701
26465
|
}));
|
|
25702
26466
|
} else {
|
|
25703
26467
|
if (type.includes('Front')) {
|
|
25704
|
-
const stepNow = type.includes('TWN_IDCard') ? translateService.translate('verify.header.
|
|
26468
|
+
const stepNow = type.includes('TWN_IDCard') ? translateService.translate('sdk.verify.header.stepper', {
|
|
25705
26469
|
current: 2,
|
|
25706
26470
|
total: 3
|
|
25707
|
-
}) : translateService.translate('verify.header.
|
|
26471
|
+
}) : translateService.translate('sdk.verify.header.stepper', {
|
|
25708
26472
|
current: 1,
|
|
25709
26473
|
total: 2
|
|
25710
26474
|
});
|
|
25711
26475
|
setHeaderText(translateService.translate(typeMap[type]), stepNow);
|
|
25712
26476
|
} else {
|
|
25713
|
-
const stepNow = type.includes('TWN_IDCard') ? translateService.translate('verify.header.
|
|
26477
|
+
const stepNow = type.includes('TWN_IDCard') ? translateService.translate('sdk.verify.header.stepper', {
|
|
25714
26478
|
current: 3,
|
|
25715
26479
|
total: 3
|
|
25716
|
-
}) : translateService.translate('verify.header.
|
|
26480
|
+
}) : translateService.translate('sdk.verify.header.stepper', {
|
|
25717
26481
|
current: 2,
|
|
25718
26482
|
total: 2
|
|
25719
26483
|
});
|
|
@@ -25722,6 +26486,7 @@ function startOCR(config) {
|
|
|
25722
26486
|
}
|
|
25723
26487
|
}
|
|
25724
26488
|
function setCardSize(type) {
|
|
26489
|
+
var _a, _b;
|
|
25725
26490
|
let CARD_SIZE;
|
|
25726
26491
|
(function (CARD_SIZE) {
|
|
25727
26492
|
CARD_SIZE[CARD_SIZE["MAX_WIDTH_RATE"] = 0.95] = "MAX_WIDTH_RATE";
|
|
@@ -25751,7 +26516,8 @@ function startOCR(config) {
|
|
|
25751
26516
|
width,
|
|
25752
26517
|
height
|
|
25753
26518
|
};
|
|
25754
|
-
|
|
26519
|
+
const textTopRef = ((_a = document.querySelector('.video-container')) === null || _a === void 0 ? void 0 : _a.clientHeight) || windowHeight;
|
|
26520
|
+
(_b = document.querySelector('.status')) === null || _b === void 0 ? void 0 : _b.setAttribute('style', `top: ${textTopRef / 2 + height / 2}px`);
|
|
25755
26521
|
scanAnimationContainer.style.width = `${width + scanPadding}px`;
|
|
25756
26522
|
scanAnimationContainer.style.height = `${height + scanPadding}px`;
|
|
25757
26523
|
}
|
|
@@ -25791,7 +26557,7 @@ function startOCR(config) {
|
|
|
25791
26557
|
} = renderCameraSwitch({
|
|
25792
26558
|
container: videoContainer
|
|
25793
26559
|
});
|
|
25794
|
-
cameraHint.
|
|
26560
|
+
cameraHint.innerHTML = translateService.translate('sdk.general.verify.error.switchCamera');
|
|
25795
26561
|
cameraSwitchContainer.addEventListener('click', () => __awaiter(this, void 0, void 0, function* () {
|
|
25796
26562
|
const _nextCameraNumber = parseInt(switchText.textContent) + 1;
|
|
25797
26563
|
const nextCameraNumber = _nextCameraNumber > backCameraList.length ? 1 : _nextCameraNumber;
|
|
@@ -25803,13 +26569,19 @@ function startOCR(config) {
|
|
|
25803
26569
|
switchText.textContent = '1';
|
|
25804
26570
|
cameraSwitchShow = true;
|
|
25805
26571
|
}
|
|
26572
|
+
function hideCameraSwitchButton() {
|
|
26573
|
+
var _a, _b;
|
|
26574
|
+
cameraSwitchShow = false;
|
|
26575
|
+
(_a = document.querySelector('.camera-switch-container')) === null || _a === void 0 ? void 0 : _a.remove();
|
|
26576
|
+
(_b = document.querySelector('.camera-switch__hint')) === null || _b === void 0 ? void 0 : _b.remove();
|
|
26577
|
+
}
|
|
25806
26578
|
function cardRotateByStage(stage, mandatoryRotate = false, point) {
|
|
25807
26579
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25808
26580
|
if ((stage === EAuthMeIDCardAntiFraudStage.Done || stage === currentAntiFraudStage) && mandatoryRotate === false) return;
|
|
25809
26581
|
const cardMatchROI = point ? point : config.getCardMatchROI ? yield config.getCardMatchROI() : null;
|
|
25810
|
-
if (!cardMatchROI) throw new AuthmeError(ErrorCode.SDK_INTERNAL_ERROR, 'getCardMatchROI is null');
|
|
26582
|
+
if (!cardMatchROI || cardMatchROI.length == 0) throw new AuthmeError(ErrorCode.SDK_INTERNAL_ERROR, 'getCardMatchROI is null');
|
|
25811
26583
|
setCardBorderColor('error');
|
|
25812
|
-
setCardPoints(cardMatchROI, facingMode === 'front');
|
|
26584
|
+
setCardPoints(cardMatchROI, config.ocrConfig.needAntiFraud, facingMode === 'front');
|
|
25813
26585
|
setHintTextLocale();
|
|
25814
26586
|
currentAntiFraudStage = stage;
|
|
25815
26587
|
if (isTutorialFinish && !getIsRotateCardAnimating() || mandatoryRotate) {
|
|
@@ -25821,16 +26593,16 @@ function startOCR(config) {
|
|
|
25821
26593
|
function cardRotateTextProcess(stage) {
|
|
25822
26594
|
switch (stage) {
|
|
25823
26595
|
case EAuthMeIDCardAntiFraudStage.Left:
|
|
25824
|
-
facingMode === 'front' ? setTopText(translateService.translate('verify.
|
|
26596
|
+
facingMode === 'front' ? setTopText(translateService.translate('sdk.guard.verify.guide.idCardFlip')) : setTopText(translateService.translate('sdk.guard.verify.guide.idCardFlip'));
|
|
25825
26597
|
break;
|
|
25826
26598
|
case EAuthMeIDCardAntiFraudStage.Right:
|
|
25827
|
-
facingMode === 'front' ? setTopText(translateService.translate('verify.
|
|
26599
|
+
facingMode === 'front' ? setTopText(translateService.translate('sdk.guard.verify.guide.idCardFlip')) : setTopText(translateService.translate('sdk.guard.verify.guide.idCardFlip'));
|
|
25828
26600
|
break;
|
|
25829
26601
|
case EAuthMeIDCardAntiFraudStage.Up:
|
|
25830
|
-
setTopText(translateService.translate('verify.
|
|
26602
|
+
setTopText(translateService.translate('sdk.guard.verify.guide.idCardFlip'));
|
|
25831
26603
|
break;
|
|
25832
26604
|
case EAuthMeIDCardAntiFraudStage.Down:
|
|
25833
|
-
setTopText(translateService.translate('verify.
|
|
26605
|
+
setTopText(translateService.translate('sdk.guard.verify.guide.idCardFlip'));
|
|
25834
26606
|
break;
|
|
25835
26607
|
}
|
|
25836
26608
|
}
|
|
@@ -25878,10 +26650,10 @@ function startOCR(config) {
|
|
|
25878
26650
|
}
|
|
25879
26651
|
function setHintTextLocale() {
|
|
25880
26652
|
var _a;
|
|
25881
|
-
const TITLE_TOP_RANGE =
|
|
26653
|
+
const TITLE_TOP_RANGE = 100;
|
|
25882
26654
|
const ORIGINAL_TITLE_CLIENT_HEIGHT = window.getComputedStyle(titleText).getPropertyValue('line-height');
|
|
25883
26655
|
const titleClientHight = parseInt(ORIGINAL_TITLE_CLIENT_HEIGHT.replace('px', ''));
|
|
25884
|
-
const maskRect = (_a = document.querySelector('#
|
|
26656
|
+
const maskRect = (_a = document.querySelector('#authme_frame_border path')) === null || _a === void 0 ? void 0 : _a.getClientRects();
|
|
25885
26657
|
if (!maskRect || (maskRect === null || maskRect === void 0 ? void 0 : maskRect.length) <= 0) return;
|
|
25886
26658
|
titleTextPanel.style.top = `${maskRect[0].top - TITLE_TOP_RANGE - titleClientHight}px`;
|
|
25887
26659
|
}
|
|
@@ -25911,7 +26683,7 @@ const renderExtraUI = config => {
|
|
|
25911
26683
|
config.videoContainer.appendChild(titleTextPanel);
|
|
25912
26684
|
config.videoContainer.appendChild(cardborderContainer);
|
|
25913
26685
|
// Set init text
|
|
25914
|
-
titleText.
|
|
26686
|
+
titleText.innerHTML = translateService.translate('extra.title');
|
|
25915
26687
|
// Picture
|
|
25916
26688
|
const confirmImageContainer = document.createElement('div');
|
|
25917
26689
|
confirmImageContainer.classList.add('confirm-image-container', 'confirm-image-container-extra');
|
|
@@ -25932,10 +26704,10 @@ const renderExtraUI = config => {
|
|
|
25932
26704
|
imageFooter.classList.add('image-footer');
|
|
25933
26705
|
const retryBtn = document.createElement('button');
|
|
25934
26706
|
retryBtn.classList.add('btn-retry');
|
|
25935
|
-
retryBtn.textContent = translateService.translate('verify.
|
|
26707
|
+
retryBtn.textContent = translateService.translate('sdk.ocr.verify.retry');
|
|
25936
26708
|
const completeBtn = document.createElement('button');
|
|
25937
26709
|
completeBtn.classList.add('btn-complete');
|
|
25938
|
-
completeBtn.textContent = translateService.translate('verify.
|
|
26710
|
+
completeBtn.textContent = translateService.translate('sdk.ocr.verify.clear');
|
|
25939
26711
|
imageFooter.appendChild(completeBtn);
|
|
25940
26712
|
imageFooter.appendChild(retryBtn);
|
|
25941
26713
|
confirmImageContainer.appendChild(confirmImageWapper);
|
|
@@ -25962,7 +26734,7 @@ const renderExtraUI = config => {
|
|
|
25962
26734
|
endBtn.textContent = translateService.translate('verify.endBtn');
|
|
25963
26735
|
const continueBtn = document.createElement('button');
|
|
25964
26736
|
continueBtn.classList.add('btn-continue');
|
|
25965
|
-
continueBtn.textContent = translateService.translate('
|
|
26737
|
+
continueBtn.textContent = translateService.translate('sdk.general.continue');
|
|
25966
26738
|
checkOtherImageFooter.appendChild(continueBtn);
|
|
25967
26739
|
checkOtherImageFooter.appendChild(endBtn);
|
|
25968
26740
|
checkOtherImageContainer.appendChild(checkOtherImageWapper);
|
|
@@ -26028,7 +26800,7 @@ function startExtra(config) {
|
|
|
26028
26800
|
const canvas = document.createElement('canvas');
|
|
26029
26801
|
// Register Event
|
|
26030
26802
|
const requestCamera$ = of(true).pipe(tap(() => {
|
|
26031
|
-
startSpinner(translateService.translate('general.loading'));
|
|
26803
|
+
startSpinner(translateService.translate('sdk.general.loading'));
|
|
26032
26804
|
}), switchMap(() => from(requestCamera({
|
|
26033
26805
|
video,
|
|
26034
26806
|
facingMode: 'back',
|
|
@@ -26041,7 +26813,7 @@ function startExtra(config) {
|
|
|
26041
26813
|
stopSpinner();
|
|
26042
26814
|
showElement(videoContainer);
|
|
26043
26815
|
}));
|
|
26044
|
-
fromEvent(window, 'offline').pipe(switchMap(() => asyncOnLineShowErrorMessage(translateService.translate('
|
|
26816
|
+
fromEvent(window, 'offline').pipe(switchMap(() => asyncOnLineShowErrorMessage(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'), true)), takeUntil(unsubscribe$)).subscribe();
|
|
26045
26817
|
fromEvent(window, 'resize').pipe(throttleTime(100), switchMap(() => getCanvasSize(video)), takeUntil(unsubscribe$)).subscribe();
|
|
26046
26818
|
fromEvent(closeIcon, 'click').pipe(switchMap(() => reset()), takeUntil(unsubscribe$)).subscribe();
|
|
26047
26819
|
fromEvent(pictureIcon, 'click').pipe(switchMap(() => getCanvasSize(video)), switchMap(canvasSizeInfo => from(checkConfirmImage(canvasSizeInfo)).pipe(switchMap(needRetry => needRetry ? of(true) : from(config.confirmImage(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight, imageData, canvas)).pipe(map(confirmResp => !confirmResp))), tap(() => {
|
|
@@ -26061,10 +26833,10 @@ function startExtra(config) {
|
|
|
26061
26833
|
showVideoElement();
|
|
26062
26834
|
hideElement(checkOtherImageContainer);
|
|
26063
26835
|
}), switchMap(needContinue => needContinue ? of(true) : reset()))), takeUntil(unsubscribe$)).subscribe();
|
|
26064
|
-
merge(fromEvent(window, 'resize'), of(0)).pipe(map(() => window.innerWidth >= 320 && window.innerHeight >= 500), filter(x => x !== isValidScreenSize), tap(x => isValidScreenSize = x), tap(x => x ? hidePopup() : showPopup(translateService.translate('
|
|
26836
|
+
merge(fromEvent(window, 'resize'), of(0)).pipe(map(() => window.innerWidth >= 320 && window.innerHeight >= 500), filter(x => x !== isValidScreenSize), tap(x => isValidScreenSize = x), tap(x => x ? hidePopup() : showPopup(translateService.translate('sdk.general.insufficientScreen.title'), translateService.translate('sdk.general.insufficientScreen.content'), false)), takeUntil(unsubscribe$)).subscribe();
|
|
26065
26837
|
// Start
|
|
26066
26838
|
// headerTitle.textContent = translateService.translate(
|
|
26067
|
-
// 'liveness.header
|
|
26839
|
+
// 'sdk.liveness.detection.header'
|
|
26068
26840
|
// );
|
|
26069
26841
|
showElement(pictureIcon);
|
|
26070
26842
|
function main() {
|
|
@@ -26133,7 +26905,7 @@ function startExtra(config) {
|
|
|
26133
26905
|
|
|
26134
26906
|
function SendRequestWithRetry$4(promiseFactory) {
|
|
26135
26907
|
return retryPromiseWithCondition(promiseFactory, () => __awaiter(this, void 0, void 0, function* () {
|
|
26136
|
-
return asyncShowErrorMessage(getTranslateInstance().translate('
|
|
26908
|
+
return asyncShowErrorMessage(getTranslateInstance().translate('sdk.general.error.alert.serverError'), true);
|
|
26137
26909
|
}));
|
|
26138
26910
|
}
|
|
26139
26911
|
class ExtraModule {
|
|
@@ -26157,7 +26929,7 @@ class ExtraModule {
|
|
|
26157
26929
|
})
|
|
26158
26930
|
}));
|
|
26159
26931
|
if (resp.retry) {
|
|
26160
|
-
yield asyncShowPopup(translateService.translate('verify.error.
|
|
26932
|
+
yield asyncShowPopup(translateService.translate('sdk.verify.error.blurRetake.title'), translateService.translate('sdk.verify.error.blurRetake.content'), true);
|
|
26161
26933
|
throw 'recognition failed';
|
|
26162
26934
|
}
|
|
26163
26935
|
result.push(resp);
|
|
@@ -26195,7 +26967,7 @@ class ExtraModule {
|
|
|
26195
26967
|
|
|
26196
26968
|
function SendRequestWithRetry$3(promiseFactory) {
|
|
26197
26969
|
return retryPromiseWithCondition(promiseFactory, () => __awaiter(this, void 0, void 0, function* () {
|
|
26198
|
-
return asyncShowErrorMessage(getTranslateInstance().translate('
|
|
26970
|
+
return asyncShowErrorMessage(getTranslateInstance().translate('sdk.general.error.alert.serverError'), true);
|
|
26199
26971
|
}));
|
|
26200
26972
|
}
|
|
26201
26973
|
class LivenessVerifyModule {
|
|
@@ -26243,22 +27015,22 @@ class LivenessVerifyModule {
|
|
|
26243
27015
|
return resp.parameters;
|
|
26244
27016
|
} catch (e) {
|
|
26245
27017
|
let error = e;
|
|
26246
|
-
let message = getTranslateInstance().translate('
|
|
27018
|
+
let message = getTranslateInstance().translate('sdk.general.error.alert.serverError');
|
|
26247
27019
|
while (error instanceof AuthmeError) {
|
|
26248
27020
|
error = error.cause;
|
|
26249
27021
|
}
|
|
26250
27022
|
switch ((_b = (_a = error === null || error === void 0 ? void 0 : error.error) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.code) {
|
|
26251
27023
|
case 'AuthMe.CustomerManagementService:000111':
|
|
26252
|
-
message = getTranslateInstance().translate('
|
|
27024
|
+
message = getTranslateInstance().translate('sdk.general.verify.error.clientCustomerId.notFound');
|
|
26253
27025
|
break;
|
|
26254
27026
|
case 'AuthMe.CustomerManagementService:000131':
|
|
26255
|
-
message = getTranslateInstance().translate('
|
|
27027
|
+
message = getTranslateInstance().translate('sdk.general.verify.error.clientCustomerId.deactivate');
|
|
26256
27028
|
break;
|
|
26257
27029
|
case 'AuthMe.CustomerManagementService:000132':
|
|
26258
|
-
message = getTranslateInstance().translate('
|
|
27030
|
+
message = getTranslateInstance().translate('sdk.general.verify.error.clientCustomerId.inProgress');
|
|
26259
27031
|
break;
|
|
26260
27032
|
case 'AuthMe.CustomerManagementService:000202':
|
|
26261
|
-
message = getTranslateInstance().translate('
|
|
27033
|
+
message = getTranslateInstance().translate('sdk.general.error.unexpectedError');
|
|
26262
27034
|
break;
|
|
26263
27035
|
default:
|
|
26264
27036
|
break;
|
|
@@ -26423,7 +27195,7 @@ class LivenessVerifyModule {
|
|
|
26423
27195
|
|
|
26424
27196
|
function SendRequestWithRetry$2(promiseFactory) {
|
|
26425
27197
|
return retryPromiseWithCondition(promiseFactory, () => __awaiter(this, void 0, void 0, function* () {
|
|
26426
|
-
return asyncShowErrorMessage(getTranslateInstance().translate('
|
|
27198
|
+
return asyncShowErrorMessage(getTranslateInstance().translate('sdk.general.error.alert.serverError'), true);
|
|
26427
27199
|
}));
|
|
26428
27200
|
}
|
|
26429
27201
|
class LivenessModule {
|
|
@@ -26451,7 +27223,7 @@ class LivenessModule {
|
|
|
26451
27223
|
try {
|
|
26452
27224
|
const result = yield firstValueFrom(startLiveness({
|
|
26453
27225
|
init: () => __awaiter(this, void 0, void 0, function* () {
|
|
26454
|
-
const resp = yield LivenessAPI.IdentityVerification.init(true);
|
|
27226
|
+
const resp = yield LivenessAPI.IdentityVerification.init(true, config.passive, config.compareCustomerClientId);
|
|
26455
27227
|
id = resp.id;
|
|
26456
27228
|
if (resp.parameters.pubKey) {
|
|
26457
27229
|
yield this.fasService.setPublicKeyForJson(resp.parameters.pubKey);
|
|
@@ -26625,9 +27397,188 @@ class LivenessModule {
|
|
|
26625
27397
|
}
|
|
26626
27398
|
}
|
|
26627
27399
|
|
|
27400
|
+
function initFrameView(cardPoints, scanId, faceMode, scanView, cardType, cardTypeConfig, setBorderType, setCardBorderColor, setBorderSuccess) {
|
|
27401
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27402
|
+
const scanAnimationContainer = document.querySelector('.scan');
|
|
27403
|
+
const successAnimationDom = document.querySelector('.success');
|
|
27404
|
+
document.querySelector('#authme_frame_border');
|
|
27405
|
+
const videoContainer = document.querySelector('.video-container');
|
|
27406
|
+
const windowWidth = videoContainer.offsetWidth;
|
|
27407
|
+
const windowHeight = videoContainer.offsetHeight;
|
|
27408
|
+
const lottieScanSetting = {
|
|
27409
|
+
scanAnimationContainer: scanAnimationContainer
|
|
27410
|
+
};
|
|
27411
|
+
const lottieSuccessSetting = {
|
|
27412
|
+
animationContainer: successAnimationDom
|
|
27413
|
+
};
|
|
27414
|
+
function frameImage(faceMode, zIndex, base64, color, opacity) {
|
|
27415
|
+
color = color !== null && color !== void 0 ? color : OcrFrame.imageColor;
|
|
27416
|
+
opacity = opacity !== null && opacity !== void 0 ? opacity : OcrFrame.imageOpacity;
|
|
27417
|
+
const rectX = cardPoints[0][0] * windowWidth;
|
|
27418
|
+
const rectY = cardPoints[0][1] * windowHeight;
|
|
27419
|
+
const rectWidth = cardPoints[1][0] * windowWidth - rectX;
|
|
27420
|
+
const rectHeight = cardPoints[3][1] * windowHeight - rectY;
|
|
27421
|
+
let domContainer = document.querySelector('#authme_frame_image');
|
|
27422
|
+
let domImage = document.querySelector('#authme_frame_image_svg');
|
|
27423
|
+
const domImageStyle = `
|
|
27424
|
+
width: 100%;
|
|
27425
|
+
height: 100%;
|
|
27426
|
+
background-color: ${color};
|
|
27427
|
+
opacity: ${opacity};
|
|
27428
|
+
-webkit-mask-image: url(data:image/svg+xml;base64,${base64});
|
|
27429
|
+
mask-image: url(data:image/svg+xml;base64,${base64});
|
|
27430
|
+
-webkit-mask-size: contain;
|
|
27431
|
+
mask-size: contain;
|
|
27432
|
+
mask-repeat: no-repeat no-repeat;
|
|
27433
|
+
mask-position: center center;
|
|
27434
|
+
`;
|
|
27435
|
+
if (!domContainer) {
|
|
27436
|
+
domContainer = document.createElement('div');
|
|
27437
|
+
domContainer.setAttribute('id', 'authme_frame_image');
|
|
27438
|
+
videoContainer.appendChild(domContainer);
|
|
27439
|
+
}
|
|
27440
|
+
if (!domImage) {
|
|
27441
|
+
domImage = document.createElement('div');
|
|
27442
|
+
domImage.setAttribute('id', 'authme_frame_image_svg');
|
|
27443
|
+
domContainer.appendChild(domImage);
|
|
27444
|
+
}
|
|
27445
|
+
if (faceMode === 'front') {
|
|
27446
|
+
domImage.classList.add('front');
|
|
27447
|
+
}
|
|
27448
|
+
domImage.setAttribute('style', domImageStyle);
|
|
27449
|
+
domImage.setAttribute('preserveAspectRatio', 'none');
|
|
27450
|
+
domContainer.setAttribute('style', `
|
|
27451
|
+
z-index: ${zIndex};
|
|
27452
|
+
position: absolute;
|
|
27453
|
+
left: ${rectX}px;
|
|
27454
|
+
top: ${rectY}px;
|
|
27455
|
+
width: ${rectWidth}px;
|
|
27456
|
+
height: ${rectHeight}px;
|
|
27457
|
+
opacity: ${opacity};
|
|
27458
|
+
`);
|
|
27459
|
+
}
|
|
27460
|
+
function frameText(zIndex, text, color, opacity) {
|
|
27461
|
+
color = color !== null && color !== void 0 ? color : OcrFrame.textColor;
|
|
27462
|
+
opacity = opacity !== null && opacity !== void 0 ? opacity : OcrFrame.textOpacity;
|
|
27463
|
+
const rectX = cardPoints[0][0] * windowWidth;
|
|
27464
|
+
const rectY = cardPoints[0][1] * windowHeight;
|
|
27465
|
+
const rectWidth = cardPoints[1][0] * windowWidth - rectX;
|
|
27466
|
+
const rectHeight = cardPoints[3][1] * windowHeight - rectY;
|
|
27467
|
+
let dom = document.querySelector('#authme_frame_text');
|
|
27468
|
+
if (!dom) {
|
|
27469
|
+
dom = document.createElement('div');
|
|
27470
|
+
dom.setAttribute('id', 'authme_frame_text');
|
|
27471
|
+
videoContainer.appendChild(dom);
|
|
27472
|
+
}
|
|
27473
|
+
dom.setAttribute('style', `
|
|
27474
|
+
z-index: ${zIndex};
|
|
27475
|
+
position: absolute;
|
|
27476
|
+
left: ${rectX}px;
|
|
27477
|
+
top: ${rectY}px;
|
|
27478
|
+
width: ${rectWidth}px;
|
|
27479
|
+
height: ${rectHeight}px;
|
|
27480
|
+
opacity: ${opacity};
|
|
27481
|
+
color: ${color};
|
|
27482
|
+
display: flex;
|
|
27483
|
+
align-items: center;
|
|
27484
|
+
justify-content: center;
|
|
27485
|
+
font-size: 60px;
|
|
27486
|
+
font-weight: 500;
|
|
27487
|
+
`);
|
|
27488
|
+
dom.textContent = text;
|
|
27489
|
+
}
|
|
27490
|
+
initSuccessAnimation(lottieSuccessSetting);
|
|
27491
|
+
const scanViewSetting = {
|
|
27492
|
+
document_type: '',
|
|
27493
|
+
border: {
|
|
27494
|
+
enable: true,
|
|
27495
|
+
type: OcrFrame.borderType,
|
|
27496
|
+
color: OcrFrame.borderColor,
|
|
27497
|
+
opacity: OcrFrame.borderOpacity
|
|
27498
|
+
},
|
|
27499
|
+
success: {
|
|
27500
|
+
enable: false,
|
|
27501
|
+
color: OcrFrame.successColor,
|
|
27502
|
+
opacity: 1
|
|
27503
|
+
},
|
|
27504
|
+
content: [],
|
|
27505
|
+
line: {
|
|
27506
|
+
enable: false,
|
|
27507
|
+
color: OcrFrame.lineColor,
|
|
27508
|
+
gradient: {
|
|
27509
|
+
enable: false,
|
|
27510
|
+
color: OcrFrame.lineGradient,
|
|
27511
|
+
opacity: OcrFrame.lineGradientOpacity
|
|
27512
|
+
}
|
|
27513
|
+
}
|
|
27514
|
+
};
|
|
27515
|
+
if (scanView) {
|
|
27516
|
+
Object.assign(scanViewSetting, scanView);
|
|
27517
|
+
}
|
|
27518
|
+
if (cardType.includes('Thickness')) {
|
|
27519
|
+
if (cardTypeConfig.mode === 'manual') {
|
|
27520
|
+
setBorderType({
|
|
27521
|
+
type: scanViewSetting.border.type,
|
|
27522
|
+
strokeOpacity: 0,
|
|
27523
|
+
color: scanViewSetting.border.color
|
|
27524
|
+
});
|
|
27525
|
+
setCardBorderColor(null);
|
|
27526
|
+
// success setting
|
|
27527
|
+
// TODO need to check the success style
|
|
27528
|
+
if (scanViewSetting.success.enable) {
|
|
27529
|
+
setBorderSuccess(scanViewSetting.success.color, scanViewSetting.success.opacity);
|
|
27530
|
+
}
|
|
27531
|
+
} else {
|
|
27532
|
+
setBorderType({
|
|
27533
|
+
type: scanViewSetting.border.type,
|
|
27534
|
+
strokeOpacity: 0,
|
|
27535
|
+
color: scanViewSetting.border.color
|
|
27536
|
+
});
|
|
27537
|
+
if (scanViewSetting.success.enable) {
|
|
27538
|
+
setBorderSuccess(scanViewSetting.success.color, 0);
|
|
27539
|
+
}
|
|
27540
|
+
}
|
|
27541
|
+
} else {
|
|
27542
|
+
if (scanViewSetting.border.enable) {
|
|
27543
|
+
setBorderType({
|
|
27544
|
+
type: scanViewSetting.border.type,
|
|
27545
|
+
strokeOpacity: scanViewSetting.border.opacity,
|
|
27546
|
+
color: scanViewSetting.border.color
|
|
27547
|
+
});
|
|
27548
|
+
setCardBorderColor(null);
|
|
27549
|
+
// success setting
|
|
27550
|
+
if (scanViewSetting.success.enable) {
|
|
27551
|
+
setBorderSuccess(scanViewSetting.success.color, scanViewSetting.success.opacity);
|
|
27552
|
+
}
|
|
27553
|
+
}
|
|
27554
|
+
}
|
|
27555
|
+
// scan setting
|
|
27556
|
+
if (scanViewSetting.line.enable) {
|
|
27557
|
+
lottieScanSetting['scanColor'] = scanViewSetting.line.color;
|
|
27558
|
+
if (scanViewSetting.line.gradient.enable) {
|
|
27559
|
+
lottieScanSetting['scanOpacity'] = scanViewSetting.line.gradient.opacity;
|
|
27560
|
+
lottieScanSetting['scanGradient'] = scanViewSetting.line.gradient.color;
|
|
27561
|
+
}
|
|
27562
|
+
initScanAnimation(lottieScanSetting);
|
|
27563
|
+
}
|
|
27564
|
+
// content setting
|
|
27565
|
+
resetFrame();
|
|
27566
|
+
for (let i = 0; i < scanViewSetting.content.length; i++) {
|
|
27567
|
+
const contentSetting = scanViewSetting.content[i];
|
|
27568
|
+
if (contentSetting.type === 'svg') {
|
|
27569
|
+
const imageData = yield initScanDocumentResourceBase64(scanId, contentSetting.content);
|
|
27570
|
+
frameImage(faceMode, i, imageData.data, contentSetting.color, contentSetting.opacity);
|
|
27571
|
+
}
|
|
27572
|
+
if (contentSetting.type === 'text') {
|
|
27573
|
+
frameText(i, contentSetting.content, contentSetting.color, contentSetting.opacity);
|
|
27574
|
+
}
|
|
27575
|
+
}
|
|
27576
|
+
});
|
|
27577
|
+
}
|
|
27578
|
+
|
|
26628
27579
|
function SendRequestWithRetry$1(promiseFactory) {
|
|
26629
27580
|
return retryPromiseWithCondition(promiseFactory, () => __awaiter(this, void 0, void 0, function* () {
|
|
26630
|
-
return asyncShowErrorMessage(getTranslateInstance().translate('
|
|
27581
|
+
return asyncShowErrorMessage(getTranslateInstance().translate('sdk.general.error.alert.serverError'), true);
|
|
26631
27582
|
}));
|
|
26632
27583
|
}
|
|
26633
27584
|
class MRZModule {
|
|
@@ -26694,7 +27645,7 @@ class MRZModule {
|
|
|
26694
27645
|
expiredIn: resp.expiredIn
|
|
26695
27646
|
});
|
|
26696
27647
|
}),
|
|
26697
|
-
ocrStart: (points, type, cardType, retry = false) => __awaiter(this, void 0, void 0, function* () {
|
|
27648
|
+
ocrStart: (points, type, setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationContainer, frameImage, frameText, faceMode, cardType, retry = false) => __awaiter(this, void 0, void 0, function* () {
|
|
26698
27649
|
yield this.mrzService.init();
|
|
26699
27650
|
yield this.mrzService.setFrameSize(frameWidth, frameHeight);
|
|
26700
27651
|
yield this.mrzService.setMaskPosition(points.map(([x, y]) => [Number(x.toFixed(2)), Number(y.toFixed(2))]));
|
|
@@ -26703,7 +27654,7 @@ class MRZModule {
|
|
|
26703
27654
|
docInfos[type].ocrImg = null;
|
|
26704
27655
|
docInfos[type].ocrOriginImg = null;
|
|
26705
27656
|
} else {
|
|
26706
|
-
const resp = yield SendRequestWithRetry$1(() => initScanDocument(scanId,
|
|
27657
|
+
const resp = yield SendRequestWithRetry$1(() => initScanDocument(scanId, cardType));
|
|
26707
27658
|
if (docInfos[type]) {
|
|
26708
27659
|
docInfos[type].docId = resp.scanDocumentId;
|
|
26709
27660
|
} else {
|
|
@@ -26715,6 +27666,9 @@ class MRZModule {
|
|
|
26715
27666
|
fraudResult: null
|
|
26716
27667
|
};
|
|
26717
27668
|
}
|
|
27669
|
+
if (resp.scanView) {
|
|
27670
|
+
initFrameView(points, scanId, faceMode, resp.scanView, cardType, '', setBorderType, setCardBorderColor, setBorderSuccess);
|
|
27671
|
+
}
|
|
26718
27672
|
}
|
|
26719
27673
|
return true;
|
|
26720
27674
|
}),
|
|
@@ -26768,6 +27722,7 @@ class MRZModule {
|
|
|
26768
27722
|
}
|
|
26769
27723
|
}),
|
|
26770
27724
|
cardTypes: config.cardTypes,
|
|
27725
|
+
cardTypeConfigs: config.cardTypeConfigs,
|
|
26771
27726
|
antiFraudStart: () => __awaiter(this, void 0, void 0, function* () {
|
|
26772
27727
|
throw 'MRZ Fraud Not Supported.';
|
|
26773
27728
|
}),
|
|
@@ -26826,9 +27781,9 @@ function SendRequestWithRetry(promiseFactory, options = {}) {
|
|
|
26826
27781
|
return retryPromiseWithCondition(promiseFactory, e => __awaiter(this, void 0, void 0, function* () {
|
|
26827
27782
|
var _a, _b, _c;
|
|
26828
27783
|
const errorParams = (options === null || options === void 0 ? void 0 : options.onErrorHandler) ? options === null || options === void 0 ? void 0 : options.onErrorHandler(e) : {};
|
|
26829
|
-
return asyncShowErrorMessage(getTranslateInstance().translate((_a = errorParams === null || errorParams === void 0 ? void 0 : errorParams.errorText) !== null && _a !== void 0 ? _a : '
|
|
27784
|
+
return asyncShowErrorMessage(getTranslateInstance().translate((_a = errorParams === null || errorParams === void 0 ? void 0 : errorParams.errorText) !== null && _a !== void 0 ? _a : 'sdk.general.error.alert.serverError'), errorParams.showRetryButton, {
|
|
26830
27785
|
callback: errorParams === null || errorParams === void 0 ? void 0 : errorParams.onButtonClick,
|
|
26831
|
-
buttonText: getTranslateInstance().translate((_b = errorParams === null || errorParams === void 0 ? void 0 : errorParams.buttonText) !== null && _b !== void 0 ? _b : '
|
|
27786
|
+
buttonText: getTranslateInstance().translate((_b = errorParams === null || errorParams === void 0 ? void 0 : errorParams.buttonText) !== null && _b !== void 0 ? _b : 'sdk.general.error.retry'),
|
|
26832
27787
|
titleText: getTranslateInstance().translate((_c = errorParams === null || errorParams === void 0 ? void 0 : errorParams.titleText) !== null && _c !== void 0 ? _c : ''),
|
|
26833
27788
|
showErrorMessageHandler: errorParams === null || errorParams === void 0 ? void 0 : errorParams.showErrorMessageHandler
|
|
26834
27789
|
});
|
|
@@ -26989,7 +27944,7 @@ class OCRModule {
|
|
|
26989
27944
|
yield this.antiFraudInstance.destroy();
|
|
26990
27945
|
});
|
|
26991
27946
|
}
|
|
26992
|
-
run(config, cardTypes) {
|
|
27947
|
+
run(config, cardTypes, cardTypeConfigs) {
|
|
26993
27948
|
return __awaiter(this, void 0, void 0, function* () {
|
|
26994
27949
|
let scanId = '';
|
|
26995
27950
|
let frameHeight = 0;
|
|
@@ -27035,6 +27990,7 @@ class OCRModule {
|
|
|
27035
27990
|
const translateService = getTranslateInstance();
|
|
27036
27991
|
const eventNameWrong$ = new Subject();
|
|
27037
27992
|
return yield firstValueFrom(race(startOCR({
|
|
27993
|
+
cardTypeConfigs: cardTypeConfigs,
|
|
27038
27994
|
ocrConfig: config,
|
|
27039
27995
|
init: (width, height) => __awaiter(this, void 0, void 0, function* () {
|
|
27040
27996
|
var _a, _b, _c, _d;
|
|
@@ -27048,9 +28004,9 @@ class OCRModule {
|
|
|
27048
28004
|
const _error = e;
|
|
27049
28005
|
if (((_c = (_b = (_a = _error === null || _error === void 0 ? void 0 : _error.cause) === null || _a === void 0 ? void 0 : _a.meta) === null || _b === void 0 ? void 0 : _b.responseContent) === null || _c === void 0 ? void 0 : _c.code) === 7) {
|
|
27050
28006
|
return {
|
|
27051
|
-
buttonText: '
|
|
27052
|
-
titleText: '
|
|
27053
|
-
errorText: '
|
|
28007
|
+
buttonText: 'sdk.general.confirm',
|
|
28008
|
+
titleText: 'sdk.general.error.eventNameInvalid.title',
|
|
28009
|
+
errorText: 'sdk.general.error.eventNameInvalid.content',
|
|
27054
28010
|
onButtonClick: () => {
|
|
27055
28011
|
eventNameWrong$.next({
|
|
27056
28012
|
isSuccess: false,
|
|
@@ -27087,9 +28043,8 @@ class OCRModule {
|
|
|
27087
28043
|
expiredIn: resp.expiredIn
|
|
27088
28044
|
});
|
|
27089
28045
|
}),
|
|
27090
|
-
ocrStart: (points, type, cardType, retry = false) => __awaiter(this, void 0, void 0, function* () {
|
|
27091
|
-
const _service =
|
|
27092
|
-
? this.residentCardMrzService : this.ocrService;
|
|
28046
|
+
ocrStart: (points, type, setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationContainer, frameImage, frameText, faceMode, cardType, retry = false) => __awaiter(this, void 0, void 0, function* () {
|
|
28047
|
+
const _service = this.ocrService;
|
|
27093
28048
|
yield _service.init();
|
|
27094
28049
|
yield _service.setFrameSize(frameWidth, frameHeight);
|
|
27095
28050
|
yield _service.setMaskPosition(points.map(([x, y]) => [Number(x.toFixed(2)), Number(y.toFixed(2))]));
|
|
@@ -27098,6 +28053,7 @@ class OCRModule {
|
|
|
27098
28053
|
const oldParams = yield this.ocrService.getParams();
|
|
27099
28054
|
newParams[F_IMAGE_BLUE_TH] = 750;
|
|
27100
28055
|
newParams['fCardMatchTh'] = 0.5;
|
|
28056
|
+
newParams['fImageReflectiveTriggerTh'] = 0.15;
|
|
27101
28057
|
yield this.ocrService.setParams(Object.assign(Object.assign({}, oldParams), newParams));
|
|
27102
28058
|
if (cardTypes.map(mapCardtypeToAuthmeClass).filter(n => n == EAuthMeCardClass$1.Unknown).length > 0) {
|
|
27103
28059
|
this.ocrService.setOption({
|
|
@@ -27127,16 +28083,320 @@ class OCRModule {
|
|
|
27127
28083
|
fraudResult: null
|
|
27128
28084
|
};
|
|
27129
28085
|
}
|
|
28086
|
+
const scanView = resp.scanView ? true : false;
|
|
28087
|
+
const lottieScanSetting = {
|
|
28088
|
+
scanAnimationContainer: scanAnimationContainer
|
|
28089
|
+
};
|
|
28090
|
+
const lottieSuccessSetting = {
|
|
28091
|
+
animationContainer: successAnimationContainer
|
|
28092
|
+
};
|
|
28093
|
+
initSuccessAnimation(lottieSuccessSetting);
|
|
28094
|
+
const scanViewSetting = {
|
|
28095
|
+
document_type: '',
|
|
28096
|
+
border: {
|
|
28097
|
+
enable: true,
|
|
28098
|
+
type: OcrFrame.borderType,
|
|
28099
|
+
color: OcrFrame.borderColor,
|
|
28100
|
+
opacity: OcrFrame.borderOpacity
|
|
28101
|
+
},
|
|
28102
|
+
success: {
|
|
28103
|
+
enable: true,
|
|
28104
|
+
color: OcrFrame.successColor,
|
|
28105
|
+
opacity: 1
|
|
28106
|
+
},
|
|
28107
|
+
content: [],
|
|
28108
|
+
line: {
|
|
28109
|
+
enable: true,
|
|
28110
|
+
color: OcrFrame.lineColor,
|
|
28111
|
+
gradient: {
|
|
28112
|
+
enable: true,
|
|
28113
|
+
color: OcrFrame.lineGradient,
|
|
28114
|
+
opacity: OcrFrame.lineGradientOpacity
|
|
28115
|
+
}
|
|
28116
|
+
}
|
|
28117
|
+
};
|
|
28118
|
+
if (scanView) {
|
|
28119
|
+
Object.assign(scanViewSetting, resp.scanView);
|
|
28120
|
+
}
|
|
28121
|
+
// border setting
|
|
28122
|
+
if (scanViewSetting.border.enable) {
|
|
28123
|
+
setBorderType({
|
|
28124
|
+
type: scanViewSetting.border.type,
|
|
28125
|
+
strokeOpacity: scanViewSetting.border.opacity,
|
|
28126
|
+
color: scanViewSetting.border.color
|
|
28127
|
+
});
|
|
28128
|
+
setCardBorderColor(null);
|
|
28129
|
+
// success setting
|
|
28130
|
+
if (scanViewSetting.success.enable) {
|
|
28131
|
+
setBorderSuccess(scanViewSetting.success.color, scanViewSetting.success.opacity);
|
|
28132
|
+
}
|
|
28133
|
+
}
|
|
28134
|
+
// scan setting
|
|
28135
|
+
if (scanViewSetting.line.enable) {
|
|
28136
|
+
lottieScanSetting['scanColor'] = scanViewSetting.line.color;
|
|
28137
|
+
if (scanViewSetting.line.gradient.enable) {
|
|
28138
|
+
lottieScanSetting['scanOpacity'] = scanViewSetting.line.gradient.opacity;
|
|
28139
|
+
lottieScanSetting['scanGradient'] = scanViewSetting.line.gradient.color;
|
|
28140
|
+
}
|
|
28141
|
+
initScanAnimation(lottieScanSetting);
|
|
28142
|
+
}
|
|
28143
|
+
// content setting
|
|
28144
|
+
resetFrame();
|
|
28145
|
+
for (let i = 0; i < scanViewSetting.content.length; i++) {
|
|
28146
|
+
const contentSetting = scanViewSetting.content[i];
|
|
28147
|
+
if (contentSetting.type === 'svg') {
|
|
28148
|
+
const imageData = yield initScanDocumentResourceBase64(scanId, contentSetting.content);
|
|
28149
|
+
frameImage(faceMode, i, imageData.data, contentSetting.color, contentSetting.opacity);
|
|
28150
|
+
}
|
|
28151
|
+
if (contentSetting.type === 'text') {
|
|
28152
|
+
frameText(i, contentSetting.content, contentSetting.color, contentSetting.opacity);
|
|
28153
|
+
}
|
|
28154
|
+
}
|
|
27130
28155
|
}
|
|
27131
28156
|
return true;
|
|
27132
28157
|
}),
|
|
28158
|
+
thicknessStart: (points, type, setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationContainer, frameImage, frameText, faceMode, cardType, cardTypeConfig, retry = false) => __awaiter(this, void 0, void 0, function* () {
|
|
28159
|
+
const _service = this.antiFraudInstance;
|
|
28160
|
+
yield _service.init();
|
|
28161
|
+
yield _service.setFrameSize(frameWidth, frameHeight);
|
|
28162
|
+
yield _service.setMaskPosition(points.map(([x, y]) => [Number(x.toFixed(2)), Number(y.toFixed(2))]));
|
|
28163
|
+
const newParams = {};
|
|
28164
|
+
const oldParams = yield _service.getParams();
|
|
28165
|
+
if (config.antiFraudIMetalTagValidCountTh !== false) newParams['iMetalTagValidCountTh'] = config.antiFraudIMetalTagValidCountTh;
|
|
28166
|
+
newParams['timeoutSec'] = 1000;
|
|
28167
|
+
newParams['fCardMatchTh'] = 0.5;
|
|
28168
|
+
newParams['fImageReflectiveTriggerTh'] = 0.15;
|
|
28169
|
+
newParams['fImageThicknessTh'] = 0.3;
|
|
28170
|
+
newParams['fCardDeformationTh'] = 12;
|
|
28171
|
+
yield _service.setParams(Object.assign(Object.assign({}, oldParams), newParams));
|
|
28172
|
+
_service.setOption({
|
|
28173
|
+
key: 'thickness_detector',
|
|
28174
|
+
value: 'enable'
|
|
28175
|
+
});
|
|
28176
|
+
_service.setOption({
|
|
28177
|
+
key: 'ignore_card_type_checking',
|
|
28178
|
+
value: 'enable'
|
|
28179
|
+
});
|
|
28180
|
+
yield _service.setStage([EAuthMeIDCardAntiFraudStage$1.Down]);
|
|
28181
|
+
yield _service.startSession();
|
|
28182
|
+
let thicknessWelcomeSetting = thicknessDefaultConfig.thicknessWelcomeSetting;
|
|
28183
|
+
if (retry) {
|
|
28184
|
+
docInfos[cardType].ocrImg = null;
|
|
28185
|
+
docInfos[cardType].ocrOriginImg = null;
|
|
28186
|
+
} else {
|
|
28187
|
+
const resp = yield SendRequestWithRetry(() => initScanDocument(scanId, cardType));
|
|
28188
|
+
if (docInfos[cardType]) {
|
|
28189
|
+
docInfos[cardType].docId = resp.scanDocumentId;
|
|
28190
|
+
} else {
|
|
28191
|
+
docInfos[cardType] = {
|
|
28192
|
+
docId: resp.scanDocumentId,
|
|
28193
|
+
ocrImg: null,
|
|
28194
|
+
ocrOriginImg: null,
|
|
28195
|
+
fraudOriginImg: null,
|
|
28196
|
+
fraudResult: null
|
|
28197
|
+
};
|
|
28198
|
+
}
|
|
28199
|
+
// TODO assign
|
|
28200
|
+
if (resp.welcome) {
|
|
28201
|
+
thicknessWelcomeSetting = resp.welcome;
|
|
28202
|
+
} else {
|
|
28203
|
+
thicknessWelcomeSetting.title.text = translateService.translate(thicknessWelcomeSetting.title.text);
|
|
28204
|
+
thicknessWelcomeSetting.subtitle.text = translateService.translate(thicknessWelcomeSetting.subtitle.text);
|
|
28205
|
+
thicknessWelcomeSetting.content.text = translateService.translate(thicknessWelcomeSetting.content.text);
|
|
28206
|
+
}
|
|
28207
|
+
const scanView = resp.scanView ? true : false;
|
|
28208
|
+
const lottieScanSetting = {
|
|
28209
|
+
scanAnimationContainer: scanAnimationContainer
|
|
28210
|
+
};
|
|
28211
|
+
const lottieSuccessSetting = {
|
|
28212
|
+
animationContainer: successAnimationContainer
|
|
28213
|
+
};
|
|
28214
|
+
initSuccessAnimation(lottieSuccessSetting);
|
|
28215
|
+
const scanViewSetting = {
|
|
28216
|
+
document_type: '',
|
|
28217
|
+
border: {
|
|
28218
|
+
enable: true,
|
|
28219
|
+
type: OcrFrame.borderType,
|
|
28220
|
+
color: OcrFrame.borderColor,
|
|
28221
|
+
opacity: OcrFrame.borderOpacity
|
|
28222
|
+
},
|
|
28223
|
+
success: {
|
|
28224
|
+
enable: false,
|
|
28225
|
+
color: OcrFrame.successColor,
|
|
28226
|
+
opacity: 1
|
|
28227
|
+
},
|
|
28228
|
+
content: [],
|
|
28229
|
+
line: {
|
|
28230
|
+
enable: false,
|
|
28231
|
+
color: OcrFrame.lineColor,
|
|
28232
|
+
gradient: {
|
|
28233
|
+
enable: false,
|
|
28234
|
+
color: OcrFrame.lineGradient,
|
|
28235
|
+
opacity: OcrFrame.lineGradientOpacity
|
|
28236
|
+
}
|
|
28237
|
+
}
|
|
28238
|
+
};
|
|
28239
|
+
if (scanView) {
|
|
28240
|
+
Object.assign(scanViewSetting, resp.scanView);
|
|
28241
|
+
}
|
|
28242
|
+
// TODO for test, remove for prod
|
|
28243
|
+
// my number card
|
|
28244
|
+
//
|
|
28245
|
+
// if (cardType === 'JPN_IDCard_Thickness') {
|
|
28246
|
+
// frameImage(
|
|
28247
|
+
// faceMode,
|
|
28248
|
+
// 1,
|
|
28249
|
+
// 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IuWcluWxpF8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMzM5IDIyMC40IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzMzkgMjIwLjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7b3BhY2l0eTowLjQ7ZmlsbDojRkZGRkZGO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjI7fQoJLnN0MntmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjEuNTt9Cgkuc3Qze29wYWNpdHk6MC4yO2ZpbGw6I0ZGRkZGRjtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDR7b3BhY2l0eTowLjU7ZmlsbDojRkZGRkZGO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0NXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjIuOTIwMjt9Cjwvc3R5bGU+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTExLDE3LjVoODhjMS4xLDAsMiwwLjksMiwydjEzYzAsMS4xLTAuOSwyLTIsMkgxMWMtMS4xLDAtMi0wLjktMi0ydi0xM0M5LDE4LjQsOS45LDE3LjUsMTEsMTcuNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTEsNDIuNWgyMThjMS4xLDAsMiwwLjksMiwydjEzYzAsMS4xLTAuOSwyLTIsMkgxMWMtMS4xLDAtMi0wLjktMi0ydi0xM0M5LDQzLjQsOS45LDQyLjUsMTEsNDIuNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTIyLDc3LjVoMjA2YzEuMSwwLDIsMC45LDIsMnY5YzAsMS4xLTAuOSwyLTIsMkgxMjJjLTEuMSwwLTItMC45LTItMnYtOUMxMjAsNzguNCwxMjAuOSw3Ny41LDEyMiw3Ny41eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yODMsNTkuNWg0MWMxLjEsMCwyLDAuOSwyLDJ2OWMwLDEuMS0wLjksMi0yLDJoLTQxYy0xLjEsMC0yLTAuOS0yLTJ2LTlDMjgxLDYwLjQsMjgxLjksNTkuNSwyODMsNTkuNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjk5LDE1LjVoMjNjMy45LDAsNywzLjEsNyw3djI1YzAsMy45LTMuMSw3LTcsN2gtMjNjLTMuOSwwLTctMy4xLTctN3YtMjVDMjkyLDE4LjcsMjk1LjIsMTUuNSwyOTksMTUuNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QyIiBkPSJNMTIsOC41aDMxNWM1LjUsMCwxMCw0LjUsMTAsMTB2MTkwYzAsNS41LTQuNSwxMC0xMCwxMEgxMmMtNS41LDAtMTAtNC41LTEwLTEwdi0xOTBDMiwxMyw2LjUsOC41LDEyLDguNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTEsNjkuNWg5MGMxLjEsMCwyLDAuOSwyLDJ2MTE1YzAsMS4xLTAuOSwyLTIsMkgxMWMtMS4xLDAtMi0wLjktMi0ydi0xMTVDOSw3MC40LDkuOSw2OS41LDExLDY5LjV6Ii8+CgkJPHBhdGggY2xhc3M9InN0NCIgZD0iTTEwLDE4OC41di04LjJjMCwwLDI1LjEtNS4zLDI4LjItMTNsMy4xLTcuN2MwLDAtOC4zLTcuMS04LjktMTcuN2MwLDAtMy4xLDAuOS00LTkuN3MyLjItNy43LDIuMi03LjcKCQkJcy0xLjktMTQuNywwLTE4LjljMS45LTQuMSwwLjktMTUuNiwyMi4yLTIxLjJDNzQsNzksODEuMSw5Ni43LDgxLjEsOTYuN3MzLjcsMi40LDQuMyw4LjVjMC42LDYuMiwwLjksMTkuMiwwLjksMTkuMgoJCQlzMy40LTAuOSwyLjgsNWMtMC42LDUuOS0zLjEsMTMuOC01LjUsMTNjMCwwLTEuMiwxMy4zLTgsMTUuNmMwLDAsMS41LDEzLDkuNSwxNS4zczE4LDYuMiwxOCw2LjJ2OUwxMCwxODguNUwxMCwxODguNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMTEsNzAuNWg5MGMwLjYsMCwxLDAuNCwxLDF2MTE1YzAsMC42LTAuNCwxLTEsMUgxMWMtMC42LDAtMS0wLjQtMS0xdi0xMTVDMTAsNzEsMTAuNSw3MC41LDExLDcwLjV6Ii8+CgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTEyMSwxMTguNWMwLTAuNiwwLjQtMSwxLTFoMjA2YzAuNiwwLDEsMC40LDEsMXY1OWMwLDAuNi0wLjQsMS0xLDFIMTIyYy0wLjYsMC0xLTAuNC0xLTFWMTE4LjV6Ii8+CgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTIxMyw5OS41YzAtMC42LDAuNC0xLDEtMWgxMTRjMC42LDAsMSwwLjQsMSwxdjEyYzAsMC42LTAuNCwxLTEsMUgyMTRjLTAuNiwwLTEtMC40LTEtMVY5OS41eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xMjEsMTMwLjVoMjA4Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjEyMSIgeTE9IjE0Ni41IiB4Mj0iMzI5IiB5Mj0iMTQ2LjUiLz4KCQk8bGluZSBjbGFzcz0ic3QxIiB4MT0iMTIxIiB5MT0iMTYyLjUiIHgyPSIzMzAiIHkyPSIxNjIuNSIvPgoJCTxsaW5lIGNsYXNzPSJzdDEiIHgxPSIyNDciIHkxPSI5OC41IiB4Mj0iMjQ3IiB5Mj0iMTEyLjUiLz4KCTwvZz4KCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik0xMS41LDEuOWgzMTZjNS41LDAsMTAsNC40LDEwLDkuOHYxOTcuMWMwLDUuNC00LjUsOS44LTEwLDkuOGgtMzE2Yy01LjUsMC0xMC00LjQtMTAtOS44VjExLjYKCQlDMS41LDYuMyw2LDEuOSwxMS41LDEuOXoiLz4KPC9nPgo8L3N2Zz4K',
|
|
28250
|
+
// '#fff',
|
|
28251
|
+
// 1
|
|
28252
|
+
// );
|
|
28253
|
+
// }
|
|
28254
|
+
//
|
|
28255
|
+
// // driver
|
|
28256
|
+
//
|
|
28257
|
+
// if (cardType === 'JPN_DriverLicense_Thickness') {
|
|
28258
|
+
// frameImage(
|
|
28259
|
+
// faceMode,
|
|
28260
|
+
// 1,
|
|
28261
|
+
// 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IuWcluWxpF8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMzM5IDIyMC40IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzMzkgMjIwLjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7b3BhY2l0eTowLjI7ZmlsbDojRkZGRkZGO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjI7fQoJLnN0MntvcGFjaXR5OjAuNDtmaWxsOiNGRkZGRkY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3Qze29wYWNpdHk6MC41O2ZpbGw6I0ZGRkZGRjtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDR7ZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoxLjU7fQoJLnN0NXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjIuOTIwMjt9Cjwvc3R5bGU+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTIzMi41LDY1LjVoOTFjMS4xLDAsMiwwLjksMiwydjExOWMwLDEuMS0wLjksMi0yLDJoLTkxYy0xLjEsMC0yLTAuOS0yLTJ2LTExOQoJCQlDMjMwLjUsNjYuNCwyMzEuNCw2NS41LDIzMi41LDY1LjV6Ii8+CgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTIzMi41LDY2LjVoOTFjMC42LDAsMSwwLjQsMSwxdjExOWMwLDAuNi0wLjQsMS0xLDFoLTkxYy0wLjYsMC0xLTAuNC0xLTF2LTExOUMyMzEuNSw2NywyMzIsNjYuNSwyMzIuNSw2Ni41CgkJCXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjAuNSw1MC41aDI5OGMzLjksMCw3LDMuMSw3LDd2MTQ0YzAsMy45LTMuMSw3LTcsN2gtMjk4Yy0zLjksMC03LTMuMS03LTd2LTE0NAoJCQlDMTMuNSw1My43LDE2LjcsNTAuNSwyMC41LDUwLjV6Ii8+CgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTIxLDE3LjVoMjk3YzQuMSwwLDcuNSwzLjQsNy41LDcuNWwwLDBjMCw0LjEtMy40LDcuNS03LjUsNy41SDIxYy00LjEsMC03LjUtMy40LTcuNS03LjVsMCwwCgkJCUMxMy41LDIwLjksMTYuOSwxNy41LDIxLDE3LjV6Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjM4LjUiIHkxPSIxNi41IiB4Mj0iMzguNSIgeTI9IjMyLjUiLz4KCQk8bGluZSBjbGFzcz0ic3QxIiB4MT0iMjEyLjciIHkxPSIxNy41IiB4Mj0iMjEyLjciIHkyPSIzMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjEyLjUiIHkxPSI2NC41IiB4Mj0iMzI2LjUiIHkyPSI2NC41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjEyLjUiIHkxPSI4MC41IiB4Mj0iMjI3LjUiIHkyPSI4MC41Ii8+CgkJPHJlY3QgeD0iMTIuNSIgeT0iODEuNSIgY2xhc3M9InN0MiIgd2lkdGg9IjIwMSIgaGVpZ2h0PSIyMCIvPgoJCTxyZWN0IHg9IjEyMi41IiB5PSIxNjguNSIgY2xhc3M9InN0MSIgd2lkdGg9Ijg4IiBoZWlnaHQ9IjM2Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjEzMy41IiB5MT0iMTg1LjUiIHgyPSIyMTEuNSIgeTI9IjE4NS41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjEzNC41IiB5MT0iMTY3LjUiIHgyPSIxMzQuNSIgeTI9IjIwMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE0NS41IiB5MT0iMTY3LjUiIHgyPSIxNDUuNSIgeTI9IjIwMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE3OC41IiB5MT0iMTY3LjUiIHgyPSIxNzguNSIgeTI9IjIwMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE4OS41IiB5MT0iMTY3LjUiIHgyPSIxODkuNSIgeTI9IjIwMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjIwMC41IiB5MT0iMTY3LjUiIHgyPSIyMDAuNSIgeTI9IjIwMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE1Ni41IiB5MT0iMTY3LjUiIHgyPSIxNTYuNSIgeTI9IjIwMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE2Ny41IiB5MT0iMTY3LjUiIHgyPSIxNjcuNSIgeTI9IjIwMy41Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIzMS41LDE4Ny41di04LjJjMCwwLDI1LjEtNS4zLDI4LjItMTNsMy4xLTcuN2MwLDAtOC4zLTcuMS04LjktMTcuN2MwLDAtMy4xLDAuOS00LTkuNwoJCQljLTAuOS0xMC42LDIuMi03LjcsMi4yLTcuN3MtMS45LTE0LjcsMC0xOC45YzEuOS00LjEsMC45LTE1LjYsMjIuMi0yMS4yYzIxLjMtNS42LDI4LjMsMTIuMSwyOC4zLDEyLjFzMy43LDIuNCw0LjMsOC41CgkJCWMwLjYsNi4yLDAuOSwxOS4yLDAuOSwxOS4yczMuNC0wLjksMi44LDVjLTAuNiw1LjktMy4xLDEzLjgtNS41LDEzYzAsMC0xLjIsMTMuMy04LDE1LjZjMCwwLDEuNSwxMyw5LjUsMTUuM2M4LDIuNCwxOCw2LjIsMTgsNi4yCgkJCXY5TDIzMS41LDE4Ny41TDIzMS41LDE4Ny41eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDQiIGQ9Ik0xMS41LDguNWgzMTZjNS41LDAsMTAsNC41LDEwLDEwdjE5MGMwLDUuNS00LjUsMTAtMTAsMTBoLTMxNmMtNS41LDAtMTAtNC41LTEwLTEwdi0xOTAKCQkJQzEuNSwxMyw2LDguNSwxMS41LDguNXoiLz4KCTwvZz4KCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik0xMS41LDEuOWgzMTZjNS41LDAsMTAsNC40LDEwLDkuOHYxOTcuMWMwLDUuNC00LjUsOS44LTEwLDkuOGgtMzE2Yy01LjUsMC0xMC00LjQtMTAtOS44VjExLjYKCQlDMS41LDYuMyw2LDEuOSwxMS41LDEuOXoiLz4KPC9nPgo8L3N2Zz4K',
|
|
28262
|
+
// '#fff',
|
|
28263
|
+
// 1
|
|
28264
|
+
// );
|
|
28265
|
+
// }
|
|
28266
|
+
//
|
|
28267
|
+
// // resident
|
|
28268
|
+
//
|
|
28269
|
+
// if (cardType === 'JPN_ResidentCard_Thickness') {
|
|
28270
|
+
// frameImage(
|
|
28271
|
+
// faceMode,
|
|
28272
|
+
// 1,
|
|
28273
|
+
// 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IuWcluWxpF8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMzM5IDIyMC40IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzMzkgMjIwLjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoxLjU7fQoJLnN0MXtvcGFjaXR5OjAuNDtmaWxsOiNGRkZGRkY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3Qye29wYWNpdHk6MC4yO2ZpbGw6I0ZGRkZGRjtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDN7ZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyO30KCS5zdDR7b3BhY2l0eTowLjQ7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojRkZGRkZGO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0NXtvcGFjaXR5OjAuNTtmaWxsOiNGRkZGRkY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3Q2e2ZpbGw6bm9uZTtzdHJva2U6I0ZGRkZGRjtzdHJva2Utd2lkdGg6Mi45MjAyO30KPC9zdHlsZT4KPGc+Cgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTEuNiw5LjJoMzE2YzUuNSwwLDEwLDQuNSwxMCwxMHYxODkuN2MwLDUuNS00LjUsMTAtMTAsMTBoLTMxNmMtNS41LDAtMTAtNC41LTEwLTEwVjE5LjIKCQlDMS42LDEzLjcsNi4xLDkuMiwxMS42LDkuMnoiLz4KCTxyZWN0IHg9IjEuNiIgeT0iMTguMiIgY2xhc3M9InN0MSIgd2lkdGg9IjMzNiIgaGVpZ2h0PSIxNiIvPgoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTMuNiwxOTMuOWgyNDFjMS4xLDAsMiwwLjksMiwydjEyYzAsMS4xLTAuOSwyLTIsMkgzLjZjLTEuMSwwLTItMC45LTItMnYtMTJDMS42LDE5NC44LDIuNSwxOTMuOSwzLjYsMTkzLjl6IgoJCS8+Cgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNODMuNiwxMTRoMTQ5YzEuMSwwLDIsMC45LDIsMnYyNGMwLDEuMS0wLjksMi0yLDJoLTE0OWMtMS4xLDAtMi0wLjktMi0ydi0yNEM4MS42LDExNC45LDgyLjUsMTE0LDgzLjYsMTE0eiIKCQkvPgoJPHBhdGggY2xhc3M9InN0MiIgZD0iTTIzOC42LDY0LjFoOTEuOGMxLjEsMCwyLDAuOSwyLDJ2MTE5YzAsMS4xLTAuOSwyLTIsMmgtOTEuOGMtMS4xLDAtMi0wLjktMi0ydi0xMTkKCQlDMjM2LjYsNjUsMjM3LjUsNjQuMSwyMzguNiw2NC4xeiIvPgoJPHBhdGggY2xhc3M9InN0MiIgZD0iTTIzOC42LDY0LjFoOTEuOGMxLjEsMCwyLDAuOSwyLDJ2MTE5YzAsMS4xLTAuOSwyLTIsMmgtOTEuOGMtMS4xLDAtMi0wLjktMi0ydi0xMTkKCQlDMjM2LjYsNjUsMjM3LjUsNjQuMSwyMzguNiw2NC4xeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIzOC42LDY1LjFoOTEuOGMwLjYsMCwxLDAuNCwxLDF2MTE5YzAsMC42LTAuNCwxLTEsMWgtOTEuOGMtMC42LDAtMS0wLjQtMS0xdi0xMTkKCQlDMjM3LjYsNjUuNSwyMzguMSw2NS4xLDIzOC42LDY1LjF6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNMTkxLjYsMTc3LjlsLTUtNmw1LTZsMCwwbDUsNkwxOTEuNiwxNzcuOUwxOTEuNiwxNzcuOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDQiIGQ9Ik0yMjYuNiwxNzcuOWwtNS02bDUtNmwwLDBsNSw2TDIyNi42LDE3Ny45TDIyNi42LDE3Ny45eiIvPgoJPHBhdGggY2xhc3M9InN0NCIgZD0iTTIxOS42LDE3MS45bDUsNmwwLDBoLTMxbDUtNmwtNS02aDMxTDIxOS42LDE3MS45eiIvPgoJPHBhdGggY2xhc3M9InN0NSIgZD0iTTIzOC42LDE4Ny4yVjE3OWMwLDAsMjUuMS01LjMsMjguMi0xM2wzLjEtNy43YzAsMC04LjMtNy4xLTguOS0xNy43YzAsMC0zLjEsMC45LTQtOS43CgkJYy0wLjktMTAuNiwyLjItNy43LDIuMi03LjdzLTEuOS0xNC43LDAtMTguOWMxLjgtNC4xLDAuOS0xNS42LDIyLjItMjEuMmMyMS4zLTUuNiwyOC4zLDEyLjEsMjguMywxMi4xczMuNywyLjQsNC4zLDguNQoJCWMwLjYsNi4yLDAuOSwxOS4yLDAuOSwxOS4yczMuNC0wLjksMi44LDVjLTAuNiw1LjktMy4xLDEzLjgtNS41LDEzYzAsMC0xLjIsMTMuMy04LDE1LjZjMCwwLDEuNSwxMyw5LjUsMTUuM2M4LDIuNCwxOCw2LjIsMTgsNi4yCgkJdjlMMjM4LjYsMTg3LjJMMjM4LjYsMTg3LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMTEuNiwyLjJoMzE2YzUuNSwwLDEwLDQuNCwxMCw5Ljh2MTk3LjFjMCw1LjQtNC41LDkuOC0xMCw5LjhoLTMxNmMtNS41LDAtMTAtNC40LTEwLTkuOFYxMgoJCUMxLjYsNi42LDYuMSwyLjIsMTEuNiwyLjJ6Ii8+CjwvZz4KPC9zdmc+Cg==',
|
|
28274
|
+
// '#fff',
|
|
28275
|
+
// 1
|
|
28276
|
+
// );
|
|
28277
|
+
// }
|
|
28278
|
+
// border setting
|
|
28279
|
+
if (scanViewSetting.border.enable && cardTypeConfig.mode === 'manual') {
|
|
28280
|
+
setBorderType({
|
|
28281
|
+
type: scanViewSetting.border.type,
|
|
28282
|
+
strokeOpacity: 0,
|
|
28283
|
+
color: scanViewSetting.border.color
|
|
28284
|
+
});
|
|
28285
|
+
setCardBorderColor(null);
|
|
28286
|
+
// success setting
|
|
28287
|
+
// TODO need to check the success style
|
|
28288
|
+
if (scanViewSetting.success.enable) {
|
|
28289
|
+
setBorderSuccess(scanViewSetting.success.color, scanViewSetting.success.opacity);
|
|
28290
|
+
}
|
|
28291
|
+
} else {
|
|
28292
|
+
setBorderType({
|
|
28293
|
+
type: scanViewSetting.border.type,
|
|
28294
|
+
strokeOpacity: 0,
|
|
28295
|
+
color: scanViewSetting.border.color
|
|
28296
|
+
});
|
|
28297
|
+
if (scanViewSetting.success.enable) {
|
|
28298
|
+
setBorderSuccess(scanViewSetting.success.color, 0);
|
|
28299
|
+
}
|
|
28300
|
+
}
|
|
28301
|
+
// scan setting
|
|
28302
|
+
if (scanViewSetting.line.enable) {
|
|
28303
|
+
lottieScanSetting['scanColor'] = scanViewSetting.line.color;
|
|
28304
|
+
if (scanViewSetting.line.gradient.enable) {
|
|
28305
|
+
lottieScanSetting['scanOpacity'] = scanViewSetting.line.gradient.opacity;
|
|
28306
|
+
lottieScanSetting['scanGradient'] = scanViewSetting.line.gradient.color;
|
|
28307
|
+
}
|
|
28308
|
+
initScanAnimation(lottieScanSetting);
|
|
28309
|
+
}
|
|
28310
|
+
// content setting
|
|
28311
|
+
resetFrame();
|
|
28312
|
+
for (let i = 0; i < scanViewSetting.content.length; i++) {
|
|
28313
|
+
const contentSetting = scanViewSetting.content[i];
|
|
28314
|
+
if (contentSetting.type === 'svg') {
|
|
28315
|
+
const imageData = yield initScanDocumentResourceBase64(scanId, contentSetting.content);
|
|
28316
|
+
frameImage(faceMode, i, imageData.data, contentSetting.color, contentSetting.opacity);
|
|
28317
|
+
}
|
|
28318
|
+
if (contentSetting.type === 'text') {
|
|
28319
|
+
frameText(i, contentSetting.content, contentSetting.color, contentSetting.opacity);
|
|
28320
|
+
}
|
|
28321
|
+
}
|
|
28322
|
+
}
|
|
28323
|
+
return {
|
|
28324
|
+
thicknessWelcomeSetting
|
|
28325
|
+
};
|
|
28326
|
+
}),
|
|
28327
|
+
onThicknessFrame: (data, _base64, cardType, type) => __awaiter(this, void 0, void 0, function* () {
|
|
28328
|
+
var _e, _f;
|
|
28329
|
+
nextDebugRound(type);
|
|
28330
|
+
const antiFraudRecogitionResult = yield functionLogging(() => __awaiter(this, void 0, void 0, function* () {
|
|
28331
|
+
var _g;
|
|
28332
|
+
return yield (_g = this.antiFraudInstance) === null || _g === void 0 ? void 0 : _g.recognition(data);
|
|
28333
|
+
}), {
|
|
28334
|
+
runFunction: RUN_FUNCTION_NAME.ANTI_FARUD_RECOGNITION,
|
|
28335
|
+
isAntiFraud: true
|
|
28336
|
+
});
|
|
28337
|
+
if (!cardType) {
|
|
28338
|
+
return antiFraudRecogitionResult;
|
|
28339
|
+
}
|
|
28340
|
+
if (this.canvas) {
|
|
28341
|
+
const debugData = yield (_e = this.antiFraudInstance) === null || _e === void 0 ? void 0 : _e.getDebugImageData(data);
|
|
28342
|
+
const ctx = this.canvas.getContext('2d');
|
|
28343
|
+
this.canvas.width = frameWidth;
|
|
28344
|
+
this.canvas.height = frameHeight;
|
|
28345
|
+
ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
|
|
28346
|
+
const imgData = ctx.createImageData(frameWidth, frameHeight);
|
|
28347
|
+
imgData.data.set(debugData);
|
|
28348
|
+
ctx.putImageData(imgData, 0, 0);
|
|
28349
|
+
}
|
|
28350
|
+
saveDebugImage({
|
|
28351
|
+
data,
|
|
28352
|
+
type,
|
|
28353
|
+
getDebugImageData: (_f = this.antiFraudInstance) === null || _f === void 0 ? void 0 : _f.getDebugImageData.bind(this.antiFraudInstance),
|
|
28354
|
+
result,
|
|
28355
|
+
width: frameWidth,
|
|
28356
|
+
height: frameHeight
|
|
28357
|
+
});
|
|
28358
|
+
const fraudOriginImg = UintArrayToBlob(frameWidth, frameHeight, data, virtualCanvas);
|
|
28359
|
+
const thicknessResult = Object.assign(Object.assign({}, antiFraudRecogitionResult), {
|
|
28360
|
+
imageData: data
|
|
28361
|
+
});
|
|
28362
|
+
if (antiFraudRecogitionResult.eStatus === EAuthMeIDCardAntiFraudStatus.Pass || antiFraudRecogitionResult.eStatus === EAuthMeIDCardAntiFraudStatus.Failed) {
|
|
28363
|
+
yield this.antiFraudInstance.stop();
|
|
28364
|
+
yield this.antiFraudInstance.destroy();
|
|
28365
|
+
} else if (uploadFullFrame) {
|
|
28366
|
+
const docId = docInfos[cardType].docId;
|
|
28367
|
+
const requestImg = yield encryptImageBase64(fraudOriginImg);
|
|
28368
|
+
pushNewDebugImage(fraudOriginImg, {
|
|
28369
|
+
result: thicknessResult,
|
|
28370
|
+
status: 'recognition',
|
|
28371
|
+
type: type,
|
|
28372
|
+
isAntiFraud: true
|
|
28373
|
+
});
|
|
28374
|
+
frameIndex++;
|
|
28375
|
+
backgroundRequest(() => uploadFrameBase64(docId, requestImg, frameIndex, ResourceImageType.Recognition // upload fill frame 時先使用 recognition 當成一個過渡方案, 目前後端會對這個處理存成 original image, 後續會再調整
|
|
28376
|
+
));
|
|
28377
|
+
}
|
|
28378
|
+
|
|
28379
|
+
return thicknessResult;
|
|
28380
|
+
}),
|
|
28381
|
+
confirmThickness: (imageData, cardType) => __awaiter(this, void 0, void 0, function* () {
|
|
28382
|
+
const frameIndex = 0;
|
|
28383
|
+
const docId = docInfos[cardType].docId;
|
|
28384
|
+
const requestImg = yield encryptImageBase64(imageData);
|
|
28385
|
+
try {
|
|
28386
|
+
yield SendRequestWithRetry(() => uploadFrameBase64(docId, requestImg, frameIndex, ResourceImageType.Attach, undefined));
|
|
28387
|
+
yield SendRequestWithRetry(() => finishScanDocument(docId, {}, null));
|
|
28388
|
+
return true;
|
|
28389
|
+
} catch (error) {
|
|
28390
|
+
console.error('confirmThickness:', error);
|
|
28391
|
+
return false;
|
|
28392
|
+
}
|
|
28393
|
+
}),
|
|
27133
28394
|
cardTypes,
|
|
27134
28395
|
acceptTypes: cardTypes.map(mapCardtypeToAuthmeClass),
|
|
27135
28396
|
recognition: (data, _base64, cardType, type) => __awaiter(this, void 0, void 0, function* () {
|
|
27136
28397
|
const durationTimeRecognition = setTimeDuration(`ocr_recognition_${type}`);
|
|
27137
28398
|
nextDebugRound(type);
|
|
27138
|
-
const _service =
|
|
27139
|
-
? this.residentCardMrzService : this.ocrService;
|
|
28399
|
+
const _service = this.ocrService;
|
|
27140
28400
|
const result = yield functionLogging(() => __awaiter(this, void 0, void 0, function* () {
|
|
27141
28401
|
return yield _service.recognition(data);
|
|
27142
28402
|
}), {
|
|
@@ -27161,7 +28421,6 @@ class OCRModule {
|
|
|
27161
28421
|
height: frameHeight
|
|
27162
28422
|
});
|
|
27163
28423
|
const ocrOriginImg = UintArrayToBlob(frameWidth, frameHeight, data, virtualCanvas);
|
|
27164
|
-
// console.log("cardType:" + cardType + ":" + docInfos[cardType ?? ""]);
|
|
27165
28424
|
const eClass = cardType !== null && cardType !== void 0 ? cardType : '';
|
|
27166
28425
|
if (result.eStatus === EAuthMeCardOCRStatus.Pass && result.imageData && !!docInfos[eClass].docId) {
|
|
27167
28426
|
const resultOcrImg = UintArrayToBlob(result.iWidth, result.iHeight, result === null || result === void 0 ? void 0 : result.imageData, virtualCanvas);
|
|
@@ -27193,7 +28452,7 @@ class OCRModule {
|
|
|
27193
28452
|
durationTimeRecognition.end();
|
|
27194
28453
|
return result;
|
|
27195
28454
|
}),
|
|
27196
|
-
confirmImage: (type, cardType) => __awaiter(this, void 0, void 0, function* () {
|
|
28455
|
+
confirmImage: (type, cardType, imageData) => __awaiter(this, void 0, void 0, function* () {
|
|
27197
28456
|
// 將二進位圖片進行加密,目前不需要使用,不確定未來是否需要,先註解
|
|
27198
28457
|
// const encryptImage = async (blob: Blob): Promise<Blob> => {
|
|
27199
28458
|
// const imageArrayBuffer = await blobToArrayBuffer(blob);
|
|
@@ -27207,7 +28466,12 @@ class OCRModule {
|
|
|
27207
28466
|
const docId = docInfos[cardType].docId;
|
|
27208
28467
|
if (docId) {
|
|
27209
28468
|
const needFraudOption = config.needAntiFraud && type === EAuthMeCardClass$1.TWN_IDCard_Front;
|
|
27210
|
-
|
|
28469
|
+
let ocrOriginImg;
|
|
28470
|
+
if (imageData) {
|
|
28471
|
+
ocrOriginImg = imageData;
|
|
28472
|
+
} else {
|
|
28473
|
+
ocrOriginImg = docInfos[cardType].ocrOriginImg;
|
|
28474
|
+
}
|
|
27211
28475
|
const requestImg = yield encryptImageBase64(ocrOriginImg);
|
|
27212
28476
|
const report = yield this.ocrService.getReport();
|
|
27213
28477
|
docInfos[cardType].docId = '';
|
|
@@ -27222,7 +28486,7 @@ class OCRModule {
|
|
|
27222
28486
|
const _requestImg = yield encryptImageBase64(ocrImg);
|
|
27223
28487
|
const resp = yield SendRequestWithRetry(() => recognitionEncrypt(docId, _requestImg, report, RecognitionFileType.FlatImage));
|
|
27224
28488
|
if (resp.retry) {
|
|
27225
|
-
yield asyncShowPopup(translateService.translate('verify.error.
|
|
28489
|
+
yield asyncShowPopup(translateService.translate('sdk.verify.error.blurRetake.title'), translateService.translate('sdk.verify.error.blurRetake.content'), true);
|
|
27226
28490
|
throw 'recognition failed';
|
|
27227
28491
|
}
|
|
27228
28492
|
result = unionMerge(result, resp && resp.details || {});
|
|
@@ -27240,7 +28504,32 @@ class OCRModule {
|
|
|
27240
28504
|
return false;
|
|
27241
28505
|
}
|
|
27242
28506
|
}),
|
|
27243
|
-
|
|
28507
|
+
ocrCancel: (type, cardType, imageData) => __awaiter(this, void 0, void 0, function* () {
|
|
28508
|
+
const docId = docInfos[cardType].docId;
|
|
28509
|
+
if (docId) {
|
|
28510
|
+
let ocrOriginImg;
|
|
28511
|
+
if (imageData) {
|
|
28512
|
+
ocrOriginImg = imageData;
|
|
28513
|
+
} else {
|
|
28514
|
+
ocrOriginImg = docInfos[cardType].ocrOriginImg;
|
|
28515
|
+
}
|
|
28516
|
+
const requestImg = yield encryptImageBase64(ocrOriginImg);
|
|
28517
|
+
yield this.ocrService.stop();
|
|
28518
|
+
const report = yield this.ocrService.getReport();
|
|
28519
|
+
docInfos[cardType].docId = '';
|
|
28520
|
+
modifyDeubgLog(getDebugLogsLength() - 1, {
|
|
28521
|
+
report: report
|
|
28522
|
+
});
|
|
28523
|
+
frameIndex++;
|
|
28524
|
+
SendRequestWithRetry(() => uploadFrameBase64(docId, requestImg, frameIndex, ResourceImageType.Recognition, report));
|
|
28525
|
+
frameIndex = 0;
|
|
28526
|
+
return true;
|
|
28527
|
+
} else {
|
|
28528
|
+
console.error('didnt find docid , retry');
|
|
28529
|
+
return false;
|
|
28530
|
+
}
|
|
28531
|
+
}),
|
|
28532
|
+
antiFraudStart: (points, setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationContainer, frameImage, frameText, faceMode) => __awaiter(this, void 0, void 0, function* () {
|
|
27244
28533
|
yield this.antiFraudInstance.init();
|
|
27245
28534
|
yield this.antiFraudInstance.setFrameSize(frameWidth, frameHeight);
|
|
27246
28535
|
yield this.antiFraudInstance.setMaskPosition(points.map(([x, y]) => [Number(x.toFixed(2)), Number(y.toFixed(2))]));
|
|
@@ -27271,15 +28560,30 @@ class OCRModule {
|
|
|
27271
28560
|
fraudResult: null
|
|
27272
28561
|
};
|
|
27273
28562
|
}
|
|
28563
|
+
const lottieSuccessSetting = {
|
|
28564
|
+
animationContainer: successAnimationContainer
|
|
28565
|
+
};
|
|
28566
|
+
initSuccessAnimation(lottieSuccessSetting);
|
|
28567
|
+
// TODO 等開始處理防偽的時候再處理
|
|
28568
|
+
// if (resp.scanView && resp.scanView.enable) {
|
|
28569
|
+
// setBorderType({
|
|
28570
|
+
// type: resp.scanView.type
|
|
28571
|
+
// })
|
|
28572
|
+
// setCardBorderColor(null)
|
|
28573
|
+
// } else {
|
|
28574
|
+
// setBorderType({
|
|
28575
|
+
// type: 'cornered',
|
|
28576
|
+
// })
|
|
28577
|
+
// }
|
|
27274
28578
|
return true;
|
|
27275
28579
|
}),
|
|
27276
28580
|
onAntiFraudFrame: data => __awaiter(this, void 0, void 0, function* () {
|
|
27277
|
-
var
|
|
28581
|
+
var _h, _j;
|
|
27278
28582
|
const type = EAuthMeCardClass$1.TWN_IDCard_Front;
|
|
27279
28583
|
nextDebugRound(type);
|
|
27280
28584
|
const antiFraudRecogitionResult = yield functionLogging(() => __awaiter(this, void 0, void 0, function* () {
|
|
27281
|
-
var
|
|
27282
|
-
return yield (
|
|
28585
|
+
var _k;
|
|
28586
|
+
return yield (_k = this.antiFraudInstance) === null || _k === void 0 ? void 0 : _k.recognition(data);
|
|
27283
28587
|
}), {
|
|
27284
28588
|
runFunction: RUN_FUNCTION_NAME.ANTI_FARUD_RECOGNITION,
|
|
27285
28589
|
isAntiFraud: true
|
|
@@ -27288,7 +28592,7 @@ class OCRModule {
|
|
|
27288
28592
|
return antiFraudRecogitionResult;
|
|
27289
28593
|
}
|
|
27290
28594
|
if (this.canvas) {
|
|
27291
|
-
const debugData = yield (
|
|
28595
|
+
const debugData = yield (_h = this.antiFraudInstance) === null || _h === void 0 ? void 0 : _h.getDebugImageData(data);
|
|
27292
28596
|
const ctx = this.canvas.getContext('2d');
|
|
27293
28597
|
this.canvas.width = frameWidth;
|
|
27294
28598
|
this.canvas.height = frameHeight;
|
|
@@ -27300,7 +28604,7 @@ class OCRModule {
|
|
|
27300
28604
|
saveDebugImage({
|
|
27301
28605
|
data,
|
|
27302
28606
|
type,
|
|
27303
|
-
getDebugImageData: (
|
|
28607
|
+
getDebugImageData: (_j = this.antiFraudInstance) === null || _j === void 0 ? void 0 : _j.getDebugImageData.bind(this.antiFraudInstance),
|
|
27304
28608
|
result,
|
|
27305
28609
|
width: frameWidth,
|
|
27306
28610
|
height: frameHeight
|
|
@@ -27344,27 +28648,27 @@ class OCRModule {
|
|
|
27344
28648
|
return antiFraudStageList;
|
|
27345
28649
|
},
|
|
27346
28650
|
setFrameSize: (width, height, points) => __awaiter(this, void 0, void 0, function* () {
|
|
27347
|
-
var
|
|
28651
|
+
var _l, _m, _o, _p;
|
|
27348
28652
|
frameWidth = width;
|
|
27349
28653
|
frameHeight = height;
|
|
27350
|
-
yield (
|
|
27351
|
-
yield (
|
|
28654
|
+
yield (_l = this.ocrService) === null || _l === void 0 ? void 0 : _l.setFrameSize(width, height);
|
|
28655
|
+
yield (_m = this.antiFraudInstance) === null || _m === void 0 ? void 0 : _m.setFrameSize(width, height);
|
|
27352
28656
|
if (config.type === IdRecognitionCardType.ResidentCard) {
|
|
27353
28657
|
// workaround: resident card need MRZ, refactor later.
|
|
27354
|
-
yield (
|
|
28658
|
+
yield (_o = this.residentCardMrzService) === null || _o === void 0 ? void 0 : _o.setFrameSize(width, height);
|
|
27355
28659
|
}
|
|
27356
28660
|
if (points) {
|
|
27357
|
-
yield (
|
|
28661
|
+
yield (_p = this.ocrService) === null || _p === void 0 ? void 0 : _p.setMaskPosition(points.map(([x, y]) => [Number(x.toFixed(2)), Number(y.toFixed(2))]));
|
|
27358
28662
|
}
|
|
27359
28663
|
}),
|
|
27360
28664
|
onSuccess: () => __awaiter(this, void 0, void 0, function* () {
|
|
27361
|
-
var
|
|
28665
|
+
var _q, _r, _s;
|
|
27362
28666
|
durationTime.end();
|
|
27363
28667
|
const ocrIdcardResultFormat = Storage.getItem(STORAGE_KEY['OCR_IDCARD_RESULT_FORMAT']);
|
|
27364
|
-
(
|
|
27365
|
-
(
|
|
28668
|
+
(_q = this.antiFraudInstance) === null || _q === void 0 ? void 0 : _q.destroy();
|
|
28669
|
+
(_r = this.ocrService) === null || _r === void 0 ? void 0 : _r.destroy();
|
|
27366
28670
|
// workaround: resident card need MRZ, refactor later.
|
|
27367
|
-
(
|
|
28671
|
+
(_s = this.residentCardMrzService) === null || _s === void 0 ? void 0 : _s.destroy();
|
|
27368
28672
|
if (config.type === IdRecognitionCardType.IDCard && ocrIdcardResultFormat === 'splitDateAndAddress') {
|
|
27369
28673
|
result = splitResult(result);
|
|
27370
28674
|
}
|
|
@@ -27375,10 +28679,10 @@ class OCRModule {
|
|
|
27375
28679
|
};
|
|
27376
28680
|
}),
|
|
27377
28681
|
onDestroy: () => __awaiter(this, void 0, void 0, function* () {
|
|
27378
|
-
var
|
|
28682
|
+
var _t, _u;
|
|
27379
28683
|
durationTime.end();
|
|
27380
|
-
yield (
|
|
27381
|
-
yield (
|
|
28684
|
+
yield (_t = this.ocrService) === null || _t === void 0 ? void 0 : _t.destroy();
|
|
28685
|
+
yield (_u = this.antiFraudInstance) === null || _u === void 0 ? void 0 : _u.destroy();
|
|
27382
28686
|
}),
|
|
27383
28687
|
getCardMatchROI: () => __awaiter(this, void 0, void 0, function* () {
|
|
27384
28688
|
return yield this.antiFraudInstance.getCardMatchROI();
|
|
@@ -27420,96 +28724,20 @@ function renderCardTypeAndCountryConfig(config) {
|
|
|
27420
28724
|
setStatusEvent(StatusEvent.SelectCardTypeAndCountry);
|
|
27421
28725
|
setStatusView$1(StatusView.Select);
|
|
27422
28726
|
sendStatusAction(StatusAction.Show);
|
|
27423
|
-
const allCardTypes = Object.values(IdRecognitionCardType);
|
|
27424
|
-
config.supportCardTypes(config.defaultCountry);
|
|
27425
28727
|
const translate = key => getTranslateInstance().translate(key);
|
|
27426
|
-
const extraInfoWeapMap = new WeakMap();
|
|
27427
|
-
const componentElem = _render('div', elem => elem.classList.add('authme-select-container'), [_render('div', elem => elem.classList.add('menu-header'), [_render('div', elem => elem.classList.add('menu-header-left'), [_render('i', elem => elem.classList.add('menu-header-back'))]), _render('div', elem => elem.classList.add('menu-header-title'), [_render('div', elem => {
|
|
27428
|
-
elem.classList.add('menu-header-title-text');
|
|
27429
|
-
})]), _render('div', elem => elem.classList.add('menu-header-right'), [_render('i', elem => elem.classList.add('menu-header-close'))])]), _render('div', elem => elem.classList.add('menu-content'), [_render('div', elem => elem.classList.add('country-select'), [_render('label', elem => {
|
|
27430
|
-
elem.classList.add('country-select-label');
|
|
27431
|
-
elem.innerText = translate('verify.menu.country');
|
|
27432
|
-
}), _render('div', elem => elem.classList.add('country-select-dropdown'), [_render('div', elem => elem.classList.add('country-select-dropdown-frame'), [_render('div', elem => {
|
|
27433
|
-
elem.classList.add('country-select-dropdown-text');
|
|
27434
|
-
elem.innerText = translate(`verify.menu.country.${CountryCode.TWN}`);
|
|
27435
|
-
}), _render('div', elem => elem.classList.add('country-select-dropdown-icon'))]), _render('div', elem => {
|
|
27436
|
-
elem.classList.add('dropdown-country-list');
|
|
27437
|
-
})])]), _render('div', elem => elem.classList.add('card-type-select'), [_render('label', elem => {
|
|
27438
|
-
elem.classList.add('card-type-select-label');
|
|
27439
|
-
elem.innerText = translate('verify.menu.card.type');
|
|
27440
|
-
}), ...allCardTypes.map(cardType => _render('div', elem => {
|
|
27441
|
-
elem.classList.add('card-out-frame');
|
|
27442
|
-
elem.classList.add('card-frame');
|
|
27443
|
-
elem.classList.add('card-frame-' + cardType.toLowerCase());
|
|
27444
|
-
extraInfoWeapMap.set(elem, {
|
|
27445
|
-
cardType
|
|
27446
|
-
});
|
|
27447
|
-
}, [_render('div', elem => elem.classList.add('card-in-frame'), [_render('label', elem => {
|
|
27448
|
-
elem.classList.add('card-label');
|
|
27449
|
-
elem.classList.add(cardType.toLocaleLowerCase());
|
|
27450
|
-
elem.innerText = translate(`verify.menu.card.${cardType}`);
|
|
27451
|
-
}), _render('i', elem => elem.classList.add('card-icon'))])]))]), _render('div', elem => elem.classList.add('space')), _render('div', elem => {
|
|
27452
|
-
elem.classList.add('menu-content-footer');
|
|
27453
|
-
}, [_render('div', elem => {
|
|
27454
|
-
elem.classList.add('menu-content-footer-content');
|
|
27455
|
-
}, [_render('div', elem => {
|
|
27456
|
-
elem.classList.add('footer-confirm-button');
|
|
27457
|
-
elem.classList.add('disable');
|
|
27458
|
-
elem.innerText = translate(`liveness.continue`);
|
|
27459
|
-
}), _render('div', elem => {
|
|
27460
|
-
elem.classList.add('footer-statement');
|
|
27461
|
-
elem.innerText = translate(`verify.menu.footer.content`);
|
|
27462
|
-
})])])])]);
|
|
27463
28728
|
let currentCardTypeAndCountry;
|
|
27464
|
-
const removeAllChild = element => {
|
|
27465
|
-
while (element.firstChild) {
|
|
27466
|
-
element.removeChild(element.firstChild);
|
|
27467
|
-
}
|
|
27468
|
-
};
|
|
27469
|
-
const reloadCardTypeSelect = currentCountry => {
|
|
27470
|
-
const countryList = config.supportCountries;
|
|
27471
|
-
const dropdownCountryList = componentElem.querySelector('.authme-select-container .dropdown-country-list');
|
|
27472
|
-
removeAllChild(dropdownCountryList);
|
|
27473
|
-
const frames = document.querySelectorAll('.card-frame');
|
|
27474
|
-
for (let i = 0; i < frames.length; i++) {
|
|
27475
|
-
frames[i].style.display = 'none';
|
|
27476
|
-
}
|
|
27477
|
-
const cardtypes = config.supportCardTypes(currentCountry);
|
|
27478
|
-
cardtypes.forEach(cardType => {
|
|
27479
|
-
const node = componentElem.querySelector('.card-frame-' + cardType.toLowerCase());
|
|
27480
|
-
node.style.display = '';
|
|
27481
|
-
});
|
|
27482
|
-
countryList.filter(country => country !== currentCountry).forEach(country => {
|
|
27483
|
-
const countryElem = _render('div', elem => {
|
|
27484
|
-
elem.classList.add('dropdown-country-list-item');
|
|
27485
|
-
extraInfoWeapMap.set(elem, {
|
|
27486
|
-
country
|
|
27487
|
-
});
|
|
27488
|
-
elem.addEventListener('click', event => {
|
|
27489
|
-
event.stopPropagation();
|
|
27490
|
-
setCurrentCountry(country);
|
|
27491
|
-
currentCardTypeAndCountry = Object.assign(Object.assign({}, currentCardTypeAndCountry), {
|
|
27492
|
-
country
|
|
27493
|
-
});
|
|
27494
|
-
});
|
|
27495
|
-
}, [_render('div', elem => {
|
|
27496
|
-
elem.classList.add('dropdown-country-list-item-frame');
|
|
27497
|
-
}, [_render('div', elem => {
|
|
27498
|
-
elem.classList.add('dropdown-country-list-item-text');
|
|
27499
|
-
elem.innerText = translate(`verify.menu.country.${country}`);
|
|
27500
|
-
})])]);
|
|
27501
|
-
dropdownCountryList.appendChild(countryElem);
|
|
27502
|
-
});
|
|
27503
|
-
};
|
|
27504
28729
|
const setCurrentCountry = (country, disableSwitch = false) => {
|
|
27505
|
-
const countrySelectDropdown =
|
|
28730
|
+
const countrySelectDropdown = containerDom.querySelector('.authme-select-container .country-select-dropdown');
|
|
27506
28731
|
const countrySelectDropdownFramw = countrySelectDropdown.querySelector('.country-select-dropdown-frame');
|
|
27507
28732
|
const countrySelectDropdownText = countrySelectDropdownFramw.querySelector('.country-select-dropdown-text');
|
|
27508
28733
|
if (!disableSwitch) {
|
|
27509
28734
|
dropdownSwitch(false);
|
|
27510
28735
|
}
|
|
27511
|
-
|
|
27512
|
-
|
|
28736
|
+
currentCardTypes = config.supportCardTypes(country);
|
|
28737
|
+
currentCardTypeAndCountry = Object.assign(Object.assign({}, currentCardTypeAndCountry), {
|
|
28738
|
+
country
|
|
28739
|
+
});
|
|
28740
|
+
countrySelectDropdownText.innerText = translate(`sdk.home.selectCountry.${country}`);
|
|
27513
28741
|
};
|
|
27514
28742
|
const dropdownSwitch = switchTarget => {
|
|
27515
28743
|
const closeDropdown = () => {
|
|
@@ -27519,20 +28747,83 @@ function renderCardTypeAndCountryConfig(config) {
|
|
|
27519
28747
|
countrySelectDropdown.classList.remove('closing');
|
|
27520
28748
|
}, 280);
|
|
27521
28749
|
};
|
|
27522
|
-
const countrySelectDropdown =
|
|
28750
|
+
const countrySelectDropdown = containerDom.querySelector('.authme-select-container .country-select-dropdown');
|
|
27523
28751
|
if (switchTarget !== undefined) {
|
|
27524
28752
|
switchTarget === false ? closeDropdown() : countrySelectDropdown.classList.add('active');
|
|
27525
28753
|
return;
|
|
27526
28754
|
}
|
|
27527
28755
|
countrySelectDropdown.classList.contains('active') ? closeDropdown() : countrySelectDropdown.classList.add('active');
|
|
27528
28756
|
};
|
|
28757
|
+
let currentCardTypes = config.supportCardTypes(config.defaultCountry);
|
|
28758
|
+
const containerDom = document.createElement('div');
|
|
28759
|
+
containerDom.classList.add('authme-select-container');
|
|
28760
|
+
containerDom.innerHTML = `
|
|
28761
|
+
<div class="menu-header">
|
|
28762
|
+
<div class="menu-header-left">
|
|
28763
|
+
<i class="menu-header-back"></i>
|
|
28764
|
+
</div>
|
|
28765
|
+
<div class="menu-header-title">
|
|
28766
|
+
<div class="menu-header-title-text"></div>
|
|
28767
|
+
</div>
|
|
28768
|
+
<div class="menu-header-right">
|
|
28769
|
+
<i class="menu-header-close"></i>
|
|
28770
|
+
</div>
|
|
28771
|
+
</div>
|
|
28772
|
+
<div class="menu-content">
|
|
28773
|
+
<div class="country-select">
|
|
28774
|
+
<label class="country-select-label">${translate('sdk.home.selectCountry')}</label>
|
|
28775
|
+
<div class="country-select-dropdown">
|
|
28776
|
+
<div class="country-select-dropdown-frame">
|
|
28777
|
+
<div class="country-select-dropdown-text">${translate(`sdk.home.selectCountry.${CountryCode.TWN}`)}</div>
|
|
28778
|
+
<div class="country-select-dropdown-icon"></div>
|
|
28779
|
+
</div>
|
|
28780
|
+
<div class="dropdown-country-list"></div>
|
|
28781
|
+
</div>
|
|
28782
|
+
</div>
|
|
28783
|
+
<div class="card-type-select">
|
|
28784
|
+
<label class="card-type-select-label">${translate('sdk.home.selectDocument')}</label>
|
|
28785
|
+
</div>
|
|
28786
|
+
<div class="space"></div>
|
|
28787
|
+
<div class="menu-content-footer">
|
|
28788
|
+
<div class="menu-content-footer-content">
|
|
28789
|
+
<div class="footer-confirm-button disable">${translate(`sdk.general.continue`)}</div>
|
|
28790
|
+
<div class="footer-statement">${translate(`sdk.general.footer`)}</div>
|
|
28791
|
+
</div>
|
|
28792
|
+
</div>
|
|
28793
|
+
</div>
|
|
28794
|
+
`;
|
|
28795
|
+
const confirmBtn = containerDom.querySelector('.footer-confirm-button');
|
|
28796
|
+
const initCountryList = currentCountry => {
|
|
28797
|
+
const countryList = config.supportCountries;
|
|
28798
|
+
const dropdownCountryList = containerDom.querySelector('.dropdown-country-list');
|
|
28799
|
+
const countries = dropdownCountryList === null || dropdownCountryList === void 0 ? void 0 : dropdownCountryList.querySelectorAll('.dropdown-country-list-item');
|
|
28800
|
+
for (let index = countries.length - 1; index >= 0; index--) {
|
|
28801
|
+
countries[index].remove();
|
|
28802
|
+
}
|
|
28803
|
+
countryList.filter(country => country !== currentCountry).forEach(country => {
|
|
28804
|
+
const countryDom = document.createElement('div');
|
|
28805
|
+
countryDom.classList.add('dropdown-country-list-item');
|
|
28806
|
+
countryDom.innerHTML = `
|
|
28807
|
+
<div class="dropdown-country-list-item-frame">
|
|
28808
|
+
<div class="dropdown-country-list-item-text">${translate(`sdk.home.selectCountry.${country}`)}</div>
|
|
28809
|
+
</div>
|
|
28810
|
+
`;
|
|
28811
|
+
countryDom.addEventListener('click', event => {
|
|
28812
|
+
event.stopPropagation();
|
|
28813
|
+
setCurrentCountry(country);
|
|
28814
|
+
initCardTypeList();
|
|
28815
|
+
initCountryList(country);
|
|
28816
|
+
});
|
|
28817
|
+
dropdownCountryList.appendChild(countryDom);
|
|
28818
|
+
});
|
|
28819
|
+
};
|
|
27529
28820
|
const initCountrySelectDropdown = () => {
|
|
27530
|
-
const countrySelectDropdown =
|
|
28821
|
+
const countrySelectDropdown = containerDom.querySelector('.country-select-dropdown');
|
|
27531
28822
|
const countryList = config.supportCountries;
|
|
27532
|
-
setCurrentCountry(config.defaultCountry, true);
|
|
27533
28823
|
currentCardTypeAndCountry = Object.assign(Object.assign({}, currentCardTypeAndCountry), {
|
|
27534
28824
|
country: config.defaultCountry
|
|
27535
28825
|
});
|
|
28826
|
+
initCountryList(config.defaultCountry);
|
|
27536
28827
|
countrySelectDropdown.addEventListener('click', () => {
|
|
27537
28828
|
if (countryList.length <= 1) {
|
|
27538
28829
|
return;
|
|
@@ -27540,32 +28831,55 @@ function renderCardTypeAndCountryConfig(config) {
|
|
|
27540
28831
|
dropdownSwitch();
|
|
27541
28832
|
});
|
|
27542
28833
|
};
|
|
27543
|
-
|
|
27544
|
-
const
|
|
27545
|
-
const
|
|
27546
|
-
const
|
|
27547
|
-
|
|
27548
|
-
|
|
27549
|
-
|
|
27550
|
-
const
|
|
27551
|
-
|
|
27552
|
-
|
|
27553
|
-
|
|
28834
|
+
const handleCardTypeClick = e => {
|
|
28835
|
+
const currentTarget = e.currentTarget;
|
|
28836
|
+
const list = currentTarget.parentElement.querySelectorAll('.card-out-frame');
|
|
28837
|
+
const matchSupportCardType = JSON.parse(currentTarget.dataset.cardTypeObj);
|
|
28838
|
+
// const matchSupportCardType = currentCardTypes.find(
|
|
28839
|
+
// (item) => item.cardType === currentTarget.dataset.cardType
|
|
28840
|
+
// );
|
|
28841
|
+
const cardType = matchSupportCardType === null || matchSupportCardType === void 0 ? void 0 : matchSupportCardType.cardType;
|
|
28842
|
+
const config = (matchSupportCardType === null || matchSupportCardType === void 0 ? void 0 : matchSupportCardType.config) || {};
|
|
28843
|
+
currentCardTypeAndCountry = Object.assign(Object.assign({}, currentCardTypeAndCountry), {
|
|
28844
|
+
cardType,
|
|
28845
|
+
config
|
|
27554
28846
|
});
|
|
27555
|
-
|
|
27556
|
-
|
|
27557
|
-
|
|
27558
|
-
|
|
27559
|
-
|
|
27560
|
-
|
|
27561
|
-
|
|
27562
|
-
|
|
27563
|
-
|
|
27564
|
-
|
|
27565
|
-
|
|
28847
|
+
list.forEach(item => {
|
|
28848
|
+
item.classList.remove('active');
|
|
28849
|
+
});
|
|
28850
|
+
currentTarget.classList.add('active');
|
|
28851
|
+
confirmBtn === null || confirmBtn === void 0 ? void 0 : confirmBtn.classList.remove('disable');
|
|
28852
|
+
};
|
|
28853
|
+
const initCardTypeList = () => {
|
|
28854
|
+
const cardTypeSelect = containerDom.querySelector('.card-type-select');
|
|
28855
|
+
const cardTypeList = cardTypeSelect === null || cardTypeSelect === void 0 ? void 0 : cardTypeSelect.querySelectorAll('.card-type-item');
|
|
28856
|
+
if (!cardTypeSelect || !cardTypeList) {
|
|
28857
|
+
return;
|
|
28858
|
+
}
|
|
28859
|
+
for (let index = cardTypeList.length - 1; index >= 0; index--) {
|
|
28860
|
+
const cardTypeDom = cardTypeList[index];
|
|
28861
|
+
cardTypeDom.removeEventListener('click', handleCardTypeClick);
|
|
28862
|
+
cardTypeDom.remove();
|
|
28863
|
+
}
|
|
28864
|
+
currentCardTypes.forEach(item => {
|
|
28865
|
+
const dom = document.createElement('div');
|
|
28866
|
+
dom.setAttribute('class', `card-out-frame card-frame card-type-item card-frame-${item.cardType.toLowerCase()}`);
|
|
28867
|
+
dom.setAttribute('data-card-type', item.cardType);
|
|
28868
|
+
dom.setAttribute('data-card-type-obj', JSON.stringify(item));
|
|
28869
|
+
dom.addEventListener('click', handleCardTypeClick);
|
|
28870
|
+
dom.innerHTML = `
|
|
28871
|
+
<div class="card-in-frame">
|
|
28872
|
+
<label class="card-label ${item.cardType.toLowerCase()}">${item.display}</label>
|
|
28873
|
+
<i class="card-icon"></i>
|
|
28874
|
+
</div>
|
|
28875
|
+
`;
|
|
28876
|
+
cardTypeSelect.appendChild(dom);
|
|
27566
28877
|
});
|
|
27567
|
-
confirmBtn.
|
|
27568
|
-
|
|
28878
|
+
confirmBtn === null || confirmBtn === void 0 ? void 0 : confirmBtn.classList.add('disable');
|
|
28879
|
+
};
|
|
28880
|
+
return new Promise((resolve, reject) => {
|
|
28881
|
+
confirmBtn === null || confirmBtn === void 0 ? void 0 : confirmBtn.addEventListener('click', () => {
|
|
28882
|
+
containerDom.remove();
|
|
27569
28883
|
const _currentCardTypeAndCountry = Object.assign(Object.assign({}, currentCardTypeAndCountry), {
|
|
27570
28884
|
hasResult: true
|
|
27571
28885
|
});
|
|
@@ -27573,16 +28887,18 @@ function renderCardTypeAndCountryConfig(config) {
|
|
|
27573
28887
|
eventListenerService.stop();
|
|
27574
28888
|
resolve(_currentCardTypeAndCountry);
|
|
27575
28889
|
});
|
|
27576
|
-
const
|
|
27577
|
-
|
|
27578
|
-
|
|
28890
|
+
const menuBackDom = containerDom.querySelector('.menu-header-close');
|
|
28891
|
+
menuBackDom.addEventListener('click', () => {
|
|
28892
|
+
containerDom.remove();
|
|
27579
28893
|
sendStatusAction(StatusAction.BtnClose);
|
|
27580
28894
|
eventListenerService.stop();
|
|
27581
28895
|
resolve({
|
|
27582
28896
|
hasResult: false
|
|
27583
28897
|
});
|
|
27584
28898
|
});
|
|
27585
|
-
document.body.appendChild(
|
|
28899
|
+
document.body.appendChild(containerDom);
|
|
28900
|
+
initCountrySelectDropdown();
|
|
28901
|
+
initCardTypeList();
|
|
27586
28902
|
});
|
|
27587
28903
|
}
|
|
27588
28904
|
|
|
@@ -27655,7 +28971,7 @@ class AuthmeIdentityVerification extends AuthmeFunctionModule {
|
|
|
27655
28971
|
yield getTranslateInstance().fetchSource(`${config.scriptPath}locale`);
|
|
27656
28972
|
} catch (error) {
|
|
27657
28973
|
if (error instanceof AuthmeError && error.code === ErrorCode.BROWSER_NOT_SUPPORT) {
|
|
27658
|
-
alert(getTranslateInstance().translate('
|
|
28974
|
+
alert(getTranslateInstance().translate('sdk.general.error.browser.doesntSupportCamera'));
|
|
27659
28975
|
}
|
|
27660
28976
|
throw error;
|
|
27661
28977
|
}
|
|
@@ -27690,13 +29006,20 @@ class AuthmeIdentityVerification extends AuthmeFunctionModule {
|
|
|
27690
29006
|
getCardTypeAndCountry(userConfig) {
|
|
27691
29007
|
var _a, _b;
|
|
27692
29008
|
return __awaiter(this, void 0, void 0, function* () {
|
|
27693
|
-
const defaultCountries = [CountryCode.TWN, CountryCode.JPN, CountryCode.ZAF, CountryCode.USA, CountryCode.CHN, CountryCode.PHL, CountryCode.GBR, CountryCode.KOR, CountryCode.HKG, CountryCode.FRA, CountryCode.ESP, CountryCode.MEX, CountryCode.ITA, CountryCode.IND, CountryCode.COL, CountryCode.RUS, CountryCode.DEU, CountryCode.TUR, CountryCode.CAN, CountryCode.AUS];
|
|
29009
|
+
const defaultCountries = [CountryCode.TWN, CountryCode.JPN, CountryCode.ZAF, CountryCode.USA, CountryCode.CHN, CountryCode.PHL, CountryCode.GBR, CountryCode.KOR, CountryCode.HKG, CountryCode.FRA, CountryCode.ESP, CountryCode.MEX, CountryCode.ITA, CountryCode.IND, CountryCode.COL, CountryCode.RUS, CountryCode.DEU, CountryCode.TUR, CountryCode.CAN, CountryCode.AUS, CountryCode.IDN, CountryCode.MYS, CountryCode.EGY, CountryCode.SAU, CountryCode.NLD, CountryCode.SGP];
|
|
27694
29010
|
const defaultCountry = userConfig.defaultCountry !== undefined && defaultCountries.includes(userConfig.defaultCountry) ? userConfig.defaultCountry : defaultCountries[0];
|
|
27695
|
-
|
|
27696
|
-
|
|
27697
|
-
|
|
27698
|
-
|
|
29011
|
+
const supportCountries = (_a = userConfig.supportCountries) !== null && _a !== void 0 ? _a : defaultCountries;
|
|
29012
|
+
const supportCardTypes = (_b = userConfig.supportCardTypes) !== null && _b !== void 0 ? _b : Object.values(IdRecognitionCardType).map(x => {
|
|
29013
|
+
return {
|
|
29014
|
+
cardType: x
|
|
29015
|
+
};
|
|
27699
29016
|
});
|
|
29017
|
+
const cardTypeAndCountryConfig = {
|
|
29018
|
+
defaultCountry,
|
|
29019
|
+
supportCountries,
|
|
29020
|
+
supportCardTypes
|
|
29021
|
+
};
|
|
29022
|
+
return renderCardTypeAndCountryConfig(cardTypeAndCountryConfig);
|
|
27700
29023
|
});
|
|
27701
29024
|
}
|
|
27702
29025
|
extraDocument(userConfig = {}) {
|
|
@@ -27728,10 +29051,11 @@ class AuthmeIdentityVerification extends AuthmeFunctionModule {
|
|
|
27728
29051
|
cardSubTypes = config.cardTypes.map(mapCardtypeToAuthmeClass);
|
|
27729
29052
|
} else {
|
|
27730
29053
|
cardSubTypes = getCardSubTypes(config.type, config.country);
|
|
27731
|
-
|
|
27732
|
-
config.cardTypes = defaultCardTypes;
|
|
29054
|
+
cardSubTypes.map(c => twoWayAuthmeCardClassMap.toServer(c));
|
|
29055
|
+
// config.cardTypes = defaultCardTypes;
|
|
29056
|
+
config.cardTypes = getCardTypes(config.type, config.country);
|
|
27733
29057
|
}
|
|
27734
|
-
return config.type === IdRecognitionCardType.Passport ? this.mrzModule.run(config, cardSubTypes) : this.ocrModule.run(config, config.cardTypes);
|
|
29058
|
+
return config.type === IdRecognitionCardType.Passport ? this.mrzModule.run(config, cardSubTypes) : this.ocrModule.run(config, config.cardTypes, config.cardTypeConfigs);
|
|
27735
29059
|
});
|
|
27736
29060
|
}
|
|
27737
29061
|
confirmOCRResult(data) {
|
|
@@ -27783,8 +29107,8 @@ class AuthmeIdentityVerification extends AuthmeFunctionModule {
|
|
|
27783
29107
|
}
|
|
27784
29108
|
|
|
27785
29109
|
var name = "authme/sdk";
|
|
27786
|
-
var version$1 = "2.
|
|
27787
|
-
var date = "
|
|
29110
|
+
var version$1 = "2.7.0";
|
|
29111
|
+
var date = "2024-05-30T14:54:23+0000";
|
|
27788
29112
|
var packageInfo = {
|
|
27789
29113
|
name: name,
|
|
27790
29114
|
version: version$1,
|