@trustchex/react-native-sdk 1.253.0 → 1.266.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 (88) hide show
  1. package/README.md +43 -2
  2. package/android/src/main/java/com/trustchex/reactnativesdk/DeviceBrightnessModule.kt +66 -0
  3. package/android/src/main/java/com/trustchex/reactnativesdk/TrustchexSDKPackage.kt +12 -0
  4. package/ios/DeviceBrightnessModule.h +4 -0
  5. package/ios/DeviceBrightnessModule.m +27 -0
  6. package/lib/module/Screens/Dynamic/ContractAcceptanceScreen.js +25 -0
  7. package/lib/module/Screens/Dynamic/IdentityDocumentEIDScanningScreen.js +19 -0
  8. package/lib/module/Screens/Dynamic/IdentityDocumentScanningScreen.js +19 -0
  9. package/lib/module/Screens/Dynamic/LivenessDetectionScreen.js +18 -5
  10. package/lib/module/Screens/Static/QrCodeScanningScreen.js +10 -2
  11. package/lib/module/Screens/Static/ResultScreen.js +52 -3
  12. package/lib/module/Screens/Static/VerificationSessionCheckScreen.js +41 -2
  13. package/lib/module/Shared/Components/EIDScanner.js +63 -3
  14. package/lib/module/Shared/Components/FaceCamera.js +69 -4
  15. package/lib/module/Shared/Components/IdentityDocumentCamera.js +4 -1
  16. package/lib/module/Shared/Components/NavigationManager.js +2 -0
  17. package/lib/module/Shared/Components/QrCodeScannerCamera.js +2 -0
  18. package/lib/module/Shared/Contexts/AppContext.js +3 -1
  19. package/lib/module/Shared/Libs/analytics.utils.js +430 -0
  20. package/lib/module/Shared/Libs/camera.utils.js +58 -2
  21. package/lib/module/Shared/Libs/deeplink.utils.js +8 -0
  22. package/lib/module/Shared/Libs/http-client.js +89 -28
  23. package/lib/module/Shared/Services/AnalyticsService.js +404 -0
  24. package/lib/module/Shared/Types/analytics.types.js +111 -0
  25. package/lib/module/Shared/VisionCameraPlugins/BarcodeScanner/hooks/useCameraPermissions.js +1 -0
  26. package/lib/module/Translation/index.js +5 -0
  27. package/lib/module/Trustchex.js +47 -4
  28. package/lib/module/index.js +3 -0
  29. package/lib/module/version.js +5 -0
  30. package/lib/typescript/src/Screens/Dynamic/ContractAcceptanceScreen.d.ts.map +1 -1
  31. package/lib/typescript/src/Screens/Dynamic/IdentityDocumentEIDScanningScreen.d.ts.map +1 -1
  32. package/lib/typescript/src/Screens/Dynamic/IdentityDocumentScanningScreen.d.ts.map +1 -1
  33. package/lib/typescript/src/Screens/Dynamic/LivenessDetectionScreen.d.ts.map +1 -1
  34. package/lib/typescript/src/Screens/Static/QrCodeScanningScreen.d.ts.map +1 -1
  35. package/lib/typescript/src/Screens/Static/ResultScreen.d.ts.map +1 -1
  36. package/lib/typescript/src/Screens/Static/VerificationSessionCheckScreen.d.ts.map +1 -1
  37. package/lib/typescript/src/Shared/Components/EIDScanner.d.ts.map +1 -1
  38. package/lib/typescript/src/Shared/Components/FaceCamera.d.ts +7 -1
  39. package/lib/typescript/src/Shared/Components/FaceCamera.d.ts.map +1 -1
  40. package/lib/typescript/src/Shared/Components/NavigationManager.d.ts.map +1 -1
  41. package/lib/typescript/src/Shared/Components/QrCodeScannerCamera.d.ts.map +1 -1
  42. package/lib/typescript/src/Shared/Contexts/AppContext.d.ts +2 -0
  43. package/lib/typescript/src/Shared/Contexts/AppContext.d.ts.map +1 -1
  44. package/lib/typescript/src/Shared/Libs/analytics.utils.d.ts +98 -0
  45. package/lib/typescript/src/Shared/Libs/analytics.utils.d.ts.map +1 -0
  46. package/lib/typescript/src/Shared/Libs/camera.utils.d.ts +19 -1
  47. package/lib/typescript/src/Shared/Libs/camera.utils.d.ts.map +1 -1
  48. package/lib/typescript/src/Shared/Libs/deeplink.utils.d.ts.map +1 -1
  49. package/lib/typescript/src/Shared/Libs/http-client.d.ts.map +1 -1
  50. package/lib/typescript/src/Shared/Services/AnalyticsService.d.ts +86 -0
  51. package/lib/typescript/src/Shared/Services/AnalyticsService.d.ts.map +1 -0
  52. package/lib/typescript/src/Shared/Types/analytics.types.d.ts +146 -0
  53. package/lib/typescript/src/Shared/Types/analytics.types.d.ts.map +1 -0
  54. package/lib/typescript/src/Shared/VisionCameraPlugins/BarcodeScanner/hooks/useCameraPermissions.d.ts.map +1 -1
  55. package/lib/typescript/src/Translation/Resources/tr.d.ts.map +1 -1
  56. package/lib/typescript/src/Translation/index.d.ts.map +1 -1
  57. package/lib/typescript/src/Trustchex.d.ts +1 -0
  58. package/lib/typescript/src/Trustchex.d.ts.map +1 -1
  59. package/lib/typescript/src/index.d.ts +4 -0
  60. package/lib/typescript/src/index.d.ts.map +1 -1
  61. package/lib/typescript/src/version.d.ts +2 -0
  62. package/lib/typescript/src/version.d.ts.map +1 -0
  63. package/package.json +6 -2
  64. package/src/Screens/Dynamic/ContractAcceptanceScreen.tsx +35 -1
  65. package/src/Screens/Dynamic/IdentityDocumentEIDScanningScreen.tsx +30 -0
  66. package/src/Screens/Dynamic/IdentityDocumentScanningScreen.tsx +30 -0
  67. package/src/Screens/Dynamic/LivenessDetectionScreen.tsx +30 -4
  68. package/src/Screens/Static/QrCodeScanningScreen.tsx +12 -2
  69. package/src/Screens/Static/ResultScreen.tsx +79 -4
  70. package/src/Screens/Static/VerificationSessionCheckScreen.tsx +65 -10
  71. package/src/Shared/Components/EIDScanner.tsx +132 -3
  72. package/src/Shared/Components/FaceCamera.tsx +77 -2
  73. package/src/Shared/Components/IdentityDocumentCamera.tsx +4 -4
  74. package/src/Shared/Components/NavigationManager.tsx +2 -0
  75. package/src/Shared/Components/QrCodeScannerCamera.tsx +2 -0
  76. package/src/Shared/Contexts/AppContext.ts +4 -0
  77. package/src/Shared/Libs/analytics.utils.ts +644 -0
  78. package/src/Shared/Libs/camera.utils.ts +74 -2
  79. package/src/Shared/Libs/deeplink.utils.ts +5 -0
  80. package/src/Shared/Libs/http-client.ts +105 -31
  81. package/src/Shared/Services/AnalyticsService.ts +470 -0
  82. package/src/Shared/Types/analytics.types.ts +179 -0
  83. package/src/Shared/VisionCameraPlugins/BarcodeScanner/hooks/useCameraPermissions.ts +1 -0
  84. package/src/Translation/Resources/tr.ts +2 -1
  85. package/src/Translation/index.ts +9 -0
  86. package/src/Trustchex.tsx +54 -2
  87. package/src/index.tsx +33 -0
  88. package/src/version.ts +3 -0
