@authme/engine 2.2.0 → 2.2.1-rc.3

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 (40) hide show
  1. package/assets/engine-worker.js +1 -504
  2. package/assets/ml_engine_web.js +1 -1
  3. package/assets/ml_engine_web.simd.js +1 -1
  4. package/assets/ml_engine_web.simd.wasm +0 -0
  5. package/assets/ml_engine_web.wasm +0 -0
  6. package/assets/ml_engine_web_version.txt +1 -1
  7. package/index.cjs +617 -0
  8. package/index.js +609 -0
  9. package/package.json +11 -13
  10. package/src/index.d.ts +4 -3
  11. package/src/lib/engine.d.ts +52 -42
  12. package/src/lib/enum/auth.enum.d.ts +3 -3
  13. package/src/lib/enum/fas-recognition.enum.d.ts +46 -0
  14. package/src/lib/enum/id-recognition.enum.d.ts +64 -0
  15. package/src/lib/enum/index.d.ts +4 -2
  16. package/src/lib/enum/module.enum.d.ts +8 -8
  17. package/src/lib/interface/basic-type.interface.d.ts +12 -12
  18. package/src/lib/interface/config.interface.d.ts +7 -7
  19. package/src/lib/interface/index.d.ts +3 -3
  20. package/src/lib/interface/worker-command.interface.d.ts +7 -7
  21. package/src/lib/version.d.ts +1 -0
  22. package/CHANGELOG.md +0 -400
  23. package/src/index.js +0 -7
  24. package/src/index.js.map +0 -1
  25. package/src/lib/engine.js +0 -345
  26. package/src/lib/engine.js.map +0 -1
  27. package/src/lib/enum/auth.enum.js +0 -8
  28. package/src/lib/enum/auth.enum.js.map +0 -1
  29. package/src/lib/enum/index.js +0 -6
  30. package/src/lib/enum/index.js.map +0 -1
  31. package/src/lib/enum/module.enum.js +0 -13
  32. package/src/lib/enum/module.enum.js.map +0 -1
  33. package/src/lib/interface/basic-type.interface.js +0 -3
  34. package/src/lib/interface/basic-type.interface.js.map +0 -1
  35. package/src/lib/interface/config.interface.js +0 -10
  36. package/src/lib/interface/config.interface.js.map +0 -1
  37. package/src/lib/interface/index.js +0 -7
  38. package/src/lib/interface/index.js.map +0 -1
  39. package/src/lib/interface/worker-command.interface.js +0 -3
  40. package/src/lib/interface/worker-command.interface.js.map +0 -1
