@authme/engine 2.2.0-rc.9 → 2.2.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/CHANGELOG.md CHANGED
@@ -2,6 +2,28 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [2.2.0](https://github.com/AuthMe01/web-client-sdk/compare/v2.2.0-rc.13...v2.2.0) (2022-12-19)
6
+
7
+ ## [2.2.0-rc.13](https://github.com/AuthMe01/web-client-sdk/compare/v2.2.0-rc.12...v2.2.0-rc.13) (2022-12-19)
8
+
9
+ ### Bug Fixes
10
+
11
+ - 1.close btn add stop sdk method. 2.implement loading-sdk lottie. 3.delete vehicles license item ([83738bd](https://github.com/AuthMe01/web-client-sdk/commit/83738bd1630c539157222bc7a909962cc65696ae))
12
+
13
+ ## [2.2.0-rc.12](https://github.com/AuthMe01/web-client-sdk/compare/v2.2.0-rc.11...v2.2.0-rc.12) (2022-12-16)
14
+
15
+ ## [2.2.0-rc.11](https://github.com/AuthMe01/web-client-sdk/compare/v2.2.0-rc.10...v2.2.0-rc.11) (2022-12-16)
16
+
17
+ ## [2.2.0-rc.10](https://github.com/AuthMe01/web-client-sdk/compare/v2.2.0-rc.9...v2.2.0-rc.10) (2022-12-15)
18
+
19
+ ### Features
20
+
21
+ - improve model loading performance ([0021a16](https://github.com/AuthMe01/web-client-sdk/commit/0021a164074bd9e4a219db1ef8e25932d3786ea8))
22
+
23
+ ### Bug Fixes
24
+
25
+ - waitTime problem ([5805979](https://github.com/AuthMe01/web-client-sdk/commit/5805979180cc009e0c82bba2b2094e70db6bf1bf))
26
+
5
27
  ## [2.2.0-rc.9](https://github.com/AuthMe01/web-client-sdk/compare/v2.2.0-rc.8...v2.2.0-rc.9) (2022-12-09)
6
28
 
7
29
  ### Features
@@ -3,8 +3,6 @@
3
3
  let wasm_loaded = false;
4
4
  let wasm_loading = false;
5
5
 
6
- let modelSession = {};
7
-
8
6
  function importScriptsViaJsContent(jsContent) {
9
7
  const objectUrl = URL.createObjectURL(
10
8
  new Blob([jsContent], { type: 'text/javascript' })
@@ -13,40 +11,8 @@
13
11
  URL.revokeObjectURL(objectUrl);
14
12
  }
15
13
 
16
- function base64toBlob(data) {
17
- const byteChars = self.atob(data);
18
- const byteNumbers = new Array(byteChars.length);
19
- for (let i = 0; i < byteChars.length; i++) {
20
- byteNumbers[i] = byteChars.charCodeAt(i);
21
- }
22
- const byteArray = new Uint8Array(byteNumbers);
23
- return new Blob([byteArray], { type: 'application/octet-stream' });
24
- }
25
-
26
- async function fetchModel(code) {
27
- const method = self.config.dataTransferMethod || 'binary';
28
-
29
- const resp = await fetch(
30
- `${self.config.apiBaseUrl}/api/model-management/v1/model/${code}${
31
- method === 'binary' ? '/file' : ''
32
- }`,
33
- {
34
- headers: {
35
- Authorization: 'Bearer ' + self.config.token,
36
- },
37
- }
38
- );
39
-
40
- if (method === 'binary') {
41
- return resp.blob();
42
- } else {
43
- const data = await resp.json();
44
- return base64toBlob(data.data);
45
- }
46
- }
47
-
48
14
  async function loadWasm({ engineJsContent, engineWasmContent }) {
49
- return new Promise((res, rej) => {
15
+ return new Promise(function loadWasmExecutor(res, rej) {
50
16
  // console.log('load wasm');
51
17
  if (wasm_loaded || wasm_loading) {
52
18
  res(true);
@@ -65,7 +31,7 @@
65
31
  },
66
32
  };
67
33
  importScriptsViaJsContent(engineJsContent);
68
- let tryInitEngineLib = async () => {
34
+ async function tryInitEngineLib() {
69
35
  try {
70
36
  const module = await AuthmeMLEngineLib({
71
37
  wasmBinary: engineWasmContent,
@@ -89,64 +55,207 @@
89
55
  console.warn(
90
56
  'init Authme EngineLib error:',
91
57
  error,
92
- ' Try after 1 second.'
58
+ ' Try after 3 second.'
93
59
  );
94
- await waitTime(500);
60
+ await waitTime(3000);
95
61
  await tryInitEngineLib();
96
62
  }
97
- };
63
+ }
98
64
  tryInitEngineLib();
99
65
  }
100
66
  });
101
67
  }
102
68
 
103
- // PassportService
104
- self.PassportService = {
69
+ // Base
70
+ const baseFunctions = {
105
71
  instance: null,
106
- init: async function () {
107
- return await self.Base.init(self.PassportService, 'PassportService');
72
+ sessions: {},
73
+ _getModelVersions(constructorName) {
74
+ const versionVector =
75
+ self.EngineLib[constructorName]['getModelVersion']();
76
+ const models = [];
77
+ for (let i = 0; i < versionVector.size(); i++) {
78
+ let item = versionVector.get(i);
79
+ models.push({
80
+ name: `${item.szName}`,
81
+ version: `${item.szVersion}`,
82
+ });
83
+ }
84
+ return models;
108
85
  },
109
- start: function () {
110
- return self.Base.start(self.PassportService);
86
+
87
+ // worker 專心處理 cpu 密集 (model 載入) 的工作,
88
+ // 至於純 IO 下載的任務就交給 main thread 處理就好。
89
+ loadModel({ modelName, modelArrayBuffer }) {
90
+ let fileMounted = false;
91
+ try {
92
+ const FS = self.EngineLib.FS;
93
+ FS.mkdir(`/${modelName}/`);
94
+ FS.mount(
95
+ FS.filesystems.WORKERFS,
96
+ {
97
+ blobs: [
98
+ {
99
+ name: modelName,
100
+ data: new Blob([modelArrayBuffer], {
101
+ type: 'application/octet-stream',
102
+ }),
103
+ },
104
+ ],
105
+ },
106
+ `/${modelName}/`
107
+ );
108
+ fileMounted = true;
109
+ } catch (error) {
110
+ if (error?.errno === 20) {
111
+ // File Exist
112
+ fileMounted = true;
113
+ } else {
114
+ throw error;
115
+ }
116
+ }
117
+
118
+ if (fileMounted) {
119
+ const session = self.EngineLib.createInferenceSession(
120
+ modelName,
121
+ `/${modelName}/${modelName}`
122
+ );
123
+ this.sessions[modelName] = session;
124
+ }
111
125
  },
112
- stop: function () {
113
- return self.Base.stop(self.PassportService);
126
+ async _init(constructorName) {
127
+ // 暫時將縮排透過遺留下來,減少 review 無變動的資訊。
128
+ {
129
+ {
130
+ {
131
+ const instance = new self.EngineLib[constructorName]();
132
+ instance.initial(
133
+ ...this._getModelVersions(constructorName).map(
134
+ ({ name }) => this.sessions[name]
135
+ )
136
+ );
137
+ const engine = instance;
138
+ const uiParams = engine.getUIParams();
139
+ uiParams.previewPosition.fLeft = 0;
140
+ uiParams.previewPosition.fTop = 0;
141
+ uiParams.previewPosition.fRight = 1;
142
+ uiParams.previewPosition.fBottom = 1;
143
+ engine.setUIParams(uiParams);
144
+ this.instance = instance;
145
+ return true;
146
+ }
147
+ }
148
+ }
114
149
  },
115
- getJsonReport: function () {
116
- return self.Base.getJsonReport(self.PassportService);
150
+ start() {
151
+ return this.instance?.start();
117
152
  },
118
- setFrameSize: function (params) {
119
- return self.Base.setFrameSize(self.PassportService, params);
153
+ stop() {
154
+ return this.instance?.stop();
120
155
  },
121
- getFinalResult: function (params) {
122
- return self.PassportService.instance.getFinalResult();
156
+ _setFrameSize(params) {
157
+ config.frame.width = Math.floor(params.width);
158
+ config.frame.height = Math.floor(params.height);
159
+ if (this.instance) {
160
+ const engine = this.instance;
161
+ const uiParams = engine.getUIParams();
162
+ uiParams.analyzeSize.iHeight = config.frame.height;
163
+ uiParams.analyzeSize.iWidth = config.frame.width;
164
+ engine.setUIParams(uiParams);
165
+ return true;
166
+ }
123
167
  },
124
- toJson: function (params) {
125
- return Object.getPrototypeOf(
126
- self.PassportService.instance
127
- ).constructor.toJson(params);
168
+ setFrameSize(params) {
169
+ return this._setFrameSize(params);
128
170
  },
129
- recognition: function (params) {
130
- const result = self.Base.recognition(self.PassportService, params);
131
- if (result) {
132
- result.eStatus = result.eStatus.constructor.name;
133
- result.tField = JSON.parse(self.PassportService.toJson(result.tField));
171
+ _recognition(params) {
172
+ const engine = this.instance;
173
+ if (engine) {
174
+ try {
175
+ const data = params.data;
176
+ const heapInfo = putOnHeap(data);
177
+ const result = engine.run(
178
+ heapInfo.byteOffset,
179
+ heapInfo.length,
180
+ config.frame.width,
181
+ config.frame.height
182
+ );
183
+ self.EngineLib._free(heapInfo.dataPtr);
184
+ return result;
185
+ } catch (error) {
186
+ // console.warn(error);
187
+ // console.warn('[Recognition Error]: ' + error?.message);
188
+ return null;
189
+ }
134
190
  }
135
- return result;
191
+ console.warn('engine not initialized');
192
+ },
193
+ recognition(params) {
194
+ return this._recognition(params);
195
+ },
196
+ getParams() {
197
+ return this.instance.getParams();
198
+ },
199
+ setParams(params) {
200
+ return this.instance.setParams(params.params);
201
+ },
202
+ getDebugImage(params) {
203
+ const data = params.data;
204
+ const heapInfo = putOnHeap(data);
205
+ let imageData;
206
+ const pointer = this.instance.getDebugImage(
207
+ heapInfo.byteOffset,
208
+ heapInfo.length,
209
+ config.frame.width,
210
+ config.frame.height
211
+ );
212
+ self.EngineLib._free(heapInfo.dataPtr);
213
+ if (pointer) {
214
+ imageData = self.EngineLib.HEAPU8.slice(
215
+ pointer,
216
+ pointer + config.frame.width * config.frame.height * 4
217
+ );
218
+ self.EngineLib._free(pointer);
219
+ }
220
+ return imageData;
221
+ },
222
+ destroy() {
223
+ if (this.instance) {
224
+ this.instance.delete();
225
+ this.instance = null;
226
+ }
227
+ for (const session of Object.values(this.sessions)) {
228
+ self.EngineLib.deleteSession(session);
229
+ }
230
+ this.sessions = {};
136
231
  },
137
- getParams: function () {
138
- return self.Base.getParams(self.PassportService);
232
+ getJsonReport() {
233
+ return this.instance?.getJsonReport();
234
+ },
235
+ };
236
+
237
+ // PassportService
238
+ self.PassportService = {
239
+ ...baseFunctions,
240
+
241
+ getModelVersions() {
242
+ return this._getModelVersions('PassportService');
139
243
  },
140
- setParams: function (params) {
141
- return self.Base.setParams(self.PassportService, params);
244
+ init() {
245
+ return this._init('PassportService');
142
246
  },
143
- getDebugImage: function (params) {
144
- return self.Base.getDebugImage(self.PassportService, params);
247
+ toJson(params) {
248
+ return Object.getPrototypeOf(this.instance).constructor.toJson(params);
145
249
  },
146
- destroy: function () {
147
- return self.Base.destroy(self.PassportService);
250
+ recognition(params) {
251
+ const result = this._recognition(params);
252
+ if (result) {
253
+ result.eStatus = result.eStatus.constructor.name;
254
+ result.tField = JSON.parse(self.PassportService.toJson(result.tField));
255
+ }
256
+ return result;
148
257
  },
149
- setMaskPosition: function (params) {
258
+ setMaskPosition(params) {
150
259
  const positions = params.positions;
151
260
  return self.PassportService.instance?.setMatchROI(
152
261
  positions[0][0],
@@ -163,25 +272,16 @@
163
272
 
164
273
  // Card OCR
165
274
  self.CardOCR = {
166
- instance: null,
167
- init: async function () {
168
- let result = await self.Base.init(self.CardOCR, 'CardOCR');
169
- return result;
170
- },
171
- start: function () {
172
- return self.Base.start(self.CardOCR);
173
- },
174
- stop: function () {
175
- return self.Base.stop(self.CardOCR);
176
- },
177
- getJsonReport: function () {
178
- return self.Base.getJsonReport(self.CardOCR);
275
+ ...baseFunctions,
276
+
277
+ getModelVersions() {
278
+ return this._getModelVersions('CardOCR');
179
279
  },
180
- setFrameSize: function (params) {
181
- return self.Base.setFrameSize(self.CardOCR, params);
280
+ init() {
281
+ return this._init('CardOCR');
182
282
  },
183
- recognition: function (params) {
184
- const result = self.Base.recognition(self.CardOCR, params);
283
+ recognition(params) {
284
+ const result = this._recognition(params);
185
285
  if (result) {
186
286
  if (result.pointer > 0) {
187
287
  result.imageData = self.EngineLib.HEAPU8.slice(
@@ -196,11 +296,8 @@
196
296
  }
197
297
  return result;
198
298
  },
199
- getDebugImage: function (params) {
200
- return self.Base.getDebugImage(self.CardOCR, params);
201
- },
202
- setType: function (params) {
203
- const engine = self.CardOCR.instance;
299
+ setType(params) {
300
+ const engine = this.instance;
204
301
  if (engine) {
205
302
  const engineParams = engine.getParams();
206
303
  engineParams.eTargetCardType =
@@ -211,9 +308,9 @@
211
308
  }
212
309
  return false;
213
310
  },
214
- setMaskPosition: function (params) {
311
+ setMaskPosition(params) {
215
312
  const positions = params.positions;
216
- return self.CardOCR.instance?.setCardMatchROI(
313
+ return this.instance?.setCardMatchROI(
217
314
  positions[0][0],
218
315
  positions[0][1],
219
316
  positions[1][0],
@@ -224,44 +321,27 @@
224
321
  positions[3][1]
225
322
  );
226
323
  },
227
- getParams: function () {
228
- return self.Base.getParams(self.CardOCR);
229
- },
230
- setParams: function (params) {
231
- return self.Base.setParams(self.CardOCR, params);
232
- },
233
- destroy: function () {
234
- return self.Base.destroy(self.CardOCR);
235
- },
236
324
  };
237
325
 
238
326
  // Id Card Anti Fraud
239
327
  self.IdCardAntiFraud = {
240
- instance: null,
241
- init: async function () {
242
- await self.Base.init(self.IdCardAntiFraud, 'IdCardAntiFraudService');
243
- if (self.IdCardAntiFraud.instance) {
244
- const engine = self.IdCardAntiFraud.instance;
328
+ ...baseFunctions,
329
+
330
+ getModelVersions() {
331
+ return this._getModelVersions('IdCardAntiFraudService');
332
+ },
333
+ async init() {
334
+ await this._init('IdCardAntiFraudService');
335
+ if (this.instance) {
336
+ const engine = this.instance;
245
337
  const engineParams = engine.getParams();
246
338
  engineParams.timeoutSec = 52;
247
339
  engine.setParams(engineParams);
248
340
  return true;
249
341
  }
250
342
  },
251
- start: function () {
252
- return self.Base.start(self.IdCardAntiFraud);
253
- },
254
- stop: function () {
255
- return self.Base.stop(self.IdCardAntiFraud);
256
- },
257
- getJsonReport: function () {
258
- return self.Base.getJsonReport(self.IdCardAntiFraud);
259
- },
260
- setFrameSize: function (params) {
261
- return self.Base.setFrameSize(self.IdCardAntiFraud, params);
262
- },
263
- recognition: function (params) {
264
- const result = self.Base.recognition(self.IdCardAntiFraud, params);
343
+ recognition(params) {
344
+ const result = this._recognition(params);
265
345
  if (result) {
266
346
  result.eStatus = result.eStatus.constructor.name;
267
347
  result.eStage = result.eStage.constructor.name;
@@ -275,9 +355,9 @@
275
355
  }
276
356
  return result;
277
357
  },
278
- setMaskPosition: function (params) {
358
+ setMaskPosition(params) {
279
359
  const positions = params.positions;
280
- return self.IdCardAntiFraud.instance?.setFrontalCardVertices(
360
+ return this.instance?.setFrontalCardVertices(
281
361
  positions[0][0],
282
362
  positions[0][1],
283
363
  positions[1][0],
@@ -288,68 +368,53 @@
288
368
  positions[3][1]
289
369
  );
290
370
  },
291
- setStage: function (params) {
292
- if (self.IdCardAntiFraud.instance) {
371
+ setStage(params) {
372
+ if (this.instance) {
293
373
  const stageList = new self.EngineLib.FraudStageList();
294
- params.forEach((x) => {
295
- stageList.push_back(self.EngineLib.EAuthMeIDCardAntiFraudStage[x]);
296
- });
297
- self.IdCardAntiFraud.instance.setStage(stageList);
374
+ for (const stage of params) {
375
+ stageList.push_back(
376
+ self.EngineLib.EAuthMeIDCardAntiFraudStage[stage]
377
+ );
378
+ }
379
+ this.instance.setStage(stageList);
298
380
  }
299
381
  },
300
- getParams: function () {
301
- return self.Base.getParams(self.IdCardAntiFraud);
302
- },
303
- setParams: function (params) {
304
- return self.Base.setParams(self.IdCardAntiFraud, params);
305
- },
306
- getDebugImage: function (params) {
307
- return self.Base.getDebugImage(self.IdCardAntiFraud, params);
308
- },
309
- destroy: function () {
310
- return self.Base.destroy(self.IdCardAntiFraud);
311
- },
312
382
  };
313
383
 
314
384
  self.Fas = {
315
- instance: null,
316
- init: async function () {
317
- await self.Base.init(self.Fas, 'CFASService');
318
- },
319
- start: function () {
320
- return self.Base.start(self.Fas);
321
- },
322
- stop: function () {
323
- return self.Base.stop(self.Fas);
385
+ ...baseFunctions,
386
+
387
+ getModelVersions() {
388
+ return this._getModelVersions('CFASService');
324
389
  },
325
- getJsonReport: function () {
326
- return self.Base.getJsonReport(self.Fas);
390
+ init() {
391
+ return this._init('CFASService');
327
392
  },
328
- setFrameSize: function (params) {
329
- self.Base.setFrameSize(self.Fas, params);
393
+ setFrameSize(params) {
394
+ this._setFrameSize(params);
330
395
  if (config.frame.width / config.frame.height >= 1) {
331
- const params = self.Fas.instance.getParams();
396
+ const params = this.instance.getParams();
332
397
  params.fFaceRoiPreviewRatioW = 0.3;
333
- self.Fas.instance.setParams(params);
398
+ this.instance.setParams(params);
334
399
  }
335
400
  },
336
- setStage: function (params) {
337
- if (self.Fas.instance) {
401
+ setStage(params) {
402
+ if (this.instance) {
338
403
  const stageList = new self.EngineLib.FASStageList();
339
- params.stageList.forEach((x) => {
340
- stageList.push_back(self.EngineLib.EAuthMeFASServiceStage[x]);
341
- });
342
- self.Fas.instance.setStage(stageList);
404
+ for (const stage of params.stageList) {
405
+ stageList.push_back(self.EngineLib.EAuthMeFASServiceStage[stage]);
406
+ }
407
+ this.instance.setStage(stageList);
343
408
  }
344
409
  },
345
410
  getStageParams({ stageIndex }) {
346
- return self.Fas.instance.getStageParams(stageIndex);
411
+ return this.instance.getStageParams(stageIndex);
347
412
  },
348
413
  setStageParams({ stageIndex, value }) {
349
- self.Fas.instance.setStageParams(value, stageIndex);
414
+ this.instance.setStageParams(value, stageIndex);
350
415
  },
351
- recognition: function (params) {
352
- const result = self.Base.recognition(self.Fas, params);
416
+ recognition(params) {
417
+ const result = this._recognition(params);
353
418
  if (result) {
354
419
  result.eStatus = result.eStatus.constructor.name;
355
420
  result.eStage = result.eStage.constructor.name;
@@ -361,175 +426,25 @@
361
426
  }
362
427
  return result;
363
428
  },
364
- getParams: function () {
365
- return self.Base.getParams(self.Fas);
366
- },
367
- setParams: function (params) {
368
- return self.Base.setParams(self.Fas, params);
369
- },
370
- getDebugImage: function (params) {
371
- return self.Base.getDebugImage(self.Fas, params);
372
- },
373
- destroy: function () {
374
- return self.Base.destroy(self.Fas);
375
- },
376
- };
377
-
378
- // Base
379
- self.Base = {
380
- init: async function (target, constructorName) {
381
- return new Promise((res, rej) => {
382
- try {
383
- setTimeout(async () => {
384
- const models = [];
385
- const versionVector =
386
- self.EngineLib[constructorName]['getModelVersion']();
387
- target.sessionUsed = [];
388
- for (let i = 0; i < versionVector.size(); i++) {
389
- let item = versionVector.get(i);
390
- target.sessionUsed.push(item.szName);
391
- models.push({
392
- name: item.szName,
393
- version: item.szVersion,
394
- });
395
- }
396
-
397
- let queryModelString = models
398
- .map((x) => 'models=' + x.name + '[' + x.version + ']')
399
- .join('&');
400
- let modelPath = await loadModels(queryModelString);
401
- let modelPointer = models.map(({ name }, index) => {
402
- if (modelSession[name]) {
403
- return modelSession[name];
404
- } else {
405
- modelSession[name] = self.EngineLib.createInferenceSession(
406
- name,
407
- modelPath[index]
408
- );
409
- return modelSession[name];
410
- }
411
- });
412
- const instance = new self.EngineLib[constructorName]();
413
- instance.initial(...modelPointer);
414
- const engine = instance;
415
- const uiParams = engine.getUIParams();
416
- uiParams.previewPosition.fLeft = 0;
417
- uiParams.previewPosition.fTop = 0;
418
- uiParams.previewPosition.fRight = 1;
419
- uiParams.previewPosition.fBottom = 1;
420
- engine.setUIParams(uiParams);
421
- target.instance = instance;
422
- res(true);
423
- }, 10);
424
- } catch (error) {
425
- rej(error.message);
426
- }
427
- });
428
- },
429
- start: function (target) {
430
- return target?.instance?.start();
431
- },
432
- stop: function (target) {
433
- return target?.instance?.stop();
434
- },
435
- setFrameSize: function (target, params) {
436
- config.frame.width = Math.floor(params.width);
437
- config.frame.height = Math.floor(params.height);
438
- if (target.instance) {
439
- const engine = target.instance;
440
- const uiParams = engine.getUIParams();
441
- uiParams.analyzeSize.iHeight = config.frame.height;
442
- uiParams.analyzeSize.iWidth = config.frame.width;
443
- engine.setUIParams(uiParams);
444
- return true;
445
- }
446
- },
447
- recognition: function (target, params) {
448
- const engine = target.instance;
449
- if (engine) {
450
- try {
451
- const data = params.data;
452
- const heapInfo = putOnHeap(data);
453
- const result = engine.run(
454
- heapInfo.byteOffset,
455
- heapInfo.length,
456
- config.frame.width,
457
- config.frame.height
458
- );
459
- self.EngineLib._free(heapInfo.dataPtr);
460
- return result;
461
- } catch (error) {
462
- // console.warn(error);
463
- // console.warn('[Recognition Error]: ' + error?.message);
464
- return null;
465
- }
466
- }
467
- console.warn('engine not initialized');
468
- },
469
- getParams: function (target) {
470
- return target.instance.getParams();
471
- },
472
- setParams: function (target, params) {
473
- return target.instance.setParams(params.params);
474
- },
475
- getDebugImage: function (target, params) {
476
- const data = params.data;
477
- const heapInfo = putOnHeap(data);
478
- let imageData;
479
- const pointer = target.instance.getDebugImage(
480
- heapInfo.byteOffset,
481
- heapInfo.length,
482
- config.frame.width,
483
- config.frame.height
484
- );
485
- self.EngineLib._free(heapInfo.dataPtr);
486
- if (pointer) {
487
- imageData = self.EngineLib.HEAPU8.slice(
488
- pointer,
489
- pointer + config.frame.width * config.frame.height * 4
490
- );
491
- self.EngineLib._free(pointer);
492
- }
493
- return imageData;
494
- },
495
- destroy: function (target) {
496
- if (target.instance) {
497
- target.instance.delete();
498
- target.instance = null;
499
- }
500
- if (target.sessionUsed) {
501
- target.sessionUsed.forEach((name) => {
502
- if (modelSession[name]) {
503
- self.EngineLib.deleteSession(modelSession[name]);
504
- modelSession[name] = null;
505
- }
506
- });
507
- target.sessionUsed = [];
508
- }
509
- },
510
- getJsonReport: function (target) {
511
- return target?.instance?.getJsonReport();
512
- },
513
429
  };
514
430
 
515
431
  self.Core = {
516
- setConfig: async function (config) {
432
+ async setConfig(config) {
517
433
  self.config = {
518
434
  ...self.config,
519
435
  ...config,
520
436
  };
521
437
  return true;
522
438
  },
523
- loadEngine: async function ({ engineJsContent, engineWasmContent }) {
439
+ async loadEngine({ engineJsContent, engineWasmContent }) {
524
440
  return await loadWasm({ engineJsContent, engineWasmContent });
525
441
  },
526
- verify: async function (params) {
442
+ async verify(params) {
527
443
  for (let index = 0; index < 20; index++) {
528
444
  if (self.EngineLib) {
529
445
  let result = self.EngineLib.verifySDK(params.cert, params.authToken);
530
446
  return result.constructor.name;
531
447
  }
532
- await waitTime(500);
533
448
  }
534
449
  return false;
535
450
  },
@@ -537,12 +452,12 @@
537
452
 
538
453
  addEventListener(
539
454
  'message',
540
- async function ({ data }) {
455
+ async function onWorkerMessage({ data }) {
541
456
  const { module, command, id, value } = data;
542
457
  const fn = self[module][command];
543
458
  if (fn) {
544
459
  // console.log(`call ${module}.${command} :`, value);
545
- const result = await fn(value);
460
+ const result = await fn.call(self[module], value);
546
461
  // console.log(`worker return value for ${command}:`, result);
547
462
  postMessage({
548
463
  module,
@@ -563,60 +478,6 @@
563
478
  },
564
479
  };
565
480
 
566
- async function loadModel(modelInfo) {
567
- const { name, code } = modelInfo;
568
- const modelData = await fetchModel(code);
569
- console.log(modelData);
570
- try {
571
- const FS = self.EngineLib.FS;
572
- FS.mkdir(name);
573
- FS.mount(
574
- FS.filesystems.WORKERFS,
575
- {
576
- blobs: [
577
- {
578
- name,
579
- data: modelData,
580
- },
581
- ],
582
- },
583
- '/' + name
584
- );
585
- } catch (error) {
586
- if (error?.errno === 20) {
587
- // File Exist
588
- return `/${name}/${name}`;
589
- } else {
590
- throw error;
591
- }
592
- }
593
-
594
- return `/${name}/${name}`;
595
- }
596
-
597
- async function loadModels(modelString) {
598
- const start = performance.now();
599
- const resp = await fetch(
600
- self.config.apiBaseUrl + '/api/model-management/v1/model?' + modelString,
601
- {
602
- headers: {
603
- Authorization: 'Bearer ' + self.config.token,
604
- },
605
- }
606
- );
607
- if (!resp.ok) {
608
- throw new Error('[HTTP Error] Status: ' + resp.status);
609
- }
610
- const result = await resp.json();
611
- const modelPath = [];
612
- for (let i = 0; i < result.models.length; i++) {
613
- modelPath.push(await loadModel(result.models[i]));
614
- }
615
- const end = performance.now();
616
- // console.log('Load Model Time: ', +end - start + ' ms');
617
- return modelPath;
618
- }
619
-
620
481
  function putOnHeap(data) {
621
482
  const Module = self.EngineLib;
622
483
  const uint8ArrData = new Uint8Array(data);
@@ -633,7 +494,7 @@
633
494
  };
634
495
  }
635
496
 
636
- async function waitTime(ms) {
497
+ function waitTime(ms) {
637
498
  return new Promise((res) => {
638
499
  setTimeout(() => {
639
500
  res(true);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@authme/engine",
3
- "version": "2.2.0-rc.9",
3
+ "version": "2.2.0",
4
4
  "devDependencies": {
5
5
  "rxjs": "~7.4.0"
6
6
  },
@@ -8,9 +8,10 @@
8
8
  "typings": "./src/index.d.ts",
9
9
  "dependencies": {},
10
10
  "peerDependencies": {
11
- "@authme/core": "2.2.0-rc.9",
12
- "@authme/util": "2.2.0-rc.9",
11
+ "@authme/core": "2.2.0",
12
+ "@authme/util": "2.2.0",
13
13
  "three": "^0.136.0",
14
+ "lottie-web": "^5.9.2",
14
15
  "tslib": "^2.3.0"
15
16
  }
16
17
  }
@@ -27,6 +27,7 @@ export declare abstract class AuthmeEngineModuleBase<T = any> {
27
27
  protected received: boolean;
28
28
  protected moduleName: EngineModule;
29
29
  constructor(engine: MlEngine);
30
+ _engineRunAsync(command: string, value?: any): Promise<any>;
30
31
  init(): Promise<boolean>;
31
32
  startSession(): Promise<void>;
32
33
  stop(): Promise<void>;
package/src/lib/engine.js CHANGED
@@ -7,6 +7,29 @@ const util_1 = require("@authme/util");
7
7
  const rxjs_1 = require("rxjs");
8
8
  const enum_1 = require("./enum");
9
9
  const interface_1 = require("./interface");
10
+ const getDownloadOrder = (function () {
11
+ // model 越大,在後續 worker service 載入與解密的時間越長,
12
+ // 所以盡可能讓越大的檔案排在越前面下載,以便讓耗費時間長的任務先排在背景執行。
13
+ //
14
+ // 但由於 api server 目前沒有提供檔案大小的相關資訊,
15
+ // 所以將順序相關的資訊寫死在 sdk 裡。
16
+ const DOWNLOAD_ORDER = Object.fromEntries([
17
+ 'FACE_03',
18
+ 'FACE_00',
19
+ 'IDCardAntiFraud_00',
20
+ 'FACE_01',
21
+ 'OCR_00',
22
+ 'FACE_02',
23
+ 'OCR_02',
24
+ 'MRZ_00',
25
+ 'OCR_01',
26
+ 'MRZ_01', // 375k
27
+ ].map((key, index) => [key, index]));
28
+ return function getDownloadOrder(key) {
29
+ var _a;
30
+ return (_a = DOWNLOAD_ORDER[key]) !== null && _a !== void 0 ? _a : Number.MAX_VALUE;
31
+ };
32
+ })();
10
33
  function isSimdSupported() {
11
34
  try {
12
35
  // Test for WebAssembly SIMD capability (for both browsers and Node.js)
@@ -45,6 +68,45 @@ function createWorkerWithObjectUrlAsync(url) {
45
68
  return worker;
46
69
  });
47
70
  }
71
+ function convertToModelQueryString(modelVersion) {
72
+ return `models=${modelVersion.name}[${modelVersion.version}]`;
73
+ }
74
+ function fetchModelCodesAsync(modelVersions) {
75
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
76
+ const queryString = modelVersions.map(convertToModelQueryString).join('&');
77
+ const response = yield (0, core_1.sendRequest)('/api/model-management/v1/model?' + queryString);
78
+ return response.models;
79
+ });
80
+ }
81
+ function base64ToBufferAsync(base64) {
82
+ const dataUrl = 'data:application/octet-binary;base64,' + base64;
83
+ return fetch(dataUrl).then((res) => res.arrayBuffer());
84
+ }
85
+ function fetchModelContentAsync(code, dataTransferMethod) {
86
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
87
+ const payload = yield (0, core_1.sendRequest)(`/api/model-management/v1/model/${code}${dataTransferMethod === 'binary' ? '/file' : ''}`);
88
+ if (dataTransferMethod === 'binary') {
89
+ return payload;
90
+ }
91
+ else {
92
+ return yield base64ToBufferAsync(payload.data);
93
+ }
94
+ });
95
+ }
96
+ function fetchModelContents(modelVersions, dataTransferMethod) {
97
+ return (0, rxjs_1.of)(modelVersions).pipe((0, rxjs_1.concatMap)((modelVersions) => (0, rxjs_1.defer)(() => fetchModelCodesAsync(modelVersions))), (0, rxjs_1.concatAll)(), (0, rxjs_1.mergeMap)(({ name, code }) => (0, rxjs_1.defer)(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
98
+ return ({
99
+ modelName: name,
100
+ modelArrayBuffer: yield fetchModelContentAsync(code, dataTransferMethod),
101
+ });
102
+ })), 1
103
+ // 下載 model 過程會分為 wait time & download time,
104
+ // concurrent 設定越高,只能起到降低 wait time 的作用,但會拉長單一檔案完成下載的時間,
105
+ // 這會延遲 worker service 裡,載入與解密的時間。
106
+ //
107
+ // 所以 concurrent 建議設定為 1 或 2,盡量讓已下載好的 model 儘早進行載入與解密。
108
+ ));
109
+ }
48
110
  class AuthmeFunctionModule {
49
111
  init(config) {
50
112
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
@@ -147,7 +209,13 @@ class AuthmeEngineModuleBase {
147
209
  this.received = true;
148
210
  this.engine = engine;
149
211
  }
212
+ _engineRunAsync(command, value) {
213
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
214
+ return (0, rxjs_1.firstValueFrom)(this.engine.run(this.moduleName, command, value));
215
+ });
216
+ }
150
217
  init() {
218
+ var _a;
151
219
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
152
220
  if (this.initialized) {
153
221
  return true;
@@ -157,8 +225,13 @@ class AuthmeEngineModuleBase {
157
225
  }
158
226
  this.initializing = true;
159
227
  try {
160
- const result = yield (0, rxjs_1.firstValueFrom)(this.engine.run(this.moduleName, 'init'));
161
- (0, util_1.waitTime)(200);
228
+ const modelVersions = (yield this._engineRunAsync('getModelVersions'));
229
+ const stream$ = fetchModelContents(modelVersions.sort((a, b) => getDownloadOrder(a.name) - getDownloadOrder(b.name)), (_a = this.engine.getConfig().dataTransferMethod) !== null && _a !== void 0 ? _a : 'binary').pipe((0, rxjs_1.concatMap)(({ modelName, modelArrayBuffer }) => (0, rxjs_1.of)(this._engineRunAsync('loadModel', { modelName, modelArrayBuffer }))), (0, rxjs_1.reduce)((promises, item) => {
230
+ promises.push(item);
231
+ return promises;
232
+ }, []), (0, rxjs_1.concatMap)((promises) => (0, rxjs_1.defer)(() => Promise.all(promises))));
233
+ yield (0, rxjs_1.firstValueFrom)(stream$);
234
+ const result = yield this._engineRunAsync('init');
162
235
  this.initialized = true;
163
236
  return result;
164
237
  }
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../../libs/engine/src/lib/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../../libs/engine/src/lib/engine.ts"],"names":[],"mappings":"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"}