@mikashboks/capture-intelligence-core 0.1.10 → 0.1.19

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 (83) hide show
  1. package/dist/cjs/capture-normalization.d.ts +21 -1
  2. package/dist/cjs/capture-normalization.d.ts.map +1 -1
  3. package/dist/cjs/capture-normalization.js +85 -13
  4. package/dist/cjs/capture-normalization.js.map +1 -1
  5. package/dist/cjs/document-classifier.d.ts.map +1 -1
  6. package/dist/cjs/document-classifier.js +59 -2
  7. package/dist/cjs/document-classifier.js.map +1 -1
  8. package/dist/cjs/document-placement.d.ts +21 -0
  9. package/dist/cjs/document-placement.d.ts.map +1 -0
  10. package/dist/cjs/document-placement.js +69 -0
  11. package/dist/cjs/document-placement.js.map +1 -0
  12. package/dist/cjs/index.d.ts +12 -4
  13. package/dist/cjs/index.d.ts.map +1 -1
  14. package/dist/cjs/index.js +27 -2
  15. package/dist/cjs/index.js.map +1 -1
  16. package/dist/cjs/issuing-country.d.ts +16 -0
  17. package/dist/cjs/issuing-country.d.ts.map +1 -0
  18. package/dist/cjs/issuing-country.js +77 -0
  19. package/dist/cjs/issuing-country.js.map +1 -0
  20. package/dist/cjs/kyc-mobile-contract.d.ts +13 -1
  21. package/dist/cjs/kyc-mobile-contract.d.ts.map +1 -1
  22. package/dist/cjs/kyc-mobile-contract.js +64 -6
  23. package/dist/cjs/kyc-mobile-contract.js.map +1 -1
  24. package/dist/cjs/mrz-band-detector.d.ts +12 -5
  25. package/dist/cjs/mrz-band-detector.d.ts.map +1 -1
  26. package/dist/cjs/mrz-band-detector.js +29 -14
  27. package/dist/cjs/mrz-band-detector.js.map +1 -1
  28. package/dist/cjs/mrz-check-digits.d.ts +74 -0
  29. package/dist/cjs/mrz-check-digits.d.ts.map +1 -0
  30. package/dist/cjs/mrz-check-digits.js +478 -0
  31. package/dist/cjs/mrz-check-digits.js.map +1 -0
  32. package/dist/cjs/mrz-policy.d.ts +18 -0
  33. package/dist/cjs/mrz-policy.d.ts.map +1 -0
  34. package/dist/cjs/mrz-policy.js +90 -0
  35. package/dist/cjs/mrz-policy.js.map +1 -0
  36. package/dist/cjs/quality-checks.d.ts +14 -0
  37. package/dist/cjs/quality-checks.d.ts.map +1 -1
  38. package/dist/cjs/quality-checks.js +43 -5
  39. package/dist/cjs/quality-checks.js.map +1 -1
  40. package/dist/cjs/types.d.ts +2 -2
  41. package/dist/cjs/types.js +2 -2
  42. package/dist/esm/capture-normalization.d.ts +21 -1
  43. package/dist/esm/capture-normalization.d.ts.map +1 -1
  44. package/dist/esm/capture-normalization.js +84 -13
  45. package/dist/esm/capture-normalization.js.map +1 -1
  46. package/dist/esm/document-classifier.d.ts.map +1 -1
  47. package/dist/esm/document-classifier.js +59 -2
  48. package/dist/esm/document-classifier.js.map +1 -1
  49. package/dist/esm/document-placement.d.ts +21 -0
  50. package/dist/esm/document-placement.d.ts.map +1 -0
  51. package/dist/esm/document-placement.js +65 -0
  52. package/dist/esm/document-placement.js.map +1 -0
  53. package/dist/esm/index.d.ts +12 -4
  54. package/dist/esm/index.d.ts.map +1 -1
  55. package/dist/esm/index.js +7 -3
  56. package/dist/esm/index.js.map +1 -1
  57. package/dist/esm/issuing-country.d.ts +16 -0
  58. package/dist/esm/issuing-country.d.ts.map +1 -0
  59. package/dist/esm/issuing-country.js +71 -0
  60. package/dist/esm/issuing-country.js.map +1 -0
  61. package/dist/esm/kyc-mobile-contract.d.ts +13 -1
  62. package/dist/esm/kyc-mobile-contract.d.ts.map +1 -1
  63. package/dist/esm/kyc-mobile-contract.js +63 -5
  64. package/dist/esm/kyc-mobile-contract.js.map +1 -1
  65. package/dist/esm/mrz-band-detector.d.ts +12 -5
  66. package/dist/esm/mrz-band-detector.d.ts.map +1 -1
  67. package/dist/esm/mrz-band-detector.js +29 -14
  68. package/dist/esm/mrz-band-detector.js.map +1 -1
  69. package/dist/esm/mrz-check-digits.d.ts +74 -0
  70. package/dist/esm/mrz-check-digits.d.ts.map +1 -0
  71. package/dist/esm/mrz-check-digits.js +471 -0
  72. package/dist/esm/mrz-check-digits.js.map +1 -0
  73. package/dist/esm/mrz-policy.d.ts +18 -0
  74. package/dist/esm/mrz-policy.d.ts.map +1 -0
  75. package/dist/esm/mrz-policy.js +87 -0
  76. package/dist/esm/mrz-policy.js.map +1 -0
  77. package/dist/esm/quality-checks.d.ts +14 -0
  78. package/dist/esm/quality-checks.d.ts.map +1 -1
  79. package/dist/esm/quality-checks.js +42 -5
  80. package/dist/esm/quality-checks.js.map +1 -1
  81. package/dist/esm/types.d.ts +2 -2
  82. package/dist/esm/types.js +2 -2
  83. package/package.json +8 -4
