@trustchex/react-native-sdk 1.478.7 → 1.481.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/android/src/main/java/com/trustchex/reactnativesdk/camera/TrustchexCameraView.kt +57 -3
  2. package/ios/Camera/TrustchexCameraView.swift +20 -15
  3. package/lib/module/Screens/Static/ResultScreen.js +42 -6
  4. package/lib/module/Shared/Components/DiagnosticReportButton.js +64 -0
  5. package/lib/module/Shared/Components/IdentityDocumentCamera.js +132 -8
  6. package/lib/module/Shared/Components/NavigationManager.js +7 -9
  7. package/lib/module/Shared/EIDReader/eidReader.js +149 -29
  8. package/lib/module/Shared/Libs/MRZ_KNOWN_ISSUES.md +7 -0
  9. package/lib/module/Shared/Libs/diagnosticReport.js +133 -0
  10. package/lib/module/Shared/Libs/diagnostics.js +171 -0
  11. package/lib/module/Shared/Libs/mrzFrameAggregator.js +32 -5
  12. package/lib/module/Shared/Libs/native-device-info.utils.js +67 -0
  13. package/lib/module/Shared/Libs/sendDiagnosticReport.js +130 -0
  14. package/lib/module/Translation/Resources/en.js +5 -0
  15. package/lib/module/Translation/Resources/tr.js +5 -0
  16. package/lib/module/Trustchex.js +20 -4
  17. package/lib/module/version.js +1 -1
  18. package/lib/typescript/src/Screens/Static/ResultScreen.d.ts.map +1 -1
  19. package/lib/typescript/src/Shared/Components/DiagnosticReportButton.d.ts +20 -0
  20. package/lib/typescript/src/Shared/Components/DiagnosticReportButton.d.ts.map +1 -0
  21. package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.d.ts.map +1 -1
  22. package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.types.d.ts +10 -0
  23. package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.types.d.ts.map +1 -1
  24. package/lib/typescript/src/Shared/Components/NavigationManager.d.ts.map +1 -1
  25. package/lib/typescript/src/Shared/Components/TrustchexCamera.d.ts +10 -0
  26. package/lib/typescript/src/Shared/Components/TrustchexCamera.d.ts.map +1 -1
  27. package/lib/typescript/src/Shared/EIDReader/eidReader.d.ts.map +1 -1
  28. package/lib/typescript/src/Shared/Libs/diagnosticReport.d.ts +48 -0
  29. package/lib/typescript/src/Shared/Libs/diagnosticReport.d.ts.map +1 -0
  30. package/lib/typescript/src/Shared/Libs/diagnostics.d.ts +145 -0
  31. package/lib/typescript/src/Shared/Libs/diagnostics.d.ts.map +1 -0
  32. package/lib/typescript/src/Shared/Libs/mrzFrameAggregator.d.ts +33 -0
  33. package/lib/typescript/src/Shared/Libs/mrzFrameAggregator.d.ts.map +1 -1
  34. package/lib/typescript/src/Shared/Libs/native-device-info.utils.d.ts +33 -0
  35. package/lib/typescript/src/Shared/Libs/native-device-info.utils.d.ts.map +1 -1
  36. package/lib/typescript/src/Shared/Libs/sendDiagnosticReport.d.ts +30 -0
  37. package/lib/typescript/src/Shared/Libs/sendDiagnosticReport.d.ts.map +1 -0
  38. package/lib/typescript/src/Translation/Resources/en.d.ts +5 -0
  39. package/lib/typescript/src/Translation/Resources/en.d.ts.map +1 -1
  40. package/lib/typescript/src/Translation/Resources/tr.d.ts +5 -0
  41. package/lib/typescript/src/Translation/Resources/tr.d.ts.map +1 -1
  42. package/lib/typescript/src/Trustchex.d.ts.map +1 -1
  43. package/lib/typescript/src/version.d.ts +1 -1
  44. package/package.json +5 -1
  45. package/src/Screens/Static/ResultScreen.tsx +46 -1
  46. package/src/Shared/Components/DiagnosticReportButton.tsx +77 -0
  47. package/src/Shared/Components/IdentityDocumentCamera.tsx +145 -7
  48. package/src/Shared/Components/IdentityDocumentCamera.types.ts +6 -0
  49. package/src/Shared/Components/NavigationManager.tsx +7 -7
  50. package/src/Shared/Components/TrustchexCamera.tsx +6 -0
  51. package/src/Shared/EIDReader/eidReader.ts +166 -46
  52. package/src/Shared/Libs/MRZ_KNOWN_ISSUES.md +7 -0
  53. package/src/Shared/Libs/diagnosticReport.ts +206 -0
  54. package/src/Shared/Libs/diagnostics.ts +251 -0
  55. package/src/Shared/Libs/mrzFrameAggregator.ts +61 -3
  56. package/src/Shared/Libs/native-device-info.utils.ts +116 -0
  57. package/src/Shared/Libs/sendDiagnosticReport.ts +165 -0
  58. package/src/Translation/Resources/en.ts +6 -0
  59. package/src/Translation/Resources/tr.ts +6 -0
  60. package/src/Trustchex.tsx +26 -3
  61. package/src/version.ts +1 -1
