@authme/identity-verification 2.1.1

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.
Files changed (84) hide show
  1. package/CHANGELOG.md +943 -0
  2. package/README.md +7 -0
  3. package/assets/locale/en_US.json +132 -0
  4. package/assets/locale/zh_Hant_TW.json +132 -0
  5. package/assets/styles/style.css +806 -0
  6. package/package.json +19 -0
  7. package/src/index.d.ts +4 -0
  8. package/src/index.js +8 -0
  9. package/src/index.js.map +1 -0
  10. package/src/lib/identity-verification-feature-identity-verification.d.ts +26 -0
  11. package/src/lib/identity-verification-feature-identity-verification.js +105 -0
  12. package/src/lib/identity-verification-feature-identity-verification.js.map +1 -0
  13. package/src/lib/interface/config.interface.d.ts +32 -0
  14. package/src/lib/interface/config.interface.js +24 -0
  15. package/src/lib/interface/config.interface.js.map +1 -0
  16. package/src/lib/interface/index.d.ts +1 -0
  17. package/src/lib/interface/index.js +5 -0
  18. package/src/lib/interface/index.js.map +1 -0
  19. package/src/lib/interface/result.model.d.ts +13 -0
  20. package/src/lib/interface/result.model.js +3 -0
  21. package/src/lib/interface/result.model.js.map +1 -0
  22. package/src/lib/lottie/arrow_down.d.ts +215 -0
  23. package/src/lib/lottie/arrow_down.js +203 -0
  24. package/src/lib/lottie/arrow_down.js.map +1 -0
  25. package/src/lib/lottie/arrow_left.d.ts +215 -0
  26. package/src/lib/lottie/arrow_left.js +203 -0
  27. package/src/lib/lottie/arrow_left.js.map +1 -0
  28. package/src/lib/lottie/arrow_right.d.ts +215 -0
  29. package/src/lib/lottie/arrow_right.js +203 -0
  30. package/src/lib/lottie/arrow_right.js.map +1 -0
  31. package/src/lib/lottie/arrow_up.d.ts +215 -0
  32. package/src/lib/lottie/arrow_up.js +203 -0
  33. package/src/lib/lottie/arrow_up.js.map +1 -0
  34. package/src/lib/lottie/card_lr.d.ts +182 -0
  35. package/src/lib/lottie/card_lr.js +1903 -0
  36. package/src/lib/lottie/card_lr.js.map +1 -0
  37. package/src/lib/lottie/card_ud.d.ts +182 -0
  38. package/src/lib/lottie/card_ud.js +1937 -0
  39. package/src/lib/lottie/card_ud.js.map +1 -0
  40. package/src/lib/lottie/index.d.ts +9 -0
  41. package/src/lib/lottie/index.js +13 -0
  42. package/src/lib/lottie/index.js.map +1 -0
  43. package/src/lib/lottie/scan.d.ts +562 -0
  44. package/src/lib/lottie/scan.js +384 -0
  45. package/src/lib/lottie/scan.js.map +1 -0
  46. package/src/lib/lottie/success.d.ts +946 -0
  47. package/src/lib/lottie/success.js +509 -0
  48. package/src/lib/lottie/success.js.map +1 -0
  49. package/src/lib/lottie/tutorial.d.ts +1449 -0
  50. package/src/lib/lottie/tutorial.js +3683 -0
  51. package/src/lib/lottie/tutorial.js.map +1 -0
  52. package/src/lib/module/liveness-verify.module.d.ts +12 -0
  53. package/src/lib/module/liveness-verify.module.js +189 -0
  54. package/src/lib/module/liveness-verify.module.js.map +1 -0
  55. package/src/lib/module/liveness.module.d.ts +12 -0
  56. package/src/lib/module/liveness.module.js +160 -0
  57. package/src/lib/module/liveness.module.js.map +1 -0
  58. package/src/lib/module/mrz.module.d.ts +11 -0
  59. package/src/lib/module/mrz.module.js +142 -0
  60. package/src/lib/module/mrz.module.js.map +1 -0
  61. package/src/lib/module/ocr.module.d.ts +12 -0
  62. package/src/lib/module/ocr.module.js +220 -0
  63. package/src/lib/module/ocr.module.js.map +1 -0
  64. package/src/lib/operator/index.d.ts +16 -0
  65. package/src/lib/operator/index.js +38 -0
  66. package/src/lib/operator/index.js.map +1 -0
  67. package/src/lib/ui/basic.d.ts +13 -0
  68. package/src/lib/ui/basic.js +62 -0
  69. package/src/lib/ui/basic.js.map +1 -0
  70. package/src/lib/ui/index.d.ts +2 -0
  71. package/src/lib/ui/index.js +6 -0
  72. package/src/lib/ui/index.js.map +1 -0
  73. package/src/lib/ui/liveness-flow.d.ts +16 -0
  74. package/src/lib/ui/liveness-flow.js +154 -0
  75. package/src/lib/ui/liveness-flow.js.map +1 -0
  76. package/src/lib/ui/liveness.ui.d.ts +9 -0
  77. package/src/lib/ui/liveness.ui.js +51 -0
  78. package/src/lib/ui/liveness.ui.js.map +1 -0
  79. package/src/lib/ui/ocr-flow.d.ts +73 -0
  80. package/src/lib/ui/ocr-flow.js +664 -0
  81. package/src/lib/ui/ocr-flow.js.map +1 -0
  82. package/src/lib/ui/ocr.ui.d.ts +43 -0
  83. package/src/lib/ui/ocr.ui.js +193 -0
  84. package/src/lib/ui/ocr.ui.js.map +1 -0
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LivenessModule = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const core_1 = require("@authme/core");
6
+ const liveness_1 = require("@authme/liveness");
7
+ const util_1 = require("@authme/util");
8
+ const rxjs_1 = require("rxjs");
9
+ const ui_1 = require("../ui");
10
+ function SendRequestWithRetry(promiseFactory) {
11
+ return (0, util_1.retryPromiseWithCondition)(promiseFactory, () => tslib_1.__awaiter(this, void 0, void 0, function* () {
12
+ return (0, util_1.asyncShowErrorMessage)((0, core_1.getTranslateInstance)().translate('verify.error.serverError'), true);
13
+ }));
14
+ }
15
+ class LivenessModule {
16
+ constructor(engine, canvas) {
17
+ this.engine = engine;
18
+ this.canvas = canvas;
19
+ this.fasService = new liveness_1.FasService(engine);
20
+ }
21
+ run(config) {
22
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
23
+ let selectedImage = null;
24
+ let frameWidth;
25
+ let frameHeight;
26
+ const frameList = [];
27
+ const resultList = [];
28
+ let id = '';
29
+ try {
30
+ const result = yield (0, rxjs_1.firstValueFrom)((0, ui_1.startLiveness)({
31
+ init: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
32
+ const resp = yield liveness_1.LivenessAPI.IdentityVerification.init(true);
33
+ id = resp.id;
34
+ yield this.fasService.init();
35
+ const params = yield this.fasService.getParams();
36
+ params.timeoutSec = resp.parameters.fasTimeout || params.timeoutSec;
37
+ params.fFASTh = resp.parameters.fasThreshold || params.fFASTh;
38
+ yield this.fasService.setParams(params);
39
+ yield this.fasService.setStage(resp.parameters.fasStages.map((x) => `EAuthMeFASServiceStage_${x}`));
40
+ return resp.parameters;
41
+ }),
42
+ onStart: (width, height) => tslib_1.__awaiter(this, void 0, void 0, function* () {
43
+ frameWidth = width;
44
+ frameHeight = height;
45
+ yield this.fasService.setFrameSize(width, height);
46
+ return yield this.fasService.startSession();
47
+ }),
48
+ onFrame: (data, base64) => tslib_1.__awaiter(this, void 0, void 0, function* () {
49
+ var _a;
50
+ const result = yield this.fasService.recognition(data);
51
+ if (this.canvas) {
52
+ const debugData = yield ((_a = this.fasService) === null || _a === void 0 ? void 0 : _a.getDebugImageData(data));
53
+ const ctx = this.canvas.getContext('2d');
54
+ this.canvas.width = frameWidth;
55
+ this.canvas.height = frameHeight;
56
+ ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
57
+ const imgData = ctx.createImageData(frameWidth, frameHeight);
58
+ imgData.data.set(debugData);
59
+ ctx.putImageData(imgData, 0, 0);
60
+ }
61
+ if (base64) {
62
+ if (result.eStage === liveness_1.EAuthMeFASServiceStage.Done ||
63
+ result.eStatus === liveness_1.FasRecognitionResult.Failed) {
64
+ frameList.push(base64.png);
65
+ }
66
+ else {
67
+ frameList.push(base64.jpg);
68
+ }
69
+ }
70
+ if (result.info.mouth.eStatus === liveness_1.EAuthMeMouthStatus.Mouth_Close) {
71
+ selectedImage = data;
72
+ }
73
+ resultList.push(result);
74
+ return result;
75
+ }),
76
+ setFrameSize: (width, height) => tslib_1.__awaiter(this, void 0, void 0, function* () {
77
+ frameWidth = width;
78
+ frameHeight = height;
79
+ yield this.fasService.setFrameSize(width, height);
80
+ yield this.fasService.stop();
81
+ return yield this.fasService.startSession();
82
+ }),
83
+ livenessConfig: config,
84
+ getSelectedImage: () => {
85
+ return selectedImage;
86
+ },
87
+ onSuccess: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
88
+ yield this.fasService.stop();
89
+ const meta = yield this.fasService.getReport();
90
+ yield SendRequestWithRetry(() => this.postResult(id, frameList, resultList, meta));
91
+ const result = yield this.getResult(id);
92
+ return !!(result === null || result === void 0 ? void 0 : result.isPass);
93
+ }),
94
+ onDestroy: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
95
+ var _b;
96
+ yield ((_b = this.fasService) === null || _b === void 0 ? void 0 : _b.destroy());
97
+ }),
98
+ }).pipe((0, rxjs_1.map)((result) => ({ isSuccess: result, message: '' }))));
99
+ return result;
100
+ }
101
+ catch (error) {
102
+ console.warn('catch error:', error);
103
+ return { isSuccess: false, message: error === null || error === void 0 ? void 0 : error.message };
104
+ }
105
+ });
106
+ }
107
+ postResult(id, frameList, resultList, meta) {
108
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
109
+ let uploadTarget = [];
110
+ // 1. Last image
111
+ uploadTarget.push({
112
+ index: frameList.length - 1,
113
+ data: frameList[frameList.length - 1],
114
+ });
115
+ // Done Stage Image
116
+ uploadTarget = [
117
+ ...uploadTarget,
118
+ ...resultList
119
+ .map((x, index) => ({ index, result: x }))
120
+ .filter((x) => x.result.eStatus === liveness_1.FasRecognitionResult.Pass &&
121
+ x.result.eStage !== liveness_1.EAuthMeFASServiceStage.Done)
122
+ .map((x) => ({ index: x.index, data: frameList[x.index] })),
123
+ ];
124
+ // Find FaceMasked
125
+ uploadTarget = [
126
+ ...uploadTarget,
127
+ ...resultList
128
+ .map((x, index) => ({ index, result: x }))
129
+ .filter((x) => x.result.eStatus === liveness_1.FasRecognitionResult.FaceMasked)
130
+ .map((x) => ({ index: x.index, data: frameList[x.index] }))
131
+ .slice(0, 9),
132
+ ];
133
+ yield Promise.all(uploadTarget
134
+ .map((x) => ({
135
+ id,
136
+ index: x.index,
137
+ data: x.data,
138
+ }))
139
+ .map((body) => this.engine.getConfig().dataTransferMethod === 'base64'
140
+ ? liveness_1.LivenessAPI.IdentityVerification.uploadFrame(body)
141
+ : liveness_1.LivenessAPI.IdentityVerification.uploadFrameFile(body)));
142
+ return liveness_1.LivenessAPI.IdentityVerification.uploadMeta({
143
+ id,
144
+ data: meta,
145
+ });
146
+ });
147
+ }
148
+ getResult(id) {
149
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
150
+ let result = yield liveness_1.LivenessAPI.IdentityVerification.getResult(id);
151
+ while (result.state == 'Validating' || result.state === 'Uploading') {
152
+ yield (0, util_1.waitTime)(1000);
153
+ result = yield liveness_1.LivenessAPI.IdentityVerification.getResult(id);
154
+ }
155
+ return result;
156
+ });
157
+ }
158
+ }
159
+ exports.LivenessModule = LivenessModule;
160
+ //# sourceMappingURL=liveness.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liveness.module.js","sourceRoot":"","sources":["../../../../../../../libs/identity-verification/feature-identity-verification/src/lib/module/liveness.module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { MlEngine } from '@authme/engine';
2
+ import { EAuthMeCardClass } from '@authme/id-recognition';
3
+ import { IdRecognitionConfig } from '../interface';
4
+ import { AuthmeOCRResult } from '../interface/result.model';
5
+ export declare class MRZModule {
6
+ private engine;
7
+ private canvas;
8
+ private mrzService;
9
+ constructor(engine: MlEngine, canvas: HTMLCanvasElement | undefined);
10
+ run(config: IdRecognitionConfig, acceptTypes: EAuthMeCardClass[]): Promise<AuthmeOCRResult>;
11
+ }
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MRZModule = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const core_1 = require("@authme/core");
6
+ const id_recognition_1 = require("@authme/id-recognition");
7
+ const util_1 = require("@authme/util");
8
+ const rxjs_1 = require("rxjs");
9
+ const ui_1 = require("../ui");
10
+ function SendRequestWithRetry(promiseFactory) {
11
+ return (0, util_1.retryPromiseWithCondition)(promiseFactory, () => tslib_1.__awaiter(this, void 0, void 0, function* () {
12
+ return (0, util_1.asyncShowErrorMessage)((0, core_1.getTranslateInstance)().translate('verify.error.serverError'), true);
13
+ }));
14
+ }
15
+ class MRZModule {
16
+ constructor(engine, canvas) {
17
+ this.engine = engine;
18
+ this.canvas = canvas;
19
+ this.mrzService = new id_recognition_1.MRZService(engine);
20
+ }
21
+ run(config, acceptTypes) {
22
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
23
+ let scanId = '';
24
+ let frameHeight = 0;
25
+ let frameWidth = 0;
26
+ let result = {};
27
+ const virtualCanvas = document.createElement('canvas');
28
+ const docInfos = {};
29
+ try {
30
+ return yield (0, rxjs_1.firstValueFrom)((0, ui_1.startOCR)({
31
+ ocrConfig: config,
32
+ init: (width, height) => tslib_1.__awaiter(this, void 0, void 0, function* () {
33
+ frameWidth = width;
34
+ frameHeight = height;
35
+ const resp = yield SendRequestWithRetry(() => (0, id_recognition_1.init)(config.type, config.country, config.needConfirm));
36
+ scanId = resp.scanId;
37
+ yield this.mrzService.init();
38
+ yield (0, util_1.waitTime)(100);
39
+ return resp.parameters;
40
+ }),
41
+ ocrStart: (points, type, retry = false) => tslib_1.__awaiter(this, void 0, void 0, function* () {
42
+ yield this.mrzService.init();
43
+ yield this.mrzService.setFrameSize(frameWidth, frameHeight);
44
+ yield this.mrzService.startSession();
45
+ if (retry) {
46
+ docInfos[type].ocrImg = null;
47
+ docInfos[type].ocrOriginImg = null;
48
+ }
49
+ else {
50
+ const resp = yield SendRequestWithRetry(() => (0, id_recognition_1.initScanDocument)(scanId, type));
51
+ if (docInfos[type]) {
52
+ docInfos[type].docId = resp.scanDocumentId;
53
+ }
54
+ else {
55
+ docInfos[type] = {
56
+ docId: resp.scanDocumentId,
57
+ ocrImg: null,
58
+ ocrOriginImg: null,
59
+ fraudOriginImg: null,
60
+ fraudResult: null,
61
+ };
62
+ }
63
+ }
64
+ return true;
65
+ }),
66
+ acceptTypes,
67
+ recognition: (data) => tslib_1.__awaiter(this, void 0, void 0, function* () {
68
+ var _a;
69
+ const mrzResult = yield this.mrzService.recognition(data);
70
+ if (this.canvas) {
71
+ const debugData = yield ((_a = this.mrzService) === null || _a === void 0 ? void 0 : _a.getDebugImageData(data));
72
+ const ctx = this.canvas.getContext('2d');
73
+ this.canvas.width = frameWidth;
74
+ this.canvas.height = frameHeight;
75
+ ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
76
+ const imgData = ctx.createImageData(frameWidth, frameHeight);
77
+ imgData.data.set(debugData);
78
+ ctx.putImageData(imgData, 0, 0);
79
+ }
80
+ if (mrzResult.eStatus === id_recognition_1.EAuthMeMRZServiceStatus.Success &&
81
+ !!docInfos[id_recognition_1.EAuthMeCardClass.Passport].docId) {
82
+ docInfos[id_recognition_1.EAuthMeCardClass.Passport].ocrOriginImg =
83
+ (0, util_1.UintArrayToBlob)(frameWidth, frameHeight, data, virtualCanvas);
84
+ yield this.mrzService.stop();
85
+ }
86
+ result = Object.assign(Object.assign({}, result), mrzResult.tField);
87
+ return mrzResult;
88
+ }),
89
+ confirmImage: (type) => tslib_1.__awaiter(this, void 0, void 0, function* () {
90
+ const docId = docInfos[type].docId;
91
+ if (docId) {
92
+ docInfos[type].docId = '';
93
+ yield SendRequestWithRetry(() => (0, id_recognition_1.saveResourceImage)(docId, id_recognition_1.ResourceImageType.Recognition, docInfos[type].ocrOriginImg));
94
+ yield SendRequestWithRetry(() => (0, id_recognition_1.finishScanDocument)(docId, result, docInfos[type].fraudResult));
95
+ return true;
96
+ }
97
+ else {
98
+ return false;
99
+ }
100
+ }),
101
+ antiFraudStart: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
102
+ throw 'MRZ Fraud Not Supported.';
103
+ }),
104
+ onAntiFraudFrame: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
105
+ throw 'MRZ Fraud Not Supported.';
106
+ }),
107
+ setFrameSize: (width, height) => tslib_1.__awaiter(this, void 0, void 0, function* () {
108
+ var _b;
109
+ frameWidth = width;
110
+ frameHeight = height;
111
+ yield ((_b = this.mrzService) === null || _b === void 0 ? void 0 : _b.setFrameSize(width, height));
112
+ }),
113
+ onSuccess: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
114
+ var _c;
115
+ (_c = this.mrzService) === null || _c === void 0 ? void 0 : _c.destroy();
116
+ yield (0, util_1.waitTime)(1000);
117
+ return {
118
+ scanId: scanId,
119
+ details: Object.assign({}, result),
120
+ };
121
+ }),
122
+ onDestroy: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
123
+ var _d;
124
+ yield ((_d = this.mrzService) === null || _d === void 0 ? void 0 : _d.destroy());
125
+ }),
126
+ }));
127
+ }
128
+ catch (error) {
129
+ const catchedError = error instanceof core_1.AuthmeError
130
+ ? error
131
+ : new core_1.AuthmeError(core_1.ErrorCode.ID_RECOGNITION_UNEXPECTED_ERROR);
132
+ return {
133
+ isSuccess: false,
134
+ message: catchedError.message,
135
+ data: {},
136
+ };
137
+ }
138
+ });
139
+ }
140
+ }
141
+ exports.MRZModule = MRZModule;
142
+ //# sourceMappingURL=mrz.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mrz.module.js","sourceRoot":"","sources":["../../../../../../../libs/identity-verification/feature-identity-verification/src/lib/module/mrz.module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { MlEngine } from '@authme/engine';
2
+ import { EAuthMeCardClass } from '@authme/id-recognition';
3
+ import { IdRecognitionConfig } from '../interface';
4
+ import { AuthmeOCRResult } from '../interface/result.model';
5
+ export declare class OCRModule {
6
+ private engine;
7
+ private canvas;
8
+ private ocrService;
9
+ private antiFraudInstance;
10
+ constructor(engine: MlEngine, canvas: HTMLCanvasElement | undefined);
11
+ run(config: IdRecognitionConfig, acceptTypes: EAuthMeCardClass[]): Promise<AuthmeOCRResult>;
12
+ }
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OCRModule = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const core_1 = require("@authme/core");
6
+ const id_recognition_1 = require("@authme/id-recognition");
7
+ const util_1 = require("@authme/util");
8
+ const rxjs_1 = require("rxjs");
9
+ const ui_1 = require("../ui");
10
+ function SendRequestWithRetry(promiseFactory) {
11
+ return (0, util_1.retryPromiseWithCondition)(promiseFactory, () => tslib_1.__awaiter(this, void 0, void 0, function* () {
12
+ return (0, util_1.asyncShowErrorMessage)((0, core_1.getTranslateInstance)().translate('verify.error.serverError'), true);
13
+ }));
14
+ }
15
+ class OCRModule {
16
+ constructor(engine, canvas) {
17
+ this.engine = engine;
18
+ this.canvas = canvas;
19
+ this.ocrService = new id_recognition_1.CardOCR(engine);
20
+ this.antiFraudInstance = new id_recognition_1.IdCardAntiFraudService(engine);
21
+ }
22
+ run(config, acceptTypes) {
23
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
24
+ let scanId = '';
25
+ let frameHeight = 0;
26
+ let frameWidth = 0;
27
+ let result = {};
28
+ const virtualCanvas = document.createElement('canvas');
29
+ const docInfos = {};
30
+ try {
31
+ const translateService = (0, core_1.getTranslateInstance)();
32
+ return yield (0, rxjs_1.firstValueFrom)((0, ui_1.startOCR)({
33
+ ocrConfig: config,
34
+ init: (width, height) => tslib_1.__awaiter(this, void 0, void 0, function* () {
35
+ frameWidth = width;
36
+ frameHeight = height;
37
+ const resp = yield SendRequestWithRetry(() => (0, id_recognition_1.init)(config.type, config.country, config.needConfirm));
38
+ scanId = resp.scanId;
39
+ if (config.type === id_recognition_1.IdRecognitionCardType.IDCard &&
40
+ config.needAntiFraud) {
41
+ yield this.antiFraudInstance.init();
42
+ }
43
+ else {
44
+ yield this.ocrService.init();
45
+ }
46
+ yield (0, util_1.waitTime)(100);
47
+ return resp.parameters;
48
+ }),
49
+ ocrStart: (points, type, retry = false) => tslib_1.__awaiter(this, void 0, void 0, function* () {
50
+ yield this.ocrService.init();
51
+ yield this.ocrService.setFrameSize(frameWidth, frameHeight);
52
+ yield this.ocrService.setMaskPosition(points.map(([x, y]) => [
53
+ Number(x.toFixed(2)),
54
+ Number(y.toFixed(2)),
55
+ ]));
56
+ yield this.ocrService.setType(type);
57
+ yield this.ocrService.startSession();
58
+ if (retry) {
59
+ docInfos[type].ocrImg = null;
60
+ docInfos[type].ocrOriginImg = null;
61
+ }
62
+ else {
63
+ const resp = yield SendRequestWithRetry(() => (0, id_recognition_1.initScanDocument)(scanId, type));
64
+ if (docInfos[type]) {
65
+ docInfos[type].docId = resp.scanDocumentId;
66
+ }
67
+ else {
68
+ docInfos[type] = {
69
+ docId: resp.scanDocumentId,
70
+ ocrImg: null,
71
+ ocrOriginImg: null,
72
+ fraudOriginImg: null,
73
+ fraudResult: null,
74
+ };
75
+ }
76
+ }
77
+ return true;
78
+ }),
79
+ acceptTypes,
80
+ recognition: (data) => tslib_1.__awaiter(this, void 0, void 0, function* () {
81
+ var _a;
82
+ const result = yield this.ocrService.recognition(data);
83
+ if (this.canvas) {
84
+ const debugData = yield ((_a = this.ocrService) === null || _a === void 0 ? void 0 : _a.getDebugImageData(data));
85
+ const ctx = this.canvas.getContext('2d');
86
+ this.canvas.width = frameWidth;
87
+ this.canvas.height = frameHeight;
88
+ ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
89
+ const imgData = ctx.createImageData(frameWidth, frameHeight);
90
+ imgData.data.set(debugData);
91
+ ctx.putImageData(imgData, 0, 0);
92
+ }
93
+ if (result.eStatus === id_recognition_1.EAuthMeCardOCRStatus.Pass &&
94
+ result.imageData &&
95
+ !!docInfos[result.info.cardClass.eClass].docId) {
96
+ docInfos[result.info.cardClass.eClass].ocrImg = (0, util_1.UintArrayToBlob)(result.iWidth, result.iHeight, result === null || result === void 0 ? void 0 : result.imageData, virtualCanvas);
97
+ docInfos[result.info.cardClass.eClass].ocrOriginImg =
98
+ (0, util_1.UintArrayToBlob)(frameWidth, frameHeight, data, virtualCanvas);
99
+ yield this.ocrService.stop();
100
+ }
101
+ return result;
102
+ }),
103
+ confirmImage: (type) => tslib_1.__awaiter(this, void 0, void 0, function* () {
104
+ const docId = docInfos[type].docId;
105
+ if (docId) {
106
+ docInfos[type].docId = '';
107
+ yield SendRequestWithRetry(() => (0, id_recognition_1.saveResourceImage)(docId, id_recognition_1.ResourceImageType.Recognition, docInfos[type].ocrOriginImg));
108
+ yield SendRequestWithRetry(() => (0, id_recognition_1.saveResourceImage)(docId, id_recognition_1.ResourceImageType.Recognition, docInfos[type].ocrImg));
109
+ if (docInfos[type].fraudOriginImg) {
110
+ yield SendRequestWithRetry(() => (0, id_recognition_1.saveResourceImage)(docId, id_recognition_1.ResourceImageType.Fraud, docInfos[type].fraudOriginImg));
111
+ }
112
+ try {
113
+ const resp = yield SendRequestWithRetry(() => (0, id_recognition_1.recognition)(docId, docInfos[type].ocrImg));
114
+ if (resp.retry) {
115
+ yield (0, util_1.asyncShowPopup)(translateService.translate('verify.error.blur'), translateService.translate('verify.error.blurDescribe'), true);
116
+ throw 'recognition failed';
117
+ }
118
+ result = Object.assign(Object.assign({}, result), resp.details);
119
+ yield SendRequestWithRetry(() => (0, id_recognition_1.finishScanDocument)(docId, resp.details, docInfos[type].fraudResult));
120
+ delete docInfos[type];
121
+ return true;
122
+ }
123
+ catch (error) {
124
+ docInfos[type].docId = docId;
125
+ return false;
126
+ }
127
+ }
128
+ else {
129
+ return false;
130
+ }
131
+ }),
132
+ antiFraudStart: (points) => tslib_1.__awaiter(this, void 0, void 0, function* () {
133
+ yield this.antiFraudInstance.init();
134
+ yield this.antiFraudInstance.setFrameSize(frameWidth, frameHeight);
135
+ yield this.antiFraudInstance.setMaskPosition(points.map(([x, y]) => [
136
+ Number(x.toFixed(2)),
137
+ Number(y.toFixed(2)),
138
+ ]));
139
+ yield this.antiFraudInstance.startSession();
140
+ docInfos[id_recognition_1.EAuthMeCardClass.TWN_IDCard_Front] = {
141
+ docId: '',
142
+ ocrImg: null,
143
+ ocrOriginImg: null,
144
+ fraudOriginImg: null,
145
+ fraudResult: false,
146
+ };
147
+ return true;
148
+ }),
149
+ onAntiFraudFrame: (data) => tslib_1.__awaiter(this, void 0, void 0, function* () {
150
+ var _b, _c;
151
+ const result = yield ((_b = this.antiFraudInstance) === null || _b === void 0 ? void 0 : _b.recognition(data));
152
+ if (!result) {
153
+ return result;
154
+ }
155
+ if (this.canvas) {
156
+ const debugData = yield ((_c = this.antiFraudInstance) === null || _c === void 0 ? void 0 : _c.getDebugImageData(data));
157
+ const ctx = this.canvas.getContext('2d');
158
+ this.canvas.width = frameWidth;
159
+ this.canvas.height = frameHeight;
160
+ ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
161
+ const imgData = ctx.createImageData(frameWidth, frameHeight);
162
+ imgData.data.set(debugData);
163
+ ctx.putImageData(imgData, 0, 0);
164
+ }
165
+ if (result.eStatus === id_recognition_1.EAuthMeIDCardAntiFraudStatus.Pass ||
166
+ result.eStatus === id_recognition_1.EAuthMeIDCardAntiFraudStatus.Failed) {
167
+ const type = id_recognition_1.EAuthMeCardClass.TWN_IDCard_Front;
168
+ docInfos[type].fraudOriginImg = (0, util_1.UintArrayToBlob)(frameWidth, frameHeight, data, virtualCanvas);
169
+ docInfos[type].fraudResult =
170
+ result.eStatus === id_recognition_1.EAuthMeIDCardAntiFraudStatus.Pass;
171
+ yield this.antiFraudInstance.stop();
172
+ yield this.antiFraudInstance.destroy();
173
+ }
174
+ return result;
175
+ }),
176
+ setFrameSize: (width, height, points) => tslib_1.__awaiter(this, void 0, void 0, function* () {
177
+ var _d, _e, _f;
178
+ frameWidth = width;
179
+ frameHeight = height;
180
+ yield ((_d = this.ocrService) === null || _d === void 0 ? void 0 : _d.setFrameSize(width, height));
181
+ yield ((_e = this.antiFraudInstance) === null || _e === void 0 ? void 0 : _e.setFrameSize(width, height));
182
+ if (points) {
183
+ yield ((_f = this.ocrService) === null || _f === void 0 ? void 0 : _f.setMaskPosition(points.map(([x, y]) => [
184
+ Number(x.toFixed(2)),
185
+ Number(y.toFixed(2)),
186
+ ])));
187
+ }
188
+ }),
189
+ onSuccess: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
190
+ var _g, _h;
191
+ (_g = this.antiFraudInstance) === null || _g === void 0 ? void 0 : _g.destroy();
192
+ (_h = this.ocrService) === null || _h === void 0 ? void 0 : _h.destroy();
193
+ yield (0, util_1.waitTime)(1000);
194
+ return {
195
+ scanId: scanId,
196
+ details: Object.assign({}, result),
197
+ };
198
+ }),
199
+ onDestroy: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
200
+ var _j, _k;
201
+ yield ((_j = this.ocrService) === null || _j === void 0 ? void 0 : _j.destroy());
202
+ yield ((_k = this.antiFraudInstance) === null || _k === void 0 ? void 0 : _k.destroy());
203
+ }),
204
+ }));
205
+ }
206
+ catch (error) {
207
+ const catchedError = error instanceof core_1.AuthmeError
208
+ ? error
209
+ : new core_1.AuthmeError(core_1.ErrorCode.ID_RECOGNITION_UNEXPECTED_ERROR);
210
+ return {
211
+ isSuccess: false,
212
+ message: catchedError.message,
213
+ data: {},
214
+ };
215
+ }
216
+ });
217
+ }
218
+ }
219
+ exports.OCRModule = OCRModule;
220
+ //# sourceMappingURL=ocr.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ocr.module.js","sourceRoot":"","sources":["../../../../../../../libs/identity-verification/feature-identity-verification/src/lib/module/ocr.module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { CanvasSizeInfo } from '@authme/util';
2
+ import { Observable } from 'rxjs';
3
+ export declare const limitFPS: (fps: number) => (source: Observable<any>) => Observable<any>;
4
+ export declare const sendFrame: <T>(canvasSizeInfo: CanvasSizeInfo, canvas: HTMLCanvasElement, video: HTMLVideoElement, frameCallback: ((data: Uint8ClampedArray) => Promise<T>) | ((data: Uint8ClampedArray, base64: {
5
+ jpg: string;
6
+ png: string;
7
+ }) => Promise<T>), fps: number, bas64Format: boolean, imageType: 'jpg' | 'png' | 'all') => (source$: Observable<any>) => Observable<{
8
+ imageData: {
9
+ data: Uint8ClampedArray;
10
+ base64: {
11
+ jpg: string;
12
+ png: string;
13
+ } | null;
14
+ };
15
+ result: T;
16
+ }>;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sendFrame = exports.limitFPS = void 0;
4
+ const core_1 = require("@authme/core");
5
+ const util_1 = require("@authme/util");
6
+ const rxjs_1 = require("rxjs");
7
+ const limitFPS = (fps) => {
8
+ let now = Date.now();
9
+ let then = Date.now();
10
+ const interval = 1000 / fps;
11
+ let delta = 0;
12
+ return (source) => source.pipe((0, rxjs_1.filter)(() => {
13
+ now = Date.now();
14
+ delta = now - then;
15
+ if (delta > interval) {
16
+ then = now - (delta % interval);
17
+ }
18
+ return delta > interval;
19
+ }));
20
+ };
21
+ exports.limitFPS = limitFPS;
22
+ const sendFrame = (canvasSizeInfo, canvas, video, frameCallback, fps, bas64Format, imageType) => (source$) => {
23
+ let received = true;
24
+ const ctx = canvas.getContext('2d');
25
+ return source$.pipe((0, rxjs_1.mergeMap)(() => (0, rxjs_1.animationFrames)().pipe((0, exports.limitFPS)(fps), (0, rxjs_1.filter)(() => received), (0, rxjs_1.tap)(() => (received = false)), (0, rxjs_1.tap)(() => (0, util_1.clearCanvas)(canvas)), (0, rxjs_1.map)(() => (0, util_1.getImageData)(canvas, ctx, video, canvasSizeInfo, bas64Format, imageType)), (0, rxjs_1.mergeMap)((imageData) => (0, rxjs_1.from)(frameCallback(imageData.data, imageData.base64)).pipe((0, rxjs_1.catchError)((e) => {
26
+ // send to fast, ignore
27
+ if (e instanceof core_1.AuthmeError &&
28
+ e.code === core_1.ErrorCode.RECOGNITION_NOT_AVAILABLE) {
29
+ return rxjs_1.EMPTY;
30
+ }
31
+ throw e;
32
+ }), (0, rxjs_1.filter)((x) => !!x), (0, rxjs_1.map)((result) => ({
33
+ imageData,
34
+ result,
35
+ })), (0, rxjs_1.tap)(() => (received = true)))))));
36
+ };
37
+ exports.sendFrame = sendFrame;
38
+ //# sourceMappingURL=index.js.map