@@ -0,0 +1,471 @@
1
+ import { parse as parseMrzPackage } from 'mrz';
2
+ const MRZ_WEIGHTS = [7, 3, 1];
3
+ const MRZ_ALLOWED_CHARS = /^[A-Z0-9<]+$/;
4
+ const MRZ_SUPPORTED_FORMATS = new Set(['TD1', 'TD2', 'TD3']);
5
+ const EMPTY_RESULT = Object.freeze({
6
+ valid: false,
7
+ format: null,
8
+ normalizedLines: [],
9
+ checks: [],
10
+ errors: ['empty_mrz'],
11
+ });
12
+ export function getMrzCharacterValue(char) {
13
+ if (char === '<')
14
+ return 0;
15
+ const code = char.charCodeAt(0);
16
+ if (code >= 48 && code <= 57)
17
+ return code - 48;
18
+ if (code >= 65 && code <= 90)
19
+ return code - 55;
20
+ return null;
21
+ }
22
+ export function computeMrzCheckDigit(value) {
23
+ let sum = 0;
24
+ const normalized = String(value).toUpperCase();
25
+ for (let index = 0; index < normalized.length; index += 1) {
26
+ const charValue = getMrzCharacterValue(normalized[index] ?? '');
27
+ if (charValue === null) {
28
+ throw new Error(`Invalid MRZ character at index ${index}`);
29
+ }
30
+ sum += charValue * MRZ_WEIGHTS[index % MRZ_WEIGHTS.length];
31
+ }
32
+ return String(sum % 10);
33
+ }
34
+ export function normalizeMrzLines(input) {
35
+ const lines = Array.isArray(input) ? input : String(input).split(/\r?\n/g);
36
+ return lines.map(line => String(line).trim().replace(/\s+/g, '').toUpperCase()).filter(Boolean);
37
+ }
38
+ function isLikelyTd3NameLine(line) {
39
+ return /^P[A-Z<][A-Z<]{3}[A-Z<]+<<[A-Z<]+/.test(line);
40
+ }
41
+ function isLikelyTd3DataLine(line) {
42
+ return /^[A-Z0-9<]{9}[0-9A-Z][A-Z<]{3}[0-9A-Z]{6}[0-9A-Z][MF<X]/.test(line);
43
+ }
44
+ function orderLikelyMrzLines(lines) {
45
+ if (lines.length === 2 &&
46
+ isLikelyTd3DataLine(lines[0] ?? '') &&
47
+ isLikelyTd3NameLine(lines[1] ?? '')) {
48
+ return [lines[1] ?? '', lines[0] ?? ''];
49
+ }
50
+ return lines;
51
+ }
52
+ function trimCandidateLines(lines) {
53
+ const ordered = orderLikelyMrzLines(lines);
54
+ if (ordered.length === 2 &&
55
+ isLikelyTd3NameLine(ordered[0] ?? '') &&
56
+ isLikelyTd3DataLine(ordered[1] ?? '') &&
57
+ ordered[0].length >= 44 &&
58
+ ordered[1].length >= 40) {
59
+ return [ordered[0].slice(0, 44), ordered[1].slice(0, 44).padEnd(44, '<')];
60
+ }
61
+ if (ordered.length === 2 && ordered[0].length >= 44 && ordered[1].length >= 44) {
62
+ return [ordered[0].slice(0, 44), ordered[1].slice(0, 44)];
63
+ }
64
+ if (ordered.length === 3 &&
65
+ ordered[0].length >= 30 &&
66
+ ordered[1].length >= 30 &&
67
+ ordered[2].length >= 30) {
68
+ return [ordered[0].slice(0, 30), ordered[1].slice(0, 30), ordered[2].slice(0, 30)];
69
+ }
70
+ if (ordered.length === 2 && ordered[0].length >= 36 && ordered[1].length >= 36) {
71
+ return [ordered[0].slice(0, 36), ordered[1].slice(0, 36)];
72
+ }
73
+ return ordered;
74
+ }
75
+ function inferMrzFormat(lines) {
76
+ if (lines.length === 2 && lines.every(line => line.length === 44))
77
+ return 'TD3';
78
+ if (lines.length === 2 && lines.every(line => line.length === 36))
79
+ return 'TD2';
80
+ if (lines.length === 3 && lines.every(line => line.length === 30))
81
+ return 'TD1';
82
+ return null;
83
+ }
84
+ function addCheck(checks, field, value, actual) {
85
+ const expected = computeMrzCheckDigit(value);
86
+ checks.push({
87
+ field,
88
+ value,
89
+ expected,
90
+ actual,
91
+ valid: actual === expected,
92
+ });
93
+ }
94
+ function validateTd3(lines) {
95
+ const line2 = lines[1] ?? '';
96
+ const checks = [];
97
+ addCheck(checks, 'documentNumber', line2.slice(0, 9), line2[9] ?? '');
98
+ addCheck(checks, 'dateOfBirth', line2.slice(13, 19), line2[19] ?? '');
99
+ addCheck(checks, 'expirationDate', line2.slice(21, 27), line2[27] ?? '');
100
+ addCheck(checks, 'optionalData', line2.slice(28, 42), line2[42] ?? '');
101
+ addCheck(checks, 'composite', `${line2.slice(0, 10)}${line2.slice(13, 20)}${line2.slice(21, 43)}`, line2[43] ?? '');
102
+ return checks;
103
+ }
104
+ function validateTd2(lines) {
105
+ const line2 = lines[1] ?? '';
106
+ const checks = [];
107
+ addCheck(checks, 'documentNumber', line2.slice(0, 9), line2[9] ?? '');
108
+ addCheck(checks, 'dateOfBirth', line2.slice(13, 19), line2[19] ?? '');
109
+ addCheck(checks, 'expirationDate', line2.slice(21, 27), line2[27] ?? '');
110
+ addCheck(checks, 'composite', `${line2.slice(0, 10)}${line2.slice(13, 20)}${line2.slice(21, 35)}`, line2[35] ?? '');
111
+ return checks;
112
+ }
113
+ function validateTd1(lines) {
114
+ const line1 = lines[0] ?? '';
115
+ const line2 = lines[1] ?? '';
116
+ const checks = [];
117
+ addCheck(checks, 'documentNumber', line1.slice(5, 14), line1[14] ?? '');
118
+ addCheck(checks, 'dateOfBirth', line2.slice(0, 6), line2[6] ?? '');
119
+ addCheck(checks, 'expirationDate', line2.slice(8, 14), line2[14] ?? '');
120
+ addCheck(checks, 'composite', `${line1.slice(5, 30)}${line2.slice(0, 7)}${line2.slice(8, 15)}${line2.slice(18, 29)}`, line2[29] ?? '');
121
+ return checks;
122
+ }
123
+ const OCR_NUMERIC_CORRECTIONS = {
124
+ O: '0',
125
+ Q: '0',
126
+ D: '0',
127
+ I: '1',
128
+ L: '1',
129
+ Z: '2',
130
+ S: '5',
131
+ G: '6',
132
+ B: '8',
133
+ };
134
+ function correctNumericChar(lines, lineIndex, column, corrections) {
135
+ const line = lines[lineIndex];
136
+ const original = line?.[column];
137
+ if (!line || !original || /[0-9<]/.test(original))
138
+ return;
139
+ const corrected = OCR_NUMERIC_CORRECTIONS[original];
140
+ if (!corrected)
141
+ return;
142
+ lines[lineIndex] = `${line.slice(0, column)}${corrected}${line.slice(column + 1)}`;
143
+ corrections.push({
144
+ line: lineIndex,
145
+ column,
146
+ original,
147
+ corrected,
148
+ });
149
+ }
150
+ function correctNumericRange(lines, lineIndex, start, endExclusive, corrections) {
151
+ for (let column = start; column < endExclusive; column += 1) {
152
+ correctNumericChar(lines, lineIndex, column, corrections);
153
+ }
154
+ }
155
+ function autocorrectMrzLines(lines, format) {
156
+ const corrected = [...lines];
157
+ const corrections = [];
158
+ if (format === 'TD3') {
159
+ correctNumericChar(corrected, 1, 9, corrections);
160
+ correctNumericRange(corrected, 1, 13, 20, corrections);
161
+ correctNumericRange(corrected, 1, 21, 28, corrections);
162
+ correctNumericChar(corrected, 1, 42, corrections);
163
+ correctNumericChar(corrected, 1, 43, corrections);
164
+ }
165
+ else if (format === 'TD2') {
166
+ correctNumericChar(corrected, 1, 9, corrections);
167
+ correctNumericRange(corrected, 1, 13, 20, corrections);
168
+ correctNumericRange(corrected, 1, 21, 28, corrections);
169
+ correctNumericChar(corrected, 1, 35, corrections);
170
+ }
171
+ else if (format === 'TD1') {
172
+ correctNumericChar(corrected, 0, 14, corrections);
173
+ correctNumericRange(corrected, 1, 0, 7, corrections);
174
+ correctNumericRange(corrected, 1, 8, 15, corrections);
175
+ correctNumericChar(corrected, 1, 29, corrections);
176
+ }
177
+ return { lines: corrected, corrections };
178
+ }
179
+ function stripFiller(value) {
180
+ return value.replace(/<+$/g, '').replace(/</g, '');
181
+ }
182
+ function parseNameLine(value) {
183
+ const [lastName = '', firstName = ''] = value.split('<<');
184
+ const clean = (part) => {
185
+ const cleaned = part.replace(/<+/g, ' ').trim();
186
+ return cleaned || undefined;
187
+ };
188
+ return {
189
+ lastName: clean(lastName),
190
+ firstName: clean(firstName),
191
+ };
192
+ }
193
+ function normalizeSex(value) {
194
+ if (value === 'M')
195
+ return 'male';
196
+ if (value === 'F')
197
+ return 'female';
198
+ if (value === '<' || value === 'X')
199
+ return 'other';
200
+ return value || undefined;
201
+ }
202
+ function mapFields(format, lines) {
203
+ if (format === 'TD3') {
204
+ const line1 = lines[0] ?? '';
205
+ const line2 = lines[1] ?? '';
206
+ const names = parseNameLine(line1.slice(5));
207
+ const dateOfBirth = line2.slice(13, 19);
208
+ const expirationDate = line2.slice(21, 27);
209
+ return {
210
+ documentCode: line1.slice(0, 1) || undefined,
211
+ issuingState: stripFiller(line1.slice(2, 5)) || undefined,
212
+ documentNumber: stripFiller(line2.slice(0, 9)) || undefined,
213
+ dateOfBirth,
214
+ birthDate: dateOfBirth,
215
+ expirationDate,
216
+ expiryDate: expirationDate,
217
+ nationality: stripFiller(line2.slice(10, 13)) || undefined,
218
+ sex: normalizeSex(line2.slice(20, 21)),
219
+ personalNumber: stripFiller(line2.slice(28, 42)) || undefined,
220
+ ...names,
221
+ };
222
+ }
223
+ if (format === 'TD2') {
224
+ const line1 = lines[0] ?? '';
225
+ const line2 = lines[1] ?? '';
226
+ const names = parseNameLine(line1.slice(5));
227
+ const dateOfBirth = line2.slice(13, 19);
228
+ const expirationDate = line2.slice(21, 27);
229
+ return {
230
+ documentCode: line1.slice(0, 1) || undefined,
231
+ issuingState: stripFiller(line1.slice(2, 5)) || undefined,
232
+ documentNumber: stripFiller(line2.slice(0, 9)) || undefined,
233
+ dateOfBirth,
234
+ birthDate: dateOfBirth,
235
+ expirationDate,
236
+ expiryDate: expirationDate,
237
+ nationality: stripFiller(line2.slice(10, 13)) || undefined,
238
+ sex: normalizeSex(line2.slice(20, 21)),
239
+ optional: stripFiller(line2.slice(28, 35)) || undefined,
240
+ ...names,
241
+ };
242
+ }
243
+ const line1 = lines[0] ?? '';
244
+ const line2 = lines[1] ?? '';
245
+ const line3 = lines[2] ?? '';
246
+ const names = parseNameLine(line3);
247
+ const dateOfBirth = line2.slice(0, 6);
248
+ const expirationDate = line2.slice(8, 14);
249
+ return {
250
+ documentCode: line1.slice(0, 1) || undefined,
251
+ issuingState: stripFiller(line1.slice(2, 5)) || undefined,
252
+ documentNumber: stripFiller(line1.slice(5, 14)) || undefined,
253
+ dateOfBirth,
254
+ birthDate: dateOfBirth,
255
+ expirationDate,
256
+ expiryDate: expirationDate,
257
+ nationality: stripFiller(line2.slice(15, 18)) || undefined,
258
+ sex: normalizeSex(line2.slice(7, 8)),
259
+ optional1: stripFiller(line1.slice(15, 30)) || undefined,
260
+ optional2: stripFiller(line2.slice(18, 29)) || undefined,
261
+ ...names,
262
+ };
263
+ }
264
+ const parseMrzLibrary = parseMrzPackage;
265
+ function getMrzParserSync() {
266
+ return typeof parseMrzLibrary === 'function' ? parseMrzLibrary : null;
267
+ }
268
+ function isParserResult(value) {
269
+ return typeof value === 'object' && value !== null;
270
+ }
271
+ function mapParserDetails(raw) {
272
+ if (!isParserResult(raw) || !Array.isArray(raw.details))
273
+ return [];
274
+ return raw.details.map(detail => ({
275
+ label: detail.label,
276
+ field: detail.field,
277
+ value: detail.value,
278
+ valid: detail.valid,
279
+ error: detail.error,
280
+ autocorrect: Array.isArray(detail.autocorrect) ? detail.autocorrect : [],
281
+ }));
282
+ }
283
+ function mergeParserFields(fields, raw) {
284
+ if (!isParserResult(raw) || !raw.fields)
285
+ return fields;
286
+ const rawFields = raw.fields;
287
+ return {
288
+ ...fields,
289
+ documentCode: rawFields.documentCode ?? fields.documentCode,
290
+ issuingState: rawFields.issuingState ?? fields.issuingState,
291
+ documentNumber: rawFields.documentNumber ?? fields.documentNumber,
292
+ dateOfBirth: rawFields.birthDate ?? fields.dateOfBirth,
293
+ birthDate: rawFields.birthDate ?? fields.birthDate,
294
+ expirationDate: rawFields.expirationDate ?? fields.expirationDate,
295
+ expiryDate: rawFields.expirationDate ?? fields.expiryDate,
296
+ nationality: rawFields.nationality ?? fields.nationality,
297
+ sex: rawFields.sex ?? fields.sex,
298
+ firstName: rawFields.firstName ?? fields.firstName,
299
+ lastName: rawFields.lastName ?? fields.lastName,
300
+ optional: rawFields.optional ?? fields.optional,
301
+ optional1: rawFields.optional1 ?? fields.optional1,
302
+ optional2: rawFields.optional2 ?? fields.optional2,
303
+ personalNumber: rawFields.personalNumber ?? fields.personalNumber,
304
+ };
305
+ }
306
+ function getParserAutocorrections(details) {
307
+ return details.flatMap(detail => detail.autocorrect ?? []);
308
+ }
309
+ function parseWithLibrary(lines, autocorrect) {
310
+ const parser = getMrzParserSync();
311
+ if (!parser) {
312
+ return {
313
+ raw: null,
314
+ parserValid: null,
315
+ details: [],
316
+ errors: [],
317
+ };
318
+ }
319
+ try {
320
+ const raw = parser(lines, { autocorrect });
321
+ const details = mapParserDetails(raw);
322
+ const parserValid = isParserResult(raw) && typeof raw.valid === 'boolean' ? raw.valid : null;
323
+ return {
324
+ raw,
325
+ parserValid,
326
+ details,
327
+ errors: parserValid === false ? ['parser_invalid'] : [],
328
+ };
329
+ }
330
+ catch (error) {
331
+ return {
332
+ raw: null,
333
+ parserValid: false,
334
+ details: [],
335
+ errors: [
336
+ error instanceof Error && error.message ? `parser_error:${error.message}` : 'parser_error',
337
+ ],
338
+ };
339
+ }
340
+ }
341
+ function buildChecks(format, lines) {
342
+ if (format === 'TD3')
343
+ return validateTd3(lines);
344
+ if (format === 'TD2')
345
+ return validateTd2(lines);
346
+ return validateTd1(lines);
347
+ }
348
+ export function parseMrzText(input, options = {}) {
349
+ const rawNormalizedLines = normalizeMrzLines(input);
350
+ if (rawNormalizedLines.length === 0) {
351
+ return {
352
+ valid: false,
353
+ format: null,
354
+ normalizedLines: [],
355
+ fields: {},
356
+ checks: [],
357
+ checkDigitsValid: false,
358
+ parserValid: null,
359
+ details: [],
360
+ autocorrections: [],
361
+ errors: ['empty_mrz'],
362
+ raw: null,
363
+ };
364
+ }
365
+ let normalizedLines = trimCandidateLines(rawNormalizedLines);
366
+ const invalidLine = normalizedLines.find(line => !MRZ_ALLOWED_CHARS.test(line));
367
+ if (invalidLine) {
368
+ return {
369
+ valid: false,
370
+ format: null,
371
+ normalizedLines,
372
+ fields: {},
373
+ checks: [],
374
+ checkDigitsValid: false,
375
+ parserValid: null,
376
+ details: [],
377
+ autocorrections: [],
378
+ errors: ['invalid_characters'],
379
+ raw: null,
380
+ };
381
+ }
382
+ const format = inferMrzFormat(normalizedLines);
383
+ if (!format) {
384
+ return {
385
+ valid: false,
386
+ format: null,
387
+ normalizedLines,
388
+ checks: [],
389
+ errors: ['unsupported_mrz_format'],
390
+ fields: {},
391
+ checkDigitsValid: false,
392
+ parserValid: null,
393
+ details: [],
394
+ autocorrections: [],
395
+ raw: null,
396
+ };
397
+ }
398
+ if (options.allowedFormats?.length && !options.allowedFormats.includes(format)) {
399
+ return {
400
+ valid: false,
401
+ format,
402
+ normalizedLines,
403
+ fields: {},
404
+ checks: [],
405
+ checkDigitsValid: false,
406
+ parserValid: null,
407
+ details: [],
408
+ autocorrections: [],
409
+ errors: ['unexpected_mrz_format'],
410
+ raw: null,
411
+ };
412
+ }
413
+ const localAutocorrect = options.autocorrect === false
414
+ ? { lines: normalizedLines, corrections: [] }
415
+ : autocorrectMrzLines(normalizedLines, format);
416
+ normalizedLines = localAutocorrect.lines;
417
+ const checks = buildChecks(format, normalizedLines);
418
+ const failedFields = checks.filter(check => !check.valid).map(check => check.field);
419
+ const checkErrors = failedFields.map(field => `invalid_${field}_check_digit`);
420
+ const checkDigitsValid = failedFields.length === 0;
421
+ const parsed = parseWithLibrary(normalizedLines, options.autocorrect !== false);
422
+ const details = parsed.details.length
423
+ ? parsed.details
424
+ : checks.map(check => ({
425
+ label: `${check.field} check digit`,
426
+ field: check.field,
427
+ value: check.actual,
428
+ valid: check.valid,
429
+ error: check.valid
430
+ ? undefined
431
+ : `invalid check digit: ${check.actual}. Must be ${check.expected}`,
432
+ }));
433
+ const parserAutocorrections = getParserAutocorrections(details);
434
+ const autocorrections = [...localAutocorrect.corrections, ...parserAutocorrections];
435
+ const parserValid = parsed.parserValid === null ? null : parsed.parserValid && MRZ_SUPPORTED_FORMATS.has(format);
436
+ const requireParserValidity = options.requireParserValidity !== false;
437
+ const valid = checkDigitsValid && (requireParserValidity ? parserValid === true : true);
438
+ const fields = mergeParserFields(mapFields(format, normalizedLines), parsed.raw);
439
+ return {
440
+ valid,
441
+ format,
442
+ normalizedLines,
443
+ fields,
444
+ checks,
445
+ checkDigitsValid,
446
+ parserValid,
447
+ details,
448
+ autocorrections,
449
+ errors: [...checkErrors, ...parsed.errors],
450
+ raw: parsed.raw,
451
+ };
452
+ }
453
+ export function validateMrzCheckDigits(input) {
454
+ const result = parseMrzText(input, { requireParserValidity: false });
455
+ if (result.normalizedLines.length === 0)
456
+ return { ...EMPTY_RESULT };
457
+ return {
458
+ valid: result.checkDigitsValid,
459
+ format: result.format,
460
+ normalizedLines: result.normalizedLines,
461
+ checks: result.checks,
462
+ errors: result.errors.filter(error => error.startsWith('invalid_') ||
463
+ error === 'empty_mrz' ||
464
+ error === 'invalid_characters' ||
465
+ error === 'unsupported_mrz_format'),
466
+ checkDigitsValid: result.checkDigitsValid,
467
+ parserValid: result.parserValid,
468
+ autocorrections: result.autocorrections,
469
+ };
470
+ }
471
+ //# sourceMappingURL=mrz-check-digits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mrz-check-digits.js","sourceRoot":"","sources":["../../src/mrz-check-digits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,KAAK,CAAC;AAoF/C,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,CAAC;AACvC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AACzC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAEhF,MAAM,YAAY,GAAwB,MAAM,CAAC,MAAM,CAAC;IACtD,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,IAAI;IACZ,eAAe,EAAE,EAAE;IACnB,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,CAAC,WAAW,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAC/C,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAE/C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,GAAG,IAAI,SAAS,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAwB;IACxD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE3E,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,yDAAyD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAe;IAC1C,IACE,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EACnC,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAe;IACzC,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAE3C,IACE,OAAO,CAAC,MAAM,KAAK,CAAC;QACpB,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,EAAE;QACxB,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,EAAE,EACxB,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACjF,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,IACE,OAAO,CAAC,MAAM,KAAK,CAAC;QACpB,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,EAAE;QACxB,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,EAAE;QACxB,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,EAAE,EACxB,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACjF,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,KAAe;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAChF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAChF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAChF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CACf,MAA6B,EAC7B,KAAyB,EACzB,KAAa,EACb,MAAc;IAEd,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC;QACV,KAAK;QACL,KAAK;QACL,QAAQ;QACR,MAAM;QACN,KAAK,EAAE,MAAM,KAAK,QAAQ;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,KAAe;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACzE,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,QAAQ,CACN,MAAM,EACN,WAAW,EACX,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EACnE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAChB,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,KAAe;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACzE,QAAQ,CACN,MAAM,EACN,WAAW,EACX,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EACnE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAChB,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,KAAe;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,QAAQ,CACN,MAAM,EACN,WAAW,EACX,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EACtF,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAChB,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,uBAAuB,GAA2B;IACtD,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;CACP,CAAC;AAEF,SAAS,kBAAkB,CACzB,KAAe,EACf,SAAiB,EACjB,MAAc,EACd,WAAgC;IAEhC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO;IAE1D,MAAM,SAAS,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;IACnF,WAAW,CAAC,IAAI,CAAC;QACf,IAAI,EAAE,SAAS;QACf,MAAM;QACN,QAAQ;QACR,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAe,EACf,SAAiB,EACjB,KAAa,EACb,YAAoB,EACpB,WAAgC;IAEhC,KAAK,IAAI,MAAM,GAAG,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5D,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAe,EACf,MAAgC;IAEhC,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC7B,MAAM,WAAW,GAAwB,EAAE,CAAC;IAE5C,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;QACjD,mBAAmB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACvD,mBAAmB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACvD,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QAClD,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;SAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC5B,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;QACjD,mBAAmB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACvD,mBAAmB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACvD,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;SAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC5B,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QAClD,mBAAmB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;QACrD,mBAAmB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACtD,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,CAAC,QAAQ,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,CAAC,IAAY,EAAsB,EAAE;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,OAAO,OAAO,IAAI,SAAS,CAAC;IAC9B,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC;QACzB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,MAAM,CAAC;IACjC,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,QAAQ,CAAC;IACnC,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC;IACnD,OAAO,KAAK,IAAI,SAAS,CAAC;AAC5B,CAAC;AAED,SAAS,SAAS,CAAC,MAAyB,EAAE,KAAe;IAC3D,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAE3C,OAAO;YACL,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,SAAS;YAC5C,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS;YACzD,cAAc,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS;YAC3D,WAAW;YACX,SAAS,EAAE,WAAW;YACtB,cAAc;YACd,UAAU,EAAE,cAAc;YAC1B,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS;YAC1D,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACtC,cAAc,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS;YAC7D,GAAG,KAAK;SACT,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAE3C,OAAO;YACL,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,SAAS;YAC5C,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS;YACzD,cAAc,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS;YAC3D,WAAW;YACX,SAAS,EAAE,WAAW;YACtB,cAAc;YACd,UAAU,EAAE,cAAc;YAC1B,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS;YAC1D,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACtC,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS;YACvD,GAAG,KAAK;SACT,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE1C,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,SAAS;QAC5C,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS;QACzD,cAAc,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS;QAC5D,WAAW;QACX,SAAS,EAAE,WAAW;QACtB,cAAc;QACd,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS;QAC1D,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS;QACxD,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS;QACxD,GAAG,KAAK;KACT,CAAC;AACJ,CAAC;AAID,MAAM,eAAe,GAAG,eAA2C,CAAC;AAEpE,SAAS,gBAAgB;IACvB,OAAO,OAAO,eAAe,KAAK,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;AACxE,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IAMpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnE,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;KACzE,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAuB,EAAE,GAAY;IAC9D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAEvD,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;IAE7B,OAAO;QACL,GAAG,MAAM;QACT,YAAY,EAAG,SAAS,CAAC,YAAmC,IAAI,MAAM,CAAC,YAAY;QACnF,YAAY,EAAG,SAAS,CAAC,YAAmC,IAAI,MAAM,CAAC,YAAY;QACnF,cAAc,EAAG,SAAS,CAAC,cAAqC,IAAI,MAAM,CAAC,cAAc;QACzF,WAAW,EAAG,SAAS,CAAC,SAAgC,IAAI,MAAM,CAAC,WAAW;QAC9E,SAAS,EAAG,SAAS,CAAC,SAAgC,IAAI,MAAM,CAAC,SAAS;QAC1E,cAAc,EAAG,SAAS,CAAC,cAAqC,IAAI,MAAM,CAAC,cAAc;QACzF,UAAU,EAAG,SAAS,CAAC,cAAqC,IAAI,MAAM,CAAC,UAAU;QACjF,WAAW,EAAG,SAAS,CAAC,WAAkC,IAAI,MAAM,CAAC,WAAW;QAChF,GAAG,EAAG,SAAS,CAAC,GAA0B,IAAI,MAAM,CAAC,GAAG;QACxD,SAAS,EAAG,SAAS,CAAC,SAAgC,IAAI,MAAM,CAAC,SAAS;QAC1E,QAAQ,EAAG,SAAS,CAAC,QAA+B,IAAI,MAAM,CAAC,QAAQ;QACvE,QAAQ,EAAG,SAAS,CAAC,QAA+B,IAAI,MAAM,CAAC,QAAQ;QACvE,SAAS,EAAG,SAAS,CAAC,SAAgC,IAAI,MAAM,CAAC,SAAS;QAC1E,SAAS,EAAG,SAAS,CAAC,SAAgC,IAAI,MAAM,CAAC,SAAS;QAC1E,cAAc,EAAG,SAAS,CAAC,cAAqC,IAAI,MAAM,CAAC,cAAc;KAC1F,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,OAA0B;IAC1D,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAe,EACf,WAAoB;IAOpB,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,GAAG,EAAE,IAAI;YACT,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7F,OAAO;YACL,GAAG;YACH,WAAW;YACX,OAAO;YACP,MAAM,EAAE,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;SACxD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,GAAG,EAAE,IAAI;YACT,WAAW,EAAE,KAAK;YAClB,OAAO,EAAE,EAAE;YACX,MAAM,EAAE;gBACN,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,cAAc;aAC3F;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAyB,EAAE,KAAe;IAC7D,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAChD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,KAAwB,EACxB,UAA2B,EAAE;IAE7B,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,EAAE;YACnB,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,EAAE;YACX,eAAe,EAAE,EAAE;YACnB,MAAM,EAAE,CAAC,WAAW,CAAC;YACrB,GAAG,EAAE,IAAI;SACV,CAAC;IACJ,CAAC;IAED,IAAI,eAAe,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IAE7D,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI;YACZ,eAAe;YACf,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,EAAE;YACX,eAAe,EAAE,EAAE;YACnB,MAAM,EAAE,CAAC,oBAAoB,CAAC;YAC9B,GAAG,EAAE,IAAI;SACV,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI;YACZ,eAAe;YACf,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,CAAC,wBAAwB,CAAC;YAClC,MAAM,EAAE,EAAE;YACV,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,EAAE;YACX,eAAe,EAAE,EAAE;YACnB,GAAG,EAAE,IAAI;SACV,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/E,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM;YACN,eAAe;YACf,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,EAAE;YACX,eAAe,EAAE,EAAE;YACnB,MAAM,EAAE,CAAC,uBAAuB,CAAC;YACjC,GAAG,EAAE,IAAI;SACV,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GACpB,OAAO,CAAC,WAAW,KAAK,KAAK;QAC3B,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,EAAyB,EAAE;QACpE,CAAC,CAAC,mBAAmB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACnD,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAC;IAEzC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,KAAK,cAAc,CAAC,CAAC;IAC9E,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,gBAAgB,CAAC,eAAe,EAAE,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM;QACnC,CAAC,CAAC,MAAM,CAAC,OAAO;QAChB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnB,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,cAAc;YACnC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAChB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,wBAAwB,KAAK,CAAC,MAAM,aAAa,KAAK,CAAC,QAAQ,EAAE;SACtE,CAAC,CAAC,CAAC;IACR,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,eAAe,GAAG,CAAC,GAAG,gBAAgB,CAAC,WAAW,EAAE,GAAG,qBAAqB,CAAC,CAAC;IACpF,MAAM,WAAW,GACf,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/F,MAAM,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,KAAK,KAAK,CAAC;IACtE,MAAM,KAAK,GAAG,gBAAgB,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAEjF,OAAO;QACL,KAAK;QACL,MAAM;QACN,eAAe;QACf,MAAM;QACN,MAAM;QACN,gBAAgB;QAChB,WAAW;QACX,OAAO;QACP,eAAe;QACf,MAAM,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;QAC1C,GAAG,EAAE,MAAM,CAAC,GAAG;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAwB;IAC7D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAC;IAEpE,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,gBAAgB;QAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAC1B,KAAK,CAAC,EAAE,CACN,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;YAC5B,KAAK,KAAK,WAAW;YACrB,KAAK,KAAK,oBAAoB;YAC9B,KAAK,KAAK,wBAAwB,CACrC;QACD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;KACxC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { MrzDocumentFormat } from './mrz-check-digits.js';
2
+ export type MrzPlacement = 'passport_data_page' | 'card_back';
3
+ export type MrzExpectation = 'expected' | 'none';
4
+ export interface DocumentMrzPolicy {
5
+ expected: boolean;
6
+ expectation: MrzExpectation;
7
+ formats: readonly MrzDocumentFormat[];
8
+ placement: MrzPlacement | null;
9
+ reason: string;
10
+ }
11
+ export interface DocumentMrzPolicyInput {
12
+ documentType?: string | null;
13
+ documentSide?: 'front' | 'back' | string | null;
14
+ captureMode?: string | null;
15
+ overlayVariant?: 'card' | 'passport' | 'a4' | string | null;
16
+ }
17
+ export declare function resolveDocumentMrzPolicy(input?: DocumentMrzPolicyInput): DocumentMrzPolicy;
18
+ //# sourceMappingURL=mrz-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mrz-policy.d.ts","sourceRoot":"","sources":["../../src/mrz-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG,oBAAoB,GAAG,WAAW,CAAC;AAC9D,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,MAAM,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,cAAc,CAAC;IAC5B,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACtC,SAAS,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAChD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;CAC7D;AA8ED,wBAAgB,wBAAwB,CAAC,KAAK,GAAE,sBAA2B,GAAG,iBAAiB,CA2B9F"}
@@ -0,0 +1,87 @@
1
+ const PASSPORT_POLICY = Object.freeze({
2
+ expected: true,
3
+ expectation: 'expected',
4
+ formats: ['TD3'],
5
+ placement: 'passport_data_page',
6
+ reason: 'passport_data_page',
7
+ });
8
+ const CARD_BACK_POLICY = Object.freeze({
9
+ expected: true,
10
+ expectation: 'expected',
11
+ formats: ['TD1', 'TD2'],
12
+ placement: 'card_back',
13
+ reason: 'card_back',
14
+ });
15
+ const NO_MRZ_POLICY = Object.freeze({
16
+ expected: false,
17
+ expectation: 'none',
18
+ formats: [],
19
+ placement: null,
20
+ reason: 'not_expected',
21
+ });
22
+ const MRZ_CARD_BASE_TYPES = new Set([
23
+ 'card',
24
+ 'card_back',
25
+ 'id_card',
26
+ 'identity_card',
27
+ 'national_id',
28
+ 'national_id_card',
29
+ 'sierraleone_national_id',
30
+ 'sierraleone_national_id_card',
31
+ 'ghana_card',
32
+ ]);
33
+ function normalizeToken(value) {
34
+ return String(value || '')
35
+ .trim()
36
+ .toLowerCase()
37
+ .replace(/[\s-]+/g, '_');
38
+ }
39
+ function resolveDocumentSide(input, documentType) {
40
+ const explicitSide = normalizeToken(input.documentSide);
41
+ if (explicitSide === 'front' || explicitSide === 'back')
42
+ return explicitSide;
43
+ const captureMode = normalizeToken(input.captureMode);
44
+ if (captureMode.includes('back'))
45
+ return 'back';
46
+ if (captureMode.includes('front'))
47
+ return 'front';
48
+ if (documentType.endsWith('_back'))
49
+ return 'back';
50
+ return null;
51
+ }
52
+ function stripBackSuffix(documentType) {
53
+ return documentType.endsWith('_back') ? documentType.slice(0, -'_back'.length) : documentType;
54
+ }
55
+ function isAddressOrSelfieType(documentType, overlayVariant) {
56
+ return (overlayVariant === 'a4' ||
57
+ documentType.includes('address') ||
58
+ documentType.includes('proof_of_address') ||
59
+ documentType.includes('utility_bill') ||
60
+ documentType.includes('selfie') ||
61
+ documentType.includes('liveness') ||
62
+ documentType.includes('mobile_money') ||
63
+ documentType.includes('business_registration'));
64
+ }
65
+ export function resolveDocumentMrzPolicy(input = {}) {
66
+ const documentType = normalizeToken(input.documentType);
67
+ const overlayVariant = normalizeToken(input.overlayVariant);
68
+ if (isAddressOrSelfieType(documentType, overlayVariant)) {
69
+ return NO_MRZ_POLICY;
70
+ }
71
+ if (documentType.includes('passport') || overlayVariant === 'passport') {
72
+ return PASSPORT_POLICY;
73
+ }
74
+ const side = resolveDocumentSide(input, documentType);
75
+ if (side !== 'back') {
76
+ return NO_MRZ_POLICY;
77
+ }
78
+ const baseType = stripBackSuffix(documentType);
79
+ if (MRZ_CARD_BASE_TYPES.has(documentType) || MRZ_CARD_BASE_TYPES.has(baseType)) {
80
+ return CARD_BACK_POLICY;
81
+ }
82
+ if (!documentType && overlayVariant === 'card') {
83
+ return CARD_BACK_POLICY;
84
+ }
85
+ return NO_MRZ_POLICY;
86
+ }
87
+ //# sourceMappingURL=mrz-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mrz-policy.js","sourceRoot":"","sources":["../../src/mrz-policy.ts"],"names":[],"mappings":"AAoBA,MAAM,eAAe,GAAsB,MAAM,CAAC,MAAM,CAAC;IACvD,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,CAAC,KAAK,CAAU;IACzB,SAAS,EAAE,oBAAoB;IAC/B,MAAM,EAAE,oBAAoB;CAC7B,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAsB,MAAM,CAAC,MAAM,CAAC;IACxD,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAU;IAChC,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,WAAW;CACpB,CAAC,CAAC;AAEH,MAAM,aAAa,GAAsB,MAAM,CAAC,MAAM,CAAC;IACrD,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,MAAM;IACnB,OAAO,EAAE,EAAW;IACpB,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,cAAc;CACvB,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,MAAM;IACN,WAAW;IACX,SAAS;IACT,eAAe;IACf,aAAa;IACb,kBAAkB;IAClB,yBAAyB;IACzB,8BAA8B;IAC9B,YAAY;CACb,CAAC,CAAC;AAEH,SAAS,cAAc,CAAC,KAAgC;IACtD,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SACvB,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAA6B,EAC7B,YAAoB;IAEpB,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxD,IAAI,YAAY,KAAK,OAAO,IAAI,YAAY,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC;IAE7E,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtD,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAChD,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAElD,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC;IAElD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,YAAoB;IAC3C,OAAO,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAChG,CAAC;AAED,SAAS,qBAAqB,CAAC,YAAoB,EAAE,cAAsB;IACzE,OAAO,CACL,cAAc,KAAK,IAAI;QACvB,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC;QAChC,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACzC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;QACrC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC/B,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;QACjC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;QACrC,YAAY,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAC/C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAgC,EAAE;IACzE,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAE5D,IAAI,qBAAqB,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;QACxD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;QACvE,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACtD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAC/C,IAAI,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/E,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,YAAY,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC/C,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -57,6 +57,20 @@ export declare function shouldShowSubmitAnyway(state: QualityFailureState, stepS
57
57
  * missing face from the submitted asset.
