@luciq/react-native 19.3.0-40271-SNAPSHOT → 19.4.0-44237-SNAPSHOT

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 (119) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +118 -0
  3. package/RNLuciq.podspec +6 -2
  4. package/android/build.gradle +25 -0
  5. package/android/native.gradle +1 -1
  6. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqAPMModule.java +3 -12
  7. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqBugReportingModule.java +28 -24
  8. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqCrashReportingModule.java +18 -7
  9. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqFeatureRequestsModule.java +1 -2
  10. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqNetworkLoggerModule.java +29 -56
  11. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqReactnativeModule.java +121 -47
  12. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqReactnativePackage.java +2 -0
  13. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqRepliesModule.java +4 -16
  14. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqSessionReplayModule.java +5 -16
  15. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqSurveysModule.java +7 -15
  16. package/android/src/main/java/ai/luciq/reactlibrary/utils/EventEmitterModule.java +0 -7
  17. package/android/src/main/java/ai/luciq/reactlibrary/utils/ReportUtil.java +0 -7
  18. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqAPMBaseSpec.java +9 -0
  19. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqBaseSpec.java +33 -0
  20. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqBugReportingBaseSpec.java +33 -0
  21. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqCrashReportingBaseSpec.java +9 -0
  22. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqFeatureRequestsBaseSpec.java +9 -0
  23. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqNetworkLoggerBaseSpec.java +33 -0
  24. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqRepliesBaseSpec.java +33 -0
  25. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqSessionReplayBaseSpec.java +33 -0
  26. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqSurveysBaseSpec.java +33 -0
  27. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqAPMBaseSpec.java +11 -0
  28. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqBaseSpec.java +22 -0
  29. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqBugReportingBaseSpec.java +22 -0
  30. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqCrashReportingBaseSpec.java +10 -0
  31. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqFeatureRequestsBaseSpec.java +10 -0
  32. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqNetworkLoggerBaseSpec.java +22 -0
  33. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqRepliesBaseSpec.java +22 -0
  34. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqSessionReplayBaseSpec.java +22 -0
  35. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqSurveysBaseSpec.java +22 -0
  36. package/dist/modules/BugReporting.js +3 -3
  37. package/dist/modules/Luciq.d.ts +15 -0
  38. package/dist/modules/Luciq.js +23 -3
  39. package/dist/modules/NetworkLogger.d.ts +5 -0
  40. package/dist/modules/NetworkLogger.js +1 -9
  41. package/dist/modules/Replies.js +1 -1
  42. package/dist/modules/Surveys.js +2 -2
  43. package/dist/native/NativeBugReporting.d.ts +4 -4
  44. package/dist/native/NativeCrashReporting.d.ts +2 -2
  45. package/dist/native/NativeLuciq.d.ts +5 -3
  46. package/dist/native/NativePackage.js +25 -2
  47. package/dist/native/NativeReplies.d.ts +1 -1
  48. package/dist/native/NativeSurveys.d.ts +2 -2
  49. package/dist/native/specs/NativeAPM.d.ts +21 -0
  50. package/dist/native/specs/NativeAPM.js +2 -0
  51. package/dist/native/specs/NativeBugReporting.d.ts +29 -0
  52. package/dist/native/specs/NativeBugReporting.js +2 -0
  53. package/dist/native/specs/NativeCrashReporting.d.ts +12 -0
  54. package/dist/native/specs/NativeCrashReporting.js +2 -0
  55. package/dist/native/specs/NativeFeatureRequests.d.ts +8 -0
  56. package/dist/native/specs/NativeFeatureRequests.js +2 -0
  57. package/dist/native/specs/NativeLuciq.d.ts +80 -0
  58. package/dist/native/specs/NativeLuciq.js +2 -0
  59. package/dist/native/specs/NativeNetworkLogger.d.ts +16 -0
  60. package/dist/native/specs/NativeNetworkLogger.js +2 -0
  61. package/dist/native/specs/NativeReplies.d.ts +21 -0
  62. package/dist/native/specs/NativeReplies.js +2 -0
  63. package/dist/native/specs/NativeSessionReplay.d.ts +17 -0
  64. package/dist/native/specs/NativeSessionReplay.js +2 -0
  65. package/dist/native/specs/NativeSurveys.d.ts +18 -0
  66. package/dist/native/specs/NativeSurveys.js +2 -0
  67. package/dist/utils/Enums.js +3 -1
  68. package/dist/utils/FeatureFlags.d.ts +0 -6
  69. package/dist/utils/FeatureFlags.js +0 -35
  70. package/dist/utils/LuciqUtils.d.ts +1 -1
  71. package/dist/utils/LuciqUtils.js +0 -9
  72. package/dist/utils/XhrNetworkInterceptor.js +53 -85
  73. package/ios/RNLuciq/LuciqAPMBridge.h +5 -5
  74. package/ios/RNLuciq/{LuciqAPMBridge.m → LuciqAPMBridge.mm} +48 -39
  75. package/ios/RNLuciq/LuciqBugReportingBridge.h +6 -6
  76. package/ios/RNLuciq/LuciqBugReportingBridge.mm +234 -0
  77. package/ios/RNLuciq/LuciqCrashReportingBridge.h +16 -5
  78. package/ios/RNLuciq/LuciqCrashReportingBridge.mm +91 -0
  79. package/ios/RNLuciq/LuciqFeatureRequestsBridge.h +1 -1
  80. package/ios/RNLuciq/{LuciqFeatureRequestsBridge.m → LuciqFeatureRequestsBridge.mm} +21 -16
  81. package/ios/RNLuciq/LuciqNetworkLoggerBridge.h +1 -30
  82. package/ios/RNLuciq/{LuciqNetworkLoggerBridge.m → LuciqNetworkLoggerBridge.mm} +46 -77
  83. package/ios/RNLuciq/LuciqReactBridge.h +13 -13
  84. package/ios/RNLuciq/{LuciqReactBridge.m → LuciqReactBridge.mm} +95 -34
  85. package/ios/RNLuciq/LuciqRepliesBridge.h +3 -3
  86. package/ios/RNLuciq/LuciqRepliesBridge.mm +86 -0
  87. package/ios/RNLuciq/LuciqSessionReplayBridge.h +5 -5
  88. package/ios/RNLuciq/{LuciqSessionReplayBridge.m → LuciqSessionReplayBridge.mm} +35 -25
  89. package/ios/RNLuciq/LuciqSurveysBridge.h +5 -5
  90. package/ios/RNLuciq/{LuciqSurveysBridge.m → LuciqSurveysBridge.mm} +34 -35
  91. package/ios/native.rb +1 -1
  92. package/package.json +9 -1
  93. package/src/modules/BugReporting.ts +3 -3
  94. package/src/modules/Luciq.ts +26 -4
  95. package/src/modules/NetworkLogger.ts +1 -26
  96. package/src/modules/Replies.ts +1 -1
  97. package/src/modules/Surveys.ts +2 -2
  98. package/src/native/NativeBugReporting.ts +3 -6
  99. package/src/native/NativeCrashReporting.ts +2 -2
  100. package/src/native/NativeLuciq.ts +7 -3
  101. package/src/native/NativePackage.ts +52 -2
  102. package/src/native/NativeReplies.ts +1 -1
  103. package/src/native/NativeSurveys.ts +2 -2
  104. package/src/native/specs/NativeAPM.ts +47 -0
  105. package/src/native/specs/NativeBugReporting.ts +53 -0
  106. package/src/native/specs/NativeCrashReporting.ts +23 -0
  107. package/src/native/specs/NativeFeatureRequests.ts +10 -0
  108. package/src/native/specs/NativeLuciq.ts +137 -0
  109. package/src/native/specs/NativeNetworkLogger.ts +31 -0
  110. package/src/native/specs/NativeReplies.ts +27 -0
  111. package/src/native/specs/NativeSessionReplay.ts +20 -0
  112. package/src/native/specs/NativeSurveys.ts +23 -0
  113. package/src/utils/Enums.ts +4 -1
  114. package/src/utils/FeatureFlags.ts +0 -44
  115. package/src/utils/LuciqUtils.ts +1 -21
  116. package/src/utils/XhrNetworkInterceptor.ts +55 -128
  117. package/ios/RNLuciq/LuciqBugReportingBridge.m +0 -249
  118. package/ios/RNLuciq/LuciqCrashReportingBridge.m +0 -68
  119. package/ios/RNLuciq/LuciqRepliesBridge.m +0 -80
