@trustchex/react-native-sdk 1.475.1 → 1.478.7
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/android/src/main/java/com/trustchex/reactnativesdk/camera/TrustchexCameraView.kt +19 -21
- package/android/src/main/java/com/trustchex/reactnativesdk/mlkit/MLKitModule.kt +1 -0
- package/lib/module/Screens/Dynamic/LivenessDetectionScreen.js +3 -2
- package/lib/module/Screens/Static/QrCodeScanningScreen.js +12 -2
- package/lib/module/Screens/Static/ResultScreen.js +103 -107
- package/lib/module/Shared/Components/DebugOverlay.js +5 -2
- package/lib/module/Shared/Components/IdentityDocumentCamera.js +53 -22
- package/lib/module/Shared/Components/IdentityDocumentCamera.utils.js +8 -1
- package/lib/module/Shared/EIDReader/eidReader.js +15 -14
- package/lib/module/Shared/Libs/MRZ_KNOWN_ISSUES.md +34 -0
- package/lib/module/Shared/Libs/SignalingClient.js +6 -5
- package/lib/module/Shared/Libs/crypto.utils.js +25 -3
- package/lib/module/Shared/Libs/deeplink.utils.js +37 -7
- package/lib/module/Shared/Libs/http-client.js +19 -6
- package/lib/module/Shared/Libs/mrz.utils.js +193 -33
- package/lib/module/Shared/Libs/mrzFrameAggregator.js +45 -1
- package/lib/module/Shared/Libs/promise.utils.js +4 -3
- package/lib/module/Shared/Libs/shuffle.utils.js +17 -0
- package/lib/module/Shared/Services/AnalyticsService.js +8 -2
- package/lib/module/Shared/Services/DataUploadService.js +114 -127
- package/lib/module/Shared/Services/VideoSessionService.js +4 -3
- package/lib/module/Translation/Resources/en.js +1 -0
- package/lib/module/Translation/Resources/tr.js +1 -0
- package/lib/module/version.js +1 -1
- package/lib/typescript/src/Screens/Dynamic/LivenessDetectionScreen.d.ts.map +1 -1
- package/lib/typescript/src/Screens/Static/QrCodeScanningScreen.d.ts.map +1 -1
- package/lib/typescript/src/Screens/Static/ResultScreen.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Components/DebugOverlay.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.utils.d.ts +1 -1
- package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.utils.d.ts.map +1 -1
- package/lib/typescript/src/Shared/EIDReader/eidReader.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/SignalingClient.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/crypto.utils.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/deeplink.utils.d.ts +1 -0
- package/lib/typescript/src/Shared/Libs/deeplink.utils.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/http-client.d.ts +2 -0
- package/lib/typescript/src/Shared/Libs/http-client.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/mrz.utils.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/mrzFrameAggregator.d.ts +22 -0
- package/lib/typescript/src/Shared/Libs/mrzFrameAggregator.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/promise.utils.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/shuffle.utils.d.ts +3 -0
- package/lib/typescript/src/Shared/Libs/shuffle.utils.d.ts.map +1 -0
- package/lib/typescript/src/Shared/Services/AnalyticsService.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Services/DataUploadService.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Services/VideoSessionService.d.ts.map +1 -1
- package/lib/typescript/src/Translation/Resources/en.d.ts +1 -0
- package/lib/typescript/src/Translation/Resources/en.d.ts.map +1 -1
- package/lib/typescript/src/Translation/Resources/tr.d.ts +1 -0
- package/lib/typescript/src/Translation/Resources/tr.d.ts.map +1 -1
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +13 -3
- package/src/Screens/Dynamic/LivenessDetectionScreen.tsx +4 -3
- package/src/Screens/Static/QrCodeScanningScreen.tsx +19 -2
- package/src/Screens/Static/ResultScreen.tsx +126 -161
- package/src/Shared/Components/DebugOverlay.tsx +5 -2
- package/src/Shared/Components/IdentityDocumentCamera.tsx +55 -22
- package/src/Shared/Components/IdentityDocumentCamera.utils.ts +9 -1
- package/src/Shared/EIDReader/eidReader.ts +23 -14
- package/src/Shared/Libs/MRZ_KNOWN_ISSUES.md +34 -0
- package/src/Shared/Libs/SignalingClient.ts +10 -5
- package/src/Shared/Libs/crypto.utils.ts +41 -4
- package/src/Shared/Libs/deeplink.utils.ts +39 -7
- package/src/Shared/Libs/http-client.ts +24 -8
- package/src/Shared/Libs/mrz.utils.ts +200 -34
- package/src/Shared/Libs/mrzFrameAggregator.ts +53 -1
- package/src/Shared/Libs/promise.utils.ts +11 -5
- package/src/Shared/Libs/shuffle.utils.ts +15 -0
- package/src/Shared/Services/AnalyticsService.ts +17 -1
- package/src/Shared/Services/DataUploadService.ts +155 -166
- package/src/Shared/Services/VideoSessionService.ts +15 -3
- package/src/Translation/Resources/en.ts +1 -0
- package/src/Translation/Resources/tr.ts +1 -0
- package/src/version.ts +1 -1
|
@@ -4,9 +4,10 @@ import RNFS from 'react-native-fs';
|
|
|
4
4
|
import { Platform } from 'react-native';
|
|
5
5
|
import { getSessionKey, encryptWithAes } from "../Libs/crypto.utils.js";
|
|
6
6
|
import mrzUtils from "../Libs/mrz.utils.js";
|
|
7
|
-
import httpClient from "../Libs/http-client.js";
|
|
7
|
+
import httpClient, { getSessionToken } from "../Libs/http-client.js";
|
|
8
8
|
import { NotFoundError } from "../Libs/http-client.js";
|
|
9
9
|
import { runWithRetry } from "../Libs/promise.utils.js";
|
|
10
|
+
import { debugLog, debugWarn, logError, logWarn } from "../Libs/debug.utils.js";
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Service to upload collected identification data to the backend.
|
|
@@ -18,9 +19,9 @@ export class DataUploadService {
|
|
|
18
19
|
this.apiUrl = `${baseUrl}/api/app/mobile`;
|
|
19
20
|
}
|
|
20
21
|
async ensureIdentificationExists(identificationId) {
|
|
21
|
-
|
|
22
|
+
debugLog('DataUploadService', 'POST', `${this.apiUrl}/identifications/${identificationId}`);
|
|
22
23
|
await httpClient.post(`${this.apiUrl}/identifications/${identificationId}`, {});
|
|
23
|
-
|
|
24
|
+
debugLog('DataUploadService', '✓ Identification created/verified');
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
/**
|
|
@@ -28,12 +29,12 @@ export class DataUploadService {
|
|
|
28
29
|
*/
|
|
29
30
|
async submitDocumentData(identificationId, scannedDocument, sessionKey) {
|
|
30
31
|
if (!scannedDocument || scannedDocument.documentType === 'UNKNOWN') {
|
|
31
|
-
|
|
32
|
+
debugLog('DataUploadService', 'No document data to submit');
|
|
32
33
|
return;
|
|
33
34
|
}
|
|
34
35
|
const mrzFields = scannedDocument.mrzFields;
|
|
35
36
|
if (!mrzFields) {
|
|
36
|
-
|
|
37
|
+
debugLog('DataUploadService', 'No MRZ fields to submit');
|
|
37
38
|
return;
|
|
38
39
|
}
|
|
39
40
|
const identificationDocument = {
|
|
@@ -50,28 +51,32 @@ export class DataUploadService {
|
|
|
50
51
|
dataSource: scannedDocument.dataSource,
|
|
51
52
|
mrzText: scannedDocument.mrzText
|
|
52
53
|
};
|
|
53
|
-
|
|
54
|
+
debugLog('DataUploadService', 'Submitting document data:', identificationDocument.type);
|
|
54
55
|
const {
|
|
55
56
|
encryptedData,
|
|
56
57
|
nonce
|
|
57
58
|
} = encryptWithAes(JSON.stringify(identificationDocument), sessionKey);
|
|
58
|
-
|
|
59
|
+
debugLog('DataUploadService', 'POST', `${this.apiUrl}/identifications/${identificationId}/documents`);
|
|
59
60
|
await runWithRetry(() => httpClient.post(`${this.apiUrl}/identifications/${identificationId}/documents`, {
|
|
60
61
|
encryptedData,
|
|
61
62
|
nonce
|
|
62
63
|
}));
|
|
63
|
-
|
|
64
|
+
debugLog('DataUploadService', '✓ Document data submitted');
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
/**
|
|
67
68
|
* Upload media files (document images, selfies, etc.)
|
|
68
69
|
*/
|
|
69
70
|
async uploadMedia(identificationId, scannedDocument, livenessDetection, onProgress) {
|
|
71
|
+
const sessionToken = getSessionToken();
|
|
70
72
|
const uploadFileOptions = {
|
|
71
73
|
toUrl: `${this.apiUrl}/identifications/${identificationId}/media`,
|
|
72
74
|
method: 'POST',
|
|
73
75
|
headers: {
|
|
74
|
-
Accept: 'application/json'
|
|
76
|
+
Accept: 'application/json',
|
|
77
|
+
...(sessionToken ? {
|
|
78
|
+
'X-Session-Token': sessionToken
|
|
79
|
+
} : {})
|
|
75
80
|
},
|
|
76
81
|
files: [],
|
|
77
82
|
progress: res => {
|
|
@@ -80,127 +85,109 @@ export class DataUploadService {
|
|
|
80
85
|
}
|
|
81
86
|
};
|
|
82
87
|
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
// Plaintext identity images/video staged on disk for the multipart upload;
|
|
89
|
+
// every entry is deleted in the finally below, whether the upload succeeds
|
|
90
|
+
// or not.
|
|
91
|
+
const tempPaths = [];
|
|
92
|
+
const writeTempImage = async (fileName, base64Data) => {
|
|
93
|
+
const filePath = decodeURIComponent(`${RNFS.TemporaryDirectoryPath}/${fileName}`);
|
|
94
|
+
await RNFS.writeFile(filePath, base64Data, 'base64');
|
|
95
|
+
tempPaths.push(filePath);
|
|
88
96
|
uploadFileOptions.files.push({
|
|
89
97
|
name: 'files',
|
|
90
|
-
filename:
|
|
91
|
-
filepath:
|
|
98
|
+
filename: fileName,
|
|
99
|
+
filepath: filePath,
|
|
92
100
|
filetype: 'image/jpeg'
|
|
93
101
|
});
|
|
94
|
-
|
|
102
|
+
return filePath;
|
|
103
|
+
};
|
|
104
|
+
try {
|
|
105
|
+
// Add document front image
|
|
106
|
+
const frontImage = scannedDocument?.frontImage;
|
|
107
|
+
if (frontImage && frontImage !== '') {
|
|
108
|
+
await writeTempImage('DOCUMENT_FRONT_IMAGE.jpg', frontImage);
|
|
109
|
+
}
|
|
95
110
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
uploadFileOptions.files.push({
|
|
102
|
-
name: 'files',
|
|
103
|
-
filename: 'DOCUMENT_BACK_IMAGE.jpg',
|
|
104
|
-
filepath: decodeURIComponent(filePath),
|
|
105
|
-
filetype: 'image/jpeg'
|
|
106
|
-
});
|
|
107
|
-
}
|
|
111
|
+
// Add document back image
|
|
112
|
+
const backImage = scannedDocument?.backImage;
|
|
113
|
+
if (backImage && backImage !== '') {
|
|
114
|
+
await writeTempImage('DOCUMENT_BACK_IMAGE.jpg', backImage);
|
|
115
|
+
}
|
|
108
116
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
uploadFileOptions.files.push({
|
|
115
|
-
name: 'files',
|
|
116
|
-
filename: 'FACE_IMAGE.jpg',
|
|
117
|
-
filepath: decodeURIComponent(filePath),
|
|
118
|
-
filetype: 'image/jpeg'
|
|
119
|
-
});
|
|
120
|
-
}
|
|
117
|
+
// Add face image from document
|
|
118
|
+
const faceImage = scannedDocument?.faceImage;
|
|
119
|
+
if (faceImage && faceImage !== '') {
|
|
120
|
+
await writeTempImage('FACE_IMAGE.jpg', faceImage);
|
|
121
|
+
}
|
|
121
122
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
uploadFileOptions.files.push({
|
|
128
|
-
name: 'files',
|
|
129
|
-
filename: 'DOCUMENT_SECONDARY_FACE_IMAGE.jpg',
|
|
130
|
-
filepath: decodeURIComponent(filePath),
|
|
131
|
-
filetype: 'image/jpeg'
|
|
132
|
-
});
|
|
133
|
-
}
|
|
123
|
+
// Add secondary face image from document (optional)
|
|
124
|
+
const secondaryFaceImage = scannedDocument?.secondaryFaceImage;
|
|
125
|
+
if (secondaryFaceImage && secondaryFaceImage !== '') {
|
|
126
|
+
await writeTempImage('DOCUMENT_SECONDARY_FACE_IMAGE.jpg', secondaryFaceImage);
|
|
127
|
+
}
|
|
134
128
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
uploadFileOptions.files.push({
|
|
141
|
-
name: 'files',
|
|
142
|
-
filename: 'DOCUMENT_HOLOGRAM_IMAGE.jpg',
|
|
143
|
-
filepath: decodeURIComponent(filePath),
|
|
144
|
-
filetype: 'image/jpeg'
|
|
145
|
-
});
|
|
146
|
-
}
|
|
129
|
+
// Add hologram image from document (optional)
|
|
130
|
+
const hologramImage = scannedDocument?.hologramImage;
|
|
131
|
+
if (hologramImage && hologramImage !== '') {
|
|
132
|
+
await writeTempImage('DOCUMENT_HOLOGRAM_IMAGE.jpg', hologramImage);
|
|
133
|
+
}
|
|
147
134
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
uploadFileOptions.files.push({
|
|
162
|
-
name: 'files',
|
|
163
|
-
filename: 'SELFIE_IMAGE.jpg',
|
|
164
|
-
filepath: decodeURIComponent(filePath),
|
|
165
|
-
filetype: 'image/jpeg'
|
|
166
|
-
});
|
|
135
|
+
// Add liveness images and selfie from liveness detection
|
|
136
|
+
if (livenessDetection?.instructions) {
|
|
137
|
+
for (const instruction of livenessDetection.instructions) {
|
|
138
|
+
if (instruction?.photo) {
|
|
139
|
+
const filePath = await writeTempImage(`LIVENESS_${instruction.instruction}_IMAGE.jpg`, instruction.photo);
|
|
140
|
+
if (instruction.instruction === 'LOOK_STRAIGHT_AND_BLINK') {
|
|
141
|
+
uploadFileOptions.files.push({
|
|
142
|
+
name: 'files',
|
|
143
|
+
filename: 'SELFIE_IMAGE.jpg',
|
|
144
|
+
filepath: filePath,
|
|
145
|
+
filetype: 'image/jpeg'
|
|
146
|
+
});
|
|
147
|
+
}
|
|
167
148
|
}
|
|
168
149
|
}
|
|
169
150
|
}
|
|
170
|
-
}
|
|
171
151
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
152
|
+
// Add liveness video (optional). Only the staged copy is cleaned up here;
|
|
153
|
+
// livenessDetection.videoPath stays available for later submissions.
|
|
154
|
+
if (livenessDetection?.videoPath) {
|
|
155
|
+
let videoFilePath;
|
|
156
|
+
if (Platform.OS === 'ios') {
|
|
157
|
+
const tempDir = `${RNFS.TemporaryDirectoryPath}/${new Date().getTime()}`;
|
|
158
|
+
await RNFS.mkdir(tempDir);
|
|
159
|
+
tempPaths.push(tempDir);
|
|
160
|
+
videoFilePath = `${tempDir}/LIVENESS_VIDEO.mp4`;
|
|
161
|
+
} else {
|
|
162
|
+
videoFilePath = decodeURIComponent(`${RNFS.TemporaryDirectoryPath}/LIVENESS_VIDEO.mp4`);
|
|
163
|
+
tempPaths.push(videoFilePath);
|
|
164
|
+
}
|
|
165
|
+
await RNFS.copyFile(livenessDetection.videoPath, videoFilePath);
|
|
166
|
+
uploadFileOptions.files.push({
|
|
167
|
+
name: 'files',
|
|
168
|
+
filename: 'LIVENESS_VIDEO.mp4',
|
|
169
|
+
filepath: decodeURIComponent(videoFilePath),
|
|
170
|
+
filetype: 'video/mp4'
|
|
171
|
+
});
|
|
181
172
|
}
|
|
182
|
-
await RNFS.copyFile(livenessDetection.videoPath, videoFilePath);
|
|
183
|
-
uploadFileOptions.files.push({
|
|
184
|
-
name: 'files',
|
|
185
|
-
filename: 'LIVENESS_VIDEO.mp4',
|
|
186
|
-
filepath: decodeURIComponent(videoFilePath),
|
|
187
|
-
filetype: 'video/mp4'
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
173
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
174
|
+
// Skip upload if no files
|
|
175
|
+
if (uploadFileOptions.files.length === 0) {
|
|
176
|
+
debugLog('DataUploadService', 'No media files to upload');
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
debugLog('DataUploadService', `Uploading ${uploadFileOptions.files.length} media files to`, uploadFileOptions.toUrl);
|
|
180
|
+
const response = await runWithRetry(() => RNFS.uploadFiles(uploadFileOptions).promise);
|
|
181
|
+
debugLog('DataUploadService', 'Upload response status:', response.statusCode);
|
|
182
|
+
if (![200, 201, 204].includes(response.statusCode)) {
|
|
183
|
+
logError('DataUploadService', `Media upload failed: ${response.statusCode}`);
|
|
184
|
+
debugLog('DataUploadService', 'Failed upload response:', response.body);
|
|
185
|
+
throw new Error(`Media upload failed: ${response.statusCode}`);
|
|
186
|
+
}
|
|
187
|
+
debugLog('DataUploadService', '✓ Media uploaded successfully');
|
|
188
|
+
} finally {
|
|
189
|
+
await Promise.all(tempPaths.map(path => RNFS.unlink(path).catch(() => {})));
|
|
202
190
|
}
|
|
203
|
-
console.log('[DataUploadService] ✓ Media uploaded successfully');
|
|
204
191
|
}
|
|
205
192
|
|
|
206
193
|
/**
|
|
@@ -217,27 +204,27 @@ export class DataUploadService {
|
|
|
217
204
|
authToken
|
|
218
205
|
} = identificationInfo;
|
|
219
206
|
if (!identificationId) {
|
|
220
|
-
|
|
207
|
+
debugLog('DataUploadService', 'No identification ID, skipping upload');
|
|
221
208
|
return false;
|
|
222
209
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
210
|
+
debugLog('DataUploadService', '========== UPLOADING COLLECTED DATA ==========');
|
|
211
|
+
debugLog('DataUploadService', 'Identification ID:', identificationId);
|
|
212
|
+
debugLog('DataUploadService', 'Has document:', !!scannedDocument);
|
|
213
|
+
debugLog('DataUploadService', 'Has liveness:', !!livenessDetection);
|
|
214
|
+
debugLog('DataUploadService', 'Has auth token:', !!authToken);
|
|
228
215
|
try {
|
|
229
216
|
await runWithRetry(() => this.ensureIdentificationExists(identificationId));
|
|
230
217
|
|
|
231
218
|
// Always refresh session key for current session (required for encrypted submission)
|
|
232
219
|
if (sessionId) {
|
|
233
220
|
const existingAuthToken = authToken;
|
|
234
|
-
|
|
221
|
+
debugLog('DataUploadService', 'Getting session key...');
|
|
235
222
|
try {
|
|
236
223
|
authToken = await runWithRetry(() => getSessionKey(this.apiUrl, sessionId));
|
|
237
|
-
|
|
224
|
+
debugLog('DataUploadService', '✓ Session key obtained');
|
|
238
225
|
} catch (error) {
|
|
239
226
|
if (existingAuthToken) {
|
|
240
|
-
|
|
227
|
+
debugWarn('DataUploadService', 'Session key refresh failed, using existing token');
|
|
241
228
|
authToken = existingAuthToken;
|
|
242
229
|
} else {
|
|
243
230
|
throw error;
|
|
@@ -245,7 +232,7 @@ export class DataUploadService {
|
|
|
245
232
|
}
|
|
246
233
|
}
|
|
247
234
|
if (!authToken) {
|
|
248
|
-
|
|
235
|
+
debugLog('DataUploadService', 'No session key available, skipping upload');
|
|
249
236
|
return false;
|
|
250
237
|
}
|
|
251
238
|
|
|
@@ -262,7 +249,7 @@ export class DataUploadService {
|
|
|
262
249
|
onProgress?.(0.4 + p * 0.5);
|
|
263
250
|
}));
|
|
264
251
|
onProgress?.(1.0);
|
|
265
|
-
|
|
252
|
+
debugLog('DataUploadService', '✓ All collected data uploaded');
|
|
266
253
|
|
|
267
254
|
// Mark media as uploaded during video call
|
|
268
255
|
identificationInfo.mediaUploadedDuringVideoCall = true;
|
|
@@ -272,10 +259,10 @@ export class DataUploadService {
|
|
|
272
259
|
return true;
|
|
273
260
|
} catch (error) {
|
|
274
261
|
if (error instanceof NotFoundError) {
|
|
275
|
-
|
|
262
|
+
logWarn('DataUploadService', 'Upload skipped: identification is not active anymore');
|
|
276
263
|
return false;
|
|
277
264
|
}
|
|
278
|
-
|
|
265
|
+
logError('DataUploadService', 'Failed to upload collected data:', error);
|
|
279
266
|
return false;
|
|
280
267
|
}
|
|
281
268
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { debugLog } from "../Libs/debug.utils.js";
|
|
3
4
|
export class VideoSessionService {
|
|
4
5
|
constructor(baseUrl, identificationId) {
|
|
5
6
|
this.baseUrl = baseUrl;
|
|
@@ -102,11 +103,11 @@ export class VideoSessionService {
|
|
|
102
103
|
// Use react-native-sse for real SSE support
|
|
103
104
|
const EventSource = require('react-native-sse').default;
|
|
104
105
|
const url = `${this.baseUrl}/api/app/mobile/video-sessions/${sessionId}/queue-status?identificationId=${this.identificationId}`;
|
|
105
|
-
|
|
106
|
+
debugLog('VideoSessionService', '[VideoSessionService] Creating SSE connection to:', url);
|
|
106
107
|
const es = new EventSource(url);
|
|
107
108
|
let heartbeatInterval = null;
|
|
108
109
|
es.addEventListener('open', () => {
|
|
109
|
-
|
|
110
|
+
debugLog('VideoSessionService', '[VideoSessionService] Queue SSE connected');
|
|
110
111
|
// Send initial heartbeat
|
|
111
112
|
this.sendHeartbeat(sessionId).catch(() => {});
|
|
112
113
|
// Set up periodic heartbeat (every 20s to stay under 30s watchdog)
|
|
@@ -121,7 +122,7 @@ export class VideoSessionService {
|
|
|
121
122
|
es.addEventListener('message', event => {
|
|
122
123
|
try {
|
|
123
124
|
const data = JSON.parse(event.data);
|
|
124
|
-
|
|
125
|
+
debugLog('VideoSessionService', '[VideoSessionService] Queue update:', data);
|
|
125
126
|
if (data.queuePosition !== undefined) {
|
|
126
127
|
onUpdate(data.queuePosition);
|
|
127
128
|
}
|
|
@@ -112,6 +112,7 @@ export default {
|
|
|
112
112
|
'identityDocumentCamera.alignIDFrontSide': 'Align the front side of your ID card',
|
|
113
113
|
'identityDocumentCamera.alignIDBackSide': 'Align the back side of your ID card',
|
|
114
114
|
'identityDocumentCamera.scanCompleted': 'Scan completed!',
|
|
115
|
+
'identityDocumentCamera.mrzDetected': 'MRZ detected — hold steady',
|
|
115
116
|
'identityDocumentCamera.searchingDocument': 'Position document within the frame',
|
|
116
117
|
'identityDocumentCamera.faceDetected': 'Keep device steady...',
|
|
117
118
|
'identityDocumentCamera.readingDocument': 'Reading document...',
|
|
@@ -112,6 +112,7 @@ export default {
|
|
|
112
112
|
'identityDocumentCamera.alignIDFrontSide': 'Kimlik kartınızın ön yüzünü hizalayın',
|
|
113
113
|
'identityDocumentCamera.alignIDBackSide': 'Kimlik kartınızın arka yüzünü hizalayın',
|
|
114
114
|
'identityDocumentCamera.scanCompleted': 'Tarama tamamlandı!',
|
|
115
|
+
'identityDocumentCamera.mrzDetected': 'MRZ algılandı — sabit tutun',
|
|
115
116
|
'identityDocumentCamera.searchingDocument': 'Belgeyi çerçeve içine yerleştirin',
|
|
116
117
|
'identityDocumentCamera.faceDetected': 'Cihazı sabit tutun...',
|
|
117
118
|
'identityDocumentCamera.readingDocument': 'Belge okunuyor...',
|
package/lib/module/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LivenessDetectionScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Dynamic/LivenessDetectionScreen.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LivenessDetectionScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Dynamic/LivenessDetectionScreen.tsx"],"names":[],"mappings":"AA4FA,QAAA,MAAM,uBAAuB,+CAy9B5B,CAAC;AA+GF,eAAe,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QrCodeScanningScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Static/QrCodeScanningScreen.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QrCodeScanningScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Static/QrCodeScanningScreen.tsx"],"names":[],"mappings":"AAWA,QAAA,MAAM,oBAAoB,+CAwDzB,CAAC;AASF,eAAe,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResultScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Static/ResultScreen.tsx"],"names":[],"mappings":"AAqDA,QAAA,MAAM,YAAY,+
|
|
1
|
+
{"version":3,"file":"ResultScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Static/ResultScreen.tsx"],"names":[],"mappings":"AAqDA,QAAA,MAAM,YAAY,+CAkgCjB,CAAC;AAqIF,eAAe,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DebugOverlay.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/DebugOverlay.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,eAAe,EAChB,MAAM,gCAAgC,CAAC;AA2PxC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,oBAAoB,EAAE,YAAY,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,mBAAmB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/C,mBAAmB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/C,aAAa,EAAE,eAAe,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uBAAuB,EAAE,MAAM,EAAE,CAAC;CACnC;AAED,QAAA,MAAM,YAAY,+CAyThB,CAAC;AAIH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"DebugOverlay.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/DebugOverlay.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,eAAe,EAChB,MAAM,gCAAgC,CAAC;AA2PxC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,oBAAoB,EAAE,YAAY,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,mBAAmB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/C,mBAAmB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/C,aAAa,EAAE,eAAe,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uBAAuB,EAAE,MAAM,EAAE,CAAC;CACnC;AAED,QAAA,MAAM,YAAY,+CAyThB,CAAC;AAIH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,aAAa,gDAoDxB,CAAC;AAEH,eAAe,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdentityDocumentCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.tsx"],"names":[],"mappings":"AAwEA,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,2BAA2B,EAK5B,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC;AAC5E,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAMnE,QAAA,MAAM,sBAAsB,GAAI,uDAI7B,2BAA2B,
|
|
1
|
+
{"version":3,"file":"IdentityDocumentCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.tsx"],"names":[],"mappings":"AAwEA,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,2BAA2B,EAK5B,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC;AAC5E,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAMnE,QAAA,MAAM,sBAAsB,GAAI,uDAI7B,2BAA2B,4CA26E7B,CAAC;AAiIF,eAAe,sBAAsB,CAAC"}
|
|
@@ -42,7 +42,7 @@ export declare function transformBoundsToScreen(bounds: {
|
|
|
42
42
|
* Unified status message logic used by both voice guidance and render text.
|
|
43
43
|
* Returns the appropriate i18n key arguments for the current scan state.
|
|
44
44
|
*/
|
|
45
|
-
export declare function getStatusMessage(nextStep: ScanStep, status: ScanStatus, detectedDocumentType: DocumentType, isBrightnessLow: boolean, isFrameBlurry: boolean, allElementsDetected: boolean, elementsOutsideScanArea: string[], t: (key: string, params?: Record<string, unknown>) => string): string;
|
|
45
|
+
export declare function getStatusMessage(nextStep: ScanStep, status: ScanStatus, detectedDocumentType: DocumentType, isBrightnessLow: boolean, isFrameBlurry: boolean, allElementsDetected: boolean, elementsOutsideScanArea: string[], t: (key: string, params?: Record<string, unknown>) => string, mrzReliable?: boolean): string;
|
|
46
46
|
/**
|
|
47
47
|
* Calculate angle from two points in degrees
|
|
48
48
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdentityDocumentCamera.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,IAAI,EACL,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAOpD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAG7E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM;;;;;EAmBpB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;;;;;sBAW9C,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM;EAIjE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/D,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM;;;;;EAQhB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,UAAU,EAClB,oBAAoB,EAAE,YAAY,EAClC,eAAe,EAAE,OAAO,EACxB,aAAa,EAAE,OAAO,EACtB,mBAAmB,EAAE,OAAO,EAC5B,uBAAuB,EAAE,MAAM,EAAE,EACjC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"IdentityDocumentCamera.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eidReader.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/EIDReader/eidReader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"eidReader.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/EIDReader/eidReader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AA2R7C,QAAA,MAAM,SAAS,GACb,gBAAgB,MAAM,EACtB,aAAa,MAAM,EACnB,cAAc,MAAM,EACpB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,KAC5C,OAAO,CACR;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAgNnE,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignalingClient.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/SignalingClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SignalingClient.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/SignalingClient.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,oBAAoB,GAC5B,OAAO,GACP,QAAQ,GACR,eAAe,GACf,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,GAAG,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;AACxE,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAE1D,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,cAAc,CAAC,CAAa;IACpC,OAAO,CAAC,cAAc,CAAC,CAAsB;IAC7C,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAGhC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,qBAAqB,EAChC,gBAAgB,CAAC,EAAE,MAAM,EACzB,cAAc,CAAC,EAAE,mBAAmB;IAS/B,OAAO,IAAI,IAAI;IA8GT,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCnE,UAAU,IAAI,IAAI;CAQ1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/crypto.utils.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"crypto.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/crypto.utils.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AAoBxC,QAAA,MAAM,aAAa,GAAU,QAAQ,MAAM,EAAE,WAAW,MAAM,oBAyC7D,CAAC;AAEF,QAAA,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,KAAK,MAAM;;;CAWhD,CAAC;AAEF,QAAA,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,KAAK,MAAM,EAAE,OAAO,MAAM,WAK/D,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deeplink.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/deeplink.utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deeplink.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/deeplink.utils.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,MAGxC,CAAC;AAEF,QAAA,MAAM,cAAc,GAAI,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,aA4C/C,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -19,6 +19,8 @@ export declare class TooManyRequestsError extends HttpClientError {
|
|
|
19
19
|
export declare class InternalServerError extends HttpClientError {
|
|
20
20
|
constructor(message?: string);
|
|
21
21
|
}
|
|
22
|
+
export declare const setSessionToken: (token: string | null) => void;
|
|
23
|
+
export declare const getSessionToken: () => string;
|
|
22
24
|
declare const _default: {
|
|
23
25
|
get: <TResponse>(url: string, simulatedResponse?: TResponse) => Promise<TResponse>;
|
|
24
26
|
post: <TResponse, TBody>(url: string, body?: TBody, simulatedResponse?: TResponse) => Promise<TResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/http-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/http-client.ts"],"names":[],"mappings":"AAOA,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,iBAAkB,SAAQ,eAAe;gBACxC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,cAAe,SAAQ,eAAe;gBACrC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,aAAc,SAAQ,eAAe;gBACpC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,eAAgB,SAAQ,eAAe;gBACtC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,oBAAqB,SAAQ,eAAe;gBAC3C,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,OAAO,CAAC,EAAE,MAAM;CAG7B;AAOD,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,GAAG,IAAI,SAEnD,CAAC;AAEF,eAAO,MAAM,eAAe,cAAqB,CAAC;;UAmKrC,SAAS,OAAO,MAAM,sBAAsB,SAAS;WASpD,SAAS,EAAE,KAAK,OACvB,MAAM,SACJ,KAAK,sBACQ,SAAS;UAKlB,SAAS,EAAE,KAAK,OACtB,MAAM,SACJ,KAAK,sBACQ,SAAS;UAKlB,SAAS,OAAO,MAAM,sBAAsB,SAAS;kBASvC,MAAM,QAAQ,IAAI;;AAe7C,wBAA+C"}
|
|
@@ -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;
|
|
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;AA2CpD;;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;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;sBAOwB,MAAM,KAAG,MAAM;2BA8gC7B,MAAM,gBACF,OAAO,KACnB,mBAAmB;0CA2KuB,MAAM,KAAG,mBAAmB;wCAt/B9B,MAAM,KAAG,MAAM,EAAE,EAAE;wCAggCnB,MAAM,KAAG,MAAM;gCAmDvB,MAAM;;;;;+BA91BP,MAAM,KAAG,OAAO;iCA4Bd,MAAM,KAAG,MAAM;wCAg1BR,MAAM,GAAG,IAAI,KAAG,MAAM,GAAG,IAAI;;AAgBxE,wBAUE"}
|
|
@@ -31,6 +31,12 @@ export interface MRZFrameAggregatorOptions {
|
|
|
31
31
|
stabilityTarget?: number;
|
|
32
32
|
/** Drop the running tallies after this many frames to bound memory. Default 60. */
|
|
33
33
|
maxFrames?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Minimum winning vote margin a contested cell needs before the consensus can
|
|
36
|
+
* be considered stable. Higher = more frames required to resolve a look-alike
|
|
37
|
+
* ambiguity (A↔4, S↔5) before accepting. Default 2.
|
|
38
|
+
*/
|
|
39
|
+
minMargin?: number;
|
|
34
40
|
}
|
|
35
41
|
/**
|
|
36
42
|
* Stateful aggregator. Feed it one frame's OCR text at a time via `addFrame`;
|
|
@@ -40,6 +46,7 @@ export interface MRZFrameAggregatorOptions {
|
|
|
40
46
|
export declare class MRZFrameAggregator {
|
|
41
47
|
private readonly stabilityTarget;
|
|
42
48
|
private readonly maxFrames;
|
|
49
|
+
private readonly minMargin;
|
|
43
50
|
private tallies;
|
|
44
51
|
private frameCount;
|
|
45
52
|
private lastConsensusMrz;
|
|
@@ -67,6 +74,21 @@ export declare class MRZFrameAggregator {
|
|
|
67
74
|
addFrame(input: MRZFrameInput): MRZConsensus;
|
|
68
75
|
/** Halve all tallies to bound memory while preserving relative vote ratios. */
|
|
69
76
|
private decay;
|
|
77
|
+
/**
|
|
78
|
+
* Is every CONTESTED cell of this format decided by a clear margin?
|
|
79
|
+
*
|
|
80
|
+
* A cell is contested when more than one distinct character has received votes
|
|
81
|
+
* (e.g. position 5 of a Turkish doc number gets both "A" and the look-alike
|
|
82
|
+
* "4"). Per-character voting alone reports the consensus "stable" the instant an
|
|
83
|
+
* early misread takes a 1-vote lead and stays unchanged — so a transient
|
|
84
|
+
* "A"→"4" confusion locks in before the correct glyph accumulates enough votes.
|
|
85
|
+
*
|
|
86
|
+
* Requiring the winner to lead the runner-up by `minMargin` weight on every
|
|
87
|
+
* contested cell defers stability until the vote has genuinely settled: a 2-vs-1
|
|
88
|
+
* early lead is NOT confident; a 4-vs-1 (or clean uncontested) reading is. This
|
|
89
|
+
* is what turns "looks valid this frame" into "the camera agrees across frames".
|
|
90
|
+
*/
|
|
91
|
+
private consensusIsConfident;
|
|
70
92
|
/** Read out the winning character per cell for a format. */
|
|
71
93
|
private consensusLines;
|
|
72
94
|
/** Best consensus across all formats seen, validated with check digits. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mrzFrameAggregator.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/mrzFrameAggregator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAkCvD,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,kFAAkF;IAClF,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,+EAA+E;IAC/E,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACvC,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkFD;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,YAAY,CAAK;IAEzB,OAAO,CAAC,cAAc,CAAK;gBAEf,OAAO,GAAE,yBAA8B;
|
|
1
|
+
{"version":3,"file":"mrzFrameAggregator.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/mrzFrameAggregator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAkCvD,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,kFAAkF;IAClF,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,+EAA+E;IAC/E,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACvC,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkFD;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAInC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,YAAY,CAAK;IAEzB,OAAO,CAAC,cAAc,CAAK;gBAEf,OAAO,GAAE,yBAA8B;IAMnD,KAAK,IAAI,IAAI;IAQb;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IA0B5B,iCAAiC;IACjC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,OAAO,CAAC,WAAW;IAUnB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY;IAuC5C,+EAA+E;IAC/E,OAAO,CAAC,KAAK;IAab;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,oBAAoB;IAe5B,4DAA4D;IAC5D,OAAO,CAAC,cAAc;IA8BtB,2EAA2E;IAC3E,gBAAgB,IAAI,YAAY;CA4DjC;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/promise.utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"promise.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/promise.utils.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,YAAY,GAAU,CAAC,EAC3B,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,aAAY,MAAU,EACtB,QAAO,MAAa,KACnB,OAAO,CAAC,CAAC,CAgCX,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shuffle.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/shuffle.utils.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AAKxC,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,KAAG,CAAC,EAS9C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsService.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Services/AnalyticsService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,gCAAgC,CAAC;AAGxC,OAAO,EACL,sBAAsB,EAEvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,eAAe,EAEf,sBAAsB,EAEtB,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAElC,cAAM,gBAAiB,YAAW,iBAAiB;IACjD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,aAAa,CAAkB;IAGvC,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgE;IAChG,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,oBAAoB,CAAuC;IAGnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAI9B;IAEF;;OAEG;IACH,cAAc,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAI5C;;;OAGG;IACG,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCxD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;YACW,kBAAkB;IAuBhC;;OAEG;YACW,YAAY;IAkB1B;;OAEG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,sBAAsB,EAChC,QAAQ,CAAC,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC;IAyDhB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2C5B;;OAEG;YACW,kBAAkB;
|
|
1
|
+
{"version":3,"file":"AnalyticsService.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Services/AnalyticsService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,gCAAgC,CAAC;AAGxC,OAAO,EACL,sBAAsB,EAEvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,eAAe,EAEf,sBAAsB,EAEtB,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAElC,cAAM,gBAAiB,YAAW,iBAAiB;IACjD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,aAAa,CAAkB;IAGvC,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgE;IAChG,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,oBAAoB,CAAuC;IAGnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAI9B;IAEF;;OAEG;IACH,cAAc,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAI5C;;;OAGG;IACG,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCxD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;YACW,kBAAkB;IAuBhC;;OAEG;YACW,YAAY;IAkB1B;;OAEG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,sBAAsB,EAChC,QAAQ,CAAC,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC;IAyDhB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2C5B;;OAEG;YACW,kBAAkB;IAkEhC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;YACW,iBAAiB;IAiC/B;;OAEG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMtC;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAgGzB;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataUploadService.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Services/DataUploadService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"DataUploadService.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Services/DataUploadService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAQrC;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,MAAM;YAKb,0BAA0B;IAexC;;OAEG;IACG,kBAAkB,CACtB,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,uBAAuB,EACxC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAwDhB;;OAEG;IACG,WAAW,CACf,gBAAgB,EAAE,MAAM,EACxB,eAAe,CAAC,EAAE,uBAAuB,EACzC,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC;IA0JhB;;OAEG;IACG,mBAAmB,CACvB,kBAAkB,EAAE,kBAAkB,EACtC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACtC,OAAO,CAAC,OAAO,CAAC;IAkGnB,OAAO,CAAC,iBAAiB;CAY1B"}
|