package/index.js ADDED
@@ -0,0 +1,609 @@
1
+ import 'core-js/modules/es.array.iterator.js';
2
+ import 'core-js/modules/es.object.from-entries.js';
3
+ import 'core-js/modules/es.array-buffer.slice.js';
4
+ import 'core-js/modules/es.typed-array.uint8-array.js';
5
+ import 'core-js/modules/es.typed-array.fill.js';
6
+ import 'core-js/modules/es.typed-array.set.js';
7
+ import 'core-js/modules/es.typed-array.sort.js';
8
+ import 'core-js/modules/es.typed-array.to-locale-string.js';
9
+ import 'core-js/modules/web.dom-collections.iterator.js';
10
+ import 'core-js/modules/web.url.js';
11
+ import 'core-js/modules/web.url-search-params.js';
12
+ import 'core-js/modules/es.promise.js';
13
+ import 'core-js/modules/es.parse-int.js';
14
+ import 'core-js/modules/es.object.assign.js';
15
+ import 'core-js/modules/es.regexp.to-string.js';
16
+ import 'core-js/modules/es.array.sort.js';
17
+ import { AuthmeError, ErrorCode, sendRequest } from '@authme/core';
18
+ import { isMobile, Storage } from '@authme/util';
19
+ import { firstValueFrom, filter, map, fromEvent, shareReplay, from, mergeAll, concatMap, of, reduce, defer, concatAll, mergeMap } from 'rxjs';
20
+ import 'core-js/modules/es.symbol.description.js';
21
+
22
+ /******************************************************************************
23
+ Copyright (c) Microsoft Corporation.
24
+
25
+ Permission to use, copy, modify, and/or distribute this software for any
26
+ purpose with or without fee is hereby granted.
27
+
28
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
29
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
30
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
31
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
32
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
33
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
34
+ PERFORMANCE OF THIS SOFTWARE.
35
+ ***************************************************************************** */
36
+
37
+ function __awaiter(thisArg, _arguments, P, generator) {
38
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
39
+ return new (P || (P = Promise))(function (resolve, reject) {
40
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
41
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
42
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
43
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
44
+ });
45
+ }
46
+
47
+ var EngineModule;
48
+ (function (EngineModule) {
49
+ EngineModule["Fas"] = "Fas";
50
+ EngineModule["IdCardAntiFraud"] = "IdCardAntiFraud";
51
+ EngineModule["CardOCR"] = "CardOCR";
52
+ EngineModule["PassportService"] = "PassportService";
53
+ EngineModule["DEBUG"] = "DEBUG";
54
+ EngineModule["Core"] = "Core";
55
+ })(EngineModule || (EngineModule = {}));
56
+
57
+ var EAuthMeEngineReturnCode;
58
+ (function (EAuthMeEngineReturnCode) {
59
+ EAuthMeEngineReturnCode["Pass"] = "EAuthMeEngineReturnCode_eAuthMe_Engine_Authorization_Pass";
60
+ })(EAuthMeEngineReturnCode || (EAuthMeEngineReturnCode = {}));
61
+
62
+ var authEnumModule = /*#__PURE__*/Object.freeze({
63
+ __proto__: null,
64
+ get EAuthMeEngineReturnCode () { return EAuthMeEngineReturnCode; }
65
+ });
66
+
67
+ var EAuthMeCardClass;
68
+ (function (EAuthMeCardClass) {
69
+ EAuthMeCardClass["Invalid"] = "EAuthMeCardClass_Invalid";
70
+ EAuthMeCardClass["Unknown"] = "EAuthMeCardClass_UnknownCard";
71
+ EAuthMeCardClass["Passport"] = "EAuthMeCardClass_Passport";
72
+ EAuthMeCardClass["TWN_IDCard_Front"] = "EAuthMeCardClass_TWN_IDCard_Front";
73
+ EAuthMeCardClass["TWN_IDCard_Back"] = "EAuthMeCardClass_TWN_IDCard_Back";
74
+ EAuthMeCardClass["TWN_DriverLicense_Front"] = "EAuthMeCardClass_TWN_DriverLicense_Front";
75
+ EAuthMeCardClass["TWN_DriverLicense_Back"] = "EAuthMeCardClass_TWN_DriverLicense_Back";
76
+ EAuthMeCardClass["TWN_ResidentCard_Front"] = "EAuthMeCardClass_TWN_ResidentCard_Front";
77
+ EAuthMeCardClass["TWN_ResidentCard_Back"] = "EAuthMeCardClass_TWN_ResidentCard_Back";
78
+ EAuthMeCardClass["TWN_HealthCard_Front"] = "EAuthMeCardClass_TWN_HealthCard_Front";
79
+ EAuthMeCardClass["TWN_VehiclesLicense_Front"] = "EAuthMeCardClass_TWN_VehiclesLicense_Front";
80
+ })(EAuthMeCardClass || (EAuthMeCardClass = {}));
81
+ var EAuthMeIDCardMetalTagStatus;
82
+ (function (EAuthMeIDCardMetalTagStatus) {
83
+ EAuthMeIDCardMetalTagStatus["NotFound"] = "EAuthMeIDCardMetalTagStatus_NotFound";
84
+ EAuthMeIDCardMetalTagStatus["Bright"] = "EAuthMeIDCardMetalTagStatus_Bright";
85
+ EAuthMeIDCardMetalTagStatus["Dark"] = "EAuthMeIDCardMetalTagStatus_Dark";
86
+ })(EAuthMeIDCardMetalTagStatus || (EAuthMeIDCardMetalTagStatus = {}));
87
+ var EAuthMeCardMatchStatus;
88
+ (function (EAuthMeCardMatchStatus) {
89
+ EAuthMeCardMatchStatus["None"] = "EAuthMeCardMatchStatus_None";
90
+ EAuthMeCardMatchStatus["Mismatch"] = "EAuthMeCardMatchStatus_Mismatch";
91
+ EAuthMeCardMatchStatus["NeedMoreFrame"] = "EAuthMeCardMatchStatus_NeedMoreFrame";
92
+ EAuthMeCardMatchStatus["Match"] = "EAuthMeCardMatchStatus_Match";
93
+ })(EAuthMeCardMatchStatus || (EAuthMeCardMatchStatus = {}));
94
+ var EAuthMeCardOCRStatus;
95
+ (function (EAuthMeCardOCRStatus) {
96
+ EAuthMeCardOCRStatus["NoCard"] = "EAuthMeCardOCRStatus_NoCard";
97
+ EAuthMeCardOCRStatus["WrongCardType"] = "EAuthMeCardOCRStatus_WrongCardType";
98
+ EAuthMeCardOCRStatus["PositionNotMatch"] = "EAuthMeCardOCRStatus_PositionNotMatch";
99
+ EAuthMeCardOCRStatus["Reflective"] = "EAuthMeCardOCRStatus_Reflective";
100
+ EAuthMeCardOCRStatus["Blur"] = "EAuthMeCardOCRStatus_Blur";
101
+ EAuthMeCardOCRStatus["Pass"] = "EAuthMeCardOCRStatus_Pass";
102
+ EAuthMeCardOCRStatus["Error"] = "EAuthMeCardOCRStatus_Error";
103
+ })(EAuthMeCardOCRStatus || (EAuthMeCardOCRStatus = {}));
104
+ var EAuthMeIDCardAntiFraudStatus;
105
+ (function (EAuthMeIDCardAntiFraudStatus) {
106
+ EAuthMeIDCardAntiFraudStatus["Failed"] = "EAuthMeIDCardAntiFraudStatus_Failed";
107
+ EAuthMeIDCardAntiFraudStatus["NoCard"] = "EAuthMeIDCardAntiFraudStatus_NoCard";
108
+ EAuthMeIDCardAntiFraudStatus["WrongCardType"] = "EAuthMeIDCardAntiFraudStatus_WrongCardType";
109
+ EAuthMeIDCardAntiFraudStatus["Reflective"] = "EAuthMeIDCardAntiFraudStatus_Reflective";
110
+ EAuthMeIDCardAntiFraudStatus["Blur"] = "EAuthMeIDCardAntiFraudStatus_Blur";
111
+ EAuthMeIDCardAntiFraudStatus["Gray"] = "EAuthMeIDCardAntiFraudStatus_Gray";
112
+ EAuthMeIDCardAntiFraudStatus["PositionNotMatch"] = "EAuthMeIDCardAntiFraudStatus_PositionNotMatch";
113
+ EAuthMeIDCardAntiFraudStatus["NeedMoreFrame"] = "EAuthMeIDCardAntiFraudStatus_NeedMoreFrame";
114
+ EAuthMeIDCardAntiFraudStatus["Pass"] = "EAuthMeIDCardAntiFraudStatus_Pass";
115
+ EAuthMeIDCardAntiFraudStatus["Error"] = "EAuthMeIDCardAntiFraudStatus_Error";
116
+ })(EAuthMeIDCardAntiFraudStatus || (EAuthMeIDCardAntiFraudStatus = {}));
117
+ var EAuthMeMRZRecogStatus;
118
+ (function (EAuthMeMRZRecogStatus) {
119
+ EAuthMeMRZRecogStatus["Success"] = "EAuthMeMRZRecogStatus_Success";
120
+ EAuthMeMRZRecogStatus["WrongFormat"] = "EAuthMeMRZRecogStatus_WrongFormat";
121
+ })(EAuthMeMRZRecogStatus || (EAuthMeMRZRecogStatus = {}));
122
+ var EAuthMePassportServiceStatus;
123
+ (function (EAuthMePassportServiceStatus) {
124
+ EAuthMePassportServiceStatus["Success"] = "EAuthMePassportServiceStatus_Success";
125
+ EAuthMePassportServiceStatus["NotFound"] = "EAuthMePassportServiceStatus_NotFound";
126
+ EAuthMePassportServiceStatus["RecogFailed"] = "EAuthMePassportServiceStatus_RecogFailed";
127
+ EAuthMePassportServiceStatus["Error"] = "EAuthMePassportServiceStatus_Error";
128
+ })(EAuthMePassportServiceStatus || (EAuthMePassportServiceStatus = {}));
129
+ var EAuthMeIDCardAntiFraudStage;
130
+ (function (EAuthMeIDCardAntiFraudStage) {
131
+ EAuthMeIDCardAntiFraudStage["Frontal"] = "EAuthMeIDCardAntiFraudStage_Frontal";
132
+ EAuthMeIDCardAntiFraudStage["Up"] = "EAuthMeIDCardAntiFraudStage_Up";
133
+ EAuthMeIDCardAntiFraudStage["Down"] = "EAuthMeIDCardAntiFraudStage_Down";
134
+ EAuthMeIDCardAntiFraudStage["Left"] = "EAuthMeIDCardAntiFraudStage_Left";
135
+ EAuthMeIDCardAntiFraudStage["Right"] = "EAuthMeIDCardAntiFraudStage_Right";
136
+ EAuthMeIDCardAntiFraudStage["IgnoreCardMatch"] = "EAuthMeIDCardAntiFraudStage_IgnoreCardMatch";
137
+ EAuthMeIDCardAntiFraudStage["Done"] = "EAuthMeIDCardAntiFraudStage_Done";
138
+ })(EAuthMeIDCardAntiFraudStage || (EAuthMeIDCardAntiFraudStage = {}));
139
+
140
+ var idRecognitionEnumModule = /*#__PURE__*/Object.freeze({
141
+ __proto__: null,
142
+ get EAuthMeCardClass () { return EAuthMeCardClass; },
143
+ get EAuthMeIDCardMetalTagStatus () { return EAuthMeIDCardMetalTagStatus; },
144
+ get EAuthMeCardMatchStatus () { return EAuthMeCardMatchStatus; },
145
+ get EAuthMeCardOCRStatus () { return EAuthMeCardOCRStatus; },
146
+ get EAuthMeIDCardAntiFraudStatus () { return EAuthMeIDCardAntiFraudStatus; },
147
+ get EAuthMeMRZRecogStatus () { return EAuthMeMRZRecogStatus; },
148
+ get EAuthMePassportServiceStatus () { return EAuthMePassportServiceStatus; },
149
+ get EAuthMeIDCardAntiFraudStage () { return EAuthMeIDCardAntiFraudStage; }
150
+ });
151
+
152
+ var EAuthMeFASServiceStatus;
153
+ (function (EAuthMeFASServiceStatus) {
154
+ EAuthMeFASServiceStatus["Failed"] = "EAuthMeFASServiceStatus_Failed";
155
+ EAuthMeFASServiceStatus["NoFace"] = "EAuthMeFASServiceStatus_NoFace";
156
+ EAuthMeFASServiceStatus["FaceNotAtCenter"] = "EAuthMeFASServiceStatus_FaceNotAtCenter";
157
+ EAuthMeFASServiceStatus["FaceTooSmall"] = "EAuthMeFASServiceStatus_FaceTooSmall";
158
+ EAuthMeFASServiceStatus["FaceTooLarge"] = "EAuthMeFASServiceStatus_FaceTooLarge";
159
+ EAuthMeFASServiceStatus["NeedFaceToCamera"] = "EAuthMeFASServiceStatus_NeedFaceToCamera";
160
+ EAuthMeFASServiceStatus["FaceMasked"] = "EAuthMeFASServiceStatus_FaceMasked";
161
+ EAuthMeFASServiceStatus["NeedOpenMouth"] = "EAuthMeFASServiceStatus_NeedOpenMouth";
162
+ EAuthMeFASServiceStatus["NeedCloseMouth"] = "EAuthMeFASServiceStatus_NeedCloseMouth";
163
+ EAuthMeFASServiceStatus["NeedSmile"] = "EAuthMeFASServiceStatus_NeedSmile";
164
+ EAuthMeFASServiceStatus["NeedOpenEyes"] = "EAuthMeFASServiceStatus_NeedOpenEyes";
165
+ EAuthMeFASServiceStatus["NeedMoreFrame"] = "EAuthMeFASServiceStatus_NeedMoreFrame";
166
+ EAuthMeFASServiceStatus["Error"] = "EAuthMeFASServiceStatus_Error";
167
+ EAuthMeFASServiceStatus["Pass"] = "EAuthMeFASServiceStatus_Pass";
168
+ })(EAuthMeFASServiceStatus || (EAuthMeFASServiceStatus = {}));
169
+ var EAuthMeFASServiceStage;
170
+ (function (EAuthMeFASServiceStage) {
171
+ EAuthMeFASServiceStage["Passive"] = "EAuthMeFASServiceStage_Passive";
172
+ EAuthMeFASServiceStage["OpenMouth"] = "EAuthMeFASServiceStage_OpenMouth";
173
+ EAuthMeFASServiceStage["CloseMouth"] = "EAuthMeFASServiceStage_CloseMouth";
174
+ EAuthMeFASServiceStage["Smile"] = "EAuthMeFASServiceStage_Smile";
175
+ EAuthMeFASServiceStage["Done"] = "EAuthMeFASServiceStage_Done";
176
+ })(EAuthMeFASServiceStage || (EAuthMeFASServiceStage = {}));
177
+ var EAuthMeEyeStatus;
178
+ (function (EAuthMeEyeStatus) {
179
+ EAuthMeEyeStatus["Eye_Close"] = "EAuthMeEyeStatus_Eye_Close";
180
+ EAuthMeEyeStatus["Eye_Open"] = "EAuthMeEyeStatus_Eye_Open";
181
+ })(EAuthMeEyeStatus || (EAuthMeEyeStatus = {}));
182
+ var EAuthMeMouthStatus;
183
+ (function (EAuthMeMouthStatus) {
184
+ EAuthMeMouthStatus["Mouth_Close"] = "EAuthMeMouthStatus_Mouth_Close";
185
+ EAuthMeMouthStatus["Mouth_Open"] = "EAuthMeMouthStatus_Mouth_Open";
186
+ })(EAuthMeMouthStatus || (EAuthMeMouthStatus = {}));
187
+ var EAuthMeFacePose;
188
+ (function (EAuthMeFacePose) {
189
+ EAuthMeFacePose["Unknown"] = "EAuthMeFacePose_Unknown";
190
+ EAuthMeFacePose["LeftProfile"] = "EAuthMeFacePose_LeftProfile";
191
+ EAuthMeFacePose["LeftFrontal"] = "EAuthMeFacePose_LeftFrontal";
192
+ EAuthMeFacePose["Frontal"] = "EAuthMeFacePose_Frontal";
193
+ EAuthMeFacePose["RightFrontal"] = "EAuthMeFacePose_RightFrontal";
194
+ EAuthMeFacePose["RightProfile"] = "EAuthMeFacePose_RightProfile";
195
+ EAuthMeFacePose["UpFrontal"] = "EAuthMeFacePose_UpFrontal";
196
+ EAuthMeFacePose["DownFrontal"] = "EAuthMeFacePose_DownFrontal";
197
+ })(EAuthMeFacePose || (EAuthMeFacePose = {}));
198
+ var EAuthMeFaceAntiSpoofingStatus;
199
+ (function (EAuthMeFaceAntiSpoofingStatus) {
200
+ EAuthMeFaceAntiSpoofingStatus["FrameNotEnough"] = "EAuthMeFaceAntiSpoofingStatus_FrameNotEnough";
201
+ EAuthMeFaceAntiSpoofingStatus["Real"] = "EAuthMeFaceAntiSpoofingStatus_Real";
202
+ EAuthMeFaceAntiSpoofingStatus["Spoof"] = "EAuthMeFaceAntiSpoofingStatus_Spoof";
203
+ })(EAuthMeFaceAntiSpoofingStatus || (EAuthMeFaceAntiSpoofingStatus = {}));
204
+
205
+ var fasRecognitionEnumModule = /*#__PURE__*/Object.freeze({
206
+ __proto__: null,
207
+ get EAuthMeFASServiceStatus () { return EAuthMeFASServiceStatus; },
208
+ get EAuthMeFASServiceStage () { return EAuthMeFASServiceStage; },
209
+ get EAuthMeEyeStatus () { return EAuthMeEyeStatus; },
210
+ get EAuthMeMouthStatus () { return EAuthMeMouthStatus; },
211
+ get EAuthMeFacePose () { return EAuthMeFacePose; },
212
+ get EAuthMeFaceAntiSpoofingStatus () { return EAuthMeFaceAntiSpoofingStatus; }
213
+ });
214
+
215
+ const defaultMlEngineConfig = {
216
+ token: '',
217
+ scriptPath: '/assets/',
218
+ apiBaseUrl: '/',
219
+ dataTransferMethod: 'binary'
220
+ };
221
+
222
+ var name = "@authme/engine";
223
+ var version$1 = "2.2.1-rc.3";
224
+ var peerDependencies = {
225
+ "core-js": "^3.6.0",
226
+ rxjs: "^7.4.0"
227
+ };
228
+ var packageInfo = {
229
+ name: name,
230
+ version: version$1,
231
+ peerDependencies: peerDependencies
232
+ };
233
+
234
+ var _a;
235
+ var _b, _c;
236
+ const version = packageInfo.version;
237
+ (_a = (_b = window)[_c = Symbol.for('authme-sdk')]) !== null && _a !== void 0 ? _a : _b[_c] = {};
238
+ window[Symbol.for('authme-sdk')][packageInfo.name] = version;
239
+
240
+ const getDownloadOrder = function () {
241
+ // model 越大,在後續 worker service 載入與解密的時間越長,
242
+ // 所以盡可能讓越大的檔案排在越前面下載,以便讓耗費時間長的任務先排在背景執行。
243
+ //
244
+ // 但由於 api server 目前沒有提供檔案大小的相關資訊,
245
+ // 所以將順序相關的資訊寫死在 sdk 裡。
246
+ const DOWNLOAD_ORDER = Object.fromEntries(['FACE_03', 'FACE_00', 'IDCardAntiFraud_00', 'FACE_01', 'OCR_00', 'FACE_02', 'OCR_02', 'MRZ_00', 'OCR_01', 'MRZ_01' // 375k
247
+ ].map((key, index) => [key, index]));
248
+ return function getDownloadOrder(key) {
249
+ var _a;
250
+ return (_a = DOWNLOAD_ORDER[key]) !== null && _a !== void 0 ? _a : Number.MAX_VALUE;
251
+ };
252
+ }();
253
+ function isSimdSupported() {
254
+ try {
255
+ // Test for WebAssembly SIMD capability (for both browsers and Node.js)
256
+ // This typed array is a WebAssembly program containing SIMD instructions.
257
+ return WebAssembly.validate(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 2, 1, 0, 10, 9, 1, 7, 0, 65, 0, 253, 15, 26, 11]));
258
+ } catch (e) {
259
+ return false;
260
+ }
261
+ }
262
+ function getWasmContentAsync(url) {
263
+ return sendRequest(url, 'GET', {
264
+ expectedResponseContentTypes: ['application/wasm'],
265
+ accessToken: null,
266
+ baseUrl: null,
267
+ sdkInfo: null
268
+ });
269
+ }
270
+ function getJsContentAsync(url) {
271
+ return sendRequest(url, 'GET', {
272
+ expectedResponseContentTypes: ['text/javascript', 'application/javascript'],
273
+ accessToken: null,
274
+ baseUrl: null,
275
+ sdkInfo: null
276
+ });
277
+ }
278
+ function createWorkerWithObjectUrlAsync(url) {
279
+ return __awaiter(this, void 0, void 0, function* () {
280
+ const scriptContent = yield getJsContentAsync(url);
281
+ const objectUrl = URL.createObjectURL(new Blob([scriptContent], {
282
+ type: 'text/javascript'
283
+ }));
284
+ const worker = new Worker(objectUrl);
285
+ URL.revokeObjectURL(objectUrl);
286
+ return worker;
287
+ });
288
+ }
289
+ function convertToModelQueryString(modelVersion) {
290
+ return `models=${modelVersion.name}[${modelVersion.version}]`;
291
+ }
292
+ function fetchModelCodesAsync(modelVersions) {
293
+ return __awaiter(this, void 0, void 0, function* () {
294
+ const queryString = modelVersions.map(convertToModelQueryString).join('&');
295
+ const response = yield sendRequest('/api/model-management/v1/model?' + queryString);
296
+ return response.models;
297
+ });
298
+ }
299
+ function base64ToBufferAsync(base64) {
300
+ const dataUrl = 'data:application/octet-binary;base64,' + base64;
301
+ return fetch(dataUrl).then(res => res.arrayBuffer());
302
+ }
303
+ function fetchModelContentAsync(code, dataTransferMethod) {
304
+ return __awaiter(this, void 0, void 0, function* () {
305
+ const payload = yield sendRequest(`/api/model-management/v1/model/${code}${dataTransferMethod === 'binary' ? '/file' : ''}`);
306
+ if (dataTransferMethod === 'binary') {
307
+ return payload;
308
+ } else {
309
+ return yield base64ToBufferAsync(payload.data);
310
+ }
311
+ });
312
+ }
313
+ function fetchModelContents(modelVersions, dataTransferMethod) {
314
+ return of(modelVersions).pipe(concatMap(modelVersions => defer(() => fetchModelCodesAsync(modelVersions))), concatAll(), mergeMap(({
315
+ name,
316
+ version,
317
+ code
318
+ }) => defer(() => __awaiter(this, void 0, void 0, function* () {
319
+ return {
320
+ modelVersion: {
321
+ name,
322
+ version: `${parseInt(version)}`
323
+ },
324
+ modelArrayBuffer: yield fetchModelContentAsync(code, dataTransferMethod)
325
+ };
326
+ })), 1
327
+ // 下載 model 過程會分為 wait time & download time,
328
+ // concurrent 設定越高,只能起到降低 wait time 的作用,但會拉長單一檔案完成下載的時間,
329
+ // 這會延遲 worker service 裡,載入與解密的時間。
330
+ //
331
+ // 所以 concurrent 建議設定為 1 或 2,盡量讓已下載好的 model 儘早進行載入與解密。
332
+ ));
333
+ }
334
+
335
+ class AuthmeFunctionModule {
336
+ init(config) {
337
+ return __awaiter(this, void 0, void 0, function* () {
338
+ for (const key in config) {
339
+ if (Object.prototype.hasOwnProperty.call(config, key)) {
340
+ Storage.setItem(key, config[key]);
341
+ }
342
+ }
343
+ });
344
+ }
345
+ static getVersion() {
346
+ return version;
347
+ }
348
+ }
349
+ class MlEngine {
350
+ constructor(config) {
351
+ this.workerAndStreamPromise = undefined;
352
+ this.preloadPromise = undefined;
353
+ this.config = Object.assign(Object.assign(Object.assign({}, defaultMlEngineConfig), config), {
354
+ isMobile: isMobile()
355
+ });
356
+ }
357
+ _run(worker, workerMessage$, module, command, value = {}) {
358
+ const id = (Math.random() + 1).toString(36).substring(4) + Date.now();
359
+ worker.postMessage({
360
+ module,
361
+ command,
362
+ id,
363
+ value
364
+ });
365
+ return firstValueFrom(workerMessage$.pipe(filter(x => x.id === id), map(x => x.value)));
366
+ }
367
+ _makeWorkerAndStreamAsync() {
368
+ var _a;
369
+ return __awaiter(this, void 0, void 0, function* () {
370
+ // use blobUrl to fix cross-domain problem on worker creating.
371
+ // ref:
372
+ // * https://stackoverflow.com/questions/25458104/can-should-html5-web-workers-use-cors-for-cross-origin
373
+ // * https://web.dev/workers-basics/
374
+ const worker = yield createWorkerWithObjectUrlAsync(`${(_a = this.config.scriptPath) !== null && _a !== void 0 ? _a : ''}engine-worker.js?t=${Date.now()}`);
375
+ const workerMessage$ = fromEvent(worker, 'message').pipe(map(x => x.data), shareReplay(1));
376
+ yield this._run(worker, workerMessage$, EngineModule.Core, 'setConfig', this.config);
377
+ return [worker, workerMessage$];
378
+ });
379
+ }
380
+ _backgroundPreloadAsync() {
381
+ var _a;
382
+ return __awaiter(this, void 0, void 0, function* () {
383
+ const [worker, workerMessage$] = yield (_a = this.workerAndStreamPromise) !== null && _a !== void 0 ? _a : this.workerAndStreamPromise = this._makeWorkerAndStreamAsync();
384
+ yield this._loadEngineAsync(worker, workerMessage$);
385
+ yield this._checkEnumConsistencyAsync(worker, workerMessage$);
386
+ return [worker, workerMessage$];
387
+ });
388
+ }
389
+ terminateWorkerAsync() {
390
+ return __awaiter(this, void 0, void 0, function* () {
391
+ if (this.workerAndStreamPromise || this.preloadPromise) {
392
+ const [worker, _] = yield this._backgroundPreloadAsync();
393
+ this.workerAndStreamPromise = undefined;
394
+ this.preloadPromise = undefined;
395
+ worker.terminate();
396
+ }
397
+ });
398
+ }
399
+ _preloadAndWaitReadyAsync() {
400
+ var _a;
401
+ return (_a = this.preloadPromise) !== null && _a !== void 0 ? _a : this.preloadPromise = this._backgroundPreloadAsync();
402
+ }
403
+ _checkEnumConsistencyAsync(worker, workerMessage$) {
404
+ return __awaiter(this, void 0, void 0, function* () {
405
+ const problem = yield this._run(worker, workerMessage$, 'Core', 'checkEnumConsistency', Object.assign(Object.assign(Object.assign({}, authEnumModule), idRecognitionEnumModule), fasRecognitionEnumModule));
406
+ if (problem.length > 0) {
407
+ throw new AuthmeError(ErrorCode.SDK_INTERNAL_ERROR, {
408
+ problem
409
+ });
410
+ }
411
+ });
412
+ }
413
+ run(module, command, value = {}) {
414
+ return __awaiter(this, void 0, void 0, function* () {
415
+ const [worker, workerMessage$] = yield this._preloadAndWaitReadyAsync();
416
+ return yield this._run(worker, workerMessage$, module, command, value);
417
+ });
418
+ }
419
+ getConfig() {
420
+ return this.config;
421
+ }
422
+ setConfig(config) {
423
+ return __awaiter(this, void 0, void 0, function* () {
424
+ this.config = Object.assign(Object.assign({}, this.config), config);
425
+ if (this.workerAndStreamPromise) {
426
+ const [worker, workerMessage$] = yield this._preloadAndWaitReadyAsync();
427
+ yield this._run(worker, workerMessage$, EngineModule.Core, 'setConfig', this.config);
428
+ }
429
+ });
430
+ }
431
+ _loadEngineAsync(worker, workerMessage$) {
432
+ var _a, _b, _c, _d, _e;
433
+ return __awaiter(this, void 0, void 0, function* () {
434
+ // load js/wasm outside the worker.
435
+ const simdSupported = isSimdSupported();
436
+ const jsUrl = simdSupported ? `${(_a = this.config.scriptPath) !== null && _a !== void 0 ? _a : ''}ml_engine_web.simd.js` : `${(_b = this.config.scriptPath) !== null && _b !== void 0 ? _b : ''}ml_engine_web.js`;
437
+ const wasmUrl = simdSupported ? `${(_c = this.config.scriptPath) !== null && _c !== void 0 ? _c : ''}ml_engine_web.simd.wasm` : `${(_d = this.config.scriptPath) !== null && _d !== void 0 ? _d : ''}ml_engine_web.wasm`;
438
+ const [engineJsContent, engineWasmContent] = yield (_e = MlEngine._ENGINE_CACHE) !== null && _e !== void 0 ? _e : MlEngine._ENGINE_CACHE = Promise.all([getJsContentAsync(`${jsUrl}?t=${Date.now()}`), getWasmContentAsync(`${wasmUrl}?t=${Date.now()}`)]);
439
+ return yield this._run(worker, workerMessage$, EngineModule.Core, 'loadEngine', {
440
+ engineJsContent,
441
+ engineWasmContent
442
+ });
443
+ });
444
+ }
445
+ }
446
+ MlEngine._ENGINE_CACHE = undefined;
447
+ class AuthmeEngineModuleBase {
448
+ constructor(engine) {
449
+ this._initPromise = undefined;
450
+ this.initialized = false;
451
+ this.initializing = false;
452
+ this.setSized = false;
453
+ this.received = true;
454
+ this.engine = engine;
455
+ }
456
+ _engineRunAsync(command, value) {
457
+ return this.engine.run(this.moduleName, command, value);
458
+ }
459
+ _init() {
460
+ var _a;
461
+ return __awaiter(this, void 0, void 0, function* () {
462
+ if (this.initialized) {
463
+ return true;
464
+ }
465
+ if (this.initializing) {
466
+ throw new AuthmeError(ErrorCode.ENGINE_MODULE_IS_INITIALIZING);
467
+ }
468
+ this.initializing = true;
469
+ try {
470
+ const noLoadedModelVersions = yield this._engineRunAsync('getNoLoadedModelVersions');
471
+ const noCachedModelVersions = noLoadedModelVersions.filter(({
472
+ name,
473
+ version
474
+ }) => !AuthmeEngineModuleBase._MODEL_CACHE[`${name}-${version}`]);
475
+ const newCachedValues = fetchModelContents(noCachedModelVersions.sort((a, b) => getDownloadOrder(a.name) - getDownloadOrder(b.name)), (_a = this.engine.getConfig().dataTransferMethod) !== null && _a !== void 0 ? _a : 'binary').pipe(shareReplay());
476
+ for (const {
477
+ name,
478
+ version
479
+ } of noCachedModelVersions) {
480
+ AuthmeEngineModuleBase._MODEL_CACHE[`${name}-${version}`] = newCachedValues.pipe(filter(({
481
+ modelVersion
482
+ }) => modelVersion.name === name && modelVersion.version === version));
483
+ }
484
+ const loadSessions$ = from(noLoadedModelVersions).pipe(map(({
485
+ name,
486
+ version
487
+ }) => AuthmeEngineModuleBase._MODEL_CACHE[`${name}-${version}`]), mergeAll(), concatMap(({
488
+ modelVersion,
489
+ modelArrayBuffer
490
+ }) => of(this._engineRunAsync('loadSession', {
491
+ modelVersion,
492
+ modelArrayBuffer
493
+ }))), reduce((promises, item) => {
494
+ promises.push(item);
495
+ return promises;
496
+ }, []), concatMap(promises => defer(() => Promise.all(promises))));
497
+ yield firstValueFrom(loadSessions$);
498
+ const result = yield this._engineRunAsync('init');
499
+ this.initialized = true;
500
+ return result;
501
+ } catch (error) {
502
+ throw new AuthmeError(ErrorCode.ENGINE_MODULE_INIT_ERROR, error);
503
+ } finally {
504
+ this.initializing = false;
505
+ }
506
+ });
507
+ }
508
+ init() {
509
+ var _a;
510
+ return (_a = this._initPromise) !== null && _a !== void 0 ? _a : this._initPromise = this._init();
511
+ }
512
+ preloadAsync() {
513
+ return this.init();
514
+ }
515
+ startSession() {
516
+ this.received = true;
517
+ return this._engineRunAsync('start');
518
+ }
519
+ stop() {
520
+ return this._engineRunAsync('stop');
521
+ }
522
+ getReport() {
523
+ return this._engineRunAsync('getJsonReport');
524
+ }
525
+ recognition(data) {
526
+ return __awaiter(this, void 0, void 0, function* () {
527
+ // status control
528
+ if (!this.received || !this.initialized || !this.setSized) {
529
+ throw new AuthmeError(ErrorCode.RECOGNITION_NOT_AVAILABLE);
530
+ }
531
+ try {
532
+ this.received = false;
533
+ const start = performance.now();
534
+ const return$ = yield this._engineRunAsync('recognition', {
535
+ data
536
+ });
537
+ this.received = true;
538
+ return Object.assign(Object.assign({}, return$), {
539
+ debugInfo: {
540
+ inferenceTime: performance.now() - start
541
+ }
542
+ });
543
+ } catch (error) {
544
+ this.received = true;
545
+ throw new AuthmeError(ErrorCode.RECOGNITION_ERROR, error);
546
+ }
547
+ });
548
+ }
549
+ getDebugImageData(data) {
550
+ return __awaiter(this, void 0, void 0, function* () {
551
+ // status control
552
+ if (!this.received || !this.initialized || !this.setSized) {
553
+ throw new AuthmeError(ErrorCode.RECOGNITION_NOT_AVAILABLE);
554
+ }
555
+ try {
556
+ this.received = false;
557
+ const start = performance.now();
558
+ const return$ = yield this._engineRunAsync('getDebugImage', {
559
+ data
560
+ });
561
+ this.received = true;
562
+ return$.debugInfo = {
563
+ inferenceTime: performance.now() - start
564
+ };
565
+ return return$;
566
+ } catch (error) {
567
+ this.received = true;
568
+ throw new AuthmeError(ErrorCode.RECOGNITION_ERROR, error);
569
+ }
570
+ });
571
+ }
572
+ setFrameSize(width, height) {
573
+ return __awaiter(this, void 0, void 0, function* () {
574
+ const result = yield this._engineRunAsync('setFrameSize', {
575
+ width,
576
+ height
577
+ });
578
+ this.setSized = true;
579
+ return result;
580
+ });
581
+ }
582
+ getParams() {
583
+ return this._engineRunAsync('getParams');
584
+ }
585
+ setParams(params) {
586
+ return this._engineRunAsync('setParams', {
587
+ params
588
+ });
589
+ }
590
+ setMaskPosition(positions) {
591
+ return this._engineRunAsync('setMaskPosition', {
592
+ positions
593
+ });
594
+ }
595
+ destroy() {
596
+ return __awaiter(this, void 0, void 0, function* () {
597
+ yield this._engineRunAsync('destroy');
598
+ this.initialized = false;
599
+ this._initPromise = undefined;
600
+ return true;
601
+ });
602
+ }
603
+ static reset_MODEL_CACHE() {
604
+ this._MODEL_CACHE = {};
605
+ }
606
+ }
607
+ AuthmeEngineModuleBase._MODEL_CACHE = {};
608
+
609
+ export { AuthmeEngineModuleBase, AuthmeFunctionModule, EAuthMeCardClass, EAuthMeCardMatchStatus, EAuthMeCardOCRStatus, EAuthMeEngineReturnCode, EAuthMeEyeStatus, EAuthMeFASServiceStage, EAuthMeFASServiceStatus, EAuthMeFaceAntiSpoofingStatus, EAuthMeFacePose, EAuthMeIDCardAntiFraudStage, EAuthMeIDCardAntiFraudStatus, EAuthMeIDCardMetalTagStatus, EAuthMeMRZRecogStatus, EAuthMeMouthStatus, EAuthMePassportServiceStatus, EngineModule, MlEngine, defaultMlEngineConfig, version };
package/package.json CHANGED
@@ -1,17 +1,15 @@
1
1
  {
2
2
  "name": "@authme/engine",
3
- "version": "2.2.0",
4
- "devDependencies": {
5
- "rxjs": "~7.4.0"
6
- },
7
- "main": "./src/index.js",
8
- "typings": "./src/index.d.ts",
9
- "dependencies": {},
3
+ "version": "2.2.1-rc.3",
10
4
  "peerDependencies": {
11
- "@authme/core": "2.2.0",
12
- "@authme/util": "2.2.0",
13
- "three": "^0.136.0",
14
- "lottie-web": "^5.9.2",
15
- "tslib": "^2.3.0"
16
- }
5
+ "core-js": "^3.6.0",
6
+ "rxjs": "^7.4.0",
7
+ "@authme/core": "2.2.1-rc.3",
8
+ "@authme/util": "2.2.1-rc.3"
9
+ },
10
+ "module": "./index.js",
11
+ "main": "./index.cjs",
12
+ "type": "module",
13
+ "types": "./src/index.d.ts",
14
+ "dependencies": {}
17
15
  }
package/src/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
- export * from './lib/engine';
2
- export * from './lib/enum';
3
- export * from './lib/interface';
1
+ export * from './lib/engine';
2
+ export * from './lib/enum';
3
+ export * from './lib/interface';
4
+ export { version } from './lib/version';