@trustchex/react-native-sdk 1.362.4 → 1.374.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/TrustchexSDK.podspec +3 -3
- package/android/build.gradle +3 -3
- package/android/src/main/java/com/trustchex/reactnativesdk/camera/TrustchexCameraView.kt +71 -17
- package/ios/Camera/TrustchexCameraView.swift +166 -119
- package/lib/module/Shared/Components/FaceCamera.js +1 -0
- package/lib/module/Shared/Components/IdentityDocumentCamera.js +344 -207
- package/lib/module/Shared/Components/QrCodeScannerCamera.js +1 -8
- package/lib/module/Shared/Libs/mrz.utils.js +202 -9
- package/lib/module/Translation/Resources/en.js +0 -4
- package/lib/module/Translation/Resources/tr.js +0 -4
- package/lib/module/version.js +1 -1
- package/lib/typescript/src/Shared/Components/FaceCamera.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Components/QrCodeScannerCamera.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Components/TrustchexCamera.d.ts +1 -0
- package/lib/typescript/src/Shared/Components/TrustchexCamera.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/mrz.utils.d.ts +8 -0
- package/lib/typescript/src/Shared/Libs/mrz.utils.d.ts.map +1 -1
- package/lib/typescript/src/Translation/Resources/en.d.ts +0 -4
- package/lib/typescript/src/Translation/Resources/en.d.ts.map +1 -1
- package/lib/typescript/src/Translation/Resources/tr.d.ts +0 -4
- package/lib/typescript/src/Translation/Resources/tr.d.ts.map +1 -1
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/Shared/Components/FaceCamera.tsx +1 -0
- package/src/Shared/Components/IdentityDocumentCamera.tsx +443 -265
- package/src/Shared/Components/QrCodeScannerCamera.tsx +1 -9
- package/src/Shared/Components/TrustchexCamera.tsx +1 -0
- package/src/Shared/Libs/mrz.utils.ts +238 -26
- package/src/Translation/Resources/en.ts +0 -4
- package/src/Translation/Resources/tr.ts +0 -4
- package/src/version.ts +1 -1
|
@@ -7,7 +7,6 @@ import { useKeepAwake } from "../Libs/native-keep-awake.utils.js";
|
|
|
7
7
|
import { useIsFocused } from '@react-navigation/native';
|
|
8
8
|
import { useTranslation } from 'react-i18next';
|
|
9
9
|
import { debugLog, logError } from "../Libs/debug.utils.js";
|
|
10
|
-
import LottieView from 'lottie-react-native';
|
|
11
10
|
import StyledButton from "./StyledButton.js";
|
|
12
11
|
import { useTheme } from "../Contexts/ThemeContext.js";
|
|
13
12
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
@@ -148,13 +147,7 @@ const QrCodeScannerCamera = ({
|
|
|
148
147
|
}), /*#__PURE__*/_jsx(View, {
|
|
149
148
|
style: styles.bottomZone
|
|
150
149
|
}), /*#__PURE__*/_jsx(View, {
|
|
151
|
-
style: styles.scanArea
|
|
152
|
-
children: /*#__PURE__*/_jsx(LottieView, {
|
|
153
|
-
source: require('../../Shared/Animations/scanning.json'),
|
|
154
|
-
style: styles.animation,
|
|
155
|
-
loop: true,
|
|
156
|
-
autoPlay: true
|
|
157
|
-
})
|
|
150
|
+
style: styles.scanArea
|
|
158
151
|
}), onClose && /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
159
152
|
onPress: onClose,
|
|
160
153
|
style: [styles.backButton, {
|
|
@@ -22,6 +22,9 @@ const fixMRZ = rawText => {
|
|
|
22
22
|
|
|
23
23
|
// Ensure uppercase immediately
|
|
24
24
|
rawText = rawText.toUpperCase();
|
|
25
|
+
|
|
26
|
+
// Apply OCR-B specific corrections early
|
|
27
|
+
rawText = applyOCRBCorrections(rawText);
|
|
25
28
|
const fillerChar = '<';
|
|
26
29
|
const mrzFormats = [{
|
|
27
30
|
lines: 3,
|
|
@@ -47,6 +50,15 @@ const fixMRZ = rawText => {
|
|
|
47
50
|
cleanedText = cleanedText.replace(/^1</gm, 'I<');
|
|
48
51
|
cleanedText = cleanedText.replace(/\n1</g, '\nI<');
|
|
49
52
|
|
|
53
|
+
// Fix lowercase letters that should be uppercase (common OCR error)
|
|
54
|
+
cleanedText = cleanedText.split('\n').map(line => {
|
|
55
|
+
// Only uppercase if line contains fillers (indicates MRZ line)
|
|
56
|
+
if (line.includes('<')) {
|
|
57
|
+
return line.toUpperCase();
|
|
58
|
+
}
|
|
59
|
+
return line;
|
|
60
|
+
}).join('\n');
|
|
61
|
+
|
|
50
62
|
// Conservative OCR error corrections - only fix clear filler character errors
|
|
51
63
|
// Don't touch valid digit sequences!
|
|
52
64
|
|
|
@@ -72,6 +84,24 @@ const fixMRZ = rawText => {
|
|
|
72
84
|
return fillers.padEnd(match.length, '<');
|
|
73
85
|
});
|
|
74
86
|
|
|
87
|
+
// Pattern 5: Fix common OCR misreadings in filler areas
|
|
88
|
+
// Convert non-alphanumeric chars in filler areas to '<' (but not digits/letters in content areas)
|
|
89
|
+
cleanedText = cleanedText.split('\n').map(line => {
|
|
90
|
+
// If line has fillers, likely MRZ - safe to convert uncommon chars near fillers
|
|
91
|
+
if (!line.includes('<')) return line;
|
|
92
|
+
|
|
93
|
+
// Replace '.' ',' '-' with fillers in MRZ lines (OCR noise)
|
|
94
|
+
line = line.replace(/[.,\-~`^]/g, '<');
|
|
95
|
+
|
|
96
|
+
// Replace lowercase o/i/l with uppercase or filler depending on context
|
|
97
|
+
line = line.replace(/o(?=[A-Z<]|[A-Z<]o)/g, 'O'); // lowercase o surrounded by uppercase
|
|
98
|
+
line = line.replace(/i(?=[A-Z<]|[A-Z<]i)/g, 'I'); // lowercase i surrounded by uppercase
|
|
99
|
+
line = line.replace(/l(?=[A-Z<0-9])/g, 'L'); // lowercase l before uppercase or digit
|
|
100
|
+
line = line.replace(/l$/g, '<'); // lowercase l at line end is filler
|
|
101
|
+
|
|
102
|
+
return line;
|
|
103
|
+
}).join('\n');
|
|
104
|
+
|
|
75
105
|
// Split into lines and filter for MRZ-like content
|
|
76
106
|
// MRZ lines must start with I< or contain long sequences of < and alphanumeric chars
|
|
77
107
|
const lines = cleanedText.split('\n').map(line => line.trim()).filter(line => {
|
|
@@ -134,20 +164,118 @@ const fixMRZ = rawText => {
|
|
|
134
164
|
};
|
|
135
165
|
const AMBIGUOUS_CHAR_MAP = {
|
|
136
166
|
'0': ['O', 'Q', 'D'],
|
|
137
|
-
O: ['0', 'Q', 'D'],
|
|
138
|
-
Q: ['0', 'O', 'D'],
|
|
139
|
-
D: ['0', 'O', 'Q'],
|
|
167
|
+
'O': ['0', 'Q', 'D'],
|
|
168
|
+
'Q': ['0', 'O', 'D'],
|
|
169
|
+
'D': ['0', 'O', 'Q'],
|
|
140
170
|
'1': ['I', 'L'],
|
|
141
|
-
I: ['1', 'L'],
|
|
142
|
-
L: ['1', 'I'],
|
|
171
|
+
'I': ['1', 'L'],
|
|
172
|
+
'L': ['1', 'I'],
|
|
143
173
|
'2': ['Z'],
|
|
144
|
-
Z: ['2'],
|
|
174
|
+
'Z': ['2'],
|
|
145
175
|
'5': ['S'],
|
|
146
|
-
S: ['5'],
|
|
176
|
+
'S': ['5'],
|
|
147
177
|
'6': ['G'],
|
|
148
|
-
G: ['6'],
|
|
178
|
+
'G': ['6'],
|
|
149
179
|
'8': ['B'],
|
|
150
|
-
B: ['8']
|
|
180
|
+
'B': ['8'],
|
|
181
|
+
'9': ['g'],
|
|
182
|
+
'g': ['9'],
|
|
183
|
+
'4': ['A'],
|
|
184
|
+
'A': ['4']
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* OCR-B specific character corrections (used for MRZ on passports/IDs)
|
|
189
|
+
* OCR-B is monospaced and has specific glyph patterns that differ from other fonts
|
|
190
|
+
* Common OCR-B misreadings in document scanning context
|
|
191
|
+
*/
|
|
192
|
+
const OCRB_SPECIFIC_MAP = {
|
|
193
|
+
// Glyph confusion in OCR-B (low contrast scanning)
|
|
194
|
+
Ø: '0',
|
|
195
|
+
// Slashed zero sometimes appears as capital O with slash
|
|
196
|
+
ø: '0',
|
|
197
|
+
// Lowercase variant
|
|
198
|
+
œ: 'O',
|
|
199
|
+
// Ligature
|
|
200
|
+
|
|
201
|
+
// Common in monospace OCR
|
|
202
|
+
Ι: 'I',
|
|
203
|
+
// Greek capital iota confused with I
|
|
204
|
+
ι: 'i',
|
|
205
|
+
// Greek lowercase iota
|
|
206
|
+
l: 'I' // Lowercase L as I (common with serif OCR-B variants)
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Validates OCR-B specific character patterns
|
|
211
|
+
* @param text Text to validate
|
|
212
|
+
* @returns True if text matches OCR-B patterns reasonably well
|
|
213
|
+
*/
|
|
214
|
+
const isValidOCRBPattern = text => {
|
|
215
|
+
const lines = text.split('\n').filter(l => l.trim());
|
|
216
|
+
|
|
217
|
+
// OCR-B MRZ validation
|
|
218
|
+
for (const line of lines) {
|
|
219
|
+
if (!/<+/.test(line)) continue; // Skip non-MRZ lines
|
|
220
|
+
|
|
221
|
+
// OCR-B characteristics check:
|
|
222
|
+
// 1. Monospaced - all lines should have similar length (±2 chars)
|
|
223
|
+
// 2. Specific filler pattern - at least 3 consecutive fillers
|
|
224
|
+
// 3. Mixed digits and letters - checkdigits, names, dates
|
|
225
|
+
|
|
226
|
+
const fillerGroups = (line.match(/<+/g) || []).length;
|
|
227
|
+
const letterDigitSegments = (line.match(/[A-Z0-9]+/g) || []).length;
|
|
228
|
+
|
|
229
|
+
// Valid OCR-B should have 2-4 filler groups and 2-4 alphanumeric segments
|
|
230
|
+
if (fillerGroups < 1 || letterDigitSegments < 1) return false;
|
|
231
|
+
if (fillerGroups > 6 || letterDigitSegments > 6) return false; // Too fragmented
|
|
232
|
+
}
|
|
233
|
+
return true;
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Applies OCR-B specific corrections to raw OCR text
|
|
238
|
+
* @param text Raw OCR text
|
|
239
|
+
* @returns Text with OCR-B corrections applied
|
|
240
|
+
*/
|
|
241
|
+
const applyOCRBCorrections = text => {
|
|
242
|
+
let corrected = text;
|
|
243
|
+
|
|
244
|
+
// Replace OCR-B specific misreadings
|
|
245
|
+
for (const [wrong, correct] of Object.entries(OCRB_SPECIFIC_MAP)) {
|
|
246
|
+
corrected = corrected.replace(new RegExp(wrong, 'g'), correct);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Apply line-by-line OCR-B specific logic
|
|
250
|
+
corrected = corrected.split('\n').map(line => {
|
|
251
|
+
if (!line.includes('<')) return line; // Not an MRZ line
|
|
252
|
+
|
|
253
|
+
// In OCR-B MRZ, digit positions are strictly defined
|
|
254
|
+
// If we see obvious letter/digit confusion in digit areas, correct it
|
|
255
|
+
|
|
256
|
+
// Document number area: should be digits or fillers
|
|
257
|
+
// Pattern: after 2nd filler block, expect <8-9 digit chars> before next filler block
|
|
258
|
+
line = line.replace(/([<]+)([A-Z])([0-9]{1,2})([<]+)/g, (match, filler1, letter, digits, filler2) => {
|
|
259
|
+
// If single letter between fillers and digits, likely OCR error
|
|
260
|
+
if (letter === 'O') return `${filler1}0${digits}${filler2}`; // O -> 0
|
|
261
|
+
if (letter === 'I' || letter === 'L') return `${filler1}1${digits}${filler2}`; // I/L -> 1
|
|
262
|
+
return match;
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
// Check digit areas (end of lines): should be single digit, not letter
|
|
266
|
+
line = line.replace(/([<]+)([A-Z])(\d)?$/gm, (match, fillers, letter, maybeDigit) => {
|
|
267
|
+
// If a letter appears before line end in check digit area, convert
|
|
268
|
+
if (letter === 'O') return `${fillers}0${maybeDigit || ''}`;
|
|
269
|
+
if (letter === 'I' || letter === 'L') return `${fillers}1${maybeDigit || ''}`;
|
|
270
|
+
if (letter === 'S') return `${fillers}5${maybeDigit || ''}`;
|
|
271
|
+
if (letter === 'Z') return `${fillers}2${maybeDigit || ''}`;
|
|
272
|
+
if (letter === 'B') return `${fillers}8${maybeDigit || ''}`;
|
|
273
|
+
if (letter === 'G') return `${fillers}6${maybeDigit || ''}`;
|
|
274
|
+
return match;
|
|
275
|
+
});
|
|
276
|
+
return line;
|
|
277
|
+
}).join('\n');
|
|
278
|
+
return corrected;
|
|
151
279
|
};
|
|
152
280
|
const generateAmbiguousVariants = (text, maxChanges = 2, maxVariants = 64) => {
|
|
153
281
|
const entries = [{
|
|
@@ -262,6 +390,67 @@ const validateMRZWithCorrections = mrzText => {
|
|
|
262
390
|
return validateMRZ(mrzText, true);
|
|
263
391
|
};
|
|
264
392
|
|
|
393
|
+
/**
|
|
394
|
+
* Calculates quality score for recognized MRZ text (0-100)
|
|
395
|
+
* Higher score = higher confidence in the OCR result
|
|
396
|
+
* @param mrzText Recognized MRZ text
|
|
397
|
+
* @returns Quality score 0-100
|
|
398
|
+
*/
|
|
399
|
+
const calculateMRZQualityScore = mrzText => {
|
|
400
|
+
if (!mrzText) return 0;
|
|
401
|
+
let score = 100;
|
|
402
|
+
const lines = mrzText.split('\n').filter(l => l.trim());
|
|
403
|
+
|
|
404
|
+
// Penalty for incomplete lines
|
|
405
|
+
if (lines.length < 2) score -= 40;
|
|
406
|
+
if (lines.some(l => l.length < 30)) score -= 20;
|
|
407
|
+
for (const line of lines) {
|
|
408
|
+
// Count suspicious patterns that indicate OCR errors
|
|
409
|
+
const fillerCount = (line.match(/</g) || []).length;
|
|
410
|
+
const digitCount = (line.match(/\d/g) || []).length;
|
|
411
|
+
const letterCount = (line.match(/[A-Z]/g) || []).length;
|
|
412
|
+
const suspiciousCount = (line.match(/[KGB]{2,}|[0O]{2,}/g) || []).length;
|
|
413
|
+
|
|
414
|
+
// Penalize if too many suspicious patterns
|
|
415
|
+
if (suspiciousCount > 0) score -= suspiciousCount * 5;
|
|
416
|
+
|
|
417
|
+
// Penalize if ratio of fillers seems wrong (should be 40-60% for most lines)
|
|
418
|
+
const fillerRatio = fillerCount / line.length;
|
|
419
|
+
if (fillerRatio < 0.3 || fillerRatio > 0.7) score -= 10;
|
|
420
|
+
|
|
421
|
+
// Penalize if no digits where expected (birth date, expiry date, check digits)
|
|
422
|
+
if (letterCount > digitCount) {
|
|
423
|
+
// Some lines should have mostly digits (date lines)
|
|
424
|
+
if (line.match(/\d{5,6}/)) {
|
|
425
|
+
// Has valid date pattern, ok
|
|
426
|
+
} else if (line.length > 30 && digitCount === 0) {
|
|
427
|
+
score -= 15;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
// Apply consistency bonus if lines have similar length
|
|
433
|
+
const lengths = lines.map(l => l.length);
|
|
434
|
+
const avgLength = lengths.reduce((a, b) => a + b, 0) / lines.length;
|
|
435
|
+
const variance = lengths.reduce((sum, len) => sum + Math.abs(len - avgLength), 0) / lines.length;
|
|
436
|
+
if (variance < 5) score += 10;
|
|
437
|
+
return Math.max(0, Math.min(100, score));
|
|
438
|
+
};
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* Validates MRZ quality and returns confidence level
|
|
442
|
+
* @param mrzText Raw or fixed MRZ text
|
|
443
|
+
* @returns Object with quality score and confidence level
|
|
444
|
+
*/
|
|
445
|
+
const assessMRZQuality = mrzText => {
|
|
446
|
+
const score = calculateMRZQualityScore(mrzText);
|
|
447
|
+
return {
|
|
448
|
+
score,
|
|
449
|
+
confidence: score >= 80 ? 'high' : score >= 60 ? 'medium' : 'low',
|
|
450
|
+
reliable: score >= 70
|
|
451
|
+
};
|
|
452
|
+
};
|
|
453
|
+
|
|
265
454
|
/**
|
|
266
455
|
* Converts an MRZ date string to an ISO date string.
|
|
267
456
|
* @param mrzDate The MRZ date string to convert (YYMMDD format)
|
|
@@ -282,5 +471,9 @@ export default {
|
|
|
282
471
|
fixMRZ,
|
|
283
472
|
validateMRZ,
|
|
284
473
|
validateMRZWithCorrections,
|
|
474
|
+
calculateMRZQualityScore,
|
|
475
|
+
assessMRZQuality,
|
|
476
|
+
isValidOCRBPattern,
|
|
477
|
+
applyOCRBCorrections,
|
|
285
478
|
convertMRZDateToISODate
|
|
286
479
|
};
|
|
@@ -102,10 +102,6 @@ export default {
|
|
|
102
102
|
'identityDocumentCamera.alignIDFrontSide': 'Align the front side of your ID card',
|
|
103
103
|
'identityDocumentCamera.alignIDBackSide': 'Align the back side of your ID card',
|
|
104
104
|
'identityDocumentCamera.scanCompleted': 'Scan completed!',
|
|
105
|
-
'identityDocumentCamera.frontSideScanned': 'Front side scanned!',
|
|
106
|
-
'identityDocumentCamera.passportScanned': 'Passport scanned!',
|
|
107
|
-
'identityDocumentCamera.backSideScanned': 'Back side scanned!',
|
|
108
|
-
'identityDocumentCamera.hologramVerified': 'Hologram verified!',
|
|
109
105
|
'identityDocumentCamera.searchingDocument': 'Position document within the frame',
|
|
110
106
|
'identityDocumentCamera.faceDetected': 'Keep device steady...',
|
|
111
107
|
'identityDocumentCamera.readingDocument': 'Reading document...',
|
|
@@ -102,10 +102,6 @@ export default {
|
|
|
102
102
|
'identityDocumentCamera.alignIDFrontSide': 'Kimlik kartınızın ön yüzünü hizalayın',
|
|
103
103
|
'identityDocumentCamera.alignIDBackSide': 'Kimlik kartınızın arka yüzünü hizalayın',
|
|
104
104
|
'identityDocumentCamera.scanCompleted': 'Tarama tamamlandı!',
|
|
105
|
-
'identityDocumentCamera.frontSideScanned': 'Ön yüz tarandı!',
|
|
106
|
-
'identityDocumentCamera.passportScanned': 'Pasaport tarandı!',
|
|
107
|
-
'identityDocumentCamera.backSideScanned': 'Arka yüz tarandı!',
|
|
108
|
-
'identityDocumentCamera.hologramVerified': 'Hologram doğrulandı!',
|
|
109
105
|
'identityDocumentCamera.searchingDocument': 'Belgeyi çerçeve içine yerleştirin',
|
|
110
106
|
'identityDocumentCamera.faceDetected': 'Cihazı sabit tutun...',
|
|
111
107
|
'identityDocumentCamera.readingDocument': 'Belge okunuyor...',
|
package/lib/module/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FaceCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/FaceCamera.tsx"],"names":[],"mappings":"AAeA,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,mBAAmB,CAAC;AAa3B,MAAM,MAAM,IAAI,GAAG;IACjB,MAAM,EAAE;QACN,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,EAAE,CACf,KAAK,EAAE,IAAI,EAAE,EACb,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,EACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,mBAAmB,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC7D,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,wDAIjB,eAAe,
|
|
1
|
+
{"version":3,"file":"FaceCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/FaceCamera.tsx"],"names":[],"mappings":"AAeA,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,mBAAmB,CAAC;AAa3B,MAAM,MAAM,IAAI,GAAG;IACjB,MAAM,EAAE;QACN,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,EAAE,CACf,KAAK,EAAE,IAAI,EAAE,EACb,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,EACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,mBAAmB,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC7D,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,wDAIjB,eAAe,4CAkTjB,CAAC;AA6BF,eAAe,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdentityDocumentCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"IdentityDocumentCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAiBpD,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,UAAU,EAAE,SAAS,CAAC;IACtB,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,gBAAgB,GAAG,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEnD,KAAK,SAAS,GAAG;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,gBAAgB,EAAE,gBAAgB;IAClC,QAAQ,EAAE,YAAY;IACtB,SAAS,EAAE,SAAS;IACpB,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,QAAQ,EAAE,MAAM;CACjB,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,mBAAmB,EAAE,gBAAgB;IACrC,YAAY,EAAE,SAAS;IACvB,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EACR,gBAAgB,GAChB,UAAU,GACV,oBAAoB,GACpB,eAAe,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,OAAO,CAAC;IACrB,yBAAyB,EAAE,CAAC,WAAW,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA2BD,QAAA,MAAM,sBAAsB,GAAI,uDAI7B,2BAA2B,4CAylH7B,CAAC;AAgLF,eAAe,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QrCodeScannerCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/QrCodeScannerCamera.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QrCodeScannerCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/QrCodeScannerCamera.tsx"],"names":[],"mappings":"AA0BA,MAAM,WAAW,wBAAwB;IACvC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,QAAA,MAAM,mBAAmB,GAAI,+BAG1B,wBAAwB,4CA6K1B,CAAC;AAwGF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrustchexCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/TrustchexCamera.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AA8CtB,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE;QACX,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"TrustchexCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/TrustchexCamera.tsx"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,14 @@ declare const _default: {
|
|
|
16
16
|
fixMRZ: (rawText: string) => string;
|
|
17
17
|
validateMRZ: (mrzText: string, autocorrect?: boolean) => MRZValidationResult;
|
|
18
18
|
validateMRZWithCorrections: (mrzText: string) => MRZValidationResult;
|
|
19
|
+
calculateMRZQualityScore: (mrzText: string) => number;
|
|
20
|
+
assessMRZQuality: (mrzText: string) => {
|
|
21
|
+
score: number;
|
|
22
|
+
confidence: string;
|
|
23
|
+
reliable: boolean;
|
|
24
|
+
};
|
|
25
|
+
isValidOCRBPattern: (text: string) => boolean;
|
|
26
|
+
applyOCRBCorrections: (text: string) => string;
|
|
19
27
|
convertMRZDateToISODate: (mrzDate?: string | null) => string | null;
|
|
20
28
|
};
|
|
21
29
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mrz.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/mrz.utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;sBAOwB,MAAM,KAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"mrz.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/mrz.utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;sBAOwB,MAAM,KAAG,MAAM;2BAuU7B,MAAM,gBACF,OAAO,KACnB,mBAAmB;0CAuEuB,MAAM,KAAG,mBAAmB;wCAU9B,MAAM,KAAG,MAAM;gCAmDvB,MAAM;;;;;+BAtQP,MAAM,KAAG,OAAO;iCA4Bd,MAAM,KAAG,MAAM;wCAwPR,MAAM,GAAG,IAAI,KAAG,MAAM,GAAG,IAAI;;AAgBxE,wBASE"}
|
|
@@ -100,10 +100,6 @@ declare const _default: {
|
|
|
100
100
|
'identityDocumentCamera.alignIDFrontSide': string;
|
|
101
101
|
'identityDocumentCamera.alignIDBackSide': string;
|
|
102
102
|
'identityDocumentCamera.scanCompleted': string;
|
|
103
|
-
'identityDocumentCamera.frontSideScanned': string;
|
|
104
|
-
'identityDocumentCamera.passportScanned': string;
|
|
105
|
-
'identityDocumentCamera.backSideScanned': string;
|
|
106
|
-
'identityDocumentCamera.hologramVerified': string;
|
|
107
103
|
'identityDocumentCamera.searchingDocument': string;
|
|
108
104
|
'identityDocumentCamera.faceDetected': string;
|
|
109
105
|
'identityDocumentCamera.readingDocument': string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../../../src/Translation/Resources/en.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../../../src/Translation/Resources/en.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAmKE"}
|
|
@@ -100,10 +100,6 @@ declare const _default: {
|
|
|
100
100
|
'identityDocumentCamera.alignIDFrontSide': string;
|
|
101
101
|
'identityDocumentCamera.alignIDBackSide': string;
|
|
102
102
|
'identityDocumentCamera.scanCompleted': string;
|
|
103
|
-
'identityDocumentCamera.frontSideScanned': string;
|
|
104
|
-
'identityDocumentCamera.passportScanned': string;
|
|
105
|
-
'identityDocumentCamera.backSideScanned': string;
|
|
106
|
-
'identityDocumentCamera.hologramVerified': string;
|
|
107
103
|
'identityDocumentCamera.searchingDocument': string;
|
|
108
104
|
'identityDocumentCamera.faceDetected': string;
|
|
109
105
|
'identityDocumentCamera.readingDocument': string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tr.d.ts","sourceRoot":"","sources":["../../../../../src/Translation/Resources/tr.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tr.d.ts","sourceRoot":"","sources":["../../../../../src/Translation/Resources/tr.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAqKE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const SDK_VERSION = "1.
|
|
1
|
+
export declare const SDK_VERSION = "1.374.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -366,6 +366,7 @@ const FaceCamera = ({
|
|
|
366
366
|
enableFaceDetection={isActive}
|
|
367
367
|
includeBase64={true} // Enabled to capture photos for liveness steps
|
|
368
368
|
targetFps={5}
|
|
369
|
+
resolution="hd"
|
|
369
370
|
onFrameAvailable={handleFrame}
|
|
370
371
|
onCameraReady={handleCameraReady}
|
|
371
372
|
onCameraError={handleCameraError}
|