@@ -20,25 +20,21 @@ function getPortFromUrl(url) {
20
20
  * It is enabled by default.
21
21
  * @param isEnabled
22
22
  */
23
- const NET_TAG = 'LCQ-RN-NET:';
24
23
  export const setEnabled = (isEnabled) => {
25
24
  if (isEnabled) {
26
25
  xhr.enableInterception();
27
26
  xhr.setOnDoneCallback(async (network) => {
28
- Logger.debug(NET_TAG, `[NetworkLogger] onDoneCallback received: ${network.method} ${network.url}, status=${network.responseCode}`);
29
27
  // eslint-disable-next-line no-new-func
30
28
  const predicate = Function('network', 'return ' + _requestFilterExpression);
31
29
  if (!predicate(network)) {
32
30
  const MAX_NETWORK_BODY_SIZE_IN_BYTES = await NativeLuciq.getNetworkBodyMaxSize();
33
31
  try {
34
32
  if (_networkDataObfuscationHandler) {
35
- Logger.debug(NET_TAG, `[NetworkLogger] Running obfuscation handler for ${network.url}`);
36
33
  network = await _networkDataObfuscationHandler(network);
37
34
  }
38
35
  if (__DEV__) {
39
36
  const urlPort = getPortFromUrl(network.url);
40
37
  if (urlPort === LuciqRNConfig.metroDevServerPort) {
41
- Logger.debug(NET_TAG, `[NetworkLogger] Skipping Metro dev server request: ${network.url}`);
42
38
  return;
43
39
  }
44
40
  }
@@ -58,16 +54,12 @@ export const setEnabled = (isEnabled) => {
58
54
  network.responseBody = `Body is omitted because content type ${network.contentType} isn't supported`;
59
55
  Logger.warn(`LCQ-RN: The response body for the network request with URL ${network.url} has been omitted because the content type ${network.contentType} isn't supported.`);
60
56
  }
61
- Logger.debug(NET_TAG, `[NetworkLogger] Reporting network log to native: ${network.method} ${network.url}`);
62
57
  reportNetworkLog(network);
63
58
  }
64
59
  catch (e) {
65
- Logger.error(NET_TAG, `[NetworkLogger] Error processing network log for ${network.url}:`, e);
60
+ Logger.error(e);
66
61
  }
67
62
  }
68
- else {
69
- Logger.debug(NET_TAG, `[NetworkLogger] Request filtered out by predicate: ${network.method} ${network.url}, expression="${_requestFilterExpression}"`);
70
- }
71
63
  });
72
64
  }
73
65
  else {
@@ -26,7 +26,7 @@ export const show = () => {
26
26
  */
27
27
  export const setOnNewReplyReceivedHandler = (handler) => {
28
28
  emitter.addListener(NativeEvents.ON_REPLY_RECEIVED_HANDLER, handler);
29
- NativeReplies.setOnNewReplyReceivedHandler(handler);
29
+ NativeReplies.setOnNewReplyReceivedHandler();
30
30
  };
31
31
  /**
32
32
  * Returns the number of unread messages the user currently has.
@@ -45,7 +45,7 @@ export const setAutoShowingEnabled = (autoShowingSurveysEnabled) => {
45
45
  */
46
46
  export const setOnShowHandler = (onShowHandler) => {
47
47
  emitter.addListener(NativeEvents.WILL_SHOW_SURVEY_HANDLER, onShowHandler);
48
- NativeSurveys.setOnShowHandler(onShowHandler);
48
+ NativeSurveys.setOnShowHandler();
49
49
  };
50
50
  /**
51
51
  * Sets a block of code to be executed right after the survey's UI is dismissed.
@@ -56,7 +56,7 @@ export const setOnShowHandler = (onShowHandler) => {
56
56
  */
57
57
  export const setOnDismissHandler = (onDismissHandler) => {
58
58
  emitter.addListener(NativeEvents.DID_DISMISS_SURVEY_HANDLER, onDismissHandler);
59
- NativeSurveys.setOnDismissHandler(onDismissHandler);
59
+ NativeSurveys.setOnDismissHandler();
60
60
  };
61
61
  /**
62
62
  * Shows survey with a specific token.
@@ -1,5 +1,5 @@
1
1
  import { NativeEventEmitter, NativeModule } from 'react-native';
2
- import type { DismissType, ExtendedBugReportMode, FloatingButtonPosition, InvocationEvent, InvocationOption, RecordingButtonPosition, ReportType, userConsentActionType } from '../utils/Enums';
2
+ import type { ExtendedBugReportMode, FloatingButtonPosition, InvocationEvent, InvocationOption, RecordingButtonPosition, ReportType, userConsentActionType } from '../utils/Enums';
3
3
  export interface BugReportingNativeModule extends NativeModule {
4
4
  setEnabled(isEnabled: boolean): void;
5
5
  show(type: ReportType, options: InvocationOption[]): void;
@@ -18,9 +18,9 @@ export interface BugReportingNativeModule extends NativeModule {
18
18
  setShakingThresholdForiPhone(threshold: number): void;
19
19
  setShakingThresholdForiPad(threshold: number): void;
20
20
  setShakingThresholdForAndroid(threshold: number): void;
21
- setOnInvokeHandler(handler: () => void): void;
22
- setDidSelectPromptOptionHandler(handler: (promptOption: string) => void): void;
23
- setOnSDKDismissedHandler(handler: (dismissType: DismissType, reportType: ReportType) => void): void;
21
+ setOnInvokeHandler(): void;
22
+ setDidSelectPromptOptionHandler(): void;
23
+ setOnSDKDismissedHandler(): void;
24
24
  addUserConsent(key: string, description: string, mandatory: boolean, checked: boolean, actionType?: userConsentActionType): void;
25
25
  setProactiveReportingConfigurations(enabled: boolean, gapBetweenModals: number, modalDelayAfterDetection: number): void;
26
26
  }
@@ -19,8 +19,8 @@ export interface CauseCrashData {
19
19
  }
20
20
  export interface CrashReportingNativeModule extends NativeModule {
21
21
  setEnabled(isEnabled: boolean): void;
22
- sendJSCrash(data: CrashData | string): Promise<void>;
23
- sendHandledJSCrash(data: CrashData | string, userAttributes?: Record<string, string> | null, fingerprint?: string | null, nonFatalExceptionLevel?: NonFatalErrorLevel | null): Promise<void>;
22
+ sendJSCrash(data: CrashData): Promise<void>;
23
+ sendHandledJSCrash(data: CrashData, userAttributes?: Record<string, string> | null, fingerprint?: string | null, nonFatalExceptionLevel?: NonFatalErrorLevel | null): Promise<void>;
24
24
  setNDKCrashesEnabled(isEnabled: boolean): Promise<void>;
25
25
  }
26
26
  export declare const NativeCrashReporting: CrashReportingNativeModule;
@@ -1,5 +1,4 @@
1
1
  import { NativeEventEmitter, NativeModule, ProcessedColorValue } from 'react-native';
2
- import type Report from '../models/Report';
3
2
  import type { AutoMaskingType, ColorTheme, InvocationEvent, Locale, LogLevel, ReproStepsMode, StringKey, WelcomeMessageMode } from '../utils/Enums';
4
3
  import type { NativeConstants } from './NativeConstants';
5
4
  import type { W3cExternalTraceAttributes } from '../models/W3cExternalTraceAttributes';
@@ -56,7 +55,7 @@ export interface LuciqNativeModule extends NativeModule {
56
55
  removeFeatureFlags(featureFlags: string[]): void;
57
56
  removeAllFeatureFlags(): void;
58
57
  setFileAttachment(filePath: string, fileName?: string): void;
59
- setPreSendingHandler(handler?: (report: Report) => void): void;
58
+ setPreSendingHandler(): void;
60
59
  appendTagToReport(tag: string): void;
61
60
  appendConsoleLogToReport(consoleLog: string): void;
62
61
  setUserAttributeToReport(key: string, value: string): void;
@@ -72,11 +71,14 @@ export interface LuciqNativeModule extends NativeModule {
72
71
  isW3ExternalGeneratedHeaderEnabled(): Promise<boolean>;
73
72
  isW3CaughtHeaderEnabled(): Promise<boolean>;
74
73
  registerFeatureFlagsChangeListener(): void;
75
- setOnFeaturesUpdatedListener(handler?: (params: any) => void): void;
74
+ setOnFeaturesUpdatedListener(): void;
76
75
  enableAutoMasking(autoMaskingTypes: AutoMaskingType[]): void;
77
76
  getNetworkBodyMaxSize(): Promise<number>;
78
77
  setTheme(theme: ThemeConfig): void;
79
78
  setFullscreen(isEnabled: boolean): void;
79
+ setWebViewMonitoringEnabled(isEnabled: boolean): void;
80
+ setWebViewNetworkTrackingEnabled(isEnabled: boolean): void;
81
+ setWebViewUserInteractionsTrackingEnabled(isEnabled: boolean): void;
80
82
  }
81
83
  export declare const NativeLuciq: LuciqNativeModule;
82
84
  export declare enum NativeEvents {
@@ -1,2 +1,25 @@
1
- import { NativeModules as ReactNativeModules } from 'react-native';
2
- export const NativeModules = ReactNativeModules;
1
+ import { NativeModules as ReactNativeModules, TurboModuleRegistry } from 'react-native';
2
+ const legacy = ReactNativeModules;
3
+ function resolve(name, fallback) {
4
+ return TurboModuleRegistry.get(name) ?? fallback;
5
+ }
6
+ const LCQAPM = resolve('LCQAPM', legacy.LCQAPM);
7
+ const LCQBugReporting = resolve('LCQBugReporting', legacy.LCQBugReporting);
8
+ const LCQCrashReporting = resolve('LCQCrashReporting', legacy.LCQCrashReporting);
9
+ const LCQFeatureRequests = resolve('LCQFeatureRequests', legacy.LCQFeatureRequests);
10
+ const Luciq = resolve('Luciq', legacy.Luciq);
11
+ const LCQReplies = resolve('LCQReplies', legacy.LCQReplies);
12
+ const LCQSurveys = resolve('LCQSurveys', legacy.LCQSurveys);
13
+ const LCQSessionReplay = resolve('LCQSessionReplay', legacy.LCQSessionReplay);
14
+ const LCQNetworkLogger = resolve('LCQNetworkLogger', legacy.LCQNetworkLogger);
15
+ export const NativeModules = {
16
+ LCQAPM,
17
+ LCQBugReporting,
18
+ LCQCrashReporting,
19
+ LCQFeatureRequests,
20
+ Luciq,
21
+ LCQReplies,
22
+ LCQSurveys,
23
+ LCQSessionReplay,
24
+ LCQNetworkLogger,
25
+ };
@@ -4,7 +4,7 @@ export interface RepliesNativeModule extends NativeModule {
4
4
  show(): void;
5
5
  hasChats(): Promise<boolean>;
6
6
  getUnreadRepliesCount(): Promise<number>;
7
- setOnNewReplyReceivedHandler(handler: () => void): void;
7
+ setOnNewReplyReceivedHandler(): void;
8
8
  setPushNotificationsEnabled(isEnabled: boolean): void;
9
9
  setInAppNotificationEnabled(isEnabled: boolean): void;
10
10
  setInAppNotificationSound(isEnabled: boolean): void;
@@ -11,8 +11,8 @@ export interface SurveysNativeModule extends NativeModule {
11
11
  hasRespondedToSurvey(surveyToken: string): Promise<boolean>;
12
12
  setShouldShowWelcomeScreen(shouldShowWelcomeScreen: boolean): void;
13
13
  setAppStoreURL(appStoreURL: string): void;
14
- setOnShowHandler(onShowHandler: () => void): void;
15
- setOnDismissHandler(onDismissHandler: () => void): void;
14
+ setOnShowHandler(): void;
15
+ setOnDismissHandler(): void;
16
16
  }
17
17
  export declare const NativeSurveys: SurveysNativeModule;
18
18
  export declare enum NativeEvents {
@@ -0,0 +1,21 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import type { UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes';
3
+ export interface Spec extends TurboModule {
4
+ setEnabled(isEnabled: boolean): void;
5
+ networkLogAndroid(requestStartTime: number, requestDuration: number, requestHeaders: string, requestBody: string, requestBodySize: number, requestMethod: string, requestUrl: string, requestContentType: string, responseHeaders: string, responseBody: string | null, responseBodySize: number, statusCode: number, responseContentType: string, errorDomain: string, w3cExternalTraceAttributes: UnsafeObject, gqlQueryName: string | null, serverErrorMessage: string | null): void;
6
+ setAppLaunchEnabled(isEnabled: boolean): void;
7
+ endAppLaunch(): void;
8
+ startFlow(name: string): void;
9
+ endFlow(name: string): void;
10
+ setFlowAttribute(name: string, key: string, value: string | null): void;
11
+ setAutoUITraceEnabled(isEnabled: boolean): void;
12
+ startUITrace(name: string): void;
13
+ endUITrace(): void;
14
+ lcqSleep(): void;
15
+ setScreenRenderingEnabled(isEnabled: boolean): void;
16
+ syncCustomSpan(name: string, startTimestamp: number, endTimestamp: number): Promise<void>;
17
+ isCustomSpanEnabled(): Promise<boolean>;
18
+ isAPMEnabled(): Promise<boolean>;
19
+ }
20
+ declare const _default: Spec;
21
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { TurboModuleRegistry } from 'react-native';
2
+ export default TurboModuleRegistry.getEnforcing('LCQAPM');
@@ -0,0 +1,29 @@
1
+ import type { TurboModule } from 'react-native';
2
+ export interface Spec extends TurboModule {
3
+ setEnabled(isEnabled: boolean): void;
4
+ show(type: string, options: string[]): void;
5
+ setInvocationEvents(events: string[]): void;
6
+ setOptions(options: string[]): void;
7
+ setExtendedBugReportMode(mode: string): void;
8
+ setReportTypes(types: string[]): void;
9
+ setDisclaimerText(text: string): void;
10
+ setCommentMinimumCharacterCount(limit: number, reportTypes: string[]): void;
11
+ setFloatingButtonEdge(edge: string, offset: number): void;
12
+ setVideoRecordingFloatingButtonPosition(buttonPosition: string): void;
13
+ setEnabledAttachmentTypes(screenshot: boolean, extraScreenshot: boolean, galleryImage: boolean, screenRecording: boolean): void;
14
+ setAutoScreenRecordingEnabled(isEnabled: boolean): void;
15
+ setAutoScreenRecordingDuration(maxDuration: number): void;
16
+ setViewHierarchyEnabled(isEnabled: boolean): void;
17
+ setShakingThresholdForiPhone(threshold: number): void;
18
+ setShakingThresholdForiPad(threshold: number): void;
19
+ setShakingThresholdForAndroid(threshold: number): void;
20
+ setOnInvokeHandler(): void;
21
+ setDidSelectPromptOptionHandler(): void;
22
+ setOnSDKDismissedHandler(): void;
23
+ addUserConsent(key: string, description: string, mandatory: boolean, checked: boolean, actionType: string | null): void;
24
+ setProactiveReportingConfigurations(enabled: boolean, gapBetweenModals: number, modalDelayAfterDetection: number): void;
25
+ addListener(eventName: string): void;
26
+ removeListeners(count: number): void;
27
+ }
28
+ declare const _default: Spec;
29
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { TurboModuleRegistry } from 'react-native';
2
+ export default TurboModuleRegistry.getEnforcing('LCQBugReporting');
@@ -0,0 +1,12 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import type { UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes';
3
+ export interface Spec extends TurboModule {
4
+ setEnabled(isEnabled: boolean): void;
5
+ sendJSCrash(data: UnsafeObject): Promise<void>;
6
+ sendHandledJSCrash(data: UnsafeObject, userAttributes: UnsafeObject | null, fingerprint: string | null, nonFatalExceptionLevel: string | null): Promise<void>;
7
+ setNDKCrashesEnabled(isEnabled: boolean): Promise<void>;
8
+ addListener(eventName: string): void;
9
+ removeListeners(count: number): void;
10
+ }
11
+ declare const _default: Spec;
12
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { TurboModuleRegistry } from 'react-native';
2
+ export default TurboModuleRegistry.getEnforcing('LCQCrashReporting');
@@ -0,0 +1,8 @@
1
+ import type { TurboModule } from 'react-native';
2
+ export interface Spec extends TurboModule {
3
+ setEnabled(isEnabled: boolean): void;
4
+ show(): void;
5
+ setEmailFieldRequiredForFeatureRequests(isEmailFieldRequired: boolean, types: string[]): void;
6
+ }
7
+ declare const _default: Spec;
8
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { TurboModuleRegistry } from 'react-native';
2
+ export default TurboModuleRegistry.getEnforcing('LCQFeatureRequests');
@@ -0,0 +1,80 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import type { UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes';
3
+ export interface Spec extends TurboModule {
4
+ getAllConstants(): UnsafeObject;
5
+ setEnabled(isEnabled: boolean): void;
6
+ isBuilt(): Promise<boolean>;
7
+ init(token: string, invocationEvents: string[], debugLogsLevel: string, useNativeNetworkInterception: boolean, codePushVersion: string | null, appVariant: string | null, options: UnsafeObject | null, overAirVersion: UnsafeObject | null): void;
8
+ show(): void;
9
+ setCodePushVersion(version: string): void;
10
+ setOverAirVersion(OTAserviceVersion: UnsafeObject): void;
11
+ setAppVariant(appVariant: string): void;
12
+ setLCQLogPrintsToConsole(printsToConsole: boolean): void;
13
+ setSessionProfilerEnabled(isEnabled: boolean): void;
14
+ setLocale(sdkLocale: string): void;
15
+ setColorTheme(sdkTheme: string): void;
16
+ setPrimaryColor(color: number | null): void;
17
+ setString(string: string, key: string): void;
18
+ networkLogAndroid(url: string, requestBody: string, responseBody: string | null, method: string, responseCode: number, requestHeaders: string, responseHeaders: string, duration: number): void;
19
+ networkLogIOS(url: string, method: string, requestBody: string | null, requestBodySize: number, responseBody: string | null, responseBodySize: number, responseCode: number, requestHeaders: UnsafeObject, responseHeaders: UnsafeObject, contentType: string, errorDomain: string, errorCode: number, startTime: number, duration: number, gqlQueryName: string | null, serverErrorMessage: string | null, w3cExternalTraceAttributes: UnsafeObject): void;
20
+ setNetworkLoggingEnabled(isEnabled: boolean): void;
21
+ setNetworkLogBodyEnabled(isEnabled: boolean): void;
22
+ setReproStepsConfig(bugMode: string, crashMode: string, sessionReplay: string): void;
23
+ setTrackUserSteps(isEnabled: boolean): void;
24
+ reportScreenChange(firstScreen: string): void;
25
+ reportCurrentViewChange(screenName: string): void;
26
+ addPrivateView(nativeTag: number | null): void;
27
+ removePrivateView(nativeTag: number | null): void;
28
+ logVerbose(message: string): void;
29
+ logInfo(message: string): void;
30
+ logDebug(message: string): void;
31
+ logError(message: string): void;
32
+ logWarn(message: string): void;
33
+ clearLogs(): void;
34
+ identifyUser(email: string, name: string, id: string | null): void;
35
+ logOut(): void;
36
+ logUserEvent(name: string): void;
37
+ setUserData(data: string): void;
38
+ setUserAttribute(key: string, value: string): void;
39
+ getUserAttribute(key: string): Promise<string>;
40
+ removeUserAttribute(key: string): void;
41
+ getAllUserAttributes(): Promise<UnsafeObject>;
42
+ clearAllUserAttributes(): void;
43
+ showWelcomeMessageWithMode(mode: string): void;
44
+ setWelcomeMessageMode(mode: string): void;
45
+ appendTags(tags: string[]): void;
46
+ resetTags(): void;
47
+ getTags(): Promise<string[]>;
48
+ addFeatureFlags(featureFlags: UnsafeObject): void;
49
+ removeFeatureFlags(featureFlags: string[]): void;
50
+ removeAllFeatureFlags(): void;
51
+ setFileAttachment(filePath: string, fileName: string | null): void;
52
+ setPreSendingHandler(): void;
53
+ appendTagToReport(tag: string): void;
54
+ appendConsoleLogToReport(consoleLog: string): void;
55
+ setUserAttributeToReport(key: string, value: string): void;
56
+ logDebugToReport(log: string): void;
57
+ logVerboseToReport(log: string): void;
58
+ logWarnToReport(log: string): void;
59
+ logErrorToReport(log: string): void;
60
+ logInfoToReport(log: string): void;
61
+ addFileAttachmentWithURLToReport(url: string, filename: string | null): void;
62
+ addFileAttachmentWithDataToReport(data: string, filename: string | null): void;
63
+ willRedirectToStore(): void;
64
+ isW3ExternalTraceIDEnabled(): Promise<boolean>;
65
+ isW3ExternalGeneratedHeaderEnabled(): Promise<boolean>;
66
+ isW3CaughtHeaderEnabled(): Promise<boolean>;
67
+ registerFeatureFlagsChangeListener(): void;
68
+ setOnFeaturesUpdatedListener(): void;
69
+ enableAutoMasking(autoMaskingTypes: string[]): void;
70
+ getNetworkBodyMaxSize(): Promise<number>;
71
+ setTheme(theme: UnsafeObject): void;
72
+ setFullscreen(isEnabled: boolean): void;
73
+ setWebViewMonitoringEnabled(isEnabled: boolean): void;
74
+ setWebViewNetworkTrackingEnabled(isEnabled: boolean): void;
75
+ setWebViewUserInteractionsTrackingEnabled(isEnabled: boolean): void;
76
+ addListener(eventName: string): void;
77
+ removeListeners(count: number): void;
78
+ }
79
+ declare const _default: Spec;
80
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { TurboModuleRegistry } from 'react-native';
2
+ export default TurboModuleRegistry.getEnforcing('Luciq');
@@ -0,0 +1,16 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import type { UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes';
3
+ export interface Spec extends TurboModule {
4
+ isNativeInterceptionEnabled(): boolean;
5
+ registerNetworkLogsListener(type: string | null): void;
6
+ updateNetworkLogSnapshot(url: string, callbackID: string, requestBody: string | null, responseBody: string | null, responseCode: number, requestHeaders: UnsafeObject, responseHeaders: UnsafeObject): void;
7
+ hasAPMNetworkPlugin(): Promise<boolean>;
8
+ resetNetworkLogsListener(): void;
9
+ setNetworkLoggingRequestFilterPredicateIOS(id: string, value: boolean): void;
10
+ forceStartNetworkLoggingIOS(): void;
11
+ forceStopNetworkLoggingIOS(): void;
12
+ addListener(eventName: string): void;
13
+ removeListeners(count: number): void;
14
+ }
15
+ declare const _default: Spec;
16
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { TurboModuleRegistry } from 'react-native';
2
+ export default TurboModuleRegistry.getEnforcing('LCQNetworkLogger');
@@ -0,0 +1,21 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import type { UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes';
3
+ export interface Spec extends TurboModule {
4
+ setEnabled(isEnabled: boolean): void;
5
+ show(): void;
6
+ hasChats(): Promise<boolean>;
7
+ getUnreadRepliesCount(): Promise<number>;
8
+ setOnNewReplyReceivedHandler(): void;
9
+ setPushNotificationsEnabled(isEnabled: boolean): void;
10
+ setInAppNotificationEnabled(isEnabled: boolean): void;
11
+ setInAppNotificationSound(isEnabled: boolean): void;
12
+ setPushNotificationRegistrationToken(token: string): void;
13
+ showNotification(data: UnsafeObject): void;
14
+ setNotificationIcon(resourceId: number): void;
15
+ setPushNotificationChannelId(id: string): void;
16
+ setSystemReplyNotificationSoundEnabled(isEnabled: boolean): void;
17
+ addListener(eventName: string): void;
18
+ removeListeners(count: number): void;
19
+ }
20
+ declare const _default: Spec;
21
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { TurboModuleRegistry } from 'react-native';
2
+ export default TurboModuleRegistry.getEnforcing('LCQReplies');
@@ -0,0 +1,17 @@
1
+ import type { TurboModule } from 'react-native';
2
+ export interface Spec extends TurboModule {
3
+ setEnabled(isEnabled: boolean): void;
4
+ setNetworkLogsEnabled(isEnabled: boolean): void;
5
+ setLuciqLogsEnabled(isEnabled: boolean): void;
6
+ setUserStepsEnabled(isEnabled: boolean): void;
7
+ getSessionReplayLink(): Promise<string>;
8
+ setSyncCallback(): Promise<void>;
9
+ evaluateSync(shouldSync: boolean): void;
10
+ setCapturingMode(mode: string): void;
11
+ setScreenshotQuality(quality: string): void;
12
+ setScreenshotCaptureInterval(intervalMs: number): void;
13
+ addListener(eventName: string): void;
14
+ removeListeners(count: number): void;
15
+ }
16
+ declare const _default: Spec;
17
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { TurboModuleRegistry } from 'react-native';
2
+ export default TurboModuleRegistry.getEnforcing('LCQSessionReplay');
@@ -0,0 +1,18 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import type { UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes';
3
+ export interface Spec extends TurboModule {
4
+ setEnabled(isEnabled: boolean): void;
5
+ setAutoShowingEnabled(autoShowingSurveysEnabled: boolean): void;
6
+ showSurvey(surveyToken: string): void;
7
+ showSurveysIfAvailable(): void;
8
+ getAvailableSurveys(): Promise<UnsafeObject[]>;
9
+ hasRespondedToSurvey(surveyToken: string): Promise<boolean>;
10
+ setShouldShowWelcomeScreen(shouldShowWelcomeScreen: boolean): void;
11
+ setAppStoreURL(appStoreURL: string): void;
12
+ setOnShowHandler(): void;
13
+ setOnDismissHandler(): void;
14
+ addListener(eventName: string): void;
15
+ removeListeners(count: number): void;
16
+ }
17
+ declare const _default: Spec;
18
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { TurboModuleRegistry } from 'react-native';
2
+ export default TurboModuleRegistry.getEnforcing('LCQSurveys');
@@ -1,5 +1,7 @@
1
1
  import { NativeLuciq } from '../native/NativeLuciq';
2
- const constants = NativeLuciq.getConstants();
2
+ const constants = typeof NativeLuciq.getConstants === 'function'
3
+ ? NativeLuciq.getConstants()
4
+ : NativeLuciq.getAllConstants();
3
5
  /**
4
6
  * Verbosity level of the SDK debug logs. This has nothing to do with `Luciq.log`,
5
7
  * and only affect the logs used to debug the SDK itself.
@@ -1,9 +1,3 @@
1
- export declare function initFeatureFlagsCache(): Promise<void>;
2
- export declare function getCachedW3cFlags(): {
3
- isW3cExternalTraceIDEnabled: boolean;
4
- isW3cExternalGeneratedHeaderEnabled: boolean;
5
- isW3cCaughtHeaderEnabled: boolean;
6
- };
7
1
  export declare const FeatureFlags: {
8
2
  isW3ExternalTraceID: () => Promise<boolean>;
9
3
  isW3ExternalGeneratedHeader: () => Promise<boolean>;
@@ -1,34 +1,5 @@
1
1
  import { NativeLuciq } from '../native/NativeLuciq';
2
2
  import { _registerFeatureFlagsChangeListener } from '../modules/Luciq';
3
- import { Logger } from './logger';
4
- const TAG = 'LCQ-RN-NET:';
5
- let cachedW3cFlags = {
6
- isW3cExternalTraceIDEnabled: false,
7
- isW3cExternalGeneratedHeaderEnabled: false,
8
- isW3cCaughtHeaderEnabled: false,
9
- };
10
- export async function initFeatureFlagsCache() {
11
- Logger.debug(TAG, '[FeatureFlags] Initializing W3C feature flags cache from native bridge...');
12
- try {
13
- const [traceID, generatedHeader, caughtHeader] = await Promise.all([
14
- NativeLuciq.isW3ExternalTraceIDEnabled(),
15
- NativeLuciq.isW3ExternalGeneratedHeaderEnabled(),
16
- NativeLuciq.isW3CaughtHeaderEnabled(),
17
- ]);
18
- cachedW3cFlags = {
19
- isW3cExternalTraceIDEnabled: traceID,
20
- isW3cExternalGeneratedHeaderEnabled: generatedHeader,
21
- isW3cCaughtHeaderEnabled: caughtHeader,
22
- };
23
- Logger.debug(TAG, `[FeatureFlags] Cache initialized: traceID=${traceID}, generatedHeader=${generatedHeader}, caughtHeader=${caughtHeader}`);
24
- }
25
- catch (e) {
26
- Logger.debug(TAG, '[FeatureFlags] Failed to initialize cache, using defaults (all false):', e);
27
- }
28
- }
29
- export function getCachedW3cFlags() {
30
- return cachedW3cFlags;
31
- }
32
3
  export const FeatureFlags = {
33
4
  isW3ExternalTraceID: () => NativeLuciq.isW3ExternalTraceIDEnabled(),
34
5
  isW3ExternalGeneratedHeader: () => NativeLuciq.isW3ExternalGeneratedHeaderEnabled(),
@@ -37,12 +8,6 @@ export const FeatureFlags = {
37
8
  };
38
9
  export const registerFeatureFlagsListener = () => {
39
10
  _registerFeatureFlagsChangeListener((res) => {
40
- Logger.debug(TAG, `[FeatureFlags] Flags updated from native listener: traceID=${res.isW3ExternalTraceIDEnabled}, generatedHeader=${res.isW3ExternalGeneratedHeaderEnabled}, caughtHeader=${res.isW3CaughtHeaderEnabled}, bodyLimit=${res.networkBodyLimit}`);
41
- cachedW3cFlags = {
42
- isW3cExternalTraceIDEnabled: res.isW3ExternalTraceIDEnabled,
43
- isW3cExternalGeneratedHeaderEnabled: res.isW3ExternalGeneratedHeaderEnabled,
44
- isW3cCaughtHeaderEnabled: res.isW3CaughtHeaderEnabled,
45
- };
46
11
  FeatureFlags.isW3ExternalTraceID = async () => {
47
12
  return res.isW3ExternalTraceIDEnabled;
48
13
  };
@@ -28,7 +28,7 @@ export declare const stringifyIfNotString: (input: unknown) => string;
28
28
  * `sendCrashReport(error, NativeCrashReporting.sendJSCrash);`
29
29
  *
30
30
  */
31
- export declare function sendCrashReport(error: ExtendedError, remoteSenderCallback: (json: CrashData | string) => Promise<void>): Promise<void>;
31
+ export declare function sendCrashReport(error: ExtendedError, remoteSenderCallback: (json: CrashData) => Promise<void>): Promise<void>;
32
32
  /**
33
33
  * Generate random 32 bit unsigned integer Hexadecimal (8 chars) lower case letters
34
34
  * Should not return all zeros
@@ -3,7 +3,6 @@ import parseErrorStackLib from 'react-native/Libraries/Core/Devtools/parseErrorS
3
3
  import { NativeCrashReporting } from '../native/NativeCrashReporting';
4
4
  import { NativeLuciq } from '../native/NativeLuciq';
5
5
  import { NativeAPM } from '../native/NativeAPM';
6
- import { Logger } from './logger';
7
6
  import * as NetworkLogger from '../modules/NetworkLogger';
8
7
  import { NativeNetworkLogger, NativeNetworkLoggerEvent, NetworkListenerType, NetworkLoggerEmitter, } from '../native/NativeNetworkLogger';
9
8
  let apmFlags = {
@@ -129,9 +128,6 @@ export const stringifyIfNotString = (input) => {
129
128
  */
130
129
  export async function sendCrashReport(error, remoteSenderCallback) {
131
130
  const jsonObject = getCrashDataFromError(error);
132
- if (Platform.OS === 'android') {
133
- return remoteSenderCallback(JSON.stringify(jsonObject));
134
- }
135
131
  return remoteSenderCallback(jsonObject);
136
132
  }
137
133
  /**
@@ -182,12 +178,10 @@ export const reportNetworkLog = (network) => {
182
178
  if (Platform.OS === 'android') {
183
179
  const requestHeaders = JSON.stringify(network.requestHeaders);
184
180
  const responseHeaders = JSON.stringify(network.responseHeaders);
185
- Logger.debug('LCQ-RN-NET:', `[reportNetworkLog] Sending to NativeLuciq.networkLogAndroid: ${network.method} ${network.url}, status=${network.responseCode}, duration=${network.duration}ms, error=${network.errorDomain || 'none'}`);
186
181
  NativeLuciq.networkLogAndroid(network.url, network.requestBody, network.responseBody, network.method, network.responseCode, requestHeaders, responseHeaders, network.duration);
187
182
  if (!apmFlags.isNativeInterceptionFeatureEnabled ||
188
183
  !apmFlags.hasAPMNetworkPlugin ||
189
184
  !apmFlags.shouldEnableNativeInterception) {
190
- Logger.debug('LCQ-RN-NET:', `[reportNetworkLog] Also sending to NativeAPM.networkLogAndroid (native interception disabled): ${network.method} ${network.url}`);
191
185
  NativeAPM.networkLogAndroid(network.startTime, network.duration, requestHeaders, network.requestBody, network.requestBodySize, network.method, network.url, network.requestContentType, responseHeaders, network.responseBody, network.responseBodySize, network.responseCode, network.contentType, network.errorDomain, {
192
186
  isW3cHeaderFound: network.isW3cHeaderFound,
193
187
  partialId: network.partialId,
@@ -196,9 +190,6 @@ export const reportNetworkLog = (network) => {
196
190
  w3cCaughtHeader: network.w3cCaughtHeader,
197
191
  }, network.gqlQueryName, network.serverErrorMessage);
198
192
  }
199
- else {
200
- Logger.debug('LCQ-RN-NET:', `[reportNetworkLog] Skipping NativeAPM.networkLogAndroid (native interception enabled): nativeFeature=${apmFlags.isNativeInterceptionFeatureEnabled}, hasPlugin=${apmFlags.hasAPMNetworkPlugin}, shouldEnable=${apmFlags.shouldEnableNativeInterception}`);
201
- }
202
193
  }
203
194
  else {
204
195
  NativeLuciq.networkLogIOS(network.url, network.method, network.requestBody, network.requestBodySize, network.responseBody, network.responseBodySize, network.responseCode, network.requestHeaders, network.responseHeaders, network.contentType, network.errorDomain, network.errorCode, network.startTime, network.duration, network.gqlQueryName, network.serverErrorMessage, {