@@ -2,6 +2,73 @@
2
2
 
3
3
  import { Platform } from 'react-native';
4
4
  import DeviceInfo from 'react-native-device-info';
5
+
6
+ /**
7
+ * Full, non-PII device details for the support diagnostic report. Device-
8
+ * specific scanning/NFC issues correlate with hardware, OS level, memory and
9
+ * NFC capability, so we capture a broad-but-safe set. Excludes anything that
10
+ * identifies a person (uniqueId is a per-install vendor id, not PII, and is kept
11
+ * only for correlating repeat reports from the same device).
12
+ */
13
+
14
+ /** Resolve an async getter to a number, tolerating failure. */
15
+ const num = async p => {
16
+ try {
17
+ const v = await p;
18
+ return typeof v === 'number' && isFinite(v) ? v : undefined;
19
+ } catch {
20
+ return undefined;
21
+ }
22
+ };
23
+
24
+ /** Resolve an async getter, falling back on failure. */
25
+ const safe = async (p, fallback) => {
26
+ try {
27
+ return await p;
28
+ } catch {
29
+ return fallback;
30
+ }
31
+ };
32
+
33
+ /** Read a synchronous getter, tolerating failure. */
34
+ const sync = (fn, fallback) => {
35
+ try {
36
+ return fn();
37
+ } catch {
38
+ return fallback;
39
+ }
40
+ };
41
+
42
+ /** Gather the full non-PII device profile for a diagnostic report. */
43
+ export const gatherDeviceDetails = async () => {
44
+ const bytesToMB = b => b === undefined ? undefined : Math.round(b / (1024 * 1024));
45
+ const isAndroid = Platform.OS === 'android';
46
+ const [manufacturer, isEmulator, apiLevel, installerPackage, totalMemory, usedMemory, totalDisk, freeDisk, batteryLevel, fontScale] = await Promise.all([safe(DeviceInfo.getManufacturer(), 'unknown'), safe(DeviceInfo.isEmulator(), false), isAndroid ? num(DeviceInfo.getApiLevel()) : Promise.resolve(undefined), safe(DeviceInfo.getInstallerPackageName(), 'unknown'), num(DeviceInfo.getTotalMemory()), num(DeviceInfo.getUsedMemory()), num(DeviceInfo.getTotalDiskCapacity()), num(DeviceInfo.getFreeDiskStorage()), num(DeviceInfo.getBatteryLevel()), num(DeviceInfo.getFontScale())]);
47
+ return {
48
+ platform: Platform.OS,
49
+ systemName: isAndroid ? 'Android' : 'iOS',
50
+ systemVersion: sync(() => DeviceInfo.getSystemVersion(), 'unknown'),
51
+ apiLevel,
52
+ brand: sync(() => DeviceInfo.getBrand(), 'unknown'),
53
+ manufacturer,
54
+ model: sync(() => DeviceInfo.getModel(), 'unknown'),
55
+ deviceId: sync(() => DeviceInfo.getDeviceId(), 'unknown'),
56
+ deviceType: sync(() => DeviceInfo.getDeviceType(), 'unknown'),
57
+ isTablet: sync(() => DeviceInfo.isTablet(), false),
58
+ isEmulator,
59
+ hasNotch: sync(() => DeviceInfo.hasNotch(), false),
60
+ totalMemoryMB: bytesToMB(totalMemory),
61
+ usedMemoryMB: bytesToMB(usedMemory),
62
+ totalDiskMB: bytesToMB(totalDisk),
63
+ freeDiskMB: bytesToMB(freeDisk),
64
+ batteryLevel,
65
+ appVersion: sync(() => DeviceInfo.getVersion(), 'unknown'),
66
+ buildNumber: sync(() => DeviceInfo.getBuildNumber(), 'unknown'),
67
+ bundleId: sync(() => DeviceInfo.getBundleId(), 'unknown'),
68
+ fontScale,
69
+ installerPackage
70
+ };
71
+ };
5
72
  export const NativeDeviceInfo = {
6
73
  generateHumanReadableIdentifier: async () => {
7
74
  try {
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Assembles and shares the support diagnostic report.
5
+ *
6
+ * `react-native-share` is an OPTIONAL dependency: the host app opts into the
7
+ * diagnostic feature by installing it. When it's present we open the OS share
8
+ * sheet with the full report (the user picks email / WhatsApp / Drive / etc. and
9
+ * reviews before sending); when it's absent the feature is silently unavailable
10
+ * — `isDiagnosticSharingAvailable()` returns false and the result-screen button
11
+ * renders nothing, so apps that don't want it incur no dependency.
12
+ *
13
+ * Attached files (staged to a temp dir via react-native-fs, already an SDK dep):
14
+ * - `diagnostics.json` — technical signals (device, camera, MRZ, NFC steps),
15
+ * - `scan-data.json` — the scanned identity data (PII; user reviews it),
16
+ * - the captured document/face images.
17
+ *
18
+ * The readable summary rides as the share `message` so it's visible in the
19
+ * draft regardless of the chosen app.
20
+ */
21
+ import RNFS from 'react-native-fs';
22
+ import { diagnostics } from "./diagnostics.js";
23
+ import { gatherDeviceDetails } from "./native-device-info.utils.js";
24
+ import { buildDiagnosticReport } from "./diagnosticReport.js";
25
+ import { logError } from "./debug.utils.js";
26
+
27
+ // `react-native-share` is OPTIONAL. Load it softly so the SDK bundles and runs
28
+ // without it; only host apps that installed it get the diagnostic feature. A
29
+ // static `import` would make Metro fail to resolve the module when it's absent,
30
+ // so we use a guarded require and keep the reference typed loosely.
31
+
32
+ let shareModule;
33
+ const loadShare = () => {
34
+ if (shareModule !== undefined) return shareModule;
35
+ try {
36
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
37
+ const mod = require('react-native-share');
38
+ shareModule = mod?.default ?? mod;
39
+ } catch {
40
+ shareModule = null; // not installed — feature unavailable
41
+ }
42
+ return shareModule;
43
+ };
44
+
45
+ /**
46
+ * Whether diagnostic sharing is available (i.e. `react-native-share` is
47
+ * installed in the host app). The result-screen button hides itself when false.
48
+ */
49
+ export const isDiagnosticSharingAvailable = () => loadShare() != null;
50
+ const writeTemp = async (dir, name, data, encoding) => {
51
+ const path = `${dir}/${name}`;
52
+ await RNFS.writeFile(path, data, encoding);
53
+ return path.startsWith('file://') ? path : `file://${path}`;
54
+ };
55
+ /**
56
+ * Build the report, stage attachments, and present the share sheet. Returns
57
+ * { shared } — false on error, with `dismissed` set when the user cancelled.
58
+ */
59
+ export const sendDiagnosticReport = async params => {
60
+ const share = loadShare();
61
+ if (!share) {
62
+ // Optional dependency not installed — nothing to do.
63
+ return {
64
+ shared: false
65
+ };
66
+ }
67
+ const {
68
+ scan,
69
+ sdkVersion,
70
+ sessionId,
71
+ images = []
72
+ } = params;
73
+ const now = Date.now();
74
+ const iso = new Date(now).toISOString();
75
+ const device = await gatherDeviceDetails();
76
+ const report = buildDiagnosticReport({
77
+ diag: diagnostics.snapshot(now, iso),
78
+ device,
79
+ scan,
80
+ sdkVersion,
81
+ sessionId
82
+ });
83
+ const dir = `${RNFS.TemporaryDirectoryPath}/trustchex-diagnostics-${now}`;
84
+ try {
85
+ await RNFS.mkdir(dir);
86
+ const urls = [];
87
+ urls.push(await writeTemp(dir, 'diagnostics.json', report.diagnosticsJson, 'utf8'));
88
+ urls.push(await writeTemp(dir, 'scan-data.json', report.scanDataJson, 'utf8'));
89
+ for (const img of images) {
90
+ if (!img.base64) continue;
91
+ urls.push(await writeTemp(dir, `${img.name}.${img.mime}`, img.base64, 'base64'));
92
+ }
93
+ try {
94
+ await share.open({
95
+ title: report.subject,
96
+ subject: report.subject,
97
+ // used by email targets
98
+ message: report.body,
99
+ urls,
100
+ // Per-file MIME types so targets render attachments correctly.
101
+ filenames: urls.map(u => u.split('/').pop() ?? 'attachment'),
102
+ failOnCancel: false
103
+ });
104
+ return {
105
+ shared: true
106
+ };
107
+ } catch (shareErr) {
108
+ // react-native-share throws on user cancel unless failOnCancel:false; treat
109
+ // a cancel as a non-error dismissal.
110
+ const msg = shareErr instanceof Error ? shareErr.message : String(shareErr);
111
+ if (/cancel|dismiss|user did not share/i.test(msg)) {
112
+ return {
113
+ shared: false,
114
+ dismissed: true
115
+ };
116
+ }
117
+ throw shareErr;
118
+ }
119
+ } catch (e) {
120
+ logError('Diagnostics', 'Failed to share diagnostic report', e instanceof Error ? e.message : String(e));
121
+ return {
122
+ shared: false
123
+ };
124
+ } finally {
125
+ // Best-effort cleanup — temp files are short-lived.
126
+ setTimeout(() => {
127
+ RNFS.unlink(dir).catch(() => {});
128
+ }, 60_000);
129
+ }
130
+ };
@@ -45,6 +45,11 @@ export default {
45
45
  'resultScreen.demoVerbalConsentTitle': 'Title',
46
46
  'resultScreen.demoVerbalConsentText': 'Text',
47
47
  'resultScreen.demoStartOver': 'Start Over',
48
+ 'diagnosticReport.button': 'Report a scanning issue',
49
+ 'diagnosticReport.noticeTitle': 'Share diagnostic report',
50
+ 'diagnosticReport.noticeBody': 'This opens a draft with your scan data, document images and technical details so support can help resolve a scanning issue. Review it before sending.',
51
+ 'diagnosticReport.continue': 'Continue',
52
+ 'diagnosticReport.cancel': 'Cancel',
48
53
  'livenessDetectionScreen.guideHeader': 'Face Verification',
49
54
  'livenessDetectionScreen.guideText': 'Please ensure the following for best results:',
50
55
  'livenessDetectionScreen.guidePoint1': 'Remove glasses, hats, or face coverings',
@@ -45,6 +45,11 @@ export default {
45
45
  'resultScreen.demoVerbalConsentTitle': 'Başlık',
46
46
  'resultScreen.demoVerbalConsentText': 'Metin',
47
47
  'resultScreen.demoStartOver': 'Baştan Başla',
48
+ 'diagnosticReport.button': 'Tarama sorununu bildir',
49
+ 'diagnosticReport.noticeTitle': 'Tanılama raporu paylaş',
50
+ 'diagnosticReport.noticeBody': 'Bu işlem; tarama verilerinizi, belge görüntülerinizi ve teknik ayrıntıları içeren bir taslak açar; böylece destek ekibi tarama sorununu çözebilir. Göndermeden önce gözden geçirin.',
51
+ 'diagnosticReport.continue': 'Devam et',
52
+ 'diagnosticReport.cancel': 'İptal',
48
53
  'livenessDetectionScreen.guideHeader': 'Yüz Doğrulaması',
49
54
  'livenessDetectionScreen.guideText': 'En iyi sonuç için lütfen şunları sağlayın:',
50
55
  'livenessDetectionScreen.guidePoint1': 'Gözlük, şapka veya yüz aksesuarlarını çıkarın',
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import React, { useEffect, useState, useMemo, useRef } from 'react';
3
+ import React, { useEffect, useState, useMemo, useRef, useCallback } 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';
@@ -65,10 +65,26 @@ const Trustchex = ({
65
65
  // A plain useMemo would create a new object on every dependency change,
66
66
  // discarding those mutations and causing screens to see undefined values.
67
67
  const contextRef = useRef(null);
68
+
69
+ // Wrap the demo-session setter so it ALSO mutates the persistent context
70
+ // object synchronously. The React state update is async, but the verification
71
+ // flow navigates to the next step in the same tick and advances thereafter by
72
+ // direct mutation (never re-rendering Trustchex). If isDemoSession lived only
73
+ // as a state-derived memo field, downstream screens (e.g. ResultScreen, which
74
+ // gates the diagnostics button on it) could read a stale `false`. Mutating the
75
+ // ref makes the flag travel with the object every screen holds.
76
+ const setIsDemoSessionAndPersist = useCallback(value => {
77
+ if (contextRef.current) {
78
+ contextRef.current.isDemoSession = value;
79
+ }
80
+ setIsDemoSession(value);
81
+ }, []);
68
82
  const contextValue = useMemo(() => {
69
83
  const prev = contextRef.current;
70
84
  const value = {
71
- isDemoSession,
85
+ // Prefer a direct mutation carried on the persistent object over the
86
+ // (possibly not-yet-flushed) state, so the demo flag can't desync.
87
+ isDemoSession: prev?.isDemoSession || isDemoSession,
72
88
  baseUrl: baseUrl || '',
73
89
  locale,
74
90
  branding,
@@ -92,7 +108,7 @@ const Trustchex = ({
92
108
  onError,
93
109
  setSessionId,
94
110
  setBaseUrl,
95
- setIsDemoSession
111
+ setIsDemoSession: setIsDemoSessionAndPersist
96
112
  };
97
113
 
98
114
  // Update state-derived identificationInfo fields without replacing
@@ -103,7 +119,7 @@ const Trustchex = ({
103
119
  value.identificationInfo.locale = propLocale || i18n.language;
104
120
  contextRef.current = value;
105
121
  return value;
106
- }, [baseUrl, locale, branding, sessionId, propLocale, onCompleted, onError, isDemoSession]);
122
+ }, [baseUrl, locale, branding, sessionId, propLocale, onCompleted, onError, isDemoSession, setIsDemoSessionAndPersist]);
107
123
 
108
124
  // Initialize analytics when SDK mounts with valid session
109
125
  useEffect(() => {
@@ -2,4 +2,4 @@
2
2
 
3
3
  // This file is auto-generated. Do not edit manually.
4
4
  // Version is synced from package.json during build.
5
- export const SDK_VERSION = '1.478.7';
5
+ export const SDK_VERSION = '1.481.1';
@@ -1 +1 @@
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
+ {"version":3,"file":"ResultScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Static/ResultScreen.tsx"],"names":[],"mappings":"AA8EA,QAAA,MAAM,YAAY,+CAshCjB,CAAC;AAqIF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import { type DiagnosticImage } from '../Libs/sendDiagnosticReport';
3
+ import type { ScanDataForReport } from '../Libs/diagnosticReport';
4
+ export interface DiagnosticReportButtonProps {
5
+ scan: ScanDataForReport;
6
+ sessionId?: string;
7
+ images?: DiagnosticImage[];
8
+ }
9
+ /**
10
+ * "Report a scanning issue" button for the result screen.
11
+ *
12
+ * Shows a brief notice describing what will be shared (the draft itself is the
13
+ * user's review/consent step), then opens the OS share sheet — the user picks
14
+ * email / WhatsApp / Drive / etc. and sends the diagnostic bundle to support.
15
+ * Self-contained so the result screen only needs to render it with the scan
16
+ * data + captured images.
17
+ */
18
+ declare const DiagnosticReportButton: React.FC<DiagnosticReportButtonProps>;
19
+ export default DiagnosticReportButton;
20
+ //# sourceMappingURL=DiagnosticReportButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiagnosticReportButton.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/DiagnosticReportButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CA+CjE,CAAC;AAEF,eAAe,sBAAsB,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,4CA26E7B,CAAC;AAiIF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"IdentityDocumentCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.tsx"],"names":[],"mappings":"AAyEA,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,4CAojF7B,CAAC;AAiIF,eAAe,sBAAsB,CAAC"}
@@ -18,6 +18,16 @@ export type BlockText = {
18
18
  blocks: BlocksData[];
19
19
  resultText: string;
20
20
  mrzOnlyText?: string;
21
+ /**
22
+ * Per-frame OCR confidence over MRZ characters from ML Kit per-symbol
23
+ * confidence (Android bundled library only; undefined on iOS). Feeds the
24
+ * multi-frame vote weight so low-confidence frames count less.
25
+ */
26
+ textConfidence?: {
27
+ mean: number;
28
+ min: number;
29
+ count: number;
30
+ };
21
31
  };
22
32
  export type BlocksData = {
23
33
  blockFrame: FrameType;
@@ -1 +1 @@
1
- {"version":3,"file":"IdentityDocumentCamera.types.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IdentityDocumentCamera.types.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationManager.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/NavigationManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAKN,MAAM,OAAO,CAAC;AAoBf,MAAM,MAAM,oBAAoB,GAAG;IACjC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,QAAA,MAAM,iBAAiB,wFA0PtB,CAAC;AAWF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"NavigationManager.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/NavigationManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAKN,MAAM,OAAO,CAAC;AAmBf,MAAM,MAAM,oBAAoB,GAAG;IACjC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,QAAA,MAAM,iBAAiB,wFAyPtB,CAAC;AAaF,eAAe,iBAAiB,CAAC"}
@@ -10,6 +10,16 @@ export interface Frame {
10
10
  faces?: NativeFace[];
11
11
  textBlocks?: NativeTextBlock[];
12
12
  resultText?: string;
13
+ /**
14
+ * Per-frame OCR confidence over MRZ characters, from ML Kit per-symbol
15
+ * confidence. Android (bundled ML Kit library) only — iOS ML Kit exposes no
16
+ * symbol-level confidence, so this is undefined there.
17
+ */
18
+ textConfidence?: {
19
+ mean: number;
20
+ min: number;
21
+ count: number;
22
+ };
13
23
  barcodes?: NativeBarcode[];
14
24
  }
15
25
  export interface NativeFace {
@@ -1 +1 @@
1
- {"version":3,"file":"TrustchexCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/TrustchexCamera.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TrustchexCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/TrustchexCamera.tsx"],"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;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
+ {"version":3,"file":"eidReader.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/EIDReader/eidReader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAsT7C,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,CA6SnE,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Builds the support diagnostic report from a scan session.
3
+ *
4
+ * Produces three things the result screen turns into a reviewable email:
5
+ * - `diagnostics.json` — technical signals (device, camera, MRZ, NFC steps).
6
+ * - `scan-data.json` — the scanned identity data + raw MRZ (PII; the user
7
+ * reviews it in the draft and chooses to send).
8
+ * - a short, size-bounded plain-text BODY summary that always fits an email.
9
+ *
10
+ * The full detail lives in the JSON attachments; the email body is intentionally
11
+ * compact so the draft opens reliably on every mail client.
12
+ */
13
+ import type { DiagnosticsSnapshot } from './diagnostics';
14
+ import type { DeviceDetails } from './native-device-info.utils';
15
+ import type { MRZFields } from '../Types/mrzFields';
16
+ export interface ScanDataForReport {
17
+ documentType?: string;
18
+ dataSource?: string;
19
+ mrzText?: string | null;
20
+ mrzFields?: MRZFields | null;
21
+ barcodeValue?: string | null;
22
+ /** Which images were captured (presence only, used for the body summary). */
23
+ images?: {
24
+ mrzSide?: boolean;
25
+ front?: boolean;
26
+ face?: boolean;
27
+ nfcFace?: boolean;
28
+ };
29
+ }
30
+ export interface DiagnosticReportBundle {
31
+ /** Pretty-printed technical report. */
32
+ diagnosticsJson: string;
33
+ /** Pretty-printed scanned identity data (PII). */
34
+ scanDataJson: string;
35
+ /** Compact, size-bounded plain-text email body. */
36
+ body: string;
37
+ /** Suggested email subject. */
38
+ subject: string;
39
+ }
40
+ /** Assemble the full report bundle. Pure — no I/O, no native calls. */
41
+ export declare const buildDiagnosticReport: (params: {
42
+ diag: DiagnosticsSnapshot;
43
+ device: DeviceDetails;
44
+ scan: ScanDataForReport;
45
+ sdkVersion: string;
46
+ sessionId?: string;
47
+ }) => DiagnosticReportBundle;
48
+ //# sourceMappingURL=diagnosticReport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnosticReport.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/diagnosticReport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAmBpD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,6EAA6E;IAC7E,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAyDD,MAAM,WAAW,sBAAsB;IACrC,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,GAAI,QAAQ;IAC5C,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,KAAG,sBAgFH,CAAC"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Diagnostics collector for the "Report a scanning issue" feature.
3
+ *
4
+ * Accumulates a PII-light technical snapshot of a single scan session — camera
5
+ * quality, MRZ consensus, and (the highest-value, most device-specific part) a
6
+ * structured per-step NFC/eID read log. The result screen serialises this into
7
+ * the diagnostic email the user reviews and sends to support.
8
+ *
9
+ * Design notes:
10
+ * - This is a MODULE-LEVEL SINGLETON so the deep camera/EID call stack can record
11
+ * into it without threading a prop/context through every layer. Call `reset()`
12
+ * at the start of a scan flow.
13
+ * - It stores only TECHNICAL signals (counts, timings, brightness, APDU status
14
+ * words, pass/fail). It deliberately holds NO identity data, images, MRZ text,
15
+ * keys, or nonces — the scanned identity/images shown to the user come from the
16
+ * result screen's own state, not from here, and are attached separately with
17
+ * the user's explicit review in the email draft.
18
+ */
19
+ /** A single step of the NFC/eID read, with its outcome and timing. */
20
+ export interface NfcStep {
21
+ /** Step name: 'open' | 'selectMF' | 'readCardAccess' | 'paceAuth' | 'bacAuth'
22
+ * | 'selectApplet' | 'readDG1' | 'readDG2' | … */
23
+ step: string;
24
+ ok: boolean;
25
+ ms: number;
26
+ /** APDU status word (hex, e.g. "6982") when the step failed at the APDU level. */
27
+ sw?: string;
28
+ /** Coarse, non-PII error CATEGORY when the step failed (e.g. "auth_failed",
29
+ * "tag_lost", "reading_error") — never the raw error text. */
30
+ error?: string;
31
+ }
32
+ export interface NfcDiagnostics {
33
+ attempted: boolean;
34
+ chipDetected: boolean;
35
+ /** 'PACE' | 'BAC' | 'none' */
36
+ authProtocol: 'PACE' | 'BAC' | 'none';
37
+ paceFellBackToBac: boolean;
38
+ /** PACE object identifier string when PACE was attempted. */
39
+ paceOid?: string;
40
+ /** Why PACE wasn't used / fell back: 'no_card_access' | 'no_pace_info' |
41
+ * 'pace_failed'. Distinguishes device/chip-specific PACE issues. */
42
+ paceFallbackReason?: string;
43
+ steps: NfcStep[];
44
+ /** Name of the first failing step, if any. */
45
+ failureStep?: string;
46
+ /** Coarse category: 'auth_failed' | 'tag_lost' | 'timeout' | 'unsupported'
47
+ * | 'not_enabled' | 'user_cancelled' | 'reading_error' | null */
48
+ errorCategory?: string;
49
+ retryCount: number;
50
+ succeeded: boolean;
51
+ }
52
+ export interface CameraDiagnostics {
53
+ frames: number;
54
+ frameW: number;
55
+ frameH: number;
56
+ avgBrightness: number;
57
+ minBrightness: number;
58
+ maxBrightness: number;
59
+ hadLowBrightness: boolean;
60
+ hadBlurryFrames: boolean;
61
+ /**
62
+ * The thresholds the measured values were judged against, so support can read
63
+ * "117 measured vs 65 floor" rather than just a pass/fail flag. Recorded once.
64
+ */
65
+ thresholds?: {
66
+ brightnessLow?: number;
67
+ brightnessHigh?: number;
68
+ minBrightness?: number;
69
+ blur?: number;
70
+ };
71
+ }
72
+ export interface MrzDiagnostics {
73
+ framesProcessed: number;
74
+ reachedStable: boolean;
75
+ stabilityFrames: number;
76
+ /** Smallest winning vote margin across contested cells at acceptance. */
77
+ minContestedMargin: number;
78
+ /**
79
+ * Largest MRZ-band pixel height seen (max OCR'd text-block height). Compared
80
+ * to the ~16px/character ML Kit floor, this explains "scans on device A,
81
+ * fails on device B" — a smaller band falls below the OCR resolution floor.
82
+ */
83
+ maxMrzBandHeightPx?: number;
84
+ format?: string;
85
+ /** Per-field check-digit outcomes: 'pass' | 'fail' (no values, no PII). */
86
+ checkDigits?: Record<string, 'pass' | 'fail'>;
87
+ /** True when the Turkish leading-serial-letter check-digit convention was used
88
+ * to accept the document number (set at report-build time from the final MRZ). */
89
+ turkishLetterPrefixApplied: boolean;
90
+ }
91
+ export interface DiagnosticsSnapshot {
92
+ schemaVersion: number;
93
+ generatedAt: string;
94
+ documentType?: string;
95
+ dataSource?: string;
96
+ totalDurationMs: number;
97
+ camera: CameraDiagnostics;
98
+ mrz: MrzDiagnostics;
99
+ nfc: NfcDiagnostics;
100
+ /** Sanitised, non-PII error entries collected during the session. */
101
+ errors: Array<{
102
+ code?: string;
103
+ category?: string;
104
+ screen?: string;
105
+ }>;
106
+ }
107
+ /**
108
+ * Accumulates one scan session's diagnostics. A single shared instance is
109
+ * exported below; tests can construct their own.
110
+ */
111
+ export declare class DiagnosticsCollector {
112
+ private startedAtMs;
113
+ private documentType?;
114
+ private dataSource?;
115
+ private camera;
116
+ private mrz;
117
+ private nfc;
118
+ private errors;
119
+ /** Begin a fresh session — call when a scan flow starts. */
120
+ reset(nowMs: number): void;
121
+ setDocument(documentType?: string, dataSource?: string): void;
122
+ /** Merge a camera snapshot (called periodically as frames arrive). */
123
+ setCamera(c: Partial<CameraDiagnostics>): void;
124
+ /** Merge MRZ consensus metrics. `reachedStable` is STICKY (once true, stays
125
+ * true) so a later frame's flicker can't unset that the scan did stabilise;
126
+ * `maxMrzBandHeightPx` keeps the largest seen. */
127
+ setMrz(m: Partial<MrzDiagnostics>): void;
128
+ nfcAttemptStarted(): void;
129
+ nfcChipDetected(): void;
130
+ nfcSetAuth(protocol: 'PACE' | 'BAC' | 'none', oid?: string): void;
131
+ nfcPaceFellBackToBac(reason?: string): void;
132
+ /** Record one completed step. Keep messages short and free of PII. */
133
+ nfcStep(step: NfcStep): void;
134
+ nfcResult(succeeded: boolean, errorCategory?: string): void;
135
+ addError(e: {
136
+ code?: string;
137
+ category?: string;
138
+ screen?: string;
139
+ }): void;
140
+ /** Build the serialisable snapshot. */
141
+ snapshot(nowMs: number, isoNow: string): DiagnosticsSnapshot;
142
+ }
143
+ /** Shared session-scoped collector used across the scan flow. */
144
+ export declare const diagnostics: DiagnosticsCollector;
145
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/diagnostics.ts"],"names":[],"mappings":"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"}