@authme/id-recognition 2.4.11 → 2.7.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.
package/index.cjs CHANGED
@@ -2,11 +2,13 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ require('core-js/modules/es.object.assign.js');
5
6
  var engine = require('@authme/engine');
6
7
  require('core-js/modules/es.array.iterator.js');
7
8
  require('core-js/modules/es.object.from-entries.js');
8
9
  require('core-js/modules/web.dom-collections.iterator.js');
9
10
  var core = require('@authme/core');
11
+ var util = require('@authme/util');
10
12
  require('core-js/modules/es.symbol.description.js');
11
13
 
12
14
  exports.ResourceImageType = void 0;
@@ -14,11 +16,36 @@ exports.ResourceImageType = void 0;
14
16
  ResourceImageType["Recognition"] = "Recognition";
15
17
  ResourceImageType["Fraud"] = "Fraud";
16
18
  ResourceImageType["Manual"] = "Manual";
19
+ ResourceImageType["Attach"] = "AttachImage";
17
20
  })(exports.ResourceImageType || (exports.ResourceImageType = {}));
18
21
  exports.CountryCode = void 0;
19
22
  (function (CountryCode) {
20
23
  CountryCode["TWN"] = "TWN";
21
- CountryCode["JPW"] = "JP";
24
+ CountryCode["JPN"] = "JPN";
25
+ CountryCode["ZAF"] = "ZAF";
26
+ CountryCode["USA"] = "USA";
27
+ CountryCode["CHN"] = "CHN";
28
+ CountryCode["PHL"] = "PHL";
29
+ CountryCode["GBR"] = "GBR";
30
+ CountryCode["KOR"] = "KOR";
31
+ CountryCode["HKG"] = "HKG";
32
+ CountryCode["FRA"] = "FRA";
33
+ CountryCode["ESP"] = "ESP";
34
+ CountryCode["MEX"] = "MEX";
35
+ CountryCode["ITA"] = "ITA";
36
+ CountryCode["IND"] = "IND";
37
+ CountryCode["COL"] = "COL";
38
+ CountryCode["RUS"] = "RUS";
39
+ CountryCode["DEU"] = "DEU";
40
+ CountryCode["TUR"] = "TUR";
41
+ CountryCode["CAN"] = "CAN";
42
+ CountryCode["AUS"] = "AUS";
43
+ CountryCode["IDN"] = "IDN";
44
+ CountryCode["MYS"] = "MYS";
45
+ CountryCode["EGY"] = "EGY";
46
+ CountryCode["SAU"] = "SAU";
47
+ CountryCode["NLD"] = "NLD";
48
+ CountryCode["SGP"] = "SGP";
22
49
  })(exports.CountryCode || (exports.CountryCode = {}));
23
50
  exports.IdRecognitionCardType = void 0;
24
51
  (function (IdRecognitionCardType) {
@@ -28,6 +55,14 @@ exports.IdRecognitionCardType = void 0;
28
55
  IdRecognitionCardType["ResidentCard"] = "ResidentCard";
29
56
  IdRecognitionCardType["Passport"] = "Passport";
30
57
  })(exports.IdRecognitionCardType || (exports.IdRecognitionCardType = {}));
58
+ exports.IdRecognitionCardName = void 0;
59
+ (function (IdRecognitionCardName) {
60
+ IdRecognitionCardName["IDCard"] = "sdk.home.selectDocument.idCard";
61
+ IdRecognitionCardName["DriverLicense"] = "sdk.home.selectDocument.driverLicense";
62
+ IdRecognitionCardName["HealthCard"] = "sdk.home.selectDocument.healthCard";
63
+ IdRecognitionCardName["ResidentCard"] = "sdk.home.selectDocument.residentCard";
64
+ IdRecognitionCardName["Passport"] = "sdk.home.selectDocument.passport";
65
+ })(exports.IdRecognitionCardName || (exports.IdRecognitionCardName = {}));
31
66
  exports.ServerSideEAuthMeCardClass = void 0;