58
58
  */
59
59
  export declare function hasHardBlockingQualityFailure(checks: QualityCheckResults, reviewMode?: ReviewMode): boolean;
60
+ /**
61
+ * A document corner failure is "retry-escapable" when there is no confident
62
+ * cut-off evidence. The live detector (especially the sobel fallback on iOS
63
+ * Safari) can under-bound a document that is fully in frame and report
64
+ * corners_visible=false — the off-center "Show all 4 corners of the ID."
65
+ * loop-trap, where the user is stuck on Retake forever.
66
+ *
67
+ * This lets the bounded Submit-Anyway override (only after the retry threshold)
68
+ * apply to those false positives, while a genuine cut-off (cutOffRisk 'high' —
69
+ * a truly clipped ID missing data/MRZ) stays non-escapable. The submitted image
70
+ * is the uncropped original and the case is still routed for manual review, so
71
+ * this is bounded relief, not blind trust.
72
+ */
73
+ export declare function isRetryEscapableDocumentCornerFailure(checks: QualityCheckResults, cutOffRisk?: string | null, reviewMode?: ReviewMode): boolean;
60
74
  /**
61
75
  * Infer the non-ID review mode from the submitted document/proof type.
62
76
  *
@@ -1 +1 @@
1
- {"version":3,"file":"quality-checks.d.ts","sourceRoot":"","sources":["../../src/quality-checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quality-checks.d.ts","sourceRoot":"","sources":["../../src/quality-checks.ts"],"names":[],"mappings":"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"}