@trustchex/react-native-sdk 1.409.0 → 1.472.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/android/src/main/java/com/trustchex/reactnativesdk/TrustchexSDKModule.kt +2 -8
- package/android/src/main/java/com/trustchex/reactnativesdk/camera/TrustchexCameraView.kt +102 -4
- package/ios/Camera/TrustchexCameraView.swift +151 -18
- package/ios/Permission/PermissionModule.m +22 -0
- package/ios/Permission/PermissionModule.swift +67 -0
- package/lib/module/Screens/Debug/NFCScanTestScreen.js +635 -0
- package/lib/module/Screens/Dynamic/ContractAcceptanceScreen.js +1 -4
- package/lib/module/Screens/Dynamic/IdentityDocumentEIDScanningScreen.js +17 -4
- package/lib/module/Screens/Dynamic/LivenessDetectionScreen.js +125 -25
- package/lib/module/Screens/Dynamic/VerbalConsentScreen.js +1079 -0
- package/lib/module/Screens/Dynamic/VideoCallScreen.js +10 -13
- package/lib/module/Screens/Static/ResultScreen.js +131 -22
- package/lib/module/Screens/Static/VerificationSessionCheckScreen.js +8 -0
- package/lib/module/Shared/Animations/recording.json +1 -0
- package/lib/module/Shared/Components/DebugNavigationPanel.js +69 -71
- package/lib/module/Shared/Components/EIDScanner.js +222 -115
- package/lib/module/Shared/Components/FaceCamera.js +14 -8
- package/lib/module/Shared/Components/IdentityDocumentCamera.flows.js +5 -3
- package/lib/module/Shared/Components/IdentityDocumentCamera.js +60 -42
- package/lib/module/Shared/Components/IdentityDocumentCamera.utils.js +13 -4
- package/lib/module/Shared/Components/NavigationManager.js +24 -16
- package/lib/module/Shared/EIDReader/aesSecureMessagingWrapper.js +51 -0
- package/lib/module/Shared/EIDReader/apduLevelPACECapable.js +3 -0
- package/lib/module/Shared/EIDReader/bacKey.js +16 -2
- package/lib/module/Shared/EIDReader/eidReader.js +354 -13
- package/lib/module/Shared/EIDReader/eidService.js +25 -1
- package/lib/module/Shared/EIDReader/nfcManagerCardService.js +4 -7
- package/lib/module/Shared/EIDReader/paceInfo.js +85 -0
- package/lib/module/Shared/EIDReader/paceKeySpec.js +51 -0
- package/lib/module/Shared/EIDReader/protocol/paceAPDUSender.js +100 -0
- package/lib/module/Shared/EIDReader/protocol/paceProtocol.js +655 -0
- package/lib/module/Shared/EIDReader/protocol/paceResult.js +37 -0
- package/lib/module/Shared/EIDReader/secureMessagingWrapper.js +27 -4
- package/lib/module/Shared/EIDReader/smartcards/commandAPDU.js +2 -1
- package/lib/module/Shared/EIDReader/tlv/tlv.helpers.js +1 -1
- package/lib/module/Shared/EIDReader/tlv/tlv.utils.js +6 -3
- package/lib/module/Shared/EIDReader/utils/aesCrypto.utils.js +189 -0
- package/lib/module/Shared/Libs/PERMISSIONS_MANAGER.md +268 -0
- package/lib/module/Shared/Libs/analytics.utils.js +4 -0
- package/lib/module/Shared/Libs/contains.js +1 -40
- package/lib/module/Shared/Libs/country-display.utils.js +34 -0
- package/lib/module/Shared/Libs/demo.utils.js +8 -0
- package/lib/module/Shared/Libs/index.js +20 -0
- package/lib/module/Shared/Libs/mrz.utils.js +3 -2
- package/lib/module/Shared/Libs/permissions.utils.js +199 -0
- package/lib/module/Shared/Libs/status-bar.utils.js +4 -2
- package/lib/module/Shared/Types/analytics.types.js +2 -0
- package/lib/module/Translation/Resources/en.js +42 -2
- package/lib/module/Translation/Resources/tr.js +42 -2
- package/lib/module/Trustchex.js +54 -20
- package/lib/module/version.js +1 -1
- package/lib/typescript/src/Screens/Debug/NFCScanTestScreen.d.ts +3 -0
- package/lib/typescript/src/Screens/Debug/NFCScanTestScreen.d.ts.map +1 -0
- package/lib/typescript/src/Screens/Dynamic/ContractAcceptanceScreen.d.ts.map +1 -1
- package/lib/typescript/src/Screens/Dynamic/IdentityDocumentEIDScanningScreen.d.ts.map +1 -1
- package/lib/typescript/src/Screens/Dynamic/LivenessDetectionScreen.d.ts.map +1 -1
- package/lib/typescript/src/Screens/Dynamic/VerbalConsentScreen.d.ts +3 -0
- package/lib/typescript/src/Screens/Dynamic/VerbalConsentScreen.d.ts.map +1 -0
- package/lib/typescript/src/Screens/Dynamic/VideoCallScreen.d.ts.map +1 -1
- package/lib/typescript/src/Screens/Static/ResultScreen.d.ts.map +1 -1
- package/lib/typescript/src/Screens/Static/VerificationSessionCheckScreen.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Components/DebugNavigationPanel.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Components/EIDScanner.d.ts.map +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/IdentityDocumentCamera.flows.d.ts +1 -1
- package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.flows.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.utils.d.ts +5 -0
- package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.utils.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Components/NavigationManager.d.ts.map +1 -1
- package/lib/typescript/src/Shared/EIDReader/aesSecureMessagingWrapper.d.ts +18 -0
- package/lib/typescript/src/Shared/EIDReader/aesSecureMessagingWrapper.d.ts.map +1 -0
- package/lib/typescript/src/Shared/EIDReader/apduLevelPACECapable.d.ts +23 -0
- package/lib/typescript/src/Shared/EIDReader/apduLevelPACECapable.d.ts.map +1 -0
- package/lib/typescript/src/Shared/EIDReader/bacKey.d.ts +6 -0
- package/lib/typescript/src/Shared/EIDReader/bacKey.d.ts.map +1 -1
- package/lib/typescript/src/Shared/EIDReader/eidReader.d.ts.map +1 -1
- package/lib/typescript/src/Shared/EIDReader/eidService.d.ts +9 -0
- package/lib/typescript/src/Shared/EIDReader/eidService.d.ts.map +1 -1
- package/lib/typescript/src/Shared/EIDReader/nfcManagerCardService.d.ts.map +1 -1
- package/lib/typescript/src/Shared/EIDReader/paceInfo.d.ts +50 -0
- package/lib/typescript/src/Shared/EIDReader/paceInfo.d.ts.map +1 -0
- package/lib/typescript/src/Shared/EIDReader/paceKeySpec.d.ts +30 -0
- package/lib/typescript/src/Shared/EIDReader/paceKeySpec.d.ts.map +1 -0
- package/lib/typescript/src/Shared/EIDReader/protocol/paceAPDUSender.d.ts +17 -0
- package/lib/typescript/src/Shared/EIDReader/protocol/paceAPDUSender.d.ts.map +1 -0
- package/lib/typescript/src/Shared/EIDReader/protocol/paceProtocol.d.ts +105 -0
- package/lib/typescript/src/Shared/EIDReader/protocol/paceProtocol.d.ts.map +1 -0
- package/lib/typescript/src/Shared/EIDReader/protocol/paceResult.d.ts +24 -0
- package/lib/typescript/src/Shared/EIDReader/protocol/paceResult.d.ts.map +1 -0
- package/lib/typescript/src/Shared/EIDReader/secureMessagingWrapper.d.ts +15 -0
- package/lib/typescript/src/Shared/EIDReader/secureMessagingWrapper.d.ts.map +1 -1
- package/lib/typescript/src/Shared/EIDReader/smartcards/commandAPDU.d.ts.map +1 -1
- package/lib/typescript/src/Shared/EIDReader/tlv/tlv.utils.d.ts.map +1 -1
- package/lib/typescript/src/Shared/EIDReader/utils/aesCrypto.utils.d.ts +39 -0
- package/lib/typescript/src/Shared/EIDReader/utils/aesCrypto.utils.d.ts.map +1 -0
- package/lib/typescript/src/Shared/Libs/analytics.utils.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/contains.d.ts +0 -7
- package/lib/typescript/src/Shared/Libs/contains.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/country-display.utils.d.ts +2 -0
- package/lib/typescript/src/Shared/Libs/country-display.utils.d.ts.map +1 -0
- package/lib/typescript/src/Shared/Libs/demo.utils.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/http-client.d.ts +1 -1
- package/lib/typescript/src/Shared/Libs/http-client.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/index.d.ts +20 -0
- package/lib/typescript/src/Shared/Libs/index.d.ts.map +1 -0
- package/lib/typescript/src/Shared/Libs/mrz.utils.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Libs/permissions.utils.d.ts +58 -0
- package/lib/typescript/src/Shared/Libs/permissions.utils.d.ts.map +1 -0
- package/lib/typescript/src/Shared/Libs/status-bar.utils.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Types/analytics.types.d.ts +2 -0
- package/lib/typescript/src/Shared/Types/analytics.types.d.ts.map +1 -1
- package/lib/typescript/src/Shared/Types/identificationInfo.d.ts +10 -1
- package/lib/typescript/src/Shared/Types/identificationInfo.d.ts.map +1 -1
- package/lib/typescript/src/Translation/Resources/en.d.ts +41 -1
- package/lib/typescript/src/Translation/Resources/en.d.ts.map +1 -1
- package/lib/typescript/src/Translation/Resources/tr.d.ts +41 -1
- package/lib/typescript/src/Translation/Resources/tr.d.ts.map +1 -1
- package/lib/typescript/src/Trustchex.d.ts.map +1 -1
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +7 -4
- package/src/Screens/Debug/NFCScanTestScreen.tsx +692 -0
- package/src/Screens/Dynamic/ContractAcceptanceScreen.tsx +1 -4
- package/src/Screens/Dynamic/IdentityDocumentEIDScanningScreen.tsx +21 -4
- package/src/Screens/Dynamic/LivenessDetectionScreen.tsx +165 -24
- package/src/Screens/Dynamic/VerbalConsentScreen.tsx +1401 -0
- package/src/Screens/Dynamic/VideoCallScreen.tsx +11 -20
- package/src/Screens/Static/ResultScreen.tsx +187 -31
- package/src/Screens/Static/VerificationSessionCheckScreen.tsx +9 -0
- package/src/Shared/Animations/recording.json +1 -0
- package/src/Shared/Components/DebugNavigationPanel.tsx +73 -48
- package/src/Shared/Components/EIDScanner.tsx +280 -119
- package/src/Shared/Components/FaceCamera.tsx +19 -16
- package/src/Shared/Components/IdentityDocumentCamera.flows.ts +7 -4
- package/src/Shared/Components/IdentityDocumentCamera.tsx +206 -191
- package/src/Shared/Components/IdentityDocumentCamera.utils.ts +13 -4
- package/src/Shared/Components/NavigationManager.tsx +27 -18
- package/src/Shared/EIDReader/aesSecureMessagingWrapper.ts +69 -0
- package/src/Shared/EIDReader/apduLevelPACECapable.ts +34 -0
- package/src/Shared/EIDReader/bacKey.ts +24 -8
- package/src/Shared/EIDReader/eidReader.ts +398 -12
- package/src/Shared/EIDReader/eidService.ts +49 -1
- package/src/Shared/EIDReader/nfcManagerCardService.ts +4 -6
- package/src/Shared/EIDReader/paceInfo.ts +159 -0
- package/src/Shared/EIDReader/paceKeySpec.ts +56 -0
- package/src/Shared/EIDReader/protocol/paceAPDUSender.ts +163 -0
- package/src/Shared/EIDReader/protocol/paceProtocol.ts +946 -0
- package/src/Shared/EIDReader/protocol/paceResult.ts +62 -0
- package/src/Shared/EIDReader/secureMessagingWrapper.ts +28 -10
- package/src/Shared/EIDReader/smartcards/commandAPDU.ts +2 -1
- package/src/Shared/EIDReader/tlv/tlv.helpers.ts +1 -1
- package/src/Shared/EIDReader/tlv/tlv.utils.ts +8 -5
- package/src/Shared/EIDReader/utils/aesCrypto.utils.ts +217 -0
- package/src/Shared/Libs/PERMISSIONS_MANAGER.md +268 -0
- package/src/Shared/Libs/analytics.utils.ts +4 -0
- package/src/Shared/Libs/contains.ts +0 -53
- package/src/Shared/Libs/country-display.utils.ts +55 -0
- package/src/Shared/Libs/crypto.utils.ts +2 -2
- package/src/Shared/Libs/demo.utils.ts +10 -0
- package/src/Shared/Libs/http-client.ts +12 -4
- package/src/Shared/Libs/index.ts +63 -0
- package/src/Shared/Libs/mrz.utils.ts +3 -2
- package/src/Shared/Libs/permissions.utils.ts +251 -0
- package/src/Shared/Libs/status-bar.utils.ts +4 -2
- package/src/Shared/Services/VideoSessionService.ts +1 -1
- package/src/Shared/Types/analytics.types.ts +2 -0
- package/src/Shared/Types/identificationInfo.ts +11 -0
- package/src/Translation/Resources/en.ts +64 -3
- package/src/Translation/Resources/tr.ts +63 -3
- package/src/Trustchex.tsx +53 -17
- package/src/version.ts +1 -1
|
@@ -108,8 +108,9 @@ const fixMRZ = rawText => {
|
|
|
108
108
|
// Must contain filler characters
|
|
109
109
|
if (!/<+/.test(line)) return false;
|
|
110
110
|
|
|
111
|
-
//
|
|
112
|
-
|
|
111
|
+
// Lines starting with a valid MRZ document code (ICAO 9303):
|
|
112
|
+
// I (ID cards), A (residence permits, admin docs), C (crew), P (passport), V (visa)
|
|
113
|
+
if (/^[IACPV][<A-Z]/.test(line)) return true;
|
|
113
114
|
|
|
114
115
|
// Or lines with numbers and fillers (second line of TD1: birth date, expiry, etc.)
|
|
115
116
|
if (/\d{5,}/.test(line) && /<{3,}/.test(line)) return true;
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Platform, NativeModules, PermissionsAndroid } from 'react-native';
|
|
4
|
+
import { debugLog, debugError, debugWarn } from "./debug.utils.js";
|
|
5
|
+
const {
|
|
6
|
+
PermissionModule
|
|
7
|
+
} = NativeModules;
|
|
8
|
+
class PermissionManager {
|
|
9
|
+
static permissionCache = new Map();
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Request a single permission
|
|
13
|
+
*/
|
|
14
|
+
static async requestPermission(permission) {
|
|
15
|
+
try {
|
|
16
|
+
if (Platform.OS === 'android') {
|
|
17
|
+
return await this.requestAndroidPermission(permission);
|
|
18
|
+
} else {
|
|
19
|
+
return await this.requestIOSPermission(permission);
|
|
20
|
+
}
|
|
21
|
+
} catch (error) {
|
|
22
|
+
debugError('PermissionManager', `Failed to request ${permission}:`, error);
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Request multiple permissions at once
|
|
29
|
+
*/
|
|
30
|
+
static async requestPermissions(permissions) {
|
|
31
|
+
const results = new Map();
|
|
32
|
+
if (Platform.OS === 'android') {
|
|
33
|
+
const androidPermissions = permissions.map(p => this.permissionTypeToAndroid(p));
|
|
34
|
+
const granted = await PermissionsAndroid.requestMultiple(androidPermissions);
|
|
35
|
+
permissions.forEach((p, i) => {
|
|
36
|
+
const isGranted = granted[androidPermissions[i]] === PermissionsAndroid.RESULTS.GRANTED;
|
|
37
|
+
results.set(p, isGranted);
|
|
38
|
+
});
|
|
39
|
+
} else {
|
|
40
|
+
for (const permission of permissions) {
|
|
41
|
+
const isGranted = await this.requestIOSPermission(permission);
|
|
42
|
+
results.set(permission, isGranted);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return results;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Check if a permission is granted (without requesting)
|
|
50
|
+
*/
|
|
51
|
+
static async checkPermission(permission) {
|
|
52
|
+
try {
|
|
53
|
+
if (Platform.OS === 'android') {
|
|
54
|
+
const androidPerm = this.permissionTypeToAndroid(permission);
|
|
55
|
+
const result = await PermissionsAndroid.check(androidPerm);
|
|
56
|
+
return result;
|
|
57
|
+
} else {
|
|
58
|
+
return await this.checkIOSPermission(permission);
|
|
59
|
+
}
|
|
60
|
+
} catch (error) {
|
|
61
|
+
debugError('PermissionManager', `Failed to check ${permission} permission:`, error);
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Request permission with user-friendly error handling
|
|
68
|
+
*/
|
|
69
|
+
static async requestWithFallback(permission, onDenied) {
|
|
70
|
+
const isGranted = await this.requestPermission(permission);
|
|
71
|
+
if (!isGranted) {
|
|
72
|
+
debugLog('PermissionManager', `${permission} permission denied`);
|
|
73
|
+
onDenied?.();
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Convenience method: Request camera and microphone together (for video recording)
|
|
81
|
+
*/
|
|
82
|
+
static async requestCameraAndMicrophone() {
|
|
83
|
+
const permissions = await this.requestPermissions(['camera', 'microphone']);
|
|
84
|
+
const hasCamera = permissions.get('camera') ?? false;
|
|
85
|
+
const hasMicrophone = permissions.get('microphone') ?? false;
|
|
86
|
+
return hasCamera && hasMicrophone;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Convenience method: Request camera only
|
|
91
|
+
*/
|
|
92
|
+
static async requestCamera() {
|
|
93
|
+
return this.requestPermission('camera');
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Convenience method: Request microphone only
|
|
98
|
+
*/
|
|
99
|
+
static async requestMicrophone() {
|
|
100
|
+
return this.requestPermission('microphone');
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Convenience method: Request NFC only
|
|
105
|
+
*/
|
|
106
|
+
static async requestNFC() {
|
|
107
|
+
return this.requestPermission('nfc');
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Check if camera and microphone are both accessible
|
|
112
|
+
*/
|
|
113
|
+
static async hasCameraAndMicrophone() {
|
|
114
|
+
const camera = await this.checkPermission('camera');
|
|
115
|
+
const microphone = await this.checkPermission('microphone');
|
|
116
|
+
return camera && microphone;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Check if camera is accessible
|
|
121
|
+
*/
|
|
122
|
+
static async hasCamera() {
|
|
123
|
+
return this.checkPermission('camera');
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Check if microphone is accessible
|
|
128
|
+
*/
|
|
129
|
+
static async hasMicrophone() {
|
|
130
|
+
return this.checkPermission('microphone');
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Check if NFC is accessible
|
|
135
|
+
*/
|
|
136
|
+
static async hasNFC() {
|
|
137
|
+
return this.checkPermission('nfc');
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Private helper methods
|
|
141
|
+
|
|
142
|
+
static permissionTypeToAndroid(permission) {
|
|
143
|
+
const map = {
|
|
144
|
+
camera: PermissionsAndroid.PERMISSIONS.CAMERA,
|
|
145
|
+
microphone: PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,
|
|
146
|
+
nfc: 'android.permission.NFC'
|
|
147
|
+
};
|
|
148
|
+
return map[permission];
|
|
149
|
+
}
|
|
150
|
+
static async requestAndroidPermission(permission) {
|
|
151
|
+
const androidPerm = this.permissionTypeToAndroid(permission);
|
|
152
|
+
const result = await PermissionsAndroid.request(androidPerm);
|
|
153
|
+
return result === PermissionsAndroid.RESULTS.GRANTED;
|
|
154
|
+
}
|
|
155
|
+
static async requestIOSPermission(permission) {
|
|
156
|
+
if (!PermissionModule) {
|
|
157
|
+
debugLog('PermissionManager', 'PermissionModule not available, assuming permission granted');
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
switch (permission) {
|
|
162
|
+
case 'camera':
|
|
163
|
+
return await PermissionModule.requestCameraPermission();
|
|
164
|
+
case 'microphone':
|
|
165
|
+
return await PermissionModule.requestMicrophonePermission();
|
|
166
|
+
case 'nfc':
|
|
167
|
+
// NFC permission on iOS is automatically handled when NFCManager is initialized
|
|
168
|
+
// No explicit permission request needed
|
|
169
|
+
return true;
|
|
170
|
+
default:
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
} catch (error) {
|
|
174
|
+
debugError('PermissionManager', `iOS permission request failed for ${permission}:`, error);
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
static async checkIOSPermission(permission) {
|
|
179
|
+
if (!PermissionModule) {
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
switch (permission) {
|
|
184
|
+
case 'camera':
|
|
185
|
+
return await PermissionModule.checkCameraPermission?.();
|
|
186
|
+
case 'microphone':
|
|
187
|
+
return await PermissionModule.checkMicrophonePermission?.();
|
|
188
|
+
case 'nfc':
|
|
189
|
+
return true;
|
|
190
|
+
default:
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
} catch (error) {
|
|
194
|
+
debugWarn('PermissionManager', `iOS permission check failed for ${permission}`, error);
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
export default PermissionManager;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { StatusBar } from 'react-native';
|
|
3
|
+
import { Platform, StatusBar } from 'react-native';
|
|
4
4
|
import { useEffect } from 'react';
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -8,7 +8,9 @@ import { useEffect } from 'react';
|
|
|
8
8
|
*/
|
|
9
9
|
export const configureStatusBarForWhiteBackground = () => {
|
|
10
10
|
StatusBar.setBarStyle('dark-content', true);
|
|
11
|
-
|
|
11
|
+
if (Platform.OS === 'android') {
|
|
12
|
+
StatusBar.setBackgroundColor('#ffffff', true);
|
|
13
|
+
}
|
|
12
14
|
};
|
|
13
15
|
|
|
14
16
|
/**
|
|
@@ -68,6 +68,8 @@ export let AnalyticsEventName = /*#__PURE__*/function (AnalyticsEventName) {
|
|
|
68
68
|
AnalyticsEventName["IDENTITY_DOCUMENT_EID_SCAN_COMPLETED"] = "identity_document_eid_scan_completed";
|
|
69
69
|
AnalyticsEventName["LIVENESS_CHECK_STARTED"] = "liveness_check_started";
|
|
70
70
|
AnalyticsEventName["LIVENESS_CHECK_COMPLETED"] = "liveness_check_completed";
|
|
71
|
+
AnalyticsEventName["VERBAL_CONSENT_VIDEO_STARTED"] = "verbal_consent_video_started";
|
|
72
|
+
AnalyticsEventName["VERBAL_CONSENT_VIDEO_COMPLETED"] = "verbal_consent_video_completed";
|
|
71
73
|
AnalyticsEventName["VIDEO_CALL_STARTED"] = "video_call_started";
|
|
72
74
|
AnalyticsEventName["VIDEO_CALL_COMPLETED"] = "video_call_completed";
|
|
73
75
|
// NFC Scan Events (used by trackNFCScan* helpers)
|
|
@@ -41,6 +41,9 @@ export default {
|
|
|
41
41
|
'resultScreen.demoImageHologram': 'Hologram',
|
|
42
42
|
'resultScreen.demoLivenessDetection': 'Liveness Detection',
|
|
43
43
|
'resultScreen.demoVideo': 'Video',
|
|
44
|
+
'resultScreen.demoVerbalConsent': 'Verbal Consent',
|
|
45
|
+
'resultScreen.demoVerbalConsentTitle': 'Title',
|
|
46
|
+
'resultScreen.demoVerbalConsentText': 'Text',
|
|
44
47
|
'resultScreen.demoStartOver': 'Start Over',
|
|
45
48
|
'livenessDetectionScreen.guideHeader': 'Face Verification',
|
|
46
49
|
'livenessDetectionScreen.guideText': 'Please ensure the following for best results:',
|
|
@@ -64,9 +67,8 @@ export default {
|
|
|
64
67
|
'eidScannerScreen.guideHeader': 'NFC Document Scan',
|
|
65
68
|
'eidScannerScreen.guideText': 'When prompted, hold your document flat against the back of your device near the NFC antenna.',
|
|
66
69
|
'eidScannerScreen.invalidMRZFields': 'Document information could not be read. Please try again.',
|
|
67
|
-
'eidScannerScreen.imageCannotBeShown': 'Photo data found but cannot be displayed.',
|
|
68
70
|
'eidScannerScreen.faceImageNotFound': 'Photo data not found on document.',
|
|
69
|
-
'eidScannerScreen.documentCode': 'Document
|
|
71
|
+
'eidScannerScreen.documentCode': 'Document Type',
|
|
70
72
|
'eidScannerScreen.nationality': 'Nationality',
|
|
71
73
|
'eidScannerScreen.personalNumber': 'Personal Number',
|
|
72
74
|
'eidScannerScreen.documentNumber': 'Document Number',
|
|
@@ -74,7 +76,15 @@ export default {
|
|
|
74
76
|
'eidScannerScreen.surname': 'Surname',
|
|
75
77
|
'eidScannerScreen.birthDate': 'Date of Birth',
|
|
76
78
|
'eidScannerScreen.gender': 'Gender',
|
|
79
|
+
'eidScannerScreen.genderMale': 'Male',
|
|
80
|
+
'eidScannerScreen.genderFemale': 'Female',
|
|
81
|
+
'eidScannerScreen.genderUnspecified': 'Unspecified',
|
|
82
|
+
'eidScannerScreen.docTypePassport': 'Passport',
|
|
83
|
+
'eidScannerScreen.docTypeID': 'ID Card',
|
|
84
|
+
'eidScannerScreen.docTypeResidence': 'Residence Permit',
|
|
85
|
+
'eidScannerScreen.docTypeVisa': 'Visa',
|
|
77
86
|
'eidScannerScreen.expirationDate': 'Expiration Date',
|
|
87
|
+
'eidScannerScreen.issuingState': 'Issuing State',
|
|
78
88
|
'eidScannerScreen.mrzText': 'MRZ Text',
|
|
79
89
|
'eidScannerScreen.nfcNotSupported': 'This device does not support NFC functionality.',
|
|
80
90
|
'eidScannerScreen.nfcNotEnabled': 'NFC is disabled on this device. Enable it in settings.',
|
|
@@ -147,6 +157,36 @@ export default {
|
|
|
147
157
|
'videoCallScreen.closeSessionHint': 'You can close this session and start a new verification',
|
|
148
158
|
'videoCallScreen.agentInstructions': 'Instructions from Agent',
|
|
149
159
|
'videoCallScreen.callNotCompleted': 'Video call was not completed. This step is required to proceed.',
|
|
160
|
+
'verbalConsentVideoScreen.title': 'Verbal Consent',
|
|
161
|
+
'verbalConsentVideoScreen.description': 'Read the text below clearly while recording your video.',
|
|
162
|
+
'verbalConsentVideoScreen.guideHeader': 'Prepare for verbal consent recording',
|
|
163
|
+
'verbalConsentVideoScreen.guideText': 'Before you start recording, please ensure the following:',
|
|
164
|
+
'verbalConsentVideoScreen.guidePoint1': 'Stay in a quiet environment with minimal background noise',
|
|
165
|
+
'verbalConsentVideoScreen.guidePoint2': 'Keep your full face visible in good lighting',
|
|
166
|
+
'verbalConsentVideoScreen.guidePoint3': 'Read the consent text clearly and without rushing',
|
|
167
|
+
'verbalConsentVideoScreen.guidePoint4': 'Keep your phone steady until recording completes',
|
|
168
|
+
'verbalConsentVideoScreen.defaultConsentText': 'I confirm my identity and give my explicit consent to the processing of my personal data for digital identity verification. I acknowledge that my biometric data will be used solely for this purpose. I understand that I can withdraw this consent at any time.',
|
|
169
|
+
'verbalConsentVideoScreen.startRecording': 'Start Recording',
|
|
170
|
+
'verbalConsentVideoScreen.stopRecording': 'Stop Recording',
|
|
171
|
+
'verbalConsentVideoScreen.recordAgain': 'Record Again',
|
|
172
|
+
'verbalConsentVideoScreen.tryAgain': 'Try Again',
|
|
173
|
+
'verbalConsentVideoScreen.submit': 'Continue',
|
|
174
|
+
'verbalConsentVideoScreen.recordingProgress': 'Recording: {{current}}s',
|
|
175
|
+
'verbalConsentVideoScreen.readNowPrompt': 'Read the text aloud — touch screen to pause.',
|
|
176
|
+
'verbalConsentVideoScreen.scrollReadStopHint': 'Scroll to the end to enable Stop Recording.',
|
|
177
|
+
'verbalConsentVideoScreen.scrollCompletedStopHint': 'Great. You reached the end. You can stop recording after finishing the full text.',
|
|
178
|
+
'verbalConsentVideoScreen.recordingIndicator': 'Recording',
|
|
179
|
+
'verbalConsentVideoScreen.recordingStartedBanner': 'Recording started. Read the full text and scroll to the end.',
|
|
180
|
+
'verbalConsentVideoScreen.keepHeadInCirclePrompt': 'Place your head inside the circle and keep it there until recording is complete.',
|
|
181
|
+
'verbalConsentVideoScreen.readThenStopPrompt': 'Read the text shown on screen, then stop recording.',
|
|
182
|
+
'verbalConsentVideoScreen.readProgress': 'Read progress (estimated): {{current}}/{{target}}s',
|
|
183
|
+
'verbalConsentVideoScreen.stopHintPending': 'Keep reading the full text before stopping.',
|
|
184
|
+
'verbalConsentVideoScreen.stopHintReady': 'Looks complete. You can stop recording now.',
|
|
185
|
+
'verbalConsentVideoScreen.faceAligned': 'Face aligned. You can start recording.',
|
|
186
|
+
'verbalConsentVideoScreen.previewTitle': 'Review your recording and make sure the text is clear before continuing.',
|
|
187
|
+
'verbalConsentVideoScreen.analytics.recordingFailed': 'Video recording failed',
|
|
188
|
+
'verbalConsentVideoScreen.analytics.identificationIdMissing': 'Identification ID is missing before upload',
|
|
189
|
+
'verbalConsentVideoScreen.analytics.uploadFailed': 'Consent video upload failed',
|
|
150
190
|
'navigationManager.skipStepWarning': 'Completing this step is recommended for successful verification. Skip anyway?',
|
|
151
191
|
'navigationManager.skipStepLabel': 'Skip This Step'
|
|
152
192
|
};
|
|
@@ -41,6 +41,9 @@ export default {
|
|
|
41
41
|
'resultScreen.demoImageHologram': 'Hologram',
|
|
42
42
|
'resultScreen.demoLivenessDetection': 'Canlılık Tespiti',
|
|
43
43
|
'resultScreen.demoVideo': 'Video',
|
|
44
|
+
'resultScreen.demoVerbalConsent': 'Sözlü onay',
|
|
45
|
+
'resultScreen.demoVerbalConsentTitle': 'Başlık',
|
|
46
|
+
'resultScreen.demoVerbalConsentText': 'Metin',
|
|
44
47
|
'resultScreen.demoStartOver': 'Baştan Başla',
|
|
45
48
|
'livenessDetectionScreen.guideHeader': 'Yüz Doğrulaması',
|
|
46
49
|
'livenessDetectionScreen.guideText': 'En iyi sonuç için lütfen şunları sağlayın:',
|
|
@@ -64,9 +67,8 @@ export default {
|
|
|
64
67
|
'eidScannerScreen.guideHeader': 'NFC Belge Taraması',
|
|
65
68
|
'eidScannerScreen.guideText': 'İstendiğinde, belgenizi cihazınızın arka tarafındaki NFC antenine düz bir şekilde yaklaştırın.',
|
|
66
69
|
'eidScannerScreen.invalidMRZFields': 'Belge bilgileri okunamadı. Lütfen tekrar deneyin.',
|
|
67
|
-
'eidScannerScreen.imageCannotBeShown': 'Fotoğraf verisi bulundu ancak gösterilemiyor.',
|
|
68
70
|
'eidScannerScreen.faceImageNotFound': 'Belgede fotoğraf verisi bulunamadı.',
|
|
69
|
-
'eidScannerScreen.documentCode': 'Belge
|
|
71
|
+
'eidScannerScreen.documentCode': 'Belge Türü',
|
|
70
72
|
'eidScannerScreen.nationality': 'Uyruk',
|
|
71
73
|
'eidScannerScreen.personalNumber': 'Vatandaşlık No',
|
|
72
74
|
'eidScannerScreen.documentNumber': 'Belge No',
|
|
@@ -74,7 +76,15 @@ export default {
|
|
|
74
76
|
'eidScannerScreen.surname': 'Soyad',
|
|
75
77
|
'eidScannerScreen.birthDate': 'Doğum Tarihi',
|
|
76
78
|
'eidScannerScreen.gender': 'Cinsiyet',
|
|
79
|
+
'eidScannerScreen.genderMale': 'Erkek',
|
|
80
|
+
'eidScannerScreen.genderFemale': 'Kadın',
|
|
81
|
+
'eidScannerScreen.genderUnspecified': 'Belirtilmemiş',
|
|
82
|
+
'eidScannerScreen.docTypePassport': 'Pasaport',
|
|
83
|
+
'eidScannerScreen.docTypeID': 'Kimlik Kartı',
|
|
84
|
+
'eidScannerScreen.docTypeResidence': 'Oturma İzni',
|
|
85
|
+
'eidScannerScreen.docTypeVisa': 'Vize',
|
|
77
86
|
'eidScannerScreen.expirationDate': 'Geçerlilik Tarihi',
|
|
87
|
+
'eidScannerScreen.issuingState': 'Veren Ülke',
|
|
78
88
|
'eidScannerScreen.mrzText': 'MRZ Metni',
|
|
79
89
|
'eidScannerScreen.nfcNotSupported': 'Bu cihaz NFC işlevini desteklememektedir.',
|
|
80
90
|
'eidScannerScreen.nfcNotEnabled': 'Cihazda NFC devre dışı. Lütfen ayarlardan etkinleştirin.',
|
|
@@ -147,6 +157,36 @@ export default {
|
|
|
147
157
|
'videoCallScreen.closeSessionHint': 'Bu oturumu kapatıp yeni bir doğrulama başlatabilirsiniz',
|
|
148
158
|
'videoCallScreen.agentInstructions': 'Temsilciden Talimatlar',
|
|
149
159
|
'videoCallScreen.callNotCompleted': 'Görüntülü görüşme tamamlanmadı. Devam etmek için bu adım zorunludur.',
|
|
160
|
+
'verbalConsentVideoScreen.title': 'Sözlü Onay',
|
|
161
|
+
'verbalConsentVideoScreen.description': 'Aşağıdaki metni net bir şekilde okuyarak videonuzu kaydedin.',
|
|
162
|
+
'verbalConsentVideoScreen.guideHeader': 'Sözlü onay kaydı için hazırlanın',
|
|
163
|
+
'verbalConsentVideoScreen.guideText': 'Kayda başlamadan önce lütfen aşağıdakileri sağlayın:',
|
|
164
|
+
'verbalConsentVideoScreen.guidePoint1': 'Arka plan gürültüsünün az olduğu sessiz bir ortam seçin',
|
|
165
|
+
'verbalConsentVideoScreen.guidePoint2': 'Yüzünüzün tamamı iyi aydınlatılmış şekilde görünür olsun',
|
|
166
|
+
'verbalConsentVideoScreen.guidePoint3': 'Onay metnini net ve acele etmeden okuyun',
|
|
167
|
+
'verbalConsentVideoScreen.guidePoint4': 'Kayıt tamamlanana kadar telefonu sabit tutun',
|
|
168
|
+
'verbalConsentVideoScreen.defaultConsentText': 'Dijital kimlik doğrulama amacıyla kimliğimi teyit ediyor ve kişisel verilerimin işlenmesine açık rızamı veriyorum. Biyometrik verilerimin yalnızca kimlik doğrulama amacıyla işleneceğini kabul ediyorum. Bu onayı istediğim zaman geri çekebileceğimi biliyorum.',
|
|
169
|
+
'verbalConsentVideoScreen.startRecording': 'Kaydı Başlat',
|
|
170
|
+
'verbalConsentVideoScreen.stopRecording': 'Kaydı Durdur',
|
|
171
|
+
'verbalConsentVideoScreen.recordAgain': 'Tekrar Kaydet',
|
|
172
|
+
'verbalConsentVideoScreen.tryAgain': 'Tekrar Dene',
|
|
173
|
+
'verbalConsentVideoScreen.submit': 'Devam Et',
|
|
174
|
+
'verbalConsentVideoScreen.recordingProgress': 'Kayıt: {{current}} sn',
|
|
175
|
+
'verbalConsentVideoScreen.readNowPrompt': 'Metni sesli okuyun — duraklatmak için ekrana dokunun.',
|
|
176
|
+
'verbalConsentVideoScreen.scrollReadStopHint': 'Kaydı durdurmak için metnin sonuna kadar kaydırın.',
|
|
177
|
+
'verbalConsentVideoScreen.scrollCompletedStopHint': 'Harika. Sona ulaştınız. Metnin tamamını bitirdikten sonra kaydı durdurabilirsiniz.',
|
|
178
|
+
'verbalConsentVideoScreen.recordingIndicator': 'Kayıt',
|
|
179
|
+
'verbalConsentVideoScreen.recordingStartedBanner': 'Kayıt başladı. Metnin tamamını okuyun ve sona kadar kaydırın.',
|
|
180
|
+
'verbalConsentVideoScreen.keepHeadInCirclePrompt': 'Başınızı dairenin içine yerleştirin ve kayıt tamamlanana kadar sabit tutun.',
|
|
181
|
+
'verbalConsentVideoScreen.readThenStopPrompt': 'Ekrandaki metni okuyun, ardından kaydı durdurun.',
|
|
182
|
+
'verbalConsentVideoScreen.readProgress': 'Okuma ilerlemesi (tahmini): {{current}}/{{target}} sn',
|
|
183
|
+
'verbalConsentVideoScreen.stopHintPending': 'Kaydı durdurmadan önce metnin tamamını okuyun.',
|
|
184
|
+
'verbalConsentVideoScreen.stopHintReady': 'Metin tamamlanmış görünüyor. Kaydı şimdi durdurabilirsiniz.',
|
|
185
|
+
'verbalConsentVideoScreen.faceAligned': 'Yüz hizalaması tamam. Kayda başlayabilirsiniz.',
|
|
186
|
+
'verbalConsentVideoScreen.previewTitle': 'Devam etmeden önce kaydı kontrol edin ve metnin net olduğundan emin olun.',
|
|
187
|
+
'verbalConsentVideoScreen.analytics.recordingFailed': 'Video kaydi basarisiz oldu',
|
|
188
|
+
'verbalConsentVideoScreen.analytics.identificationIdMissing': 'Yukleme oncesinde kimlik numarasi bulunamadi',
|
|
189
|
+
'verbalConsentVideoScreen.analytics.uploadFailed': 'Sozlu onay videosu yuklenemedi',
|
|
150
190
|
'navigationManager.skipStepWarning': 'Başarılı bir doğrulama için bu adımı tamamlamanız önerilir. Yine de atlamak istiyor musunuz?',
|
|
151
191
|
'navigationManager.skipStepLabel': 'Bu Adımı Atla'
|
|
152
192
|
};
|
package/lib/module/Trustchex.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import React, { useEffect, useState, useMemo } from 'react';
|
|
3
|
+
import React, { useEffect, useState, useMemo, useRef } from 'react';
|
|
4
4
|
import { NavigationContainer } from '@react-navigation/native';
|
|
5
5
|
import { createNativeStackNavigator } from '@react-navigation/native-stack';
|
|
6
6
|
import { View, ActivityIndicator, StyleSheet } from 'react-native';
|
|
@@ -17,9 +17,11 @@ import ContractAcceptanceScreen from "./Screens/Dynamic/ContractAcceptanceScreen
|
|
|
17
17
|
import VerificationSessionCheckScreen from "./Screens/Static/VerificationSessionCheckScreen.js";
|
|
18
18
|
import QrCodeScanningScreen from "./Screens/Static/QrCodeScanningScreen.js";
|
|
19
19
|
import VideoCallScreen from "./Screens/Dynamic/VideoCallScreen.js";
|
|
20
|
+
import VerbalConsentScreen from "./Screens/Dynamic/VerbalConsentScreen.js";
|
|
20
21
|
import OTPVerificationScreen from "./Screens/Static/OTPVerificationScreen.js";
|
|
21
22
|
import MRZTestScreen from "./Screens/Debug/MRZTestScreen.js";
|
|
22
23
|
import BarcodeTestScreen from "./Screens/Debug/BarcodeTestScreen.js";
|
|
24
|
+
import NFCScanTestScreen from "./Screens/Debug/NFCScanTestScreen.js";
|
|
23
25
|
import AppContext from "./Shared/Contexts/AppContext.js";
|
|
24
26
|
import DebugNavigationPanel from "./Shared/Components/DebugNavigationPanel.js";
|
|
25
27
|
import i18n from "./Translation/index.js";
|
|
@@ -56,26 +58,52 @@ const Trustchex = ({
|
|
|
56
58
|
...DEFAULT_BRANDING,
|
|
57
59
|
...propBranding
|
|
58
60
|
}), [propBranding]);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
61
|
+
|
|
62
|
+
// Use a ref to preserve the context object across re-renders.
|
|
63
|
+
// Several parts of the codebase mutate properties directly on the context
|
|
64
|
+
// (e.g. currentWorkflowStep, workflowSteps, identificationInfo fields).
|
|
65
|
+
// A plain useMemo would create a new object on every dependency change,
|
|
66
|
+
// discarding those mutations and causing screens to see undefined values.
|
|
67
|
+
const contextRef = useRef(null);
|
|
68
|
+
const contextValue = useMemo(() => {
|
|
69
|
+
const prev = contextRef.current;
|
|
70
|
+
const value = {
|
|
71
|
+
isDemoSession,
|
|
72
|
+
baseUrl: baseUrl || '',
|
|
73
|
+
locale,
|
|
74
|
+
branding,
|
|
75
|
+
// Reuse the previous identificationInfo object so that direct
|
|
76
|
+
// mutations (sessionId, identificationId, consent, etc.) survive.
|
|
77
|
+
identificationInfo: prev?.identificationInfo ?? {
|
|
78
|
+
sessionId: sessionId || '',
|
|
79
|
+
identificationId: '',
|
|
80
|
+
consent: {
|
|
81
|
+
contractIds: [],
|
|
82
|
+
deviceInfo: ''
|
|
83
|
+
},
|
|
84
|
+
locale: propLocale || i18n.language
|
|
70
85
|
},
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
86
|
+
// Carry over mutated properties from the previous context value
|
|
87
|
+
workflowSteps: prev?.workflowSteps,
|
|
88
|
+
currentWorkflowStep: prev?.currentWorkflowStep,
|
|
89
|
+
isDebugNavigated: prev?.isDebugNavigated,
|
|
90
|
+
isTestVideoSession: prev?.isTestVideoSession,
|
|
91
|
+
onCompleted,
|
|
92
|
+
onError,
|
|
93
|
+
setSessionId,
|
|
94
|
+
setBaseUrl,
|
|
95
|
+
setIsDemoSession
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
// Update state-derived identificationInfo fields without replacing
|
|
99
|
+
// the object (so other mutated fields like identificationId survive).
|
|
100
|
+
if (sessionId) {
|
|
101
|
+
value.identificationInfo.sessionId = sessionId;
|
|
102
|
+
}
|
|
103
|
+
value.identificationInfo.locale = propLocale || i18n.language;
|
|
104
|
+
contextRef.current = value;
|
|
105
|
+
return value;
|
|
106
|
+
}, [baseUrl, locale, branding, sessionId, propLocale, onCompleted, onError, isDemoSession]);
|
|
79
107
|
|
|
80
108
|
// Initialize analytics when SDK mounts with valid session
|
|
81
109
|
useEffect(() => {
|
|
@@ -173,12 +201,18 @@ const Trustchex = ({
|
|
|
173
201
|
}), /*#__PURE__*/_jsx(Stack.Screen, {
|
|
174
202
|
name: "VideoCallScreen",
|
|
175
203
|
component: VideoCallScreen
|
|
204
|
+
}), /*#__PURE__*/_jsx(Stack.Screen, {
|
|
205
|
+
name: "VerbalConsentScreen",
|
|
206
|
+
component: VerbalConsentScreen
|
|
176
207
|
}), /*#__PURE__*/_jsx(Stack.Screen, {
|
|
177
208
|
name: "MRZTestScreen",
|
|
178
209
|
component: MRZTestScreen
|
|
179
210
|
}), /*#__PURE__*/_jsx(Stack.Screen, {
|
|
180
211
|
name: "BarcodeTestScreen",
|
|
181
212
|
component: BarcodeTestScreen
|
|
213
|
+
}), /*#__PURE__*/_jsx(Stack.Screen, {
|
|
214
|
+
name: "NFCScanTestScreen",
|
|
215
|
+
component: NFCScanTestScreen
|
|
182
216
|
})]
|
|
183
217
|
}), /*#__PURE__*/_jsx(DebugNavigationPanel, {})]
|
|
184
218
|
})
|
package/lib/module/version.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NFCScanTestScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Debug/NFCScanTestScreen.tsx"],"names":[],"mappings":"AAmCA,QAAA,MAAM,iBAAiB,+CAubtB,CAAC;AAyNF,eAAe,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContractAcceptanceScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Dynamic/ContractAcceptanceScreen.tsx"],"names":[],"mappings":"AA6BA,QAAA,MAAM,wBAAwB,+CAyK7B,CAAC;
|
|
1
|
+
{"version":3,"file":"ContractAcceptanceScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Dynamic/ContractAcceptanceScreen.tsx"],"names":[],"mappings":"AA6BA,QAAA,MAAM,wBAAwB,+CAyK7B,CAAC;AA8BF,eAAe,wBAAwB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdentityDocumentEIDScanningScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Dynamic/IdentityDocumentEIDScanningScreen.tsx"],"names":[],"mappings":"AAqBA,QAAA,MAAM,iCAAiC,+
|
|
1
|
+
{"version":3,"file":"IdentityDocumentEIDScanningScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Dynamic/IdentityDocumentEIDScanningScreen.tsx"],"names":[],"mappings":"AAqBA,QAAA,MAAM,iCAAiC,+CA4NtC,CAAC;AAoBF,eAAe,iCAAiC,CAAC"}
|
|
@@ -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":"AA2FA,QAAA,MAAM,uBAAuB,+CAy9B5B,CAAC;AA+GF,eAAe,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VerbalConsentScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Dynamic/VerbalConsentScreen.tsx"],"names":[],"mappings":"AA4DA,QAAA,MAAM,mBAAmB,+CAiiCxB,CAAC;AA2RF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoCallScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Dynamic/VideoCallScreen.tsx"],"names":[],"mappings":"AAiCA,QAAA,MAAM,eAAe,GAAI,gBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"VideoCallScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Dynamic/VideoCallScreen.tsx"],"names":[],"mappings":"AAiCA,QAAA,MAAM,eAAe,GAAI,gBAAgB,GAAG,4CAwhB3C,CAAC;AAyLF,eAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResultScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Static/ResultScreen.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ResultScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Static/ResultScreen.tsx"],"names":[],"mappings":"AAqDA,QAAA,MAAM,YAAY,+CAgiCjB,CAAC;AAqIF,eAAe,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VerificationSessionCheckScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Static/VerificationSessionCheckScreen.tsx"],"names":[],"mappings":"AAkDA,QAAA,MAAM,8BAA8B,+
|
|
1
|
+
{"version":3,"file":"VerificationSessionCheckScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Static/VerificationSessionCheckScreen.tsx"],"names":[],"mappings":"AAkDA,QAAA,MAAM,8BAA8B,+CAmUnC,CAAC;AAiHF,eAAe,8BAA8B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DebugNavigationPanel.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/DebugNavigationPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DebugNavigationPanel.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/DebugNavigationPanel.tsx"],"names":[],"mappings":"AAmCA,QAAA,MAAM,oBAAoB,+CAiezB,CAAC;AA+MF,eAAe,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EIDScanner.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/EIDScanner.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EIDScanner.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/EIDScanner.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAcpD,UAAU,eAAe;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,KACtB,IAAI,CAAC;IACV,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;AAED,QAAA,MAAM,UAAU,GAAI,6FAOjB,eAAe,4CAmpBjB,CAAC;AA4MF,eAAe,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FaceCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/FaceCamera.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FaceCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/FaceCamera.tsx"],"names":[],"mappings":"AAcA,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,4CAsTjB,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":"AAuEA,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,4CAm2E7B,CAAC;AAiIF,eAAe,sBAAsB,CAAC"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* KEY DISTINGUISHING FEATURES:
|
|
7
7
|
* =============================
|
|
8
8
|
* PASSPORT: Has MRZ on FRONT with pattern P<XXX (e.g., P<TUR, P<USA)
|
|
9
|
-
* ID CARD: Has NO MRZ on front; MRZ only on BACK with code
|
|
9
|
+
* ID CARD: Has NO MRZ on front; MRZ only on BACK with code starting with I, A, or C
|
|
10
10
|
*
|
|
11
11
|
* IMPORTANT: Both passports and ID cards have signature sections!
|
|
12
12
|
* Signature presence is NOT a distinguishing feature between document types.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdentityDocumentCamera.flows.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.flows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAUpD,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EACP,mBAAmB,GACnB,cAAc,GACd,qBAAqB,GACrB,sBAAsB,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EACP,mBAAmB,GACnB,oBAAoB,GACpB,qBAAqB,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,cAAc,GAAG,kBAAkB,GAAG,sBAAsB,CAAC;CAC3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,iBAAiB,EAAE,OAAO,EAC1B,WAAW,EAAE,OAAO,EACpB,iBAAiB,EAAE,OAAO,EAC1B,YAAY,EAAE,OAAO,GACpB,kBAAkB,CAgEpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,IAAI,EAAE,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,GACjB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"IdentityDocumentCamera.flows.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.flows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAUpD,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EACP,mBAAmB,GACnB,cAAc,GACd,qBAAqB,GACrB,sBAAsB,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EACP,mBAAmB,GACnB,oBAAoB,GACpB,qBAAqB,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,cAAc,GAAG,kBAAkB,GAAG,sBAAsB,CAAC;CAC3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,iBAAiB,EAAE,OAAO,EAC1B,WAAW,EAAE,OAAO,EACpB,iBAAiB,EAAE,OAAO,EAC1B,YAAY,EAAE,OAAO,GACpB,kBAAkB,CAgEpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,IAAI,EAAE,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,GACjB,iBAAiB,CA0EnB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,QAAQ,EAAE,OAAO,EACjB,iBAAiB,EAAE,OAAO,EAC1B,iBAAiB,EAAE,OAAO,EAC1B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,WAAW,EAAE,OAAO,GACnB,gBAAgB,CA2DlB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,oBAAoB,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,EACrE,mBAAmB,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,EACpE,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,WAAW,GAAG,cAAc,CAY9B"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { ScanStep, ScanStatus, DocumentType, Face } from './IdentityDocumentCamera.types';
|
|
2
2
|
import type { MRZFields } from '../Types/mrzFields';
|
|
3
|
+
/**
|
|
4
|
+
* Checks if a document code represents an ID card (TD1/TD2).
|
|
5
|
+
* Per ICAO 9303, valid ID card codes start with 'I', 'A', or 'C'.
|
|
6
|
+
*/
|
|
7
|
+
export declare function isIDCardDocumentCode(code: string | null | undefined): boolean;
|
|
3
8
|
/**
|
|
4
9
|
* Frame-to-screen coordinate transform using FILL_CENTER scaling
|
|
5
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdentityDocumentCamera.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IdentityDocumentCamera.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.utils.ts"],"names":[],"mappings":"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"}
|