32
67
  (function (ServerSideEAuthMeCardClass) {
33
68
  ServerSideEAuthMeCardClass["Invalid"] = "Invalid";
@@ -54,16 +89,22 @@ class CardOCR extends engine.AuthmeEngineModuleBase {
54
89
  this.type = engine.EAuthMeCardClass.Invalid;
55
90
  this.moduleName = engine.EngineModule.CardOCR;
56
91
  }
57
- setType(type, options) {
92
+ setType(type) {
58
93
  this.type = type;
59
94
  return this.engine.run(this.moduleName, 'setType', {
60
- type,
61
- options
95
+ type
62
96
  });
63
97
  }
64
98
  getType() {
65
99
  return this.type;
66
100
  }
101
+ setParams(params) {
102
+ var _a;
103
+ if (((_a = params.type) !== null && _a !== void 0 ? _a : this.type) === engine.EAuthMeCardClass.Invalid) throw new Error('Please set type first');
104
+ return this.engine.run(this.moduleName, 'setParams', Object.assign({
105
+ type: this.type
106
+ }, params));
107
+ }
67
108
  }
68
109
  class IdCardAntiFraudService extends engine.AuthmeEngineModuleBase {
69
110
  constructor(engine$1) {
@@ -122,6 +163,41 @@ const IdTypeConfig = {
122
163
  }
123
164
  };
124
165
 
166
+ const thicknessDefaultConfig = {
167
+ mode: 'manual',
168
+ thicknessWelcomeSetting: {
169
+ welcome: true,
170
+ title: {
171
+ enable: true,
172
+ // text: translateService.translate(
173
+ // 'verify.ocr.welcome.title'
174
+ // ),
175
+ // text: '即將進行厚度檢測',
176
+ text: 'sdk.thickness.detection.guide.subtitle'
177
+ },
178
+ subtitle: {
179
+ enable: true,
180
+ // text: translateService.translate(
181
+ // 'verify.ocr.welcome.subtitle'
182
+ // ),
183
+ // text: '請將卡面傾斜45度角放入畫面框線進行拍攝',
184
+ text: 'sdk.thickness.detection.guide.subtitle.content'
185
+ },
186
+ imageShow: {
187
+ enable: true,
188
+ src: 'data:image/png;base64,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'
189
+ },
190
+ content: {
191
+ enable: true,
192
+ // text: translateService.translate(
193
+ // 'verify.ocr.welcome.content'
194
+ // ),
195
+ // text: '請在光線充足的環境進行拍攝\n請確保卡面資訊上沒有任何遮蔽物\n避免在白色背景進行拍攝,以確保卡片輪廓清晰',
196
+ text: 'sdk.thickness.detection.guide.content'
197
+ }
198
+ }
199
+ };
200
+
125
201
  const CardTypeMapping = {
126
202
  [exports.IdRecognitionCardType.IDCard]: [engine.EAuthMeCardClass.TWN_IDCard_Front, engine.EAuthMeCardClass.TWN_IDCard_Back],
127
203
  [exports.IdRecognitionCardType.HealthCard]: [engine.EAuthMeCardClass.TWN_HealthCard_Front],
@@ -129,10 +205,112 @@ const CardTypeMapping = {
129
205
  [exports.IdRecognitionCardType.ResidentCard]: [engine.EAuthMeCardClass.TWN_ResidentCard_Front, engine.EAuthMeCardClass.TWN_ResidentCard_Back],
130
206
  [exports.IdRecognitionCardType.DriverLicense]: [engine.EAuthMeCardClass.TWN_DriverLicense_Front, engine.EAuthMeCardClass.TWN_DriverLicense_Back]
131
207
  };
208
+ const CardTypeMap = {
209
+ [exports.IdRecognitionCardType.IDCard]: [exports.ServerSideEAuthMeCardClass.TWN_IDCard_Front, exports.ServerSideEAuthMeCardClass.TWN_IDCard_Back],
210
+ [exports.IdRecognitionCardType.HealthCard]: [exports.ServerSideEAuthMeCardClass.TWN_HealthCard_Front],
211
+ [exports.IdRecognitionCardType.Passport]: ['ALL_PASSPORT_CONTENT'],
212
+ [exports.IdRecognitionCardType.ResidentCard]: [exports.ServerSideEAuthMeCardClass.TWN_ResidentCard_Front, exports.ServerSideEAuthMeCardClass.TWN_ResidentCard_Back],
213
+ [exports.IdRecognitionCardType.DriverLicense]: [exports.ServerSideEAuthMeCardClass.TWN_DriverLicense_Front, exports.ServerSideEAuthMeCardClass.TWN_DriverLicense_Back]
214
+ };
132
215
  const RECOGNITION_COLUMNS_ORDER = Object.fromEntries(['surname', 'givenName', 'name', 'gender', 'dateOfBirth', 'idNumber', 'dateOfIssue', 'issueCity', 'issueReason', 'father', 'mother', 'spouse', 'militaryService', 'placeOfBirth', 'serialNumber', 'expiry', 'controlNo', 'type', 'condition', 'address', 'country', 'documentNumber', 'documentType', 'nationality', 'expiryDate'].map((value, index) => [value, index]));
133
216
  function getCardSubTypes(type, country) {
134
217
  return CardTypeMapping[type];
135
218
  }
219
+ function getCardTypes(type, country) {
220
+ return CardTypeMap[type];
221
+ }
222
+ function cardTypeTitle(cardType) {
223
+ var _a, _b;
224
+ if (cardType == null) {
225
+ return '';
226
+ }
227
+ const cardTypeLower = cardType.toLowerCase();
228
+ const cardTypeMap = {
229
+ idcard: {
230
+ front: 'sdk.ocr.verify.idCardFrontSide',
231
+ back: 'sdk.ocr.verify.idCardBackSide',
232
+ thickness: 'sdk.thickness.detection.guide.subtitle.content',
233
+ default: 'sdk.ocr.verify.idCardFrontSide'
234
+ },
235
+ driverlicense: {
236
+ front: 'sdk.ocr.verify.driverFrontSide',
237
+ back: 'sdk.ocr.verify.driverBackSide',
238
+ thickness: 'sdk.thickness.detection.guide.subtitle.content',
239
+ default: 'sdk.ocr.verify.driverFrontSide'
240
+ },
241
+ resident: {
242
+ front: 'sdk.ocr.verify.residentCardFrontSide',
243
+ back: 'sdk.ocr.verify.residentCardBackSide',
244
+ thickness: 'sdk.thickness.detection.guide.subtitle.content',
245
+ default: 'sdk.ocr.verify.residentCardFrontSide'
246
+ },
247
+ residentcard: {
248
+ front: 'sdk.ocr.verify.residentCardFrontSide',
249
+ back: 'sdk.ocr.verify.residentCardBackSide',
250
+ thickness: 'sdk.thickness.detection.guide.subtitle.content',
251
+ default: 'sdk.ocr.verify.residentCardFrontSide'
252
+ }
253
+ };
254
+ const typeSections = cardTypeLower.split('_');
255
+ const cardTypeName = typeSections[1];
256
+ const cardTypeSection = typeSections[2];
257
+ const titleKey = ((_a = cardTypeMap[cardTypeName]) === null || _a === void 0 ? void 0 : _a[cardTypeSection]) || ((_b = cardTypeMap[cardTypeName]) === null || _b === void 0 ? void 0 : _b.default);
258
+ return titleKey || '';
259
+ }
260
+ function cardTypeConfirmTitle(cardType) {
261
+ if (cardType == null) {
262
+ return '';
263
+ }
264
+ const cardTypeLower = cardType.toLowerCase();
265
+ let titleKey = null;
266
+ if (cardTypeLower.indexOf('idcard') != -1) {
267
+ if (cardTypeLower.indexOf('front') !== -1) {
268
+ titleKey = 'sdk.ocr.verify.confirmIdCardFront';
269
+ } else if (cardTypeLower.indexOf('back') !== -1) {
270
+ titleKey = 'sdk.ocr.verify.confirmIdCardBack';
271
+ } else {
272
+ titleKey = 'sdk.ocr.verify.confirmIdCardFront';
273
+ }
274
+ return titleKey;
275
+ }
276
+ if (cardTypeLower.indexOf('driverlicense') != -1) {
277
+ if (cardTypeLower.indexOf('front') !== -1) {
278
+ titleKey = 'sdk.ocr.verify.confirmDriverFront';
279
+ } else if (cardTypeLower.indexOf('back') !== -1) {
280
+ titleKey = 'sdk.ocr.verify.confirmDriverBack';
281
+ } else {
282
+ titleKey = 'sdk.ocr.verify.confirmDriverFront';
283
+ }
284
+ return titleKey;
285
+ }
286
+ if (cardTypeLower.indexOf('resident') != -1) {
287
+ if (cardTypeLower.indexOf('front') !== -1) {
288
+ titleKey = 'sdk.ocr.verify.confirmResidentCardFront';
289
+ } else if (cardTypeLower.indexOf('back') !== -1) {
290
+ titleKey = 'sdk.ocr.verify.confirmResidentCardBack';
291
+ } else {
292
+ titleKey = 'sdk.ocr.verify.confirmResidentCardFront';
293
+ }
294
+ return titleKey;
295
+ }
296
+ return titleKey;
297
+ }
298
+ function mapCardtypeToAuthmeClass(type) {
299
+ // const known_type = Object.keys(EAuthMeCardClass).filter(
300
+ // (key) =>
301
+ // (EAuthMeCardClass as any)[key].toString().toLowerCase() ==
302
+ // ('EAuthMeCardClass_' + type).toLowerCase()
303
+ // )[0];
304
+ // if (known_type == null) {
305
+ // return EAuthMeCardClass.Unknown;
306
+ // }
307
+ // return (EAuthMeCardClass as any)[known_type];
308
+ if (type in engine.EAuthMeCardClass) {
309
+ return engine.EAuthMeCardClass[type];
310
+ } else {
311
+ return engine.EAuthMeCardClass.Unknown;
312
+ }
313
+ }
136
314
  function getRecognitionColumnOrder(column) {
137
315
  var _a;
138
316
  return (_a = RECOGNITION_COLUMNS_ORDER[column]) !== null && _a !== void 0 ? _a : Number.MAX_VALUE;
@@ -150,12 +328,33 @@ const twoWayAuthmeCardClassMap = (() => {
150
328
  };
151
329
  })();
152
330
 
153
- function init(type, country, needConfirm, encrypt = true) {
331
+ var name = "authme/sdk";
332
+ var version$1 = "2.7.1";
333
+ var date = "2024-09-06T02:00:28+0000";
334
+ var packageInfo = {
335
+ name: name,
336
+ version: version$1,
337
+ date: date
338
+ };
339
+
340
+ function init(type, country, needConfirm, cardTypes, encrypt = true) {
341
+ // let useCardTypes: any = getCardSubTypes(type, country).map((c) =>
342
+ // twoWayAuthmeCardClassMap.toServer(c)
343
+ // );
344
+ let useCardTypes = getCardTypes(type);
345
+ if (cardTypes.length) {
346
+ useCardTypes = cardTypes;
347
+ }
154
348
  const body = {
155
- scanType: type === exports.IdRecognitionCardType.Passport ? type : `${country}_${type}`,
156
- cardTypes: getCardSubTypes(type).map(c => twoWayAuthmeCardClassMap.toServer(c)),
349
+ scanType: type === exports.IdRecognitionCardType.Passport ? `ALL_Passport` : `${country}_${type}`,
350
+ cardTypes: useCardTypes,
157
351
  needConfirm,
158
- encrypt
352
+ encrypt,
353
+ clientInfo: {
354
+ os: 'web',
355
+ os_ver: util.osVersion(),
356
+ client_ver: packageInfo.version
357
+ }
159
358
  };
160
359
  return core.sendRequest('/api/identity-verification/id-recognition/v3/init-scan', 'POST', {
161
360
  body: JSON.stringify(body)
@@ -170,6 +369,15 @@ function initScanDocument(scanId, cardType) {
170
369
  body: JSON.stringify(body)
171
370
  });
172
371
  }
372
+ function initScanDocumentResourceBase64(scanId, ResourceId) {
373
+ const body = {
374
+ scanId,
375
+ ResourceId
376
+ };
377
+ return core.sendRequest('/api/identity-verification/id-recognition/v3/init-scan-doc/resource/base64', 'POST', {
378
+ body: JSON.stringify(body)
379
+ });
380
+ }
173
381
  function recognition(documentId, file) {
174
382
  const formData = new FormData();
175
383
  formData.append('scanDocumentId', documentId);
@@ -276,17 +484,6 @@ function saveExtraDoc(params) {
276
484
  });
277
485
  }
278
486
 
279
- var name = "@authme/id-recognition";
280
- var version$1 = "2.4.11";
281
- var peerDependencies = {
282
- "core-js": "^3.6.0"
283
- };
284
- var packageInfo = {
285
- name: name,
286
- version: version$1,
287
- peerDependencies: peerDependencies
288
- };
289
-
290
487
  var _a;
291
488
  var _b, _c;
292
489
  const version = packageInfo.version;
@@ -325,16 +522,22 @@ exports.CardOCR = CardOCR;
325
522
  exports.IdCardAntiFraudService = IdCardAntiFraudService;
326
523
  exports.IdTypeConfig = IdTypeConfig;
327
524
  exports.MRZService = MRZService;
525
+ exports.cardTypeConfirmTitle = cardTypeConfirmTitle;
526
+ exports.cardTypeTitle = cardTypeTitle;
328
527
  exports.confirmScan = confirmScan;
329
528
  exports.finishScanDocument = finishScanDocument;
330
529
  exports.getCardSubTypes = getCardSubTypes;
530
+ exports.getCardTypes = getCardTypes;
331
531
  exports.getRecognitionColumnOrder = getRecognitionColumnOrder;
332
532
  exports.init = init;
333
533
  exports.initScanDocument = initScanDocument;
534
+ exports.initScanDocumentResourceBase64 = initScanDocumentResourceBase64;
535
+ exports.mapCardtypeToAuthmeClass = mapCardtypeToAuthmeClass;
334
536
  exports.recognition = recognition;
335
537
  exports.recognitionEncrypt = recognitionEncrypt;
336
538
  exports.saveExtraDoc = saveExtraDoc;
337
539
  exports.saveResourceImage = saveResourceImage;
540
+ exports.thicknessDefaultConfig = thicknessDefaultConfig;
338
541
  exports.twoWayAuthmeCardClassMap = twoWayAuthmeCardClassMap;
339
542
  exports.uploadFrameBase64 = uploadFrameBase64;
340
543
  exports.version = version;
package/index.js CHANGED
@@ -1,9 +1,11 @@
1
+ import 'core-js/modules/es.object.assign.js';
1
2
  import { AuthmeEngineModuleBase, EAuthMeCardClass, EngineModule } from '@authme/engine';
2
3
  export { EAuthMeCardClass, EAuthMeCardMatchStatus, EAuthMeCardOCRStatus, EAuthMeIDCardAntiFraudStage, EAuthMeIDCardAntiFraudStatus, EAuthMeMRZRecogStatus, EAuthMeMRZServiceStatus } from '@authme/engine';
3
4
  import 'core-js/modules/es.array.iterator.js';
4
5
  import 'core-js/modules/es.object.from-entries.js';
5
6
  import 'core-js/modules/web.dom-collections.iterator.js';
6
7
  import { sendRequest, AuthmeError } from '@authme/core';
8
+ import { osVersion } from '@authme/util';
7
9
  import 'core-js/modules/es.symbol.description.js';
8
10
 
9
11
  var ResourceImageType;
@@ -11,11 +13,36 @@ var ResourceImageType;
11
13
  ResourceImageType["Recognition"] = "Recognition";
12
14
  ResourceImageType["Fraud"] = "Fraud";
13
15
  ResourceImageType["Manual"] = "Manual";
16
+ ResourceImageType["Attach"] = "AttachImage";
14
17
  })(ResourceImageType || (ResourceImageType = {}));
15
18
  var CountryCode;
16
19
  (function (CountryCode) {
17
20
  CountryCode["TWN"] = "TWN";
18
- CountryCode["JPW"] = "JP";
21
+ CountryCode["JPN"] = "JPN";
22
+ CountryCode["ZAF"] = "ZAF";
23
+ CountryCode["USA"] = "USA";
24
+ CountryCode["CHN"] = "CHN";
25
+ CountryCode["PHL"] = "PHL";
26
+ CountryCode["GBR"] = "GBR";
27
+ CountryCode["KOR"] = "KOR";
28
+ CountryCode["HKG"] = "HKG";
29
+ CountryCode["FRA"] = "FRA";
30
+ CountryCode["ESP"] = "ESP";
31
+ CountryCode["MEX"] = "MEX";
32
+ CountryCode["ITA"] = "ITA";
33
+ CountryCode["IND"] = "IND";
34
+ CountryCode["COL"] = "COL";
35
+ CountryCode["RUS"] = "RUS";
36
+ CountryCode["DEU"] = "DEU";
37
+ CountryCode["TUR"] = "TUR";
38
+ CountryCode["CAN"] = "CAN";
39
+ CountryCode["AUS"] = "AUS";
40
+ CountryCode["IDN"] = "IDN";
41
+ CountryCode["MYS"] = "MYS";
42
+ CountryCode["EGY"] = "EGY";
43
+ CountryCode["SAU"] = "SAU";
44
+ CountryCode["NLD"] = "NLD";
45
+ CountryCode["SGP"] = "SGP";
19
46
  })(CountryCode || (CountryCode = {}));
20
47
  var IdRecognitionCardType;
21
48
  (function (IdRecognitionCardType) {
@@ -25,6 +52,14 @@ var IdRecognitionCardType;
25
52
  IdRecognitionCardType["ResidentCard"] = "ResidentCard";
26
53
  IdRecognitionCardType["Passport"] = "Passport";
27
54
  })(IdRecognitionCardType || (IdRecognitionCardType = {}));
55
+ var IdRecognitionCardName;
56
+ (function (IdRecognitionCardName) {
57
+ IdRecognitionCardName["IDCard"] = "sdk.home.selectDocument.idCard";
58
+ IdRecognitionCardName["DriverLicense"] = "sdk.home.selectDocument.driverLicense";
59
+ IdRecognitionCardName["HealthCard"] = "sdk.home.selectDocument.healthCard";
60
+ IdRecognitionCardName["ResidentCard"] = "sdk.home.selectDocument.residentCard";
61
+ IdRecognitionCardName["Passport"] = "sdk.home.selectDocument.passport";
62
+ })(IdRecognitionCardName || (IdRecognitionCardName = {}));
28
63
  var ServerSideEAuthMeCardClass;
29
64
  (function (ServerSideEAuthMeCardClass) {
30
65
  ServerSideEAuthMeCardClass["Invalid"] = "Invalid";
@@ -51,16 +86,22 @@ class CardOCR extends AuthmeEngineModuleBase {
51
86
  this.type = EAuthMeCardClass.Invalid;
52
87
  this.moduleName = EngineModule.CardOCR;
53
88
  }
54
- setType(type, options) {
89
+ setType(type) {
55
90
  this.type = type;
56
91
  return this.engine.run(this.moduleName, 'setType', {
57
- type,
58
- options
92
+ type
59
93
  });
60
94
  }
61
95
  getType() {
62
96
  return this.type;
63
97
  }
98
+ setParams(params) {
99
+ var _a;
100
+ if (((_a = params.type) !== null && _a !== void 0 ? _a : this.type) === EAuthMeCardClass.Invalid) throw new Error('Please set type first');
101
+ return this.engine.run(this.moduleName, 'setParams', Object.assign({
102
+ type: this.type
103
+ }, params));
104
+ }
64
105
  }
65
106
  class IdCardAntiFraudService extends AuthmeEngineModuleBase {
66
107
  constructor(engine) {
@@ -119,6 +160,41 @@ const IdTypeConfig = {
119
160
  }
120
161
  };
121
162
 
163
+ const thicknessDefaultConfig = {
164
+ mode: 'manual',
165
+ thicknessWelcomeSetting: {
166
+ welcome: true,
167
+ title: {
168
+ enable: true,
169
+ // text: translateService.translate(
170
+ // 'verify.ocr.welcome.title'
171
+ // ),
172
+ // text: '即將進行厚度檢測',
173
+ text: 'sdk.thickness.detection.guide.subtitle'
174
+ },
175
+ subtitle: {
176
+ enable: true,
177
+ // text: translateService.translate(
178
+ // 'verify.ocr.welcome.subtitle'
179
+ // ),
180
+ // text: '請將卡面傾斜45度角放入畫面框線進行拍攝',
181
+ text: 'sdk.thickness.detection.guide.subtitle.content'
182
+ },
183
+ imageShow: {
184
+ enable: true,
185
+ src: 'data:image/png;base64,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'
186
+ },
187
+ content: {
188
+ enable: true,
189
+ // text: translateService.translate(
190
+ // 'verify.ocr.welcome.content'
191
+ // ),
192
+ // text: '請在光線充足的環境進行拍攝\n請確保卡面資訊上沒有任何遮蔽物\n避免在白色背景進行拍攝,以確保卡片輪廓清晰',
193
+ text: 'sdk.thickness.detection.guide.content'
194
+ }
195
+ }
196
+ };
197
+
122
198
  const CardTypeMapping = {
123
199
  [IdRecognitionCardType.IDCard]: [EAuthMeCardClass.TWN_IDCard_Front, EAuthMeCardClass.TWN_IDCard_Back],
124
200
  [IdRecognitionCardType.HealthCard]: [EAuthMeCardClass.TWN_HealthCard_Front],
@@ -126,10 +202,112 @@ const CardTypeMapping = {
126
202
  [IdRecognitionCardType.ResidentCard]: [EAuthMeCardClass.TWN_ResidentCard_Front, EAuthMeCardClass.TWN_ResidentCard_Back],
127
203
  [IdRecognitionCardType.DriverLicense]: [EAuthMeCardClass.TWN_DriverLicense_Front, EAuthMeCardClass.TWN_DriverLicense_Back]
128
204
  };
205
+ const CardTypeMap = {
206
+ [IdRecognitionCardType.IDCard]: [ServerSideEAuthMeCardClass.TWN_IDCard_Front, ServerSideEAuthMeCardClass.TWN_IDCard_Back],
207
+ [IdRecognitionCardType.HealthCard]: [ServerSideEAuthMeCardClass.TWN_HealthCard_Front],
208
+ [IdRecognitionCardType.Passport]: ['ALL_PASSPORT_CONTENT'],
209
+ [IdRecognitionCardType.ResidentCard]: [ServerSideEAuthMeCardClass.TWN_ResidentCard_Front, ServerSideEAuthMeCardClass.TWN_ResidentCard_Back],
210
+ [IdRecognitionCardType.DriverLicense]: [ServerSideEAuthMeCardClass.TWN_DriverLicense_Front, ServerSideEAuthMeCardClass.TWN_DriverLicense_Back]
211
+ };
129
212
  const RECOGNITION_COLUMNS_ORDER = Object.fromEntries(['surname', 'givenName', 'name', 'gender', 'dateOfBirth', 'idNumber', 'dateOfIssue', 'issueCity', 'issueReason', 'father', 'mother', 'spouse', 'militaryService', 'placeOfBirth', 'serialNumber', 'expiry', 'controlNo', 'type', 'condition', 'address', 'country', 'documentNumber', 'documentType', 'nationality', 'expiryDate'].map((value, index) => [value, index]));
130
213
  function getCardSubTypes(type, country) {
131
214
  return CardTypeMapping[type];
132
215
  }
216
+ function getCardTypes(type, country) {
217
+ return CardTypeMap[type];
218
+ }
219
+ function cardTypeTitle(cardType) {
220
+ var _a, _b;
221
+ if (cardType == null) {
222
+ return '';
223
+ }
224
+ const cardTypeLower = cardType.toLowerCase();
225
+ const cardTypeMap = {
226
+ idcard: {
227
+ front: 'sdk.ocr.verify.idCardFrontSide',
228
+ back: 'sdk.ocr.verify.idCardBackSide',
229
+ thickness: 'sdk.thickness.detection.guide.subtitle.content',
230
+ default: 'sdk.ocr.verify.idCardFrontSide'
231
+ },
232
+ driverlicense: {
233
+ front: 'sdk.ocr.verify.driverFrontSide',
234
+ back: 'sdk.ocr.verify.driverBackSide',
235
+ thickness: 'sdk.thickness.detection.guide.subtitle.content',
236
+ default: 'sdk.ocr.verify.driverFrontSide'
237
+ },
238
+ resident: {
239
+ front: 'sdk.ocr.verify.residentCardFrontSide',
240
+ back: 'sdk.ocr.verify.residentCardBackSide',
241
+ thickness: 'sdk.thickness.detection.guide.subtitle.content',
242
+ default: 'sdk.ocr.verify.residentCardFrontSide'
243
+ },
244
+ residentcard: {
245
+ front: 'sdk.ocr.verify.residentCardFrontSide',
246
+ back: 'sdk.ocr.verify.residentCardBackSide',
247
+ thickness: 'sdk.thickness.detection.guide.subtitle.content',
248
+ default: 'sdk.ocr.verify.residentCardFrontSide'
249
+ }
250
+ };
251
+ const typeSections = cardTypeLower.split('_');
252
+ const cardTypeName = typeSections[1];
253
+ const cardTypeSection = typeSections[2];
254
+ const titleKey = ((_a = cardTypeMap[cardTypeName]) === null || _a === void 0 ? void 0 : _a[cardTypeSection]) || ((_b = cardTypeMap[cardTypeName]) === null || _b === void 0 ? void 0 : _b.default);
255
+ return titleKey || '';
256
+ }
257
+ function cardTypeConfirmTitle(cardType) {
258
+ if (cardType == null) {
259
+ return '';
260
+ }
261
+ const cardTypeLower = cardType.toLowerCase();
262
+ let titleKey = null;
263
+ if (cardTypeLower.indexOf('idcard') != -1) {
264
+ if (cardTypeLower.indexOf('front') !== -1) {
265
+ titleKey = 'sdk.ocr.verify.confirmIdCardFront';
266
+ } else if (cardTypeLower.indexOf('back') !== -1) {
267
+ titleKey = 'sdk.ocr.verify.confirmIdCardBack';
268
+ } else {
269
+ titleKey = 'sdk.ocr.verify.confirmIdCardFront';
270
+ }
271
+ return titleKey;
272
+ }
273
+ if (cardTypeLower.indexOf('driverlicense') != -1) {
274
+ if (cardTypeLower.indexOf('front') !== -1) {
275
+ titleKey = 'sdk.ocr.verify.confirmDriverFront';
276
+ } else if (cardTypeLower.indexOf('back') !== -1) {
277
+ titleKey = 'sdk.ocr.verify.confirmDriverBack';
278
+ } else {
279
+ titleKey = 'sdk.ocr.verify.confirmDriverFront';
280
+ }
281
+ return titleKey;
282
+ }
283
+ if (cardTypeLower.indexOf('resident') != -1) {
284
+ if (cardTypeLower.indexOf('front') !== -1) {
285
+ titleKey = 'sdk.ocr.verify.confirmResidentCardFront';
286
+ } else if (cardTypeLower.indexOf('back') !== -1) {
287
+ titleKey = 'sdk.ocr.verify.confirmResidentCardBack';
288
+ } else {
289
+ titleKey = 'sdk.ocr.verify.confirmResidentCardFront';
290
+ }
291
+ return titleKey;
292
+ }
293
+ return titleKey;
294
+ }
295
+ function mapCardtypeToAuthmeClass(type) {
296
+ // const known_type = Object.keys(EAuthMeCardClass).filter(
297
+ // (key) =>
298
+ // (EAuthMeCardClass as any)[key].toString().toLowerCase() ==
299
+ // ('EAuthMeCardClass_' + type).toLowerCase()
300
+ // )[0];
301
+ // if (known_type == null) {
302
+ // return EAuthMeCardClass.Unknown;
303
+ // }
304
+ // return (EAuthMeCardClass as any)[known_type];
305
+ if (type in EAuthMeCardClass) {
306
+ return EAuthMeCardClass[type];
307
+ } else {
308
+ return EAuthMeCardClass.Unknown;
309
+ }
310
+ }
133
311
  function getRecognitionColumnOrder(column) {
134
312
  var _a;
135
313
  return (_a = RECOGNITION_COLUMNS_ORDER[column]) !== null && _a !== void 0 ? _a : Number.MAX_VALUE;
@@ -147,12 +325,33 @@ const twoWayAuthmeCardClassMap = (() => {
147
325
  };
148
326
  })();
149
327
 
150
- function init(type, country, needConfirm, encrypt = true) {
328
+ var name = "authme/sdk";
329
+ var version$1 = "2.7.1";
330
+ var date = "2024-09-06T02:00:28+0000";
331
+ var packageInfo = {
332
+ name: name,
333
+ version: version$1,
334
+ date: date
335
+ };
336
+
337
+ function init(type, country, needConfirm, cardTypes, encrypt = true) {
338
+ // let useCardTypes: any = getCardSubTypes(type, country).map((c) =>
339
+ // twoWayAuthmeCardClassMap.toServer(c)
340
+ // );
341
+ let useCardTypes = getCardTypes(type);
342
+ if (cardTypes.length) {
343
+ useCardTypes = cardTypes;
344
+ }
151
345
  const body = {
152
- scanType: type === IdRecognitionCardType.Passport ? type : `${country}_${type}`,
153
- cardTypes: getCardSubTypes(type).map(c => twoWayAuthmeCardClassMap.toServer(c)),
346
+ scanType: type === IdRecognitionCardType.Passport ? `ALL_Passport` : `${country}_${type}`,
347
+ cardTypes: useCardTypes,
154
348
  needConfirm,
155
- encrypt
349
+ encrypt,
350
+ clientInfo: {
351
+ os: 'web',
352
+ os_ver: osVersion(),
353
+ client_ver: packageInfo.version
354
+ }
156
355
  };
157
356
  return sendRequest('/api/identity-verification/id-recognition/v3/init-scan', 'POST', {
158
357
  body: JSON.stringify(body)
@@ -167,6 +366,15 @@ function initScanDocument(scanId, cardType) {
167
366
  body: JSON.stringify(body)
168
367
  });
169
368
  }
369
+ function initScanDocumentResourceBase64(scanId, ResourceId) {
370
+ const body = {
371
+ scanId,
372
+ ResourceId
373
+ };
374
+ return sendRequest('/api/identity-verification/id-recognition/v3/init-scan-doc/resource/base64', 'POST', {
375
+ body: JSON.stringify(body)
376
+ });
377
+ }
170
378
  function recognition(documentId, file) {
171
379
  const formData = new FormData();
172
380
  formData.append('scanDocumentId', documentId);
@@ -273,21 +481,10 @@ function saveExtraDoc(params) {
273
481
  });
274
482
  }
275
483
 
276
- var name = "@authme/id-recognition";
277
- var version$1 = "2.4.11";
278
- var peerDependencies = {
279
- "core-js": "^3.6.0"
280
- };
281
- var packageInfo = {
282
- name: name,
283
- version: version$1,
284
- peerDependencies: peerDependencies
285
- };
286
-
287
484
  var _a;
288
485
  var _b, _c;
289
486
  const version = packageInfo.version;
290
487
  (_a = (_b = window)[_c = Symbol.for('authme-sdk')]) !== null && _a !== void 0 ? _a : _b[_c] = {};
291
488
  window[Symbol.for('authme-sdk')][packageInfo.name] = version;
292
489
 
293
- export { CardOCR, CountryCode, IdCardAntiFraudService, IdRecognitionCardType, IdType, IdTypeConfig, MRZService, RecognitionFileType, ResourceImageType, ServerSideEAuthMeCardClass, confirmScan, finishScanDocument, getCardSubTypes, getRecognitionColumnOrder, init, initScanDocument, recognition, recognitionEncrypt, saveExtraDoc, saveResourceImage, twoWayAuthmeCardClassMap, uploadFrameBase64, version };
490
+ export { CardOCR, CountryCode, IdCardAntiFraudService, IdRecognitionCardName, IdRecognitionCardType, IdType, IdTypeConfig, MRZService, RecognitionFileType, ResourceImageType, ServerSideEAuthMeCardClass, cardTypeConfirmTitle, cardTypeTitle, confirmScan, finishScanDocument, getCardSubTypes, getCardTypes, getRecognitionColumnOrder, init, initScanDocument, initScanDocumentResourceBase64, mapCardtypeToAuthmeClass, recognition, recognitionEncrypt, saveExtraDoc, saveResourceImage, thicknessDefaultConfig, twoWayAuthmeCardClassMap, uploadFrameBase64, version };
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@authme/id-recognition",
3
- "version": "2.4.11",
3
+ "version": "2.7.1",
4
4
  "peerDependencies": {
5
5
  "core-js": "^3.6.0",
6
- "@authme/core": "2.4.11",
7
- "@authme/engine": "2.4.11"
6
+ "@authme/core": "2.7.1",
7
+ "@authme/util": "2.7.1",
8
+ "@authme/engine": "2.7.1"
8
9
  },
9
10
  "module": "./index.js",
10
11
  "main": "./index.cjs",
@@ -1,9 +1,19 @@
1
- import { CountryCode, IdRecognitionCardType, RecognitionFileType, ResourceImageType, ServerSideEAuthMeCardClass } from '../enum';
1
+ import { CountryCode, IdRecognitionCardType, RecognitionFileType, ResourceImageType } from '../enum';
2
2
  import { InitScanResponse } from '../model';
3
- export declare function init(type: IdRecognitionCardType, country: CountryCode, needConfirm: boolean, encrypt?: boolean): Promise<InitScanResponse>;
4
- export declare function initScanDocument(scanId: string, cardType: `${ServerSideEAuthMeCardClass}`): Promise<{
3
+ import { ScanViewItem, WelcomePageConfig, ThicknessMode } from '../interface';
4
+ interface InitScanDocumentParams {
5
5
  scanDocumentId: string;
6
- }>;
6
+ scanView: ScanViewItem;
7
+ mode: ThicknessMode['mode'];
8
+ welcome: WelcomePageConfig;
9
+ }
10
+ interface InitScanDocumentResourceBase64Params {
11
+ fileId: string;
12
+ data: string;
13
+ }
14
+ export declare function init(type: IdRecognitionCardType, country: CountryCode, needConfirm: boolean, cardTypes: string[], encrypt?: boolean): Promise<InitScanResponse>;
15
+ export declare function initScanDocument(scanId: string, cardType: string): Promise<InitScanDocumentParams>;
16
+ export declare function initScanDocumentResourceBase64(scanId: string, ResourceId: string): Promise<InitScanDocumentResourceBase64Params>;
7
17
  export declare function recognition(documentId: string, file: Blob): Promise<{
8
18
  retry?: boolean;
9
19
  details: {
@@ -35,3 +45,4 @@ export declare function saveExtraDoc(params: {
35
45
  [key: string]: string | null;
36
46
  };
37
47
  }): Promise<any>;
48
+ export {};
@@ -2,11 +2,36 @@ export { EAuthMeCardClass, EAuthMeCardMatchStatus, EAuthMeCardOCRStatus, EAuthMe
2
2
  export declare enum ResourceImageType {
3
3
  Recognition = "Recognition",
4
4
  Fraud = "Fraud",
5
- Manual = "Manual"
5
+ Manual = "Manual",
6
+ Attach = "AttachImage"
6
7
  }
7
8
  export declare enum CountryCode {
8
9
  TWN = "TWN",
9
- JPW = "JP"
10
+ JPN = "JPN",
11
+ ZAF = "ZAF",
12
+ USA = "USA",
13
+ CHN = "CHN",
14
+ PHL = "PHL",
15
+ GBR = "GBR",
16
+ KOR = "KOR",
17
+ HKG = "HKG",
18
+ FRA = "FRA",
19
+ ESP = "ESP",
20
+ MEX = "MEX",
21
+ ITA = "ITA",
22
+ IND = "IND",
23
+ COL = "COL",
24
+ RUS = "RUS",
25
+ DEU = "DEU",
26
+ TUR = "TUR",
27
+ CAN = "CAN",
28
+ AUS = "AUS",
29
+ IDN = "IDN",
30
+ MYS = "MYS",
31
+ EGY = "EGY",
32
+ SAU = "SAU",
33
+ NLD = "NLD",
34
+ SGP = "SGP"
10
35
  }
11
36
  export declare enum IdRecognitionCardType {
12
37
  IDCard = "IDCard",
@@ -15,6 +40,13 @@ export declare enum IdRecognitionCardType {
15
40
  ResidentCard = "ResidentCard",
16
41
  Passport = "Passport"
17
42
  }
43
+ export declare enum IdRecognitionCardName {
44
+ IDCard = "sdk.home.selectDocument.idCard",
45
+ DriverLicense = "sdk.home.selectDocument.driverLicense",
46
+ HealthCard = "sdk.home.selectDocument.healthCard",
47
+ ResidentCard = "sdk.home.selectDocument.residentCard",
48
+ Passport = "sdk.home.selectDocument.passport"
49
+ }
18
50
  export declare enum ServerSideEAuthMeCardClass {
19
51
  Invalid = "Invalid",
20
52
  Unknown = "UnknownCard",
@@ -0,0 +1,65 @@
1
+ export interface ScanViewItem {
2
+ document_type: string;
3
+ content: ContentItem[];
4
+ success: ScanViewSuccess;
5
+ line: ScanViewLine;
6
+ border: ScanViewBorder;
7
+ }
8
+ interface ContentItem {
9
+ type: 'text' | 'svg';
10
+ content: string;
11
+ color: string | null;
12
+ opacity: number;
13
+ }
14
+ interface ScanViewSuccess {
15
+ enable: boolean;
16
+ color: string;
17
+ opacity: number;
18
+ }
19
+ interface ScanViewLine {
20
+ enable: boolean;
21
+ color: string;
22
+ gradient: ScanViewGradient;
23
+ }
24
+ interface ScanViewGradient {
25
+ enable: true;
26
+ color: string;
27
+ opacity: number;
28
+ }
29
+ interface ScanViewBorder {
30
+ enable: boolean;
31
+ type: 'cornered' | 'bordered';
32
+ color: string;
33
+ opacity: number;
34
+ }
35
+ export interface ThicknessMode {
36
+ mode: 'auto' | 'manual';
37
+ }
38
+ export interface WelcomePageConfig {
39
+ welcome: boolean;
40
+ title: WelcomePagTitle;
41
+ subtitle: WelcomePageSubtitle;
42
+ imageShow: WelcomePageImage;
43
+ content: WelcomePageContent;
44
+ }
45
+ interface WelcomePagTitle {
46
+ enable: boolean;
47
+ text: string;
48
+ }
49
+ interface WelcomePageSubtitle {
50
+ enable: boolean;
51
+ text: string;
52
+ }
53
+ interface WelcomePageImage {
54
+ enable: boolean;
55
+ src: string;
56
+ }
57
+ interface WelcomePageContent {
58
+ enable: boolean;
59
+ text: string;
60
+ }
61
+ export declare const thicknessDefaultConfig: {
62
+ mode: ThicknessMode['mode'];
63
+ thicknessWelcomeSetting: WelcomePageConfig;
64
+ };
65
+ export {};
@@ -1 +1,2 @@
1
1
  export * from './id-recognition-type.interface';
2
+ export * from './api-response.interface';
@@ -4,10 +4,9 @@ import { EAuthMeCardClass, EAuthMeIDCardAntiFraudStage } from './enum';
4
4
  export declare class CardOCR extends AuthmeEngineModuleBase<CardOCRResult> {
5
5
  private type;
6
6
  constructor(engine: MlEngine);
7
- setType(type: EAuthMeCardClass, options?: {
8
- [key: string]: unknown;
9
- }): Promise<unknown>;
7
+ setType(type: EAuthMeCardClass): Promise<unknown>;
10
8
  getType(): EAuthMeCardClass;
9
+ setParams(params: any): Promise<unknown>;
11
10
  }
12
11
  export interface Point {
13
12
  x: number;
package/src/lib/util.d.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  import { CountryCode, EAuthMeCardClass, IdRecognitionCardType, ServerSideEAuthMeCardClass } from './enum';
2
2
  export declare function getCardSubTypes(type: IdRecognitionCardType, country: CountryCode): EAuthMeCardClass[];
3
+ export declare function getCardTypes(type: IdRecognitionCardType, country: CountryCode): string[];
4
+ export declare function cardTypeTitle(cardType: string): any;
5
+ export declare function cardTypeConfirmTitle(cardType: string): any;
6
+ export declare function mapCardtypeToAuthmeClass(type: string): any;
3
7
  export declare function getRecognitionColumnOrder(column: string): number;
4
8
  export declare const twoWayAuthmeCardClassMap: {
5
9
  toServer(clientEnum: `${EAuthMeCardClass}`): `${ServerSideEAuthMeCardClass}`;