@@ -1 +1 @@
1
- {"version":3,"file":"VerificationSessionCheckScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Static/VerificationSessionCheckScreen.tsx"],"names":[],"mappings":"AA2CA,QAAA,MAAM,8BAA8B,+CA8XnC,CAAC;AAuHF,eAAe,8BAA8B,CAAC"}
1
+ {"version":3,"file":"VerificationSessionCheckScreen.d.ts","sourceRoot":"","sources":["../../../../../src/Screens/Static/VerificationSessionCheckScreen.tsx"],"names":[],"mappings":"AAiDA,QAAA,MAAM,8BAA8B,+CA+anC,CAAC;AAuHF,eAAe,8BAA8B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"EIDScanner.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/EIDScanner.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AAQxC,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,YAAY,EACrB,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,4CA0WjB,CAAC;AA2EF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"EIDScanner.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/EIDScanner.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AAaxC,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,YAAY,EACrB,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,4CAqejB,CAAC;AA2EF,eAAe,UAAU,CAAC"}
@@ -3,7 +3,13 @@ import { type Face } from '../VisionCameraPlugins/FaceDetector';
3
3
  export type FaceCameraProps = {
4
4
  onFacesDetected: (faces: Face[], image: string, isImageBright: boolean) => void;
5
5
  onCameraInitialized: (camera: Camera) => void;
6
+ previewRect?: {
7
+ minX: number;
8
+ minY: number;
9
+ width: number;
10
+ height: number;
11
+ };
6
12
  };
7
- declare const FaceCamera: ({ onFacesDetected, onCameraInitialized, }: FaceCameraProps) => import("react/jsx-runtime").JSX.Element;
13
+ declare const FaceCamera: ({ onFacesDetected, onCameraInitialized, previewRect, }: FaceCameraProps) => import("react/jsx-runtime").JSX.Element;
8
14
  export default FaceCamera;
