@trustchex/react-native-sdk 1.409.0 → 1.464.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 +59 -1
- package/ios/Camera/TrustchexCameraView.swift +9 -1
- 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 +102 -23
- package/lib/module/Screens/Dynamic/VerbalConsentScreen.js +1079 -0
- package/lib/module/Screens/Dynamic/VideoCallScreen.js +3 -1
- package/lib/module/Screens/Static/ResultScreen.js +128 -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 +212 -108
- package/lib/module/Shared/Components/IdentityDocumentCamera.flows.js +5 -3
- package/lib/module/Shared/Components/IdentityDocumentCamera.js +53 -36
- 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/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/mrz.utils.js +3 -2
- 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 +41 -2
- package/lib/module/Translation/Resources/tr.js +41 -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/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/mrz.utils.d.ts.map +1 -1
- 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 +40 -1
- package/lib/typescript/src/Translation/Resources/en.d.ts.map +1 -1
- package/lib/typescript/src/Translation/Resources/tr.d.ts +40 -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 +124 -23
- package/src/Screens/Dynamic/VerbalConsentScreen.tsx +1401 -0
- package/src/Screens/Dynamic/VideoCallScreen.tsx +3 -1
- package/src/Screens/Static/ResultScreen.tsx +183 -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 +222 -111
- package/src/Shared/Components/IdentityDocumentCamera.flows.ts +7 -4
- package/src/Shared/Components/IdentityDocumentCamera.tsx +199 -184
- 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/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/mrz.utils.ts +3 -2
- 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 +63 -3
- package/src/Translation/Resources/tr.ts +62 -3
- package/src/Trustchex.tsx +53 -17
- package/src/version.ts +1 -1
|
@@ -55,7 +55,9 @@ const VideoCallScreen = ({
|
|
|
55
55
|
} else {
|
|
56
56
|
// Guide screen with white background - use dark icons
|
|
57
57
|
StatusBar.setBarStyle('dark-content', true);
|
|
58
|
-
|
|
58
|
+
if (Platform.OS === 'android') {
|
|
59
|
+
StatusBar.setBackgroundColor('#ffffff', true);
|
|
60
|
+
}
|
|
59
61
|
}
|
|
60
62
|
}, [hasGuideShown]);
|
|
61
63
|
const serviceRef = useRef(null);
|
|
@@ -11,6 +11,7 @@ import LottieView from 'lottie-react-native';
|
|
|
11
11
|
import { runWithRetry } from "../../Shared/Libs/promise.utils.js";
|
|
12
12
|
import { useStatusBarWhiteBackground } from "../../Shared/Libs/status-bar.utils.js";
|
|
13
13
|
import NavigationManager from "../../Shared/Components/NavigationManager.js";
|
|
14
|
+
import { getLocalizedCountryName } from "../../Shared/Libs/country-display.utils.js";
|
|
14
15
|
import mrzUtils from "../../Shared/Libs/mrz.utils.js";
|
|
15
16
|
import { useTranslation } from 'react-i18next';
|
|
16
17
|
import { Video as VideoCompressor } from 'react-native-compressor';
|
|
@@ -27,10 +28,12 @@ const ResultScreen = () => {
|
|
|
27
28
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
28
29
|
const [progress, setProgress] = useState(0);
|
|
29
30
|
const navigationManagerRef = React.useRef(null);
|
|
31
|
+
const hasSubmittedRef = React.useRef(false);
|
|
30
32
|
const [shouldShowDemoData, setShouldShowDemoData] = useState(false);
|
|
31
33
|
const [deviceIdentifier, setDeviceIdentifier] = useState('');
|
|
32
34
|
const {
|
|
33
|
-
t
|
|
35
|
+
t,
|
|
36
|
+
i18n
|
|
34
37
|
} = useTranslation();
|
|
35
38
|
const insets = useSafeAreaInsets();
|
|
36
39
|
|
|
@@ -49,7 +52,7 @@ const ResultScreen = () => {
|
|
|
49
52
|
const dd = dateStr.substring(4, 6);
|
|
50
53
|
|
|
51
54
|
// Assume 19xx if YY >= 50, else 20xx
|
|
52
|
-
const year = parseInt(yy) >= 50 ? `19${yy}` : `20${yy}`;
|
|
55
|
+
const year = parseInt(yy, 10) >= 50 ? `19${yy}` : `20${yy}`;
|
|
53
56
|
return `${dd}/${mm}/${year}`;
|
|
54
57
|
}
|
|
55
58
|
|
|
@@ -66,6 +69,28 @@ const ResultScreen = () => {
|
|
|
66
69
|
return dateStr;
|
|
67
70
|
}
|
|
68
71
|
}, []);
|
|
72
|
+
const formatGender = useCallback(code => {
|
|
73
|
+
switch (code?.toUpperCase()) {
|
|
74
|
+
case 'M':
|
|
75
|
+
return t('eidScannerScreen.genderMale');
|
|
76
|
+
case 'F':
|
|
77
|
+
return t('eidScannerScreen.genderFemale');
|
|
78
|
+
default:
|
|
79
|
+
return t('eidScannerScreen.genderUnspecified');
|
|
80
|
+
}
|
|
81
|
+
}, [t]);
|
|
82
|
+
const formatDocumentType = useCallback(code => {
|
|
83
|
+
if (!code) return '';
|
|
84
|
+
const upper = code.toUpperCase();
|
|
85
|
+
if (upper.startsWith('P')) return t('eidScannerScreen.docTypePassport');
|
|
86
|
+
if (upper.startsWith('I')) return t('eidScannerScreen.docTypeID');
|
|
87
|
+
if (upper.startsWith('A')) return t('eidScannerScreen.docTypeResidence');
|
|
88
|
+
if (upper.startsWith('V')) return t('eidScannerScreen.docTypeVisa');
|
|
89
|
+
return code;
|
|
90
|
+
}, [t]);
|
|
91
|
+
const formatNationality = useCallback(code => {
|
|
92
|
+
return getLocalizedCountryName(code, i18n.language);
|
|
93
|
+
}, [i18n.language]);
|
|
69
94
|
const apiUrl = useMemo(() => `${appContext.baseUrl}/api/app/mobile`, [appContext.baseUrl]);
|
|
70
95
|
useEffect(() => {
|
|
71
96
|
if (appContext.isDemoSession || appContext.isTestVideoSession) {
|
|
@@ -122,17 +147,21 @@ const ResultScreen = () => {
|
|
|
122
147
|
if (!scannedDocument.mrzFields) {
|
|
123
148
|
throw new Error('MRZ fields not found');
|
|
124
149
|
}
|
|
150
|
+
|
|
151
|
+
// Backend payload must contain raw MRZ data only.
|
|
152
|
+
// Human-friendly formatting is strictly for UI rendering paths.
|
|
153
|
+
const rawMrzFields = scannedDocument.mrzFields;
|
|
125
154
|
const identificationDocument = {
|
|
126
|
-
type:
|
|
127
|
-
name:
|
|
128
|
-
surname:
|
|
129
|
-
gender: getGenderEnumType(
|
|
130
|
-
number:
|
|
131
|
-
country:
|
|
155
|
+
type: rawMrzFields.documentCode,
|
|
156
|
+
name: rawMrzFields.firstName,
|
|
157
|
+
surname: rawMrzFields.lastName,
|
|
158
|
+
gender: getGenderEnumType(rawMrzFields.sex),
|
|
159
|
+
number: rawMrzFields.documentNumber,
|
|
160
|
+
country: rawMrzFields.issuingState,
|
|
132
161
|
barcodeValue: scannedDocument.barcodeValue,
|
|
133
|
-
personalNumber:
|
|
134
|
-
birthDate: mrzUtils.convertMRZDateToISODate(
|
|
135
|
-
expiryDate: mrzUtils.convertMRZDateToISODate(
|
|
162
|
+
personalNumber: rawMrzFields.personalNumber || rawMrzFields.optional1,
|
|
163
|
+
birthDate: mrzUtils.convertMRZDateToISODate(rawMrzFields.birthDate),
|
|
164
|
+
expiryDate: mrzUtils.convertMRZDateToISODate(rawMrzFields.expirationDate),
|
|
136
165
|
dataSource: scannedDocument.dataSource,
|
|
137
166
|
mrzText: scannedDocument.mrzText
|
|
138
167
|
};
|
|
@@ -185,7 +214,7 @@ const ResultScreen = () => {
|
|
|
185
214
|
const faceImage = scannedIdentityDocument?.faceImage;
|
|
186
215
|
if (faceImage && faceImage !== '') {
|
|
187
216
|
scannedIdentityDocument.faceImageMimeType ||= 'image/jpeg';
|
|
188
|
-
const extension = scannedIdentityDocument.faceImageMimeType === 'image/jp2' ? 'jp2' : 'jpg';
|
|
217
|
+
const extension = scannedIdentityDocument.faceImageMimeType === 'image/jp2' ? 'jp2' : scannedIdentityDocument.faceImageMimeType === 'image/png' ? 'png' : 'jpg';
|
|
189
218
|
await RNFS.writeFile(decodeURIComponent(`${RNFS.TemporaryDirectoryPath}/FACE_IMAGE.${extension}`), faceImage, 'base64');
|
|
190
219
|
uploadFileOptions.files.push({
|
|
191
220
|
name: 'files',
|
|
@@ -238,8 +267,9 @@ const ResultScreen = () => {
|
|
|
238
267
|
if (livenessVideoPath) {
|
|
239
268
|
let videoFilePath;
|
|
240
269
|
if (Platform.OS === 'ios') {
|
|
241
|
-
|
|
242
|
-
|
|
270
|
+
const tmpTimestamp = new Date().getTime();
|
|
271
|
+
await RNFS.mkdir(`${RNFS.TemporaryDirectoryPath}/${tmpTimestamp}`);
|
|
272
|
+
videoFilePath = `${RNFS.TemporaryDirectoryPath}/${tmpTimestamp}/LIVENESS_VIDEO.mp4`;
|
|
243
273
|
} else {
|
|
244
274
|
videoFilePath = `${RNFS.TemporaryDirectoryPath}/LIVENESS_VIDEO.mp4`;
|
|
245
275
|
}
|
|
@@ -268,11 +298,60 @@ const ResultScreen = () => {
|
|
|
268
298
|
});
|
|
269
299
|
}
|
|
270
300
|
}
|
|
301
|
+
if (uploadFileOptions.files.length === 0) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
271
304
|
const response = await RNFS.uploadFiles(uploadFileOptions).promise;
|
|
272
305
|
if (![200, 201, 204].includes(response.statusCode)) {
|
|
273
306
|
throw new Error('Media upload failed');
|
|
274
307
|
}
|
|
275
308
|
}, [apiUrl]);
|
|
309
|
+
const uploadVerbalConsentVideos = useCallback(async (identificationId, verbalConsentVideos) => {
|
|
310
|
+
if (!verbalConsentVideos?.length) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
for (const consentVideo of verbalConsentVideos) {
|
|
314
|
+
const normalizedPath = consentVideo.videoPath.replace('file://', '');
|
|
315
|
+
let targetPath;
|
|
316
|
+
if (Platform.OS === 'ios') {
|
|
317
|
+
const tmpTimestamp = new Date().getTime();
|
|
318
|
+
await RNFS.mkdir(`${RNFS.TemporaryDirectoryPath}/${tmpTimestamp}`);
|
|
319
|
+
targetPath = `${RNFS.TemporaryDirectoryPath}/${tmpTimestamp}/VERBAL_CONSENT_VIDEO.mp4`;
|
|
320
|
+
} else {
|
|
321
|
+
targetPath = `${RNFS.TemporaryDirectoryPath}/VERBAL_CONSENT_VIDEO.mp4`;
|
|
322
|
+
}
|
|
323
|
+
await RNFS.copyFile(normalizedPath, targetPath);
|
|
324
|
+
const compressedVideoPath = await VideoCompressor.compress(targetPath, {
|
|
325
|
+
compressionMethod: 'manual',
|
|
326
|
+
bitrate: 500000,
|
|
327
|
+
// 500 kbps
|
|
328
|
+
maxSize: 1280,
|
|
329
|
+
// HD 720p
|
|
330
|
+
minimumFileSizeForCompress: 0 // Always compress
|
|
331
|
+
});
|
|
332
|
+
const compressedNormalizedPath = compressedVideoPath.replace('file://', '');
|
|
333
|
+
const response = await RNFS.uploadFiles({
|
|
334
|
+
toUrl: `${apiUrl}/identifications/${identificationId}/media`,
|
|
335
|
+
method: 'POST',
|
|
336
|
+
headers: {
|
|
337
|
+
Accept: 'application/json'
|
|
338
|
+
},
|
|
339
|
+
fields: {
|
|
340
|
+
consentTitle: consentVideo.title,
|
|
341
|
+
consentText: consentVideo.text
|
|
342
|
+
},
|
|
343
|
+
files: [{
|
|
344
|
+
name: 'files',
|
|
345
|
+
filename: 'VERBAL_CONSENT_VIDEO.mp4',
|
|
346
|
+
filepath: compressedNormalizedPath,
|
|
347
|
+
filetype: 'video/mp4'
|
|
348
|
+
}]
|
|
349
|
+
}).promise;
|
|
350
|
+
if (![200, 201, 204].includes(response.statusCode)) {
|
|
351
|
+
throw new Error('Verbal consent video upload failed');
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}, [apiUrl]);
|
|
276
355
|
const submit = useCallback(async identificationInfo => {
|
|
277
356
|
try {
|
|
278
357
|
setIsSubmitting(true);
|
|
@@ -297,6 +376,7 @@ const ResultScreen = () => {
|
|
|
297
376
|
const livenessDetection = identificationInfo.livenessDetection;
|
|
298
377
|
await runWithRetry(() => uploadIdentificationMedia(identificationId, scannedIdentityDocument, livenessDetection, false));
|
|
299
378
|
}
|
|
379
|
+
await runWithRetry(() => uploadVerbalConsentVideos(identificationId, identificationInfo.verbalConsentVideos));
|
|
300
380
|
setProgress(90);
|
|
301
381
|
await runWithRetry(() => finishIdentification(identificationId, sessionKey));
|
|
302
382
|
setProgress(100);
|
|
@@ -325,9 +405,10 @@ const ResultScreen = () => {
|
|
|
325
405
|
appContext.onError?.(t('resultScreen.submissionFailed'));
|
|
326
406
|
navigationManagerRef.current?.reset();
|
|
327
407
|
}
|
|
328
|
-
}, [createIdentification, apiUrl, uploadIdentificationMedia, finishIdentification, submitIdentificationDocument, submitIdentificationConsent, t, appContext]);
|
|
408
|
+
}, [createIdentification, apiUrl, uploadIdentificationMedia, uploadVerbalConsentVideos, finishIdentification, submitIdentificationDocument, submitIdentificationConsent, t, appContext]);
|
|
329
409
|
useEffect(() => {
|
|
330
|
-
if (appContext.identificationInfo && !appContext.isDemoSession && !appContext.isTestVideoSession) {
|
|
410
|
+
if (appContext.identificationInfo && !appContext.isDemoSession && !appContext.isTestVideoSession && !hasSubmittedRef.current) {
|
|
411
|
+
hasSubmittedRef.current = true;
|
|
331
412
|
submit(appContext.identificationInfo);
|
|
332
413
|
}
|
|
333
414
|
}, [appContext.identificationInfo, appContext.isDemoSession, appContext.isTestVideoSession, submit]);
|
|
@@ -391,7 +472,7 @@ const ResultScreen = () => {
|
|
|
391
472
|
children: [t('eidScannerScreen.documentCode'), ":"]
|
|
392
473
|
}), /*#__PURE__*/_jsx(Text, {
|
|
393
474
|
style: styles.mrzInfoText,
|
|
394
|
-
children: appContext.identificationInfo.scannedDocument.mrzFields?.documentCode
|
|
475
|
+
children: formatDocumentType(appContext.identificationInfo.scannedDocument.mrzFields?.documentCode)
|
|
395
476
|
})]
|
|
396
477
|
}), /*#__PURE__*/_jsxs(View, {
|
|
397
478
|
style: styles.mrzInfoItem,
|
|
@@ -400,7 +481,7 @@ const ResultScreen = () => {
|
|
|
400
481
|
children: [t('eidScannerScreen.nationality'), ":"]
|
|
401
482
|
}), /*#__PURE__*/_jsx(Text, {
|
|
402
483
|
style: styles.mrzInfoText,
|
|
403
|
-
children: appContext.identificationInfo.scannedDocument.mrzFields?.issuingState
|
|
484
|
+
children: formatNationality(appContext.identificationInfo.scannedDocument.mrzFields?.nationality || appContext.identificationInfo.scannedDocument.mrzFields?.issuingState)
|
|
404
485
|
})]
|
|
405
486
|
}), /*#__PURE__*/_jsxs(View, {
|
|
406
487
|
style: styles.mrzInfoItem,
|
|
@@ -454,7 +535,7 @@ const ResultScreen = () => {
|
|
|
454
535
|
children: [t('eidScannerScreen.gender'), ":"]
|
|
455
536
|
}), /*#__PURE__*/_jsx(Text, {
|
|
456
537
|
style: styles.mrzInfoText,
|
|
457
|
-
children: appContext.identificationInfo.scannedDocument.mrzFields?.sex
|
|
538
|
+
children: formatGender(appContext.identificationInfo.scannedDocument.mrzFields?.sex)
|
|
458
539
|
})]
|
|
459
540
|
}), /*#__PURE__*/_jsxs(View, {
|
|
460
541
|
style: styles.mrzInfoItem,
|
|
@@ -600,6 +681,30 @@ const ResultScreen = () => {
|
|
|
600
681
|
}, index))
|
|
601
682
|
})
|
|
602
683
|
})]
|
|
684
|
+
}), !!appContext.identificationInfo.verbalConsentVideos?.length && /*#__PURE__*/_jsxs(_Fragment, {
|
|
685
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
686
|
+
style: styles.sectionHeader,
|
|
687
|
+
children: t('resultScreen.demoVerbalConsent')
|
|
688
|
+
}), appContext.identificationInfo.verbalConsentVideos.map((consentVideo, index) => /*#__PURE__*/_jsxs(View, {
|
|
689
|
+
children: [/*#__PURE__*/_jsxs(Text, {
|
|
690
|
+
style: styles.sectionText,
|
|
691
|
+
children: [t('resultScreen.demoVerbalConsentTitle'), ":", ' ', consentVideo.title]
|
|
692
|
+
}), /*#__PURE__*/_jsxs(Text, {
|
|
693
|
+
style: styles.sectionText,
|
|
694
|
+
children: [t('resultScreen.demoVerbalConsentText'), ":", ' ', consentVideo.text]
|
|
695
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
696
|
+
style: styles.sectionText,
|
|
697
|
+
children: t('resultScreen.demoVideo')
|
|
698
|
+
}), /*#__PURE__*/_jsx(Video, {
|
|
699
|
+
source: {
|
|
700
|
+
uri: consentVideo.videoPath
|
|
701
|
+
},
|
|
702
|
+
resizeMode: "contain",
|
|
703
|
+
style: styles.video,
|
|
704
|
+
controls: true,
|
|
705
|
+
muted: false
|
|
706
|
+
})]
|
|
707
|
+
}, `${consentVideo.videoPath}-${index}`))]
|
|
603
708
|
})]
|
|
604
709
|
})
|
|
605
710
|
}), /*#__PURE__*/_jsx(View, {
|
|
@@ -688,9 +793,10 @@ const styles = StyleSheet.create({
|
|
|
688
793
|
},
|
|
689
794
|
image: {
|
|
690
795
|
width: 100,
|
|
691
|
-
height:
|
|
692
|
-
objectFit: '
|
|
693
|
-
borderRadius:
|
|
796
|
+
height: 140,
|
|
797
|
+
objectFit: 'cover',
|
|
798
|
+
borderRadius: 12,
|
|
799
|
+
overflow: 'hidden'
|
|
694
800
|
},
|
|
695
801
|
imageItem: {
|
|
696
802
|
display: 'flex',
|
|
@@ -95,6 +95,11 @@ const VerificationSessionCheckScreen = () => {
|
|
|
95
95
|
const appContextRef = useRef(appContext);
|
|
96
96
|
appContextRef.current = appContext;
|
|
97
97
|
useEffect(() => {
|
|
98
|
+
// Skip session check when navigated from debug panel — the debug panel
|
|
99
|
+
// already set up workflowSteps and currentWorkflowStep directly.
|
|
100
|
+
if (appContext.isDebugNavigated) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
98
103
|
const sid = appContext.identificationInfo.sessionId;
|
|
99
104
|
if (!sid || checkedSessionIdRef.current === sid) {
|
|
100
105
|
return;
|
|
@@ -185,6 +190,9 @@ const VerificationSessionCheckScreen = () => {
|
|
|
185
190
|
const isDemoMode = isDemoSession(alphanumericText);
|
|
186
191
|
const sessionResponse = await getSessionByCode(alphanumericText);
|
|
187
192
|
if (sessionResponse?.id) {
|
|
193
|
+
// Mark as checked before setting sessionId to prevent
|
|
194
|
+
// the useEffect from triggering a duplicate navigation.
|
|
195
|
+
checkedSessionIdRef.current = sessionResponse.id;
|
|
188
196
|
if (appContext.setSessionId) {
|
|
189
197
|
appContext.setSessionId(sessionResponse.id);
|
|
190
198
|
} else {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"v":"5.5.2","fr":29.9700012207031,"ip":0,"op":60.0000024438501,"w":488,"h":488,"nm":"recording spectrum_MAIN","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360.5,249,0],"ix":2},"a":{"a":0,"k":[-73,8.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":5,"s":[30,163]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":10,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":15,"s":[30,45]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":20,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":25,"s":[30,104]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":30,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":35,"s":[30,42]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":40,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":45,"s":[30,83]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":55,"s":[30,37]},{"t":60.0000024438501,"s":[30,100]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":50,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.20392156862745098,0.22745098039215686,0.25098039215686274,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.20392156862745098,0.22745098039215686,0.25098039215686274,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-73.472,8.472],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":60.0000024438501,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300.5,249,0],"ix":2},"a":{"a":0,"k":[-73,8.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[30,63]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":5,"s":[30,211]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":10,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":15,"s":[30,128]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":20,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":25,"s":[30,160]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":30,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":35,"s":[30,126]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":40,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":45,"s":[30,154]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":55,"s":[30,83]},{"t":60.0000024438501,"s":[30,63]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":50,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.20392156862745098,0.22745098039215686,0.25098039215686274,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.20392156862745098,0.22745098039215686,0.25098039215686274,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-73.472,8.472],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30,63],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":60.0000024438501,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[240.5,249,0],"ix":2},"a":{"a":0,"k":[-73,8.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[30,63]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":5,"s":[30,155]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":10,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":15,"s":[30,91]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":20,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":25,"s":[30,186]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":30,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":35,"s":[30,256]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":40,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":45,"s":[30,209]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":55,"s":[30,124]},{"t":60.0000024438501,"s":[30,63]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":50,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.20392156862745098,0.22745098039215686,0.25098039215686274,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.20392156862745098,0.22745098039215686,0.25098039215686274,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-73.472,8.472],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30,63],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":60.0000024438501,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[180.5,249,0],"ix":2},"a":{"a":0,"k":[-73,8.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[30,63]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":5,"s":[30,83]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":10,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":15,"s":[30,154]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":20,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":25,"s":[30,126]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":30,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":35,"s":[30,160]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":40,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":45,"s":[30,128]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":55,"s":[30,211]},{"t":60.0000024438501,"s":[30,63]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":50,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.20392156862745098,0.22745098039215686,0.25098039215686274,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.20392156862745098,0.22745098039215686,0.25098039215686274,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-73.472,8.472],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30,63],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":60.0000024438501,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[120.5,249,0],"ix":2},"a":{"a":0,"k":[-73,8.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":5,"s":[30,37]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":10,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":15,"s":[30,83]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":20,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":25,"s":[30,42]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":30,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":35,"s":[30,104]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":40,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":45,"s":[30,45]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[30,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":55,"s":[30,163]},{"t":60.0000024438501,"s":[30,100]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":50,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.20392156862745098,0.22745098039215686,0.25098039215686274,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.20392156862745098,0.22745098039215686,0.25098039215686274,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-73.472,8.472],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":60.0000024438501,"st":0,"bm":0}],"markers":[]}
|