9
15
  //# sourceMappingURL=FaceCamera.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FaceCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/FaceCamera.tsx"],"names":[],"mappings":"AAYA,OAAO,EAGL,MAAM,EAKP,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,KAAK,IAAI,EAEV,MAAM,qCAAqC,CAAC;AAQ7C,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,EAAE,CACf,KAAK,EAAE,IAAI,EAAE,EACb,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,KACnB,IAAI,CAAC;IACV,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C,CAAC;AAQF,QAAA,MAAM,UAAU,GAAI,2CAGjB,eAAe,4CA4LjB,CAAC;AA6BF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"FaceCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/FaceCamera.tsx"],"names":[],"mappings":"AAaA,OAAO,EAGL,MAAM,EAKP,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,KAAK,IAAI,EAEV,MAAM,qCAAqC,CAAC;AAQ7C,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,EAAE,CACf,KAAK,EAAE,IAAI,EAAE,EACb,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,KACnB,IAAI,CAAC;IACV,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,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;AAQF,QAAA,MAAM,UAAU,GAAI,wDAIjB,eAAe,4CA+PjB,CAAC;AA6BF,eAAe,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationManager.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/NavigationManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAKN,MAAM,OAAO,CAAC;AAiBf,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,wFAqNtB,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;AAkBf,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,wFAsNtB,CAAC;AAWF,eAAe,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"QrCodeScannerCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/QrCodeScannerCamera.tsx"],"names":[],"mappings":"AA2BA,MAAM,WAAW,wBAAwB;IACvC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,QAAA,MAAM,mBAAmB,GAAI,qBAAqB,wBAAwB,4CA4MzE,CAAC;AAqFF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"QrCodeScannerCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/QrCodeScannerCamera.tsx"],"names":[],"mappings":"AA2BA,MAAM,WAAW,wBAAwB;IACvC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,QAAA,MAAM,mBAAmB,GAAI,qBAAqB,wBAAwB,4CA8MzE,CAAC;AAqFF,eAAe,mBAAmB,CAAC"}
@@ -14,6 +14,8 @@ export type AppContextType = {
14
14
  currentWorkflowStep?: WorkflowStep;
15
15
  onCompleted?: () => void;
16
16
  onError?: (error: string) => void;
17
+ setSessionId?: (id: string) => void;
18
+ setBaseUrl?: (url: string) => void;
17
19
  };
18
20
  declare const _default: import("react").Context<AppContextType>;
19
21
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"AppContext.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Contexts/AppContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACb,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,mBAAmB,CAAC,EAAE,YAAY,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;;AAEF,wBAuBG"}
1
+ {"version":3,"file":"AppContext.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Contexts/AppContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACb,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,mBAAmB,CAAC,EAAE,YAAY,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;;AAEF,wBAyBG"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Analytics Helper Utilities
3
+ * Convenience functions for common analytics tracking patterns
4
+ * All functions handle errors silently to prevent blocking application flow
5
+ */
6
+ import type { AnalyticsEventMetadata } from '../Types/analytics.types';
7
+ /**
8
+ * Track screen view event
9
+ */
10
+ export declare const trackScreenView: (screenName: string, previousScreen?: string) => Promise<void>;
11
+ /**
12
+ * Track screen exit with duration
13
+ */
14
+ export declare const trackScreenExit: (screenName: string, durationMs: number) => Promise<void>;
15
+ /**
16
+ * Track button click
17
+ */
18
+ export declare const trackButtonClick: (buttonName: string, screenName: string, metadata?: AnalyticsEventMetadata) => Promise<void>;
19
+ /**
20
+ * Track error event with unique event name per error code
21
+ * Event name format: error_{errorCode} (e.g., error_camera_permission_denied)
22
+ *
23
+ * Only errors with severity 'medium' or higher are recorded.
24
+ * Low severity errors are ignored to reduce noise.
25
+ *
26
+ * @param errorCode - Unique identifier for the error type
27
+ * @param errorMessage - Human-readable error message (sanitized)
28
+ * @param screenName - Screen where the error occurred
29
+ * @param severity - Error severity level: 'low' | 'medium' | 'high' | 'critical'
30
+ * @param context - Optional additional context for the error
31
+ */
32
+ export declare const trackError: (errorCode: string, errorMessage: string, screenName: string, severity?: "low" | "medium" | "high" | "critical", context?: {
33
+ error?: Error;
34
+ component?: string;
35
+ userAction?: string;
36
+ recoverable?: boolean;
37
+ retryCount?: number;
38
+ category?: string;
39
+ additionalData?: Record<string, string | number | boolean | null>;
40
+ }) => Promise<void>;
41
+ /**
42
+ * Track error with full Error object for automatic stack trace extraction
43
+ */
44
+ export declare const trackErrorWithDetails: (error: Error, errorCode: string, screenName: string, severity?: "low" | "medium" | "high" | "critical", context?: {
45
+ component?: string;
46
+ userAction?: string;
47
+ recoverable?: boolean;
48
+ retryCount?: number;
49
+ category?: string;
50
+ additionalData?: Record<string, string | number | boolean | null>;
51
+ }) => Promise<void>;
52
+ /**
53
+ * Track API call performance
54
+ */
55
+ export declare const trackApiCall: (endpoint: string, durationMs: number, statusCode: number, success: boolean) => Promise<void>;
56
+ /**
57
+ * Track verification process events
58
+ */
59
+ export declare const trackVerificationStart: (stepType: string) => Promise<void>;
60
+ export declare const trackVerificationComplete: (stepType: string, success: boolean, attemptNumber?: number) => Promise<void>;
61
+ /**
62
+ * Track session events
63
+ */
64
+ export declare const trackSessionStart: (sessionId: string) => Promise<void>;
65
+ export declare const trackSessionEnd: (sessionId: string, reason?: string) => Promise<void>;
66
+ /**
67
+ * Track NFC scan events with detailed metadata
68
+ */
69
+ export declare const trackNFCScanStart: (documentType: "ID" | "PASSPORT" | "UNKNOWN", nfcSupported: boolean, nfcEnabled: boolean, attemptNumber?: number) => Promise<void>;
70
+ export declare const trackNFCScanComplete: (documentType: "ID" | "PASSPORT" | "UNKNOWN", scanDuration: number, attemptNumber?: number) => Promise<void>;
71
+ export declare const trackNFCScanFailed: (documentType: "ID" | "PASSPORT" | "UNKNOWN", errorType: "device_unsupported" | "not_enabled" | "reading_error" | "user_cancelled" | "timeout" | "unknown", errorMessage: string, scanDuration: number, attemptNumber?: number, deviceModel?: string, osVersion?: string) => Promise<void>;
72
+ /**
73
+ * EID (identity document with NFC) specific events
74
+ */
75
+ export declare const trackEIDScanStart: (documentType: "ID" | "PASSPORT" | "UNKNOWN", nfcSupported: boolean, nfcEnabled: boolean, attemptNumber?: number) => Promise<void>;
76
+ export declare const trackEIDScanComplete: (documentType: "ID" | "PASSPORT" | "UNKNOWN", scanDuration: number, attemptNumber?: number) => Promise<void>;
77
+ export declare const trackEIDScanFailed: (documentType: "ID" | "PASSPORT" | "UNKNOWN", errorType: "device_unsupported" | "not_enabled" | "reading_error" | "user_cancelled" | "timeout" | "unknown", errorMessage: string, scanDuration: number, attemptNumber?: number, deviceModel?: string, osVersion?: string) => Promise<void>;
78
+ /**
79
+ * Track step abandonment
80
+ */
81
+ export declare const trackStepAbandoned: (stepName: string, stepIndex: number, totalSteps: number, timeOnStep: number) => Promise<void>;
82
+ /**
83
+ * Track step skipped
84
+ */
85
+ export declare const trackStepSkipped: (stepName: string, stepIndex: number, totalSteps: number, previousStep?: string) => Promise<void>;
86
+ /**
87
+ * Track consent/contract acceptance
88
+ */
89
+ export declare const trackConsentGiven: (contractIds: string[], screenName?: string) => Promise<void>;
90
+ /**
91
+ * Track funnel step progress
92
+ */
93
+ export declare const trackFunnelStep: (stepName: string, stepIndex: number, totalSteps: number, previousStep?: string, isRequired?: boolean) => Promise<void>;
94
+ /**
95
+ * React hook for screen tracking
96
+ */
97
+ export declare const useScreenTracking: (screenName: string) => void;
98
+ //# sourceMappingURL=analytics.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/analytics.utils.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,23 @@
1
1
  import type { Frame } from 'react-native-vision-camera';
2
+ interface Rect {
3
+ minX: number;
4
+ minY: number;
5
+ width: number;
6
+ height: number;
7
+ }
8
+ /**
9
+ * Get average brightness for entire frame (center area)
10
+ */
2
11
  declare const getAverageBrightness: (frame: Frame) => number;
12
+ /**
13
+ * Get average brightness for a specific circular region (for face detection)
14
+ * Calculates brightness only for pixels inside the circle defined by centerX, centerY, and radius
15
+ */
16
+ declare const getCircularRegionBrightness: (frame: Frame, circleRect: Rect) => number;
3
17
  declare const isFrameBright: (frame: Frame) => boolean;
4
- export { isFrameBright, getAverageBrightness };
18
+ /**
19
+ * Check if a circular region in the frame is bright enough
20
+ */
21
+ declare const isCircularRegionBright: (frame: Frame, circleRect: Rect, threshold?: number) => boolean;
22
+ export { isFrameBright, getAverageBrightness, getCircularRegionBrightness, isCircularRegionBright };
5
23
  //# sourceMappingURL=camera.utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"camera.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/camera.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAExD,QAAA,MAAM,oBAAoB,GAAI,OAAO,KAAK,KAAG,MAwB5C,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,OAGrC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"camera.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/camera.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAExD,UAAU,IAAI;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,QAAA,MAAM,oBAAoB,GAAI,OAAO,KAAK,KAAG,MAwB5C,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,2BAA2B,GAC/B,OAAO,KAAK,EACZ,YAAY,IAAI,KACf,MAwCF,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,OAGrC,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,sBAAsB,GAAI,OAAO,KAAK,EAAE,YAAY,IAAI,EAAE,YAAW,MAAW,KAAG,OAGxF,CAAC;AAEF,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,2BAA2B,EAC3B,sBAAsB,EACvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"deeplink.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/deeplink.utils.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,cAAc,GAAI,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,aAgB/C,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"deeplink.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/deeplink.utils.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,cAAc,GAAI,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,aAqB/C,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/http-client.ts"],"names":[],"mappings":"AAIA,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,iBAAkB,SAAQ,eAAe;gBACxC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,cAAe,SAAQ,eAAe;gBACrC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,aAAc,SAAQ,eAAe;gBACpC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,eAAgB,SAAQ,eAAe;gBACtC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,OAAO,CAAC,EAAE,MAAM;CAG7B;;UA6DY,SAAS,OAAO,MAAM,sBAAsB,SAAS;WASpD,SAAS,EAAE,KAAK,OACvB,MAAM,SACJ,KAAK,sBACQ,SAAS;UAKlB,SAAS,EAAE,KAAK,OACtB,MAAM,SACJ,GAAG,sBACU,SAAS;UAKlB,SAAS,OAAO,MAAM,sBAAsB,SAAS;kBASvC,MAAM,QAAQ,IAAI;;AAc7C,wBAA+C"}
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/http-client.ts"],"names":[],"mappings":"AAMA,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,iBAAkB,SAAQ,eAAe;gBACxC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,cAAe,SAAQ,eAAe;gBACrC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,aAAc,SAAQ,eAAe;gBACpC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,eAAgB,SAAQ,eAAe;gBACtC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,OAAO,CAAC,EAAE,MAAM;CAG7B;;UAqIY,SAAS,OAAO,MAAM,sBAAsB,SAAS;WASpD,SAAS,EAAE,KAAK,OACvB,MAAM,SACJ,KAAK,sBACQ,SAAS;UAKlB,SAAS,EAAE,KAAK,OACtB,MAAM,SACJ,GAAG,sBACU,SAAS;UAKlB,SAAS,OAAO,MAAM,sBAAsB,SAAS;kBASvC,MAAM,QAAQ,IAAI;;AAc7C,wBAA+C"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Analytics Service - GDPR/KVKK/PCI-DSS Compliant
3
+ * Sends events immediately when they occur, sanitizes PII
4
+ */
5
+ import 'react-native-get-random-values';
6
+ import { AnalyticsEventCategory } from '../Types/analytics.types';
7
+ import type { AnalyticsConfig, AnalyticsEventMetadata, IAnalyticsService } from '../Types/analytics.types';
8
+ declare class AnalyticsService implements IAnalyticsService {
9
+ private config;
10
+ private sessionId;
11
+ private deviceInfo;
12
+ private isDemoSession;
13
+ private queue;
14
+ private readonly BATCH_SIZE;
15
+ private readonly MAX_QUEUE_SIZE;
16
+ private readonly FLUSH_INTERVAL;
17
+ private readonly QUEUE_FILE_PATH;
18
+ private flushTimer;
19
+ private isFlushing;
20
+ private appStateSubscription;
21
+ private readonly CRITICAL_EVENTS;
22
+ /**
23
+ * Set demo session flag to disable analytics for demo sessions
24
+ */
25
+ setDemoSession(isDemoSession: boolean): void;
26
+ /**
27
+ * Initialize the analytics service
28
+ * @param config Analytics configuration with required verification sessionId
29
+ */
30
+ initialize(config: AnalyticsConfig): Promise<void>;
31
+ /**
32
+ * Handle app state changes - flush when going to background
33
+ */
34
+ private handleAppStateChange;
35
+ /**
36
+ * Load persisted queue from disk
37
+ */
38
+ private loadPersistedQueue;
39
+ /**
40
+ * Persist queue to disk
41
+ */
42
+ private persistQueue;
43
+ /**
44
+ * Track an analytics event - adds to queue and flushes if full
45
+ */
46
+ trackEvent(eventName: string, category: AnalyticsEventCategory, metadata?: AnalyticsEventMetadata): Promise<void>;
47
+ /**
48
+ * Start the periodic flush timer
49
+ */
50
+ private startFlushTimer;
51
+ /**
52
+ * Stop the flush timer
53
+ */
54
+ private stopFlushTimer;
55
+ /**
56
+ * Flush the event queue
57
+ */
58
+ flush(): Promise<void>;
59
+ /**
60
+ * Send batch with retry logic (exponential backoff: 1s, 2s, 4s)
61
+ */
62
+ private sendBatchWithRetry;
63
+ /**
64
+ * Clear analytics session and reset all state
65
+ */
66
+ clear(): Promise<void>;
67
+ /**
68
+ * Check if analytics is enabled
69
+ */
70
+ isEnabled(): boolean;
71
+ /**
72
+ * Private: Collect anonymized device information
73
+ */
74
+ private collectDeviceInfo;
75
+ /**
76
+ * Update device locale from app context
77
+ */
78
+ setLocale(locale: string): void;
79
+ /**
80
+ * Private: Sanitize metadata to remove PII
81
+ */
82
+ private sanitizeMetadata;
83
+ }
84
+ export declare const analyticsService: AnalyticsService;
85
+ export {};
86
+ //# sourceMappingURL=AnalyticsService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsService.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Services/AnalyticsService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,gCAAgC,CAAC;AAGxC,OAAO,EACL,sBAAsB,EAEvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,eAAe,EAEf,sBAAsB,EAEtB,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAElC,cAAM,gBAAiB,YAAW,iBAAiB;IACjD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,aAAa,CAAkB;IAGvC,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgE;IAChG,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,oBAAoB,CAAuC;IAGnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAI9B;IAEF;;OAEG;IACH,cAAc,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAI5C;;;OAGG;IACG,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCxD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;YACW,kBAAkB;IAkBhC;;OAEG;YACW,YAAY;IAc1B;;OAEG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,sBAAsB,EAChC,QAAQ,CAAC,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC;IAqDhB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC5B;;OAEG;YACW,kBAAkB;IA+ChC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;YACW,iBAAiB;IA4B/B;;OAEG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMtC;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAgFzB;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Analytics Types for Trustchex React Native SDK
3
+ * GDPR, KVKK, and PCI-DSS Compliant Analytics System
4
+ */
5
+ /**
6
+ * Categories of analytics events
7
+ */
8
+ export declare enum AnalyticsEventCategory {
9
+ SESSION = "session",
10
+ NAVIGATION = "navigation",
11
+ USER_ACTION = "user_action",
12
+ ERROR = "error",
13
+ PERFORMANCE = "performance",
14
+ VERIFICATION = "verification"
15
+ }
16
+ /**
17
+ * Error severity levels for analytics tracking
18
+ */
19
+ export type ErrorSeverity = 'low' | 'medium' | 'high' | 'critical';
20
+ /**
21
+ * Error categories for grouping similar errors
22
+ */
23
+ export declare enum ErrorCategory {
24
+ NETWORK = "network",
25
+ PERMISSION = "permission",
26
+ CAMERA = "camera",
27
+ NFC = "nfc",
28
+ VALIDATION = "validation",
29
+ API = "api",
30
+ STORAGE = "storage",
31
+ DEVICE = "device",
32
+ USER_INPUT = "user_input",
33
+ SYSTEM = "system",
34
+ UNKNOWN = "unknown"
35
+ }
36
+ /**
37
+ * Context information for error tracking
38
+ */
39
+ export interface ErrorContext {
40
+ /** The component or module where the error occurred */
41
+ component?: string;
42
+ /** User action that triggered the error */
43
+ userAction?: string;
44
+ /** Whether the error is recoverable */
45
+ recoverable?: boolean;
46
+ /** Number of retry attempts made */
47
+ retryCount?: number;
48
+ /** Sanitized stack trace (no PII) */
49
+ stackTrace?: string;
50
+ /** Additional context data */
51
+ additionalData?: Record<string, string | number | boolean | null>;
52
+ }
53
+ /**
54
+ * Event names for different analytics events
55
+ */
56
+ export declare enum AnalyticsEventName {
57
+ SESSION_START = "session_start",
58
+ SESSION_END = "session_end",
59
+ SCREEN_VIEW = "screen_view",
60
+ SCREEN_EXIT = "screen_exit",
61
+ BUTTON_CLICK = "button_click",
62
+ CONSENT_GIVEN = "consent_given",
63
+ STEP_SKIPPED = "step_skipped",
64
+ STEP_ABANDONED = "step_abandoned",
65
+ CONTRACT_ACCEPTANCE_STARTED = "contract_acceptance_started",
66
+ CONTRACT_ACCEPTANCE_COMPLETED = "contract_acceptance_completed",
67
+ DOCUMENT_SCAN_STARTED = "identity_document_scan_started",
68
+ DOCUMENT_SCAN_COMPLETED = "identity_document_scan_completed",
69
+ IDENTITY_DOCUMENT_EID_SCAN_STARTED = "identity_document_eid_scan_started",
70
+ IDENTITY_DOCUMENT_EID_SCAN_COMPLETED = "identity_document_eid_scan_completed",
71
+ LIVENESS_CHECK_STARTED = "liveness_check_started",
72
+ LIVENESS_CHECK_COMPLETED = "liveness_check_completed",
73
+ NFC_SCAN_STARTED = "nfc_scan_started",
74
+ NFC_SCAN_COMPLETED = "nfc_scan_completed",
75
+ NFC_SCAN_FAILED = "nfc_scan_failed",
76
+ NFC_DEVICE_UNSUPPORTED = "nfc_device_unsupported",
77
+ NFC_READING_ERROR = "nfc_reading_error",
78
+ NFC_USER_CANCELLED = "nfc_user_cancelled",
79
+ IDENTITY_DOCUMENT_EID_SCAN_FAILED = "identity_document_eid_scan_failed",
80
+ API_CALL_DURATION = "api_call_duration",
81
+ VERIFICATION_SUCCESS = "verification_success",
82
+ VERIFICATION_FAILED = "verification_failed"
83
+ }
84
+ /**
85
+ * Device information (anonymized and privacy-compliant)
86
+ */
87
+ export interface AnonymizedDeviceInfo {
88
+ platform: 'ios' | 'android';
89
+ osVersion: string;
90
+ appVersion: string;
91
+ sdkVersion: string;
92
+ locale: string;
93
+ timezone: string;
94
+ screenResolution: string;
95
+ }
96
+ /**
97
+ * Analytics event metadata
98
+ */
99
+ export interface AnalyticsEventMetadata {
100
+ [key: string]: string | number | boolean | null | undefined;
101
+ }
102
+ /**
103
+ * Base analytics event structure
104
+ */
105
+ export interface AnalyticsEvent {
106
+ eventId: string;
107
+ verificationSessionId: string;
108
+ eventName: string;
109
+ category: AnalyticsEventCategory;
110
+ timestamp: string;
111
+ deviceInfo: AnonymizedDeviceInfo;
112
+ metadata?: AnalyticsEventMetadata;
113
+ }
114
+ /**
115
+ * Analytics configuration
116
+ */
117
+ export interface AnalyticsConfig {
118
+ enabled: boolean;
119
+ baseUrl: string;
120
+ verificationSessionId: string;
121
+ }
122
+ /**
123
+ * Analytics service interface
124
+ */
125
+ export interface IAnalyticsService {
126
+ initialize(config: AnalyticsConfig): Promise<void>;
127
+ trackEvent(eventName: string, category: AnalyticsEventCategory, metadata?: AnalyticsEventMetadata): Promise<void>;
128
+ clear(): Promise<void>;
129
+ isEnabled(): boolean;
130
+ }
131
+ /**
132
+ * Enhanced error event metadata
133
+ */
134
+ export interface ErrorEventMetadata extends AnalyticsEventMetadata {
135
+ errorCode: string;
136
+ errorMessage: string;
137
+ screenName: string;
138
+ severity: ErrorSeverity;
139
+ category?: ErrorCategory;
140
+ component?: string;
141
+ userAction?: string;
142
+ recoverable?: boolean;
143
+ retryCount?: number;
144
+ stackTrace?: string;
145
+ }
146
+ //# sourceMappingURL=analytics.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.types.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Types/analytics.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCameraPermissions.d.ts","sourceRoot":"","sources":["../../../../../../../src/Shared/VisionCameraPlugins/BarcodeScanner/hooks/useCameraPermissions.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3C;AAED,eAAO,MAAM,oBAAoB,QAAO,yBAmCvC,CAAC"}
1
+ {"version":3,"file":"useCameraPermissions.d.ts","sourceRoot":"","sources":["../../../../../../../src/Shared/VisionCameraPlugins/BarcodeScanner/hooks/useCameraPermissions.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3C;AAED,eAAO,MAAM,oBAAoB,QAAO,yBAoCvC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tr.d.ts","sourceRoot":"","sources":["../../../../../src/Translation/Resources/tr.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAkJE"}
1
+ {"version":3,"file":"tr.d.ts","sourceRoot":"","sources":["../../../../../src/Translation/Resources/tr.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAmJE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/Translation/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAsC3B,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/Translation/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AA+C3B,eAAe,IAAI,CAAC"}
@@ -13,6 +13,7 @@ interface TrustchexProps {
13
13
  locale?: 'en' | 'tr';
14
14
  onCompleted?: () => void;
15
15
  onError?: (error: string) => void;
16
+ enableAnalytics?: boolean;
16
17
  }
17
18
  declare const Trustchex: React.FC<TrustchexProps>;
18
19
  export default Trustchex;
@@ -1 +1 @@
1
- {"version":3,"file":"Trustchex.d.ts","sourceRoot":"","sources":["../../../src/Trustchex.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAI5D,OAAO,gCAAgC,CAAC;AAgBxC,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AASD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA4HvC,CAAC;AAWF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"Trustchex.d.ts","sourceRoot":"","sources":["../../../src/Trustchex.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAI5D,OAAO,gCAAgC,CAAC;AAqBxC,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AASD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA0KvC,CAAC;AAWF,eAAe,SAAS,CAAC"}
@@ -1,4 +1,8 @@
1
1
  import Trustchex from './Trustchex';
2
2
  export { handleDeepLink } from './Shared/Libs/deeplink.utils';
3
+ export { analyticsService } from './Shared/Services/AnalyticsService';
4
+ export { trackScreenView, trackScreenExit, trackButtonClick, trackError, trackErrorWithDetails, trackApiCall, trackVerificationStart, trackVerificationComplete, trackConsentGiven, trackSessionStart, trackSessionEnd, trackNFCScanStart, trackNFCScanComplete, trackNFCScanFailed, trackFunnelStep, trackStepAbandoned, trackStepSkipped, useScreenTracking, } from './Shared/Libs/analytics.utils';
5
+ export { AnalyticsEventCategory, AnalyticsEventName, ErrorCategory, } from './Shared/Types/analytics.types';
6
+ export type { AnalyticsConfig, AnalyticsEvent, ErrorSeverity, ErrorContext, ErrorEventMetadata, } from './Shared/Types/analytics.types';
3
7
  export default Trustchex;
4
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EACL,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,qBAAqB,EACrB,YAAY,EACZ,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,GACd,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,kBAAkB,GACnB,MAAM,gCAAgC,CAAC;AAExC,eAAe,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const SDK_VERSION = "1.266.1";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/version.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trustchex/react-native-sdk",
3
- "version": "1.253.0",
3
+ "version": "1.266.1",
4
4
  "description": "Trustchex mobile app react native SDK for android or ios devices",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -117,7 +117,8 @@
117
117
  "crypto-js": "^4.2.0",
118
118
  "i18next": "^25.3.2",
119
119
  "mrz": "^4.2.1",
120
- "react-i18next": "^15.6.0"
120
+ "react-i18next": "^15.6.0",
121
+ "uuid": "^11.0.3"
121
122
  },
122
123
  "peerDependencies": {
123
124
  "@react-native-community/image-editor": ">=4.3.0",
@@ -220,6 +221,9 @@
220
221
  "modulePathIgnorePatterns": [
221
222
  "<rootDir>/example/node_modules",
222
223
  "<rootDir>/lib/"
224
+ ],
225
+ "transformIgnorePatterns": [
226
+ "node_modules/(?!(uuid|react-native|@react-native|react-native-device-info|react-native-get-random-values|react-native-fs)/)"
223
227
  ]
224
228
  },
225
229
  "commitlint": {
@@ -15,6 +15,14 @@ import { getI18n, useTranslation } from 'react-i18next';
15
15
  import StyledButton from '../../Shared/Components/StyledButton';
16
16
  import NativeDeviceInfo from '../../Shared/Libs/native-device-info.utils';
17
17
  import { speakWithDebounce } from '../../Shared/Libs/tts.utils';
18
+ import {
19
+ trackFunnelStep,
20
+ useScreenTracking,
21
+ trackConsentGiven,
22
+ trackVerificationStart,
23
+ trackVerificationComplete,
24
+ trackError,
25
+ } from '../../Shared/Libs/analytics.utils';
18
26
 
19
27
  const ContractAcceptanceScreen = () => {
20
28
  const [isEnabled, setIsEnabled] = useState(false);
@@ -26,6 +34,9 @@ const ContractAcceptanceScreen = () => {
26
34
  const atTheEnd = useRef(false);
27
35
  const { t } = useTranslation();
28
36
 
37
+ // Track screen view and exit
38
+ useScreenTracking('contract_acceptance');
39
+
29
40
  useEffect(() => {
30
41
  const contracts = appContext.currentWorkflowStep?.data?.contracts;
31
42
  if (!contracts) {
@@ -56,7 +67,7 @@ const ContractAcceptanceScreen = () => {
56
67
  const paddingToBottom = 10;
57
68
  if (
58
69
  layoutMeasurement.height + contentOffset.y >=
59
- contentSize.height - paddingToBottom &&
70
+ contentSize.height - paddingToBottom &&
60
71
  isReady
61
72
  ) {
62
73
  setIsEnabled(true);
@@ -91,9 +102,23 @@ const ContractAcceptanceScreen = () => {
91
102
  scalesPageToFit={false}
92
103
  scrollEnabled={true}
93
104
  style={styles.webView}
105
+ onError={(syntheticEvent) => {
106
+ const { nativeEvent } = syntheticEvent;
107
+ trackError(
108
+ 'CONTRACT_WEBVIEW_ERROR',
109
+ nativeEvent.description || 'Failed to load contract',
110
+ 'contract_acceptance',
111
+ 'medium',
112
+ { recoverable: true, userAction: 'load_contract' }
113
+ );
114
+ }}
94
115
  onLoadEnd={(event) => {
95
116
  if (event.nativeEvent.url === contractUrl) {
96
117
  setIsReady(true);
118
+
119
+ // Track contract acceptance started
120
+ trackVerificationStart('CONTRACT_ACCEPTANCE');
121
+
97
122
  if (appContext.currentWorkflowStep?.data?.voiceGuidanceActive) {
98
123
  speakWithDebounce(t('termsOfUseAndDataPrivacyScreen.footerText'));
99
124
  }
@@ -128,6 +153,15 @@ const ContractAcceptanceScreen = () => {
128
153
  appContext.identificationInfo.consent = consent;
129
154
  }
130
155
 
156
+ // Track contract acceptance completed
157
+ trackVerificationComplete('CONTRACT_ACCEPTANCE', true, 1);
158
+
159
+ // Track contract acceptance as funnel event
160
+ trackConsentGiven(consent.contractIds, 'contract_acceptance');
161
+
162
+ // Track contract acceptance as funnel step
163
+ trackFunnelStep('Contract Accepted', 1, 5, 'session_start', true);
164
+
131
165
  navigationManagerRef.current?.navigateToNextStep();
132
166
  }}
133
167
  >