@truewatchtech/react-native-mobile 0.4.0-alpha.4 → 0.4.2

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 (155) hide show
  1. package/FTMobileReactNativeSDK.podspec +31 -2
  2. package/android/build.gradle +7 -19
  3. package/android/src/main/java/com/ft/sdk/reactnative/FTMobileImpl.java +472 -5
  4. package/android/src/main/java/com/ft/sdk/reactnative/FTRUMImpl.java +12 -0
  5. package/android/src/newarch/java/com/ft/sdk/reactnative/FTLogModule.java +7 -14
  6. package/android/src/newarch/java/com/ft/sdk/reactnative/FTMobileModule.java +46 -12
  7. package/android/src/newarch/java/com/ft/sdk/reactnative/FTRUMModule.java +12 -13
  8. package/android/src/newarch/java/com/ft/sdk/reactnative/FTTraceModule.java +6 -8
  9. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTMobileModule.java +34 -2
  10. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTRUMModule.java +5 -0
  11. package/android/src/rnpost74/java/com/ft/sdk/reactnative/FTMobilePackage.java +14 -3
  12. package/android/src/rnpre74/java/com/ft/sdk/reactnative/FTMobilePackage.java +0 -3
  13. package/ios/FTMobileReactNative.h +9 -5
  14. package/ios/FTMobileReactNative.mm +625 -0
  15. package/ios/FTReactNativeLog.h +8 -3
  16. package/ios/FTReactNativeLog.mm +79 -0
  17. package/ios/FTReactNativeRUM.h +8 -3
  18. package/ios/{FTReactNativeRUM.m → FTReactNativeRUM.mm} +143 -84
  19. package/ios/FTReactNativeTrace.h +8 -2
  20. package/ios/FTReactNativeTrace.mm +74 -0
  21. package/ios/FtMobileAgent.xcodeproj/project.pbxproj +17 -1
  22. package/lib/commonjs/ft_logger.js +14 -13
  23. package/lib/commonjs/ft_logger.js.map +1 -1
  24. package/lib/commonjs/ft_mobile_agent.js +155 -6
  25. package/lib/commonjs/ft_mobile_agent.js.map +1 -1
  26. package/lib/commonjs/ft_rum.js +55 -21
  27. package/lib/commonjs/ft_rum.js.map +1 -1
  28. package/lib/commonjs/ft_tracing.js +29 -10
  29. package/lib/commonjs/ft_tracing.js.map +1 -1
  30. package/lib/commonjs/index.js +24 -13
  31. package/lib/commonjs/index.js.map +1 -1
  32. package/lib/commonjs/rum/FTRumActionTracking.js +10 -4
  33. package/lib/commonjs/rum/FTRumActionTracking.js.map +1 -1
  34. package/lib/commonjs/rum/FTRumErrorTracking.js +4 -4
  35. package/lib/commonjs/rum/FTRumErrorTracking.js.map +1 -1
  36. package/lib/commonjs/specs/NativeFTMobileReactNative.js +10 -0
  37. package/lib/commonjs/specs/NativeFTMobileReactNative.js.map +1 -0
  38. package/lib/commonjs/specs/NativeFTReactNativeLog.js +10 -0
  39. package/lib/commonjs/specs/NativeFTReactNativeLog.js.map +1 -0
  40. package/lib/commonjs/specs/NativeFTReactNativeRUM.js +10 -0
  41. package/lib/commonjs/specs/NativeFTReactNativeRUM.js.map +1 -0
  42. package/lib/commonjs/specs/NativeFTReactNativeTrace.js +10 -0
  43. package/lib/commonjs/specs/NativeFTReactNativeTrace.js.map +1 -0
  44. package/lib/commonjs/version.js +1 -1
  45. package/lib/commonjs/version.js.map +1 -1
  46. package/lib/module/ft_logger.js +14 -12
  47. package/lib/module/ft_logger.js.map +1 -1
  48. package/lib/module/ft_mobile_agent.js +161 -5
  49. package/lib/module/ft_mobile_agent.js.map +1 -1
  50. package/lib/module/ft_rum.js +54 -16
  51. package/lib/module/ft_rum.js.map +1 -1
  52. package/lib/module/ft_tracing.js +29 -9
  53. package/lib/module/ft_tracing.js.map +1 -1
  54. package/lib/module/index.js +3 -4
  55. package/lib/module/index.js.map +1 -1
  56. package/lib/module/rum/FTRumActionTracking.js +10 -4
  57. package/lib/module/rum/FTRumActionTracking.js.map +1 -1
  58. package/lib/module/rum/FTRumErrorTracking.js +4 -4
  59. package/lib/module/rum/FTRumErrorTracking.js.map +1 -1
  60. package/lib/module/specs/NativeFTMobileReactNative.js +5 -0
  61. package/lib/module/specs/NativeFTMobileReactNative.js.map +1 -0
  62. package/lib/module/specs/NativeFTReactNativeLog.js +5 -0
  63. package/lib/module/specs/NativeFTReactNativeLog.js.map +1 -0
  64. package/lib/module/specs/NativeFTReactNativeRUM.js +5 -0
  65. package/lib/module/specs/NativeFTReactNativeRUM.js.map +1 -0
  66. package/lib/module/specs/NativeFTReactNativeTrace.js +5 -0
  67. package/lib/module/specs/NativeFTReactNativeTrace.js.map +1 -0
  68. package/lib/module/version.js +1 -1
  69. package/lib/module/version.js.map +1 -1
  70. package/lib/typescript/ft_logger.d.ts +6 -6
  71. package/lib/typescript/ft_mobile_agent.d.ts +169 -14
  72. package/lib/typescript/ft_rum.d.ts +32 -8
  73. package/lib/typescript/ft_tracing.d.ts +6 -6
  74. package/lib/typescript/index.d.ts +3 -4
  75. package/lib/typescript/specs/NativeFTMobileReactNative.d.ts +75 -0
  76. package/lib/typescript/specs/NativeFTReactNativeLog.d.ts +23 -0
  77. package/lib/typescript/specs/NativeFTReactNativeRUM.d.ts +89 -0
  78. package/lib/typescript/specs/NativeFTReactNativeTrace.d.ts +24 -0
  79. package/lib/typescript/version.d.ts +1 -1
  80. package/package.json +26 -93
  81. package/scripts/replace-react-require.js +37 -38
  82. package/src/ft_logger.tsx +72 -40
  83. package/src/ft_mobile_agent.tsx +378 -91
  84. package/src/ft_rum.tsx +227 -121
  85. package/src/ft_tracing.tsx +58 -37
  86. package/src/index.tsx +58 -18
  87. package/src/rum/FTRumActionTracking.tsx +212 -204
  88. package/src/rum/FTRumErrorTracking.tsx +70 -71
  89. package/src/specs/NativeFTMobileReactNative.ts +83 -0
  90. package/src/specs/NativeFTReactNativeLog.ts +29 -0
  91. package/src/specs/NativeFTReactNativeRUM.ts +104 -0
  92. package/src/specs/NativeFTReactNativeTrace.ts +26 -0
  93. package/src/version.ts +1 -1
  94. package/LICENSE +0 -201
  95. package/android/.project +0 -17
  96. package/android/.settings/org.eclipse.buildship.core.prefs +0 -13
  97. package/android/gradlew +0 -185
  98. package/android/local.properties +0 -8
  99. package/android/src/main/java/com/ft/sdk/InnerClassProxy.java +0 -8
  100. package/android/src/main/java/com/ft/sdk/reactnative/FTSessionReplayImpl.java +0 -60
  101. package/android/src/main/java/com/ft/sdk/reactnative/extensions/ReactDrawablesExt.java +0 -155
  102. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/NoopTextPropertiesResolver.java +0 -23
  103. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/ReactNativeSessionReplayExtensionSupport.java +0 -57
  104. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/ShadowNodeWrapper.java +0 -84
  105. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/TextPropertiesResolver.java +0 -20
  106. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/mappers/DefaultMapper.java +0 -78
  107. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/mappers/Pair.java +0 -11
  108. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/mappers/ReactEditTextMapper.java +0 -136
  109. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/mappers/ReactNativeImageViewMapper.java +0 -117
  110. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/mappers/ReactTextMapper.java +0 -57
  111. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/mappers/ReactViewGroupMapper.java +0 -22
  112. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/mappers/ReactViewModalMapper.java +0 -21
  113. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/resources/ReactDrawableCopier.java +0 -35
  114. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/utils/DrawableUtils.java +0 -34
  115. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/utils/ReflectionUtils.java +0 -43
  116. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/utils/text/FabricTextViewUtils.java +0 -69
  117. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/utils/text/LegacyTextViewUtils.java +0 -97
  118. package/android/src/main/java/com/ft/sdk/reactnative/sessionreplay/utils/text/TextViewUtils.java +0 -184
  119. package/android/src/main/java/com/ft/sdk/reactnative/utils/ColorUtils.java +0 -24
  120. package/android/src/newarch/java/com/ft/sdk/reactnative/FTSessionReplayModule.java +0 -30
  121. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTSessionReplayModule.java +0 -25
  122. package/android/src/rn69/java/com/ft/sdk/reactnative/sessionreplay/utils/ReactViewBackgroundDrawableUtils.java +0 -100
  123. package/android/src/rn75/java/com/ft/sdk/reactnative/sessionreplay/extensions/LengthPercentageExt.java +0 -27
  124. package/android/src/rn75/java/com/ft/sdk/reactnative/sessionreplay/utils/ReactViewBackgroundDrawableUtils.java +0 -116
  125. package/android/src/rn76/java/com/ft/sdk/reactnative/sessionreplay/extensions/LengthPercentageExt.java +0 -38
  126. package/android/src/rn76/java/com/ft/sdk/reactnative/sessionreplay/utils/ReactViewBackgroundDrawableUtils.java +0 -117
  127. package/android/src/rn79/java/com/ft/sdk/reactnative/sessionreplay/extensions/LengthPercentageExt.java +0 -38
  128. package/android/src/rn79/java/com/ft/sdk/reactnative/sessionreplay/utils/ReactViewBackgroundDrawableUtils.java +0 -132
  129. package/android/src/rn80/java/com/ft/sdk/reactnative/sessionreplay/extensions/ComputedBorderRadiusExt.java +0 -58
  130. package/android/src/rn80/java/com/ft/sdk/reactnative/sessionreplay/utils/ReactViewBackgroundDrawableUtils.java +0 -190
  131. package/android/src/rnlegacy/java/com/ft/sdk/reactnative/sessionreplay/utils/ReactViewBackgroundDrawableUtils.java +0 -120
  132. package/ios/.idea/.name +0 -1
  133. package/ios/.idea/ios.iml +0 -2
  134. package/ios/.idea/modules.xml +0 -8
  135. package/ios/.idea/vcs.xml +0 -6
  136. package/ios/.idea/xcode.xml +0 -4
  137. package/ios/FTMobileReactNative.m +0 -184
  138. package/ios/FTRCTTextViewRecorder.h +0 -33
  139. package/ios/FTRCTTextViewRecorder.m +0 -120
  140. package/ios/FTReactNativeLog.m +0 -60
  141. package/ios/FTReactNativeSessionReplay.h +0 -6
  142. package/ios/FTReactNativeSessionReplay.mm +0 -44
  143. package/ios/FTReactNativeTrace.m +0 -56
  144. package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -4
  145. package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/xcuserdata/Brandon.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  146. package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/xcuserdata/Brandon.xcuserdatad/xcschemes/xcschememanagement.plist +0 -5
  147. package/ios/FtMobileAgent.xcodeproj/xcuserdata/Brandon.xcuserdatad/xcschemes/FtMobileAgent.xcscheme +0 -56
  148. package/ios/FtMobileAgent.xcodeproj/xcuserdata/Brandon.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  149. package/ios/RCTVersion.h +0 -8
  150. package/lib/commonjs/ft_session_replay.js +0 -34
  151. package/lib/commonjs/ft_session_replay.js.map +0 -1
  152. package/lib/module/ft_session_replay.js +0 -29
  153. package/lib/module/ft_session_replay.js.map +0 -1
  154. package/lib/typescript/ft_session_replay.d.ts +0 -27
  155. package/src/ft_session_replay.tsx +0 -34
@@ -1 +1 @@
1
- {"version":3,"names":["FTMobileConfig","FTMobileReactNative","EnvType","FTDBCacheDiscard","FTLogConfig","FTReactNativeLog","FTLogStatus","FTLogCacheDiscard","FTRUMConfig","FTRUMResource","FTReactNativeRUM","ErrorMonitorType","DeviceMetricsMonitorType","DetectFrequency","FTRUMResourceMetrics","FTRUMCacheDiscard","FTTraceConfig","FTReactNativeTrace","TraceType","FTSessionReplayConfig","SessionReplayPrivacy","FTReactNativeSessionReplay","FTRumActionTracking","FTRumErrorTracking"],"sources":["index.tsx"],"sourcesContent":["import {FTMobileConfig,FTMobileReactNative,EnvType,FTDBCacheDiscard} from './ft_mobile_agent'\nimport {FTLogConfig,FTReactNativeLog,FTLogStatus,FTLogCacheDiscard} from './ft_logger'\nimport {FTRUMConfig,FTRUMResource,FTReactNativeRUM,ErrorMonitorType,DeviceMetricsMonitorType,DetectFrequency,FTRUMResourceMetrics,FTRUMCacheDiscard} from './ft_rum'\nimport {FTTraceConfig,FTReactNativeTrace,TraceType} from './ft_tracing'\nimport {FTSessionReplayConfig,SessionReplayPrivacy,FTReactNativeSessionReplay} from './ft_session_replay'\nimport {FTRumActionTracking} from './rum/FTRumActionTracking'\nimport {FTRumErrorTracking} from './rum/FTRumErrorTracking'\n\n\n export {\n FTMobileReactNative,FTMobileConfig,EnvType,FTDBCacheDiscard,\n FTLogConfig, FTReactNativeLog,FTLogStatus,FTLogCacheDiscard,\n FTRUMConfig,FTReactNativeRUM,FTRUMResource,ErrorMonitorType,DeviceMetricsMonitorType,DetectFrequency,FTRUMResourceMetrics,FTRUMCacheDiscard,\n FTTraceConfig,FTReactNativeTrace,TraceType,\n FTSessionReplayConfig,SessionReplayPrivacy,FTReactNativeSessionReplay,\n FTRumActionTracking,\n FTRumErrorTracking\n };\n\n"],"mappings":"AAAA,SAAQA,cAAc,EAACC,mBAAmB,EAACC,OAAO,EAACC,gBAAgB,QAAO,mBAAmB;AAC7F,SAAQC,WAAW,EAACC,gBAAgB,EAACC,WAAW,EAACC,iBAAiB,QAAO,aAAa;AACtF,SAAQC,WAAW,EAACC,aAAa,EAACC,gBAAgB,EAACC,gBAAgB,EAACC,wBAAwB,EAACC,eAAe,EAACC,oBAAoB,EAACC,iBAAiB,QAAO,UAAU;AACpK,SAAQC,aAAa,EAACC,kBAAkB,EAACC,SAAS,QAAO,cAAc;AACvE,SAAQC,qBAAqB,EAACC,oBAAoB,EAACC,0BAA0B,QAAO,qBAAqB;AACzG,SAAQC,mBAAmB,QAAO,2BAA2B;AAC7D,SAAQC,kBAAkB,QAAO,0BAA0B;AAG1D,SACEtB,mBAAmB,EAACD,cAAc,EAACE,OAAO,EAACC,gBAAgB,EAC3DC,WAAW,EAAEC,gBAAgB,EAACC,WAAW,EAACC,iBAAiB,EAC3DC,WAAW,EAACE,gBAAgB,EAACD,aAAa,EAACE,gBAAgB,EAACC,wBAAwB,EAACC,eAAe,EAACC,oBAAoB,EAACC,iBAAiB,EAC3IC,aAAa,EAACC,kBAAkB,EAACC,SAAS,EAC1CC,qBAAqB,EAACC,oBAAoB,EAACC,0BAA0B,EACrEC,mBAAmB,EACnBC,kBAAkB","ignoreList":[]}
1
+ {"version":3,"names":["FTMobileConfig","FTMobileReactNative","EnvType","FTDBCacheDiscard","FTRemoteConfigResult","FTRemoteConfigOverrideRule","FTRemoteConfigOverrideMatch","FTRemoteConfigOverrideValues","FTLogConfig","FTReactNativeLog","FTLogStatus","FTLogCacheDiscard","FTRUMConfig","FTRUMResource","FTReactNativeRUM","ErrorMonitorType","DeviceMetricsMonitorType","DetectFrequency","FTRUMResourceMetrics","FTRUMCacheDiscard","IOSCrashMonitoringType","FTTraceConfig","FTReactNativeTrace","TraceType","FTRumActionTracking","FTRumErrorTracking"],"sources":["index.tsx"],"sourcesContent":["import {\n FTMobileConfig,\n FTMobileReactNative,\n EnvType,\n FTDBCacheDiscard,\n FTRemoteConfigResult,\n FTRemoteConfigOverrideRule,\n FTRemoteConfigOverrideMatch,\n FTRemoteConfigOverrideValues,\n} from './ft_mobile_agent';\nimport {\n FTLogConfig,\n FTReactNativeLog,\n FTLogStatus,\n FTLogCacheDiscard,\n} from './ft_logger';\nimport {\n FTRUMConfig,\n FTRUMResource,\n FTReactNativeRUM,\n ErrorMonitorType,\n DeviceMetricsMonitorType,\n DetectFrequency,\n FTRUMResourceMetrics,\n FTRUMCacheDiscard,\n IOSCrashMonitoringType,\n} from './ft_rum';\nimport { FTTraceConfig, FTReactNativeTrace, TraceType } from './ft_tracing';\nimport { FTRumActionTracking } from './rum/FTRumActionTracking';\nimport { FTRumErrorTracking } from './rum/FTRumErrorTracking';\n\nexport {\n FTMobileReactNative,\n FTMobileConfig,\n EnvType,\n FTDBCacheDiscard,\n FTRemoteConfigResult,\n FTRemoteConfigOverrideRule,\n FTRemoteConfigOverrideMatch,\n FTRemoteConfigOverrideValues,\n FTLogConfig,\n FTReactNativeLog,\n FTLogStatus,\n FTLogCacheDiscard,\n FTRUMConfig,\n FTReactNativeRUM,\n FTRUMResource,\n ErrorMonitorType,\n DeviceMetricsMonitorType,\n DetectFrequency,\n FTRUMResourceMetrics,\n FTRUMCacheDiscard,\n IOSCrashMonitoringType,\n FTTraceConfig,\n FTReactNativeTrace,\n TraceType,\n FTRumActionTracking,\n FTRumErrorTracking,\n};\n"],"mappings":"AAAA,SACEA,cAAc,EACdC,mBAAmB,EACnBC,OAAO,EACPC,gBAAgB,EAChBC,oBAAoB,EACpBC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,4BAA4B,QACvB,mBAAmB;AAC1B,SACEC,WAAW,EACXC,gBAAgB,EAChBC,WAAW,EACXC,iBAAiB,QACZ,aAAa;AACpB,SACEC,WAAW,EACXC,aAAa,EACbC,gBAAgB,EAChBC,gBAAgB,EAChBC,wBAAwB,EACxBC,eAAe,EACfC,oBAAoB,EACpBC,iBAAiB,EACjBC,sBAAsB,QACjB,UAAU;AACjB,SAASC,aAAa,EAAEC,kBAAkB,EAAEC,SAAS,QAAQ,cAAc;AAC3E,SAASC,mBAAmB,QAAQ,2BAA2B;AAC/D,SAASC,kBAAkB,QAAQ,0BAA0B;AAE7D,SACExB,mBAAmB,EACnBD,cAAc,EACdE,OAAO,EACPC,gBAAgB,EAChBC,oBAAoB,EACpBC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,4BAA4B,EAC5BC,WAAW,EACXC,gBAAgB,EAChBC,WAAW,EACXC,iBAAiB,EACjBC,WAAW,EACXE,gBAAgB,EAChBD,aAAa,EACbE,gBAAgB,EAChBC,wBAAwB,EACxBC,eAAe,EACfC,oBAAoB,EACpBC,iBAAiB,EACjBC,sBAAsB,EACtBC,aAAa,EACbC,kBAAkB,EAClBC,SAAS,EACTC,mBAAmB,EACnBC,kBAAkB","ignoreList":[]}
@@ -22,13 +22,17 @@ export class FTRumActionTracking {
22
22
  jsxRuntime.jsx = (...args) => {
23
23
  return this.patchCreateElementFunction(originaljsx, args);
24
24
  };
25
- } catch (e) {}
25
+ } catch (e) {
26
+ // Ignore missing jsx runtime support on older React versions.
27
+ }
26
28
  const originalMemo = React.memo;
27
29
  React.memo = (component, propsAreEqual) => {
28
30
  return originalMemo(component, (prev, next) => {
29
31
  if (!next.onPress || !prev.onPress) {
30
32
  return propsAreEqual ? propsAreEqual(prev, next) : areObjectShallowEqual(prev, next);
31
33
  }
34
+
35
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
32
36
  const {
33
37
  onPress: _prevOnPress,
34
38
  ...partialPrevProps
@@ -37,6 +41,8 @@ export class FTRumActionTracking {
37
41
  ...partialPrevProps,
38
42
  onPress: prev.__FT_INTERNAL_ORIGINAL_ON_PRESS__
39
43
  };
44
+
45
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
40
46
  const {
41
47
  onPress: _nextOnPress,
42
48
  ...partialNextProps
@@ -119,9 +125,9 @@ export class FTRumActionTracking {
119
125
  let elementTypeName = accessibilityRole;
120
126
  if (!accessibilityRole) {
121
127
  let elementType = targetNode.elementType;
122
- if (typeof elementType === "string") {
128
+ if (typeof elementType === 'string') {
123
129
  elementTypeName = elementType;
124
- } else if (elementType && typeof elementType.name === "string") {
130
+ } else if (elementType && typeof elementType.name === 'string') {
125
131
  elementTypeName = elementType.name;
126
132
  }
127
133
  }
@@ -147,7 +153,7 @@ export class FTRumActionTracking {
147
153
  while (currentNode) {
148
154
  const props = currentNode.memoizedProps;
149
155
  if (props && props[FT_ENABLE_TRACK]) {
150
- enable = props[FT_ENABLE_TRACK] == "true";
156
+ enable = props[FT_ENABLE_TRACK] === 'true';
151
157
  break;
152
158
  }
153
159
  currentNode = currentNode.return;
@@ -1 +1 @@
1
- {"version":3,"names":["React","FTReactNativeRUM","FT_ENABLE_TRACK","FT_EXTRA_PROPERTY","FTRumActionTracking","startTracking","isTracking","original","createElement","args","patchCreateElementFunction","jsxRuntime","getJsxRuntime","originaljsx","jsx","originalJsx","e","originalMemo","memo","component","propsAreEqual","prev","next","onPress","areObjectShallowEqual","_prevOnPress","partialPrevProps","prevProps","__FT_INTERNAL_ORIGINAL_ON_PRESS__","_nextOnPress","partialNextProps","nextProps","stopTracking","originalCreateElement","interceptOnPress","length","_targetInst","currentTime","Date","now","timestampDifference","Math","abs","preActionTimestamp","targetNode","handleTargetEvent","enable","findActionEnableTrack","extraProperty","findActionProperty","elementTypeName","resolveActionName","jsonObject","JSON","parse","error","console","warn","startAction","_targetNode$memoizedP","_targetNode$memoizedP2","_targetNode$memoizedP3","accessibilityLabel","memoizedProps","accessibilityRole","subTitle","children","Array","isArray","props","elementType","name","currentNode","return","_FTRumActionTracking","_defineProperty","Number","MIN_VALUE","originalFunction","element","rest","originalOnPress","objectA","objectB","keys","Object","key","major","minor","require","version","split","Error"],"sources":["FTRumActionTracking.tsx"],"sourcesContent":["import React from 'react'\nimport { FTReactNativeRUM } from '../ft_rum';\nconst FT_ENABLE_TRACK = 'ft-enable-track';\nconst FT_EXTRA_PROPERTY = 'ft-extra-property';\nexport class FTRumActionTracking {\n\tprivate static isTracking = false\n\tprivate static preActionTimestamp = Number.MIN_VALUE;\n\tprivate static originalMemo = React.memo;\n private static originalJsx = null;\n private static originalCreateElement = React.createElement;\n\n\tprivate static patchCreateElementFunction = (\n originalFunction: typeof React.createElement,\n [element, props, ...rest]: Parameters<typeof React.createElement>\n ): ReturnType<typeof React.createElement> => {\n if (\n props &&\n typeof (props as Record<string, unknown>).onPress === 'function'\n ) {\n const originalOnPress = (props as Record<string, unknown>) // eslint-disable-next-line @typescript-eslint/ban-types\n .onPress as Function;\n (props as Record<string, unknown>).onPress = (...args: any[]) => {\n FTRumActionTracking.interceptOnPress(\n ...args\n );\n return originalOnPress(...args);\n };\n \n (props as Record<\n string,\n unknown\n >).__FT_INTERNAL_ORIGINAL_ON_PRESS__ = originalOnPress;\n }\n return originalFunction(element, props, ...rest);\n };\n\tstatic startTracking(): void {\n\t\tif (FTRumActionTracking.isTracking) {\n\t\t\treturn\n\t\t}\n\t\tconst original = React.createElement\n\t\tReact.createElement = (\n ...args: Parameters<typeof React.createElement>\n ): any => {\n return this.patchCreateElementFunction(original, args);\n };\n try {\n const jsxRuntime = getJsxRuntime();\n const originaljsx = jsxRuntime.jsx;\n this.originalJsx = originaljsx;\n jsxRuntime.jsx = (\n ...args: Parameters<typeof React.createElement>\n ): ReturnType<typeof React.createElement> => {\n return this.patchCreateElementFunction(originaljsx, args);\n };\n } catch (e) {\n \n }\n\n const originalMemo = React.memo;\n React.memo = (\n component: any,\n propsAreEqual?: (prevProps: any, newProps: any) => boolean\n ) => {\n return originalMemo(component, (prev, next) => {\n if (!next.onPress || !prev.onPress) {\n return propsAreEqual\n ? propsAreEqual(prev, next)\n : areObjectShallowEqual(prev, next);\n }\n\n\t\t\t\tconst { onPress: _prevOnPress, ...partialPrevProps } = prev;\n const prevProps = {\n ...partialPrevProps,\n onPress: prev.__FT_INTERNAL_ORIGINAL_ON_PRESS__\n };\n\n const { onPress: _nextOnPress, ...partialNextProps } = next;\n const nextProps = {\n ...partialNextProps,\n onPress: next.__FT_INTERNAL_ORIGINAL_ON_PRESS__\n };\n\n return propsAreEqual\n ? propsAreEqual(prevProps, nextProps)\n : areObjectShallowEqual(nextProps, prevProps);\n });\n };\n\t\tFTRumActionTracking.isTracking = true\n\t}\n\tstatic stopTracking() {\n React.createElement = this.originalCreateElement;\n React.memo = this.originalMemo;\n FTRumActionTracking.isTracking = false;\n if (this.originalJsx) {\n const jsxRuntime = getJsxRuntime();\n jsxRuntime.jsx = this.originalJsx;\n this.originalJsx = null;\n }\n }\n\n\tprivate static interceptOnPress(...args: any[]): void {\n\t\tif (args.length > 0 && args[0] && args[0]._targetInst) {\n\t\t\tconst currentTime = Date.now()\n\t\t\tconst timestampDifference = Math.abs(Date.now() - FTRumActionTracking.preActionTimestamp)\n\t\t\tif (timestampDifference > 10) {\n\t\t\t\tconst targetNode = args[0]._targetInst\n\t\t\t\tthis.handleTargetEvent(targetNode)\n\t\t\t\tFTRumActionTracking.preActionTimestamp = currentTime \n\t\t\t}\n\t\t}\n\t}\n\n private static handleTargetEvent(targetNode: any | null) {\n if (targetNode) {\n const enable = FTRumActionTracking.findActionEnableTrack(targetNode);\n if (enable) {\n const extraProperty = FTRumActionTracking.findActionProperty(targetNode);\n const elementTypeName = FTRumActionTracking.resolveActionName(targetNode);\n if (elementTypeName) {\n let jsonObject = null\n if (extraProperty) {\n try {\n jsonObject = JSON.parse(extraProperty)\n } catch (error) {\n console.warn(`Error parsing JSON string ${extraProperty}:`,error);\n }\n }\n if (jsonObject){\n FTReactNativeRUM.startAction(elementTypeName, 'click',jsonObject);\n }else{\n FTReactNativeRUM.startAction(elementTypeName, 'click');\n }\n }\n }\n }\n }\n\n\tprivate static resolveActionName(targetNode:any): string | null {\n\t\tconst accessibilityLabel = targetNode.memoizedProps?.accessibilityLabel\n\t\tif(accessibilityLabel != null){\n\t\t\treturn accessibilityLabel;\n\t\t}\n\t\tconst accessibilityRole = targetNode.memoizedProps?.accessibilityRole;\n\t\t\tlet subTitle = '';\n\t\t\tlet children = targetNode.memoizedProps?.children;\n\t\t\twhile (children){\n\t\t\t\tif(Array.isArray(children) && children.length>0 && children[0]){\n\t\t\t\t\tchildren = children[0];\n\t\t\t\t}else if(typeof children === 'object' && children.props && children.props.children){\n\t\t\t\t\tchildren = children.props.children;\n\t\t\t\t}else if(typeof children === 'string'){\n\t\t\t\t\tsubTitle = children;\n\t\t\t\t\tchildren = null;\n\t\t\t\t}else{\n\t\t\t\t\tchildren = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet elementTypeName = accessibilityRole;\n\t\t\tif(!accessibilityRole){\n\t\t\t\tlet elementType = targetNode.elementType;\n\t\t\t\tif (typeof elementType === \"string\") {\n\t\t\t\t\telementTypeName = elementType\n\t\t\t\t} else if (elementType && typeof elementType.name === \"string\") {\n\t\t\t\t\telementTypeName = elementType.name\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(elementTypeName){\n\t\t\t\treturn '['+elementTypeName+']'+subTitle;\n\t\t\t}\n\t\t\treturn null;\n \n\t}\n private static findActionProperty(targetNode: any): string | null {\n let currentNode = targetNode;\n while (currentNode) {\n const props = currentNode.memoizedProps;\n if (props && props[FT_EXTRA_PROPERTY]) {\n return props[FT_EXTRA_PROPERTY];\n }\n currentNode = currentNode.return;\n }\n return null;\n }\n private static findActionEnableTrack(targetNode: any): boolean {\n let currentNode = targetNode;\n let enable = true\n while (currentNode) {\n const props = currentNode.memoizedProps;\n if (props && props[FT_ENABLE_TRACK]) {\n enable = props[FT_ENABLE_TRACK] == \"true\";\n break;\n }\n currentNode = currentNode.return;\n }\n return enable;\n }\n}\n\nconst areObjectShallowEqual = (\n\tobjectA: Record<string, unknown> | undefined | null,\n\tobjectB: Record<string, unknown> | undefined | null\n): boolean => {\n\tif (!objectA || !objectB) {\n\t\treturn objectA === objectB;\n\t}\n\n\tconst keys = Object.keys(objectA);\n\tif (keys.length !== Object.keys(objectB).length) {\n\t\treturn false;\n\t}\n\tfor (const key of keys) {\n\t\tif (objectA[key] !== objectB[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\nconst getJsxRuntime = () => {\n // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires\n const [major, minor] = require('react/package.json').version.split('.');\n\t// JSX Transform applies to > 16.14.0\n if (Number(major)<=16&&Number(minor)<14) {\n throw new Error('React version does not support new jsx transform');\n }\n\n // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires\n const jsxRuntime = require('react/jsx-runtime');\n if (!jsxRuntime.jsx) {\n throw new Error('React jsx runtime does not export new jsx transform');\n }\n return jsxRuntime;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","FTReactNativeRUM","FT_ENABLE_TRACK","FT_EXTRA_PROPERTY","FTRumActionTracking","startTracking","isTracking","original","createElement","args","patchCreateElementFunction","jsxRuntime","getJsxRuntime","originaljsx","jsx","originalJsx","e","originalMemo","memo","component","propsAreEqual","prev","next","onPress","areObjectShallowEqual","_prevOnPress","partialPrevProps","prevProps","__FT_INTERNAL_ORIGINAL_ON_PRESS__","_nextOnPress","partialNextProps","nextProps","stopTracking","originalCreateElement","interceptOnPress","length","_targetInst","currentTime","Date","now","timestampDifference","Math","abs","preActionTimestamp","targetNode","handleTargetEvent","enable","findActionEnableTrack","extraProperty","findActionProperty","elementTypeName","resolveActionName","jsonObject","JSON","parse","error","console","warn","startAction","_targetNode$memoizedP","_targetNode$memoizedP2","_targetNode$memoizedP3","accessibilityLabel","memoizedProps","accessibilityRole","subTitle","children","Array","isArray","props","elementType","name","currentNode","return","_FTRumActionTracking","_defineProperty","Number","MIN_VALUE","originalFunction","element","rest","originalOnPress","objectA","objectB","keys","Object","key","major","minor","require","version","split","Error"],"sources":["FTRumActionTracking.tsx"],"sourcesContent":["import React from 'react';\nimport { FTReactNativeRUM } from '../ft_rum';\nconst FT_ENABLE_TRACK = 'ft-enable-track';\nconst FT_EXTRA_PROPERTY = 'ft-extra-property';\nexport class FTRumActionTracking {\n private static isTracking = false;\n private static preActionTimestamp = Number.MIN_VALUE;\n private static originalMemo = React.memo;\n private static originalJsx = null;\n private static originalCreateElement = React.createElement;\n\n private static patchCreateElementFunction = (\n originalFunction: typeof React.createElement,\n [element, props, ...rest]: Parameters<typeof React.createElement>\n ): ReturnType<typeof React.createElement> => {\n if (\n props &&\n typeof (props as Record<string, unknown>).onPress === 'function'\n ) {\n const originalOnPress = (props as Record<string, unknown>) // eslint-disable-next-line @typescript-eslint/ban-types\n .onPress as Function;\n (props as Record<string, unknown>).onPress = (...args: any[]) => {\n FTRumActionTracking.interceptOnPress(...args);\n return originalOnPress(...args);\n };\n\n (props as Record<string, unknown>).__FT_INTERNAL_ORIGINAL_ON_PRESS__ =\n originalOnPress;\n }\n return originalFunction(element, props, ...rest);\n };\n static startTracking(): void {\n if (FTRumActionTracking.isTracking) {\n return;\n }\n const original = React.createElement;\n React.createElement = (\n ...args: Parameters<typeof React.createElement>\n ): any => {\n return this.patchCreateElementFunction(original, args);\n };\n try {\n const jsxRuntime = getJsxRuntime();\n const originaljsx = jsxRuntime.jsx;\n this.originalJsx = originaljsx;\n jsxRuntime.jsx = (\n ...args: Parameters<typeof React.createElement>\n ): ReturnType<typeof React.createElement> => {\n return this.patchCreateElementFunction(originaljsx, args);\n };\n } catch (e) {\n // Ignore missing jsx runtime support on older React versions.\n }\n\n const originalMemo = React.memo;\n React.memo = (\n component: any,\n propsAreEqual?: (prevProps: any, newProps: any) => boolean\n ) => {\n return originalMemo(component, (prev, next) => {\n if (!next.onPress || !prev.onPress) {\n return propsAreEqual\n ? propsAreEqual(prev, next)\n : areObjectShallowEqual(prev, next);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { onPress: _prevOnPress, ...partialPrevProps } = prev;\n const prevProps = {\n ...partialPrevProps,\n onPress: prev.__FT_INTERNAL_ORIGINAL_ON_PRESS__,\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { onPress: _nextOnPress, ...partialNextProps } = next;\n const nextProps = {\n ...partialNextProps,\n onPress: next.__FT_INTERNAL_ORIGINAL_ON_PRESS__,\n };\n\n return propsAreEqual\n ? propsAreEqual(prevProps, nextProps)\n : areObjectShallowEqual(nextProps, prevProps);\n });\n };\n FTRumActionTracking.isTracking = true;\n }\n static stopTracking() {\n React.createElement = this.originalCreateElement;\n React.memo = this.originalMemo;\n FTRumActionTracking.isTracking = false;\n if (this.originalJsx) {\n const jsxRuntime = getJsxRuntime();\n jsxRuntime.jsx = this.originalJsx;\n this.originalJsx = null;\n }\n }\n\n private static interceptOnPress(...args: any[]): void {\n if (args.length > 0 && args[0] && args[0]._targetInst) {\n const currentTime = Date.now();\n const timestampDifference = Math.abs(\n Date.now() - FTRumActionTracking.preActionTimestamp\n );\n if (timestampDifference > 10) {\n const targetNode = args[0]._targetInst;\n this.handleTargetEvent(targetNode);\n FTRumActionTracking.preActionTimestamp = currentTime;\n }\n }\n }\n\n private static handleTargetEvent(targetNode: any | null) {\n if (targetNode) {\n const enable = FTRumActionTracking.findActionEnableTrack(targetNode);\n if (enable) {\n const extraProperty =\n FTRumActionTracking.findActionProperty(targetNode);\n const elementTypeName =\n FTRumActionTracking.resolveActionName(targetNode);\n if (elementTypeName) {\n let jsonObject = null;\n if (extraProperty) {\n try {\n jsonObject = JSON.parse(extraProperty);\n } catch (error) {\n console.warn(\n `Error parsing JSON string ${extraProperty}:`,\n error\n );\n }\n }\n if (jsonObject) {\n FTReactNativeRUM.startAction(elementTypeName, 'click', jsonObject);\n } else {\n FTReactNativeRUM.startAction(elementTypeName, 'click');\n }\n }\n }\n }\n }\n\n private static resolveActionName(targetNode: any): string | null {\n const accessibilityLabel = targetNode.memoizedProps?.accessibilityLabel;\n if (accessibilityLabel != null) {\n return accessibilityLabel;\n }\n const accessibilityRole = targetNode.memoizedProps?.accessibilityRole;\n let subTitle = '';\n let children = targetNode.memoizedProps?.children;\n while (children) {\n if (Array.isArray(children) && children.length > 0 && children[0]) {\n children = children[0];\n } else if (\n typeof children === 'object' &&\n children.props &&\n children.props.children\n ) {\n children = children.props.children;\n } else if (typeof children === 'string') {\n subTitle = children;\n children = null;\n } else {\n children = null;\n }\n }\n let elementTypeName = accessibilityRole;\n if (!accessibilityRole) {\n let elementType = targetNode.elementType;\n if (typeof elementType === 'string') {\n elementTypeName = elementType;\n } else if (elementType && typeof elementType.name === 'string') {\n elementTypeName = elementType.name;\n }\n }\n if (elementTypeName) {\n return '[' + elementTypeName + ']' + subTitle;\n }\n return null;\n }\n private static findActionProperty(targetNode: any): string | null {\n let currentNode = targetNode;\n while (currentNode) {\n const props = currentNode.memoizedProps;\n if (props && props[FT_EXTRA_PROPERTY]) {\n return props[FT_EXTRA_PROPERTY];\n }\n currentNode = currentNode.return;\n }\n return null;\n }\n private static findActionEnableTrack(targetNode: any): boolean {\n let currentNode = targetNode;\n let enable = true;\n while (currentNode) {\n const props = currentNode.memoizedProps;\n if (props && props[FT_ENABLE_TRACK]) {\n enable = props[FT_ENABLE_TRACK] === 'true';\n break;\n }\n currentNode = currentNode.return;\n }\n return enable;\n }\n}\n\nconst areObjectShallowEqual = (\n objectA: Record<string, unknown> | undefined | null,\n objectB: Record<string, unknown> | undefined | null\n): boolean => {\n if (!objectA || !objectB) {\n return objectA === objectB;\n }\n\n const keys = Object.keys(objectA);\n if (keys.length !== Object.keys(objectB).length) {\n return false;\n }\n for (const key of keys) {\n if (objectA[key] !== objectB[key]) {\n return false;\n }\n }\n return true;\n};\nconst getJsxRuntime = () => {\n // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires\n const [major, minor] = require('react/package.json').version.split('.');\n // JSX Transform applies to > 16.14.0\n if (Number(major) <= 16 && Number(minor) < 14) {\n throw new Error('React version does not support new jsx transform');\n }\n\n // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires\n const jsxRuntime = require('react/jsx-runtime');\n if (!jsxRuntime.jsx) {\n throw new Error('React jsx runtime does not export new jsx transform');\n }\n return jsxRuntime;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,7 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
3
3
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
4
  import { FTReactNativeRUM } from '../ft_rum';
5
5
  const EMPTY_MESSAGE = 'Unknown Error';
6
- const CONSOLE_ERROR = "console_error";
6
+ const CONSOLE_ERROR = 'console_error';
7
7
  export class FTRumErrorTracking {
8
8
  static startTracking() {
9
9
  if (FTRumErrorTracking.isTracking) {
@@ -38,7 +38,7 @@ export class FTRumErrorTracking {
38
38
  for (let i = 0; i < params.length; i += 1) {
39
39
  const param = params[i];
40
40
  const paramStack = FTRumErrorTracking.getErrorStackTrace(param);
41
- if (paramStack != undefined && paramStack != '') {
41
+ if (paramStack !== '') {
42
42
  stack = paramStack;
43
43
  break;
44
44
  }
@@ -56,7 +56,7 @@ export class FTRumErrorTracking {
56
56
  }
57
57
  static getErrorMessage(error) {
58
58
  let message = EMPTY_MESSAGE;
59
- if (error == undefined || error === null) {
59
+ if (error == null) {
60
60
  message = EMPTY_MESSAGE;
61
61
  } else if (typeof error === 'object' && 'message' in error) {
62
62
  message = String(error.message);
@@ -67,7 +67,7 @@ export class FTRumErrorTracking {
67
67
  }
68
68
  static getErrorStackTrace(error) {
69
69
  let stack = '';
70
- if (error == undefined) {
70
+ if (error == null) {
71
71
  stack = '';
72
72
  } else if (typeof error === 'string') {
73
73
  stack = '';
@@ -1 +1 @@
1
- {"version":3,"names":["FTReactNativeRUM","EMPTY_MESSAGE","CONSOLE_ERROR","FTRumErrorTracking","startTracking","isTracking","ErrorUtils","defaultErrorHandler","getGlobalHandler","defaultConsoleError","console","error","setGlobalHandler","onGlobalError","onConsoleError","isFatal","message","getErrorMessage","stacktrace","getErrorStackTrace","addError","then","isInDefaultErrorHandler","params","stack","i","length","param","paramStack","undefined","map","join","addErrorWithType","apply","String","componentStack","sourceURL","line","column","_defineProperty","_error","_isFatal","_params"],"sources":["FTRumErrorTracking.tsx"],"sourcesContent":["import type { ErrorHandlerCallback } from 'react-native';\nimport { FTReactNativeRUM } from '../ft_rum';\nconst EMPTY_MESSAGE = 'Unknown Error';\nconst CONSOLE_ERROR = \"console_error\";\n\nexport class FTRumErrorTracking {\n private static isTracking = false;\n\n private static isInDefaultErrorHandler = false;\n\n // Original error handler method\n private static defaultErrorHandler: ErrorHandlerCallback = (_error: any, _isFatal?: boolean) => { }\n\n // Original console error handler method\n private static defaultConsoleError = (..._params: unknown[]) => { }\n\n static startTracking(): void {\n if(FTRumErrorTracking.isTracking){\n return;\n }\n if (ErrorUtils) {\n FTRumErrorTracking.defaultErrorHandler = ErrorUtils.getGlobalHandler;\n FTRumErrorTracking.defaultConsoleError = console.error;\n ErrorUtils.setGlobalHandler(FTRumErrorTracking.onGlobalError);\n console.error = FTRumErrorTracking.onConsoleError;\n FTRumErrorTracking.isTracking = true;\n }\n }\n static onGlobalError(error: any, isFatal?: boolean): void {\n const message = FTRumErrorTracking.getErrorMessage(error);\n const stacktrace = FTRumErrorTracking.getErrorStackTrace(error);\n FTReactNativeRUM.addError(\n stacktrace,\n message\n ).then(() => {\n try {\n FTRumErrorTracking.isInDefaultErrorHandler = true;\n //Call the original error handler method\n FTRumErrorTracking.defaultErrorHandler(error, isFatal);\n } finally {\n FTRumErrorTracking.isInDefaultErrorHandler = false;\n }\n });\n }\n\n static onConsoleError(...params: unknown[]): void {\n if ( FTRumErrorTracking.isInDefaultErrorHandler) {\n return;\n }\n\n let stack: string = '';\n for (let i = 0; i < params.length; i += 1) {\n const param = params[i];\n const paramStack = FTRumErrorTracking.getErrorStackTrace(param);\n if (paramStack != undefined && paramStack != '') {\n stack = paramStack;\n break;\n }\n }\n\n const message = params.map((param) => {\n if (typeof param === 'string') { return param; }\n else { return FTRumErrorTracking.getErrorMessage(param); }\n }).join(' ');\n\n\n FTReactNativeRUM.addErrorWithType(\n CONSOLE_ERROR,\n stack,\n message,\n ).then(() => {\n FTRumErrorTracking.defaultConsoleError.apply(console, params);\n });\n\n }\n private static getErrorMessage(error: any | undefined): string {\n let message = EMPTY_MESSAGE;\n if (error == undefined || error === null) {\n message = EMPTY_MESSAGE;\n } else if (typeof error === 'object' && 'message' in error){\n message = String(error.message);\n } else {\n message = String(error);\n }\n\n return message\n }\n\n private static getErrorStackTrace(error: any | undefined): string {\n let stack = '';\n\n if (error == undefined) {\n stack = '';\n } else if (typeof error === 'string') {\n stack = '';\n } else if ('componentStack' in error) {\n stack = String(error.componentStack);\n } else if ('stacktrace' in error) {\n stack = String(error.stacktrace);\n } else if ('stack' in error) {\n stack = String(error.stack);\n } else if (('sourceURL' in error) && ('line' in error) && ('column' in error)) {\n stack = `at ${error.sourceURL}:${error.line}:${error.column}`;\n }\n\n return stack\n }\n }\n\n\n"],"mappings":";;;AACA,SAASA,gBAAgB,QAAQ,WAAW;AAC5C,MAAMC,aAAa,GAAG,eAAe;AACrC,MAAMC,aAAa,GAAG,eAAe;AAErC,OAAO,MAAMC,kBAAkB,CAAC;EAW9B,OAAOC,aAAaA,CAAA,EAAS;IAC3B,IAAGD,kBAAkB,CAACE,UAAU,EAAC;MAC/B;IACF;IACA,IAAIC,UAAU,EAAE;MACdH,kBAAkB,CAACI,mBAAmB,GAAGD,UAAU,CAACE,gBAAgB;MACpEL,kBAAkB,CAACM,mBAAmB,GAAGC,OAAO,CAACC,KAAK;MACtDL,UAAU,CAACM,gBAAgB,CAACT,kBAAkB,CAACU,aAAa,CAAC;MAC7DH,OAAO,CAACC,KAAK,GAAGR,kBAAkB,CAACW,cAAc;MACjDX,kBAAkB,CAACE,UAAU,GAAG,IAAI;IACtC;EACF;EACA,OAAOQ,aAAaA,CAACF,KAAU,EAAEI,OAAiB,EAAQ;IACxD,MAAMC,OAAO,GAAGb,kBAAkB,CAACc,eAAe,CAACN,KAAK,CAAC;IACzD,MAAMO,UAAU,GAAGf,kBAAkB,CAACgB,kBAAkB,CAACR,KAAK,CAAC;IAC/DX,gBAAgB,CAACoB,QAAQ,CACvBF,UAAU,EACVF,OACA,CAAC,CAACK,IAAI,CAAC,MAAM;MACX,IAAI;QACFlB,kBAAkB,CAACmB,uBAAuB,GAAG,IAAI;QACjD;QACAnB,kBAAkB,CAACI,mBAAmB,CAACI,KAAK,EAAEI,OAAO,CAAC;MACxD,CAAC,SAAS;QACRZ,kBAAkB,CAACmB,uBAAuB,GAAG,KAAK;MACpD;IACF,CAAC,CAAC;EACJ;EAEA,OAAOR,cAAcA,CAAC,GAAGS,MAAiB,EAAQ;IAChD,IAAKpB,kBAAkB,CAACmB,uBAAuB,EAAE;MAC/C;IACF;IAEA,IAAIE,KAAa,GAAG,EAAE;IACtB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,MAAM,CAACG,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;MACzC,MAAME,KAAK,GAAGJ,MAAM,CAACE,CAAC,CAAC;MACvB,MAAMG,UAAU,GAAGzB,kBAAkB,CAACgB,kBAAkB,CAACQ,KAAK,CAAC;MAC/D,IAAIC,UAAU,IAAIC,SAAS,IAAID,UAAU,IAAI,EAAE,EAAE;QAC/CJ,KAAK,GAAGI,UAAU;QAClB;MACF;IACF;IAEA,MAAMZ,OAAO,GAAGO,MAAM,CAACO,GAAG,CAAEH,KAAK,IAAK;MACpC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;QAAE,OAAOA,KAAK;MAAE,CAAC,MAC3C;QAAE,OAAOxB,kBAAkB,CAACc,eAAe,CAACU,KAAK,CAAC;MAAE;IAC3D,CAAC,CAAC,CAACI,IAAI,CAAC,GAAG,CAAC;IAGZ/B,gBAAgB,CAACgC,gBAAgB,CAC/B9B,aAAa,EACbsB,KAAK,EACLR,OACA,CAAC,CAACK,IAAI,CAAC,MAAM;MACXlB,kBAAkB,CAACM,mBAAmB,CAACwB,KAAK,CAACvB,OAAO,EAAEa,MAAM,CAAC;IAC/D,CAAC,CAAC;EAEJ;EACA,OAAeN,eAAeA,CAACN,KAAsB,EAAU;IAC7D,IAAIK,OAAO,GAAGf,aAAa;IAC3B,IAAIU,KAAK,IAAIkB,SAAS,IAAIlB,KAAK,KAAK,IAAI,EAAE;MACxCK,OAAO,GAAGf,aAAa;IACzB,CAAC,MAAM,IAAI,OAAOU,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAIA,KAAK,EAAC;MACzDK,OAAO,GAAGkB,MAAM,CAACvB,KAAK,CAACK,OAAO,CAAC;IACjC,CAAC,MAAM;MACLA,OAAO,GAAGkB,MAAM,CAACvB,KAAK,CAAC;IACzB;IAEA,OAAOK,OAAO;EAChB;EAEA,OAAeG,kBAAkBA,CAACR,KAAsB,EAAU;IAChE,IAAIa,KAAK,GAAG,EAAE;IAEd,IAAIb,KAAK,IAAIkB,SAAS,EAAE;MACtBL,KAAK,GAAG,EAAE;IACZ,CAAC,MAAM,IAAI,OAAOb,KAAK,KAAK,QAAQ,EAAE;MACpCa,KAAK,GAAG,EAAE;IACZ,CAAC,MAAM,IAAI,gBAAgB,IAAIb,KAAK,EAAE;MACpCa,KAAK,GAAGU,MAAM,CAACvB,KAAK,CAACwB,cAAc,CAAC;IACtC,CAAC,MAAM,IAAI,YAAY,IAAIxB,KAAK,EAAE;MAChCa,KAAK,GAAGU,MAAM,CAACvB,KAAK,CAACO,UAAU,CAAC;IAClC,CAAC,MAAM,IAAI,OAAO,IAAIP,KAAK,EAAE;MAC3Ba,KAAK,GAAGU,MAAM,CAACvB,KAAK,CAACa,KAAK,CAAC;IAC7B,CAAC,MAAM,IAAK,WAAW,IAAIb,KAAK,IAAM,MAAM,IAAIA,KAAM,IAAK,QAAQ,IAAIA,KAAM,EAAE;MAC7Ea,KAAK,GAAG,MAAMb,KAAK,CAACyB,SAAS,IAAIzB,KAAK,CAAC0B,IAAI,IAAI1B,KAAK,CAAC2B,MAAM,EAAE;IAC/D;IAEA,OAAOd,KAAK;EACd;AACF;AAACe,eAAA,CAtGQpC,kBAAkB,gBACD,KAAK;AAAAoC,eAAA,CADtBpC,kBAAkB,6BAGY,KAAK;AAE9C;AAAAoC,eAAA,CALWpC,kBAAkB,yBAM8B,CAACqC,MAAW,EAAEC,QAAkB,KAAK,CAAE,CAAC;AAEnG;AAAAF,eAAA,CARWpC,kBAAkB,yBASQ,CAAC,GAAGuC,OAAkB,KAAK,CAAE,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["FTReactNativeRUM","EMPTY_MESSAGE","CONSOLE_ERROR","FTRumErrorTracking","startTracking","isTracking","ErrorUtils","defaultErrorHandler","getGlobalHandler","defaultConsoleError","console","error","setGlobalHandler","onGlobalError","onConsoleError","isFatal","message","getErrorMessage","stacktrace","getErrorStackTrace","addError","then","isInDefaultErrorHandler","params","stack","i","length","param","paramStack","map","join","addErrorWithType","apply","String","componentStack","sourceURL","line","column","_defineProperty","_error","_isFatal","_params"],"sources":["FTRumErrorTracking.tsx"],"sourcesContent":["import type { ErrorHandlerCallback } from 'react-native';\nimport { FTReactNativeRUM } from '../ft_rum';\nconst EMPTY_MESSAGE = 'Unknown Error';\nconst CONSOLE_ERROR = 'console_error';\n\nexport class FTRumErrorTracking {\n private static isTracking = false;\n\n private static isInDefaultErrorHandler = false;\n\n // Original error handler method\n private static defaultErrorHandler: ErrorHandlerCallback = (\n _error: any,\n _isFatal?: boolean\n ) => {};\n\n // Original console error handler method\n private static defaultConsoleError = (..._params: unknown[]) => {};\n\n static startTracking(): void {\n if (FTRumErrorTracking.isTracking) {\n return;\n }\n if (ErrorUtils) {\n FTRumErrorTracking.defaultErrorHandler = ErrorUtils.getGlobalHandler;\n FTRumErrorTracking.defaultConsoleError = console.error;\n ErrorUtils.setGlobalHandler(FTRumErrorTracking.onGlobalError);\n console.error = FTRumErrorTracking.onConsoleError;\n FTRumErrorTracking.isTracking = true;\n }\n }\n static onGlobalError(error: any, isFatal?: boolean): void {\n const message = FTRumErrorTracking.getErrorMessage(error);\n const stacktrace = FTRumErrorTracking.getErrorStackTrace(error);\n FTReactNativeRUM.addError(stacktrace, message).then(() => {\n try {\n FTRumErrorTracking.isInDefaultErrorHandler = true;\n //Call the original error handler method\n FTRumErrorTracking.defaultErrorHandler(error, isFatal);\n } finally {\n FTRumErrorTracking.isInDefaultErrorHandler = false;\n }\n });\n }\n\n static onConsoleError(...params: unknown[]): void {\n if (FTRumErrorTracking.isInDefaultErrorHandler) {\n return;\n }\n\n let stack: string = '';\n for (let i = 0; i < params.length; i += 1) {\n const param = params[i];\n const paramStack = FTRumErrorTracking.getErrorStackTrace(param);\n if (paramStack !== '') {\n stack = paramStack;\n break;\n }\n }\n\n const message = params\n .map((param) => {\n if (typeof param === 'string') {\n return param;\n } else {\n return FTRumErrorTracking.getErrorMessage(param);\n }\n })\n .join(' ');\n\n FTReactNativeRUM.addErrorWithType(CONSOLE_ERROR, stack, message).then(\n () => {\n FTRumErrorTracking.defaultConsoleError.apply(console, params);\n }\n );\n }\n private static getErrorMessage(error: any | undefined): string {\n let message = EMPTY_MESSAGE;\n if (error == null) {\n message = EMPTY_MESSAGE;\n } else if (typeof error === 'object' && 'message' in error) {\n message = String(error.message);\n } else {\n message = String(error);\n }\n\n return message;\n }\n\n private static getErrorStackTrace(error: any | undefined): string {\n let stack = '';\n\n if (error == null) {\n stack = '';\n } else if (typeof error === 'string') {\n stack = '';\n } else if ('componentStack' in error) {\n stack = String(error.componentStack);\n } else if ('stacktrace' in error) {\n stack = String(error.stacktrace);\n } else if ('stack' in error) {\n stack = String(error.stack);\n } else if ('sourceURL' in error && 'line' in error && 'column' in error) {\n stack = `at ${error.sourceURL}:${error.line}:${error.column}`;\n }\n\n return stack;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ /* eslint-disable @typescript-eslint/ban-types */
2
+
3
+ import { TurboModuleRegistry } from 'react-native';
4
+ export default TurboModuleRegistry.get('FTMobileReactNative');
5
+ //# sourceMappingURL=NativeFTMobileReactNative.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","get"],"sources":["NativeFTMobileReactNative.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport type { TurboModule } from 'react-native';\nimport { TurboModuleRegistry } from 'react-native';\n\nexport interface Spec extends TurboModule {\n /**\n * SDK initialization method.\n * @param config SDK initialization configuration items.\n * @returns a Promise.\n */\n sdkConfig(config: Object): Promise<void>;\n /**\n * Dynamically set the Datakit upload URL after SDK initialization.\n * @param datakitUrl Datakit upload URL.\n * @returns a Promise.\n */\n setDatakitURL(datakitUrl: string): Promise<void>;\n /**\n * Dynamically set the Dataway upload URL and client token after SDK initialization.\n * @param datawayUrl Dataway upload URL.\n * @param clientToken Dataway authentication token.\n * @returns a Promise.\n */\n setDatawayURL(datawayUrl: string, clientToken: string): Promise<void>;\n /**\n * Bind user.\n * @param userId user ID.\n * @param userName user name.\n * @param userEmail user email\n * @param extra additional user information\n * @returns a Promise.\n */\n bindRUMUserData(\n userId: string,\n userName?: string,\n userEmail?: string,\n extra?: Object\n ): Promise<void>;\n /**\n * Unbind user.\n * @returns a Promise.\n */\n unbindRUMUserData(): Promise<void>;\n /**\n * Add custom global parameters. Applies to RUM and Log data\n * @param context custom global parameters.\n * @returns a Promise.\n */\n appendGlobalContext(context: Object): Promise<void>;\n /**\n * Add custom RUM global parameters. Applies to RUM data\n * @param context custom RUM global parameters.\n * @returns a Promise.\n */\n appendRUMGlobalContext(context: Object): Promise<void>;\n /**\n * Add custom RUM and Log global parameters. Applies to Log data\n * @param context custom Log global parameters.\n * @returns a Promise.\n */\n appendLogGlobalContext(context: Object): Promise<void>;\n /**\n * Actively synchronize data. When `FTMobileConfig.autoSync=false` is configured, you need to actively trigger this method to synchronize data.\n * @returns a Promise.\n */\n flushSyncData(): Promise<void>;\n\n /**\n * Synchronize events in iOS Widget Extension, iOS only\n * @param groupIdentifier app groupId\n * @returns {groupIdentifier:string,datas:Array<Object>} can be used to view data collected in Extension.\n */\n trackEventFromExtension(identifier: string): Promise<Object>;\n /**\n * Shut down objects currently running in the SDK\n */\n shutDown(): Promise<void>;\n /**\n * Clear all data that has not yet been uploaded to the server.\n */\n clearAllData(): Promise<void>;\n}\nexport default TurboModuleRegistry.get<Spec>('FTMobileReactNative');\n"],"mappings":"AAAA;;AAEA,SAASA,mBAAmB,QAAQ,cAAc;AAgFlD,eAAeA,mBAAmB,CAACC,GAAG,CAAO,qBAAqB,CAAC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ /* eslint-disable @typescript-eslint/ban-types */
2
+
3
+ import { TurboModuleRegistry } from 'react-native';
4
+ export default TurboModuleRegistry.get('FTReactNativeLog');
5
+ //# sourceMappingURL=NativeFTReactNativeLog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","get"],"sources":["NativeFTReactNativeLog.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport type { TurboModule } from 'react-native';\nimport { TurboModuleRegistry } from 'react-native';\n\nexport interface Spec extends TurboModule {\n /**\n *Configure log output configuration to enable log collection.\n */\n logConfig(config: Object): Promise<void>;\n /**\n * Output log.\n * @param content log content\n * @param status log status\n * @param property log context (optional)\n */\n logging(content: string, logStatus: number, property?: Object): Promise<void>;\n /**\n * Output log.\n * @param content log content\n * @param status log status\n * @param property log context (optional)\n */\n logWithStatusString(\n content: string,\n logStatus: string,\n property?: Object\n ): Promise<void>;\n}\nexport default TurboModuleRegistry.get<Spec>('FTReactNativeLog');\n"],"mappings":"AAAA;;AAEA,SAASA,mBAAmB,QAAQ,cAAc;AA0BlD,eAAeA,mBAAmB,CAACC,GAAG,CAAO,kBAAkB,CAAC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ /* eslint-disable @typescript-eslint/ban-types */
2
+
3
+ import { TurboModuleRegistry } from 'react-native';
4
+ export default TurboModuleRegistry.get('FTReactNativeRUM');
5
+ //# sourceMappingURL=NativeFTReactNativeRUM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","get"],"sources":["NativeFTReactNativeRUM.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport type { TurboModule } from 'react-native';\nimport { TurboModuleRegistry } from 'react-native';\n\nexport interface Spec extends TurboModule {\n /**\n * Set RUM tracking conditions and enable RUM collection.\n * @param config rum configuration parameters.\n * @returns a Promise.\n */\n setConfig(config: Object): Promise<void>;\n /**\n * Start RUM Action.\n * RUM will bind Resource, Error, LongTask events that may be triggered by this Action.\n * Avoid adding multiple times within 0.1s, only one Action will be associated with the same View at the same time, and new Actions will be discarded if the previous one has not ended.\n * Adding Action with `addAction` method does not affect each other.\n * @param actionName action name\n * @param actionType action type\n * @param property event context (optional)\n * @returns a Promise.\n */\n startAction(\n actionName: string,\n actionType: string,\n property?: Object\n ): Promise<void>;\n /**\n * Add Action event. This type of data cannot be associated with Error, Resource, LongTask data, and has no discard logic.\n * @param actionName action name\n * @param actionType action type\n * @param property event context (optional)\n * @returns a Promise.\n */\n addAction(\n actionName: string,\n actionType: string,\n property?: Object\n ): Promise<void>;\n /**\n * view load duration.\n * @param viewName view name\n * @param loadTime view load duration\n * @returns a Promise.\n */\n onCreateView(viewName: string, loadTime: number): Promise<void>;\n /**\n * view start.\n * @param viewName page name\n * @param property event context (optional)\n * @returns a Promise.\n */\n startView(viewName: string, property?: Object): Promise<void>;\n /**\n * view end.\n * @param property event context (optional)\n * @returns a Promise.\n */\n stopView(property?: Object): Promise<void>;\n /**\n * Exception capture and log collection.\n * @param stack stack log\n * @param message error message\n * @param property event context (optional)\n * @returns a Promise.\n */\n addError(stack: string, message: string, property?: Object): Promise<void>;\n /**\n * Exception capture and log collection.\n * @param type error type\n * @param stack stack log\n * @param message error message\n * @param property event context (optional)\n * @returns a Promise.\n */\n addErrorWithType(\n type: string,\n stack: string,\n message: string,\n property?: Object\n ): Promise<void>;\n /**\n * Start resource request.\n * @param key unique id\n * @param property event context (optional)\n * @returns a Promise.\n */\n startResource(key: string, property?: Object): Promise<void>;\n /**\n * End resource request.\n * @param key unique id\n * @param property event context (optional)\n * @returns a Promise.\n */\n stopResource(key: string, property?: Object): Promise<void>;\n /**\n * Send resource data metrics.\n * @param key unique id\n * @param resource resource data\n * @param metrics resource performance data\n * @returns a Promise.\n */\n addResource(key: string, resource: Object, metrics?: Object): Promise<void>;\n}\nexport default TurboModuleRegistry.get<Spec>('FTReactNativeRUM');\n"],"mappings":"AAAA;;AAEA,SAASA,mBAAmB,QAAQ,cAAc;AAqGlD,eAAeA,mBAAmB,CAACC,GAAG,CAAO,kBAAkB,CAAC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ /* eslint-disable @typescript-eslint/ban-types */
2
+
3
+ import { TurboModuleRegistry } from 'react-native';
4
+ export default TurboModuleRegistry.get('FTReactNativeTrace');
5
+ //# sourceMappingURL=NativeFTReactNativeTrace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","get"],"sources":["NativeFTReactNativeTrace.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport type { TurboModule } from 'react-native';\nimport { TurboModuleRegistry } from 'react-native';\n\nexport interface Spec extends TurboModule {\n /**\n * Configure trace to enable distributed tracing.\n * @param config trace configuration parameters.\n * @returns a Promise.\n */\n setConfig(config: Object): Promise<void>;\n /**\n * Get trace HTTP request header data.\n * @param url request URL\n * @returns trace request header parameters\n * @deprecated use getTraceHeaderFields() replace.\n */\n getTraceHeader(key: string, url: string): Promise<Object>;\n /**\n * Get trace HTTP request header data.\n * @param url request URL\n * @returns trace request header parameters\n */\n getTraceHeaderFields(url: string, key?: string): Promise<Object>;\n}\nexport default TurboModuleRegistry.get<Spec>('FTReactNativeTrace');\n"],"mappings":"AAAA;;AAEA,SAASA,mBAAmB,QAAQ,cAAc;AAuBlD,eAAeA,mBAAmB,CAACC,GAAG,CAAO,oBAAoB,CAAC","ignoreList":[]}
@@ -1,3 +1,3 @@
1
1
  // generated by genversion
2
- export const version = '0.4.0-alpha.4';
2
+ export const version = '0.4.2';
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["version"],"sources":["version.ts"],"sourcesContent":["// generated by genversion\nexport const version = '0.4.0-alpha.4';\n"],"mappings":"AAAA;AACA,OAAO,MAAMA,OAAO,GAAG,eAAe","ignoreList":[]}
1
+ {"version":3,"names":["version"],"sources":["version.ts"],"sourcesContent":["// generated by genversion\nexport const version = '0.4.2';\n"],"mappings":"AAAA;AACA,OAAO,MAAMA,OAAO,GAAG,OAAO","ignoreList":[]}
@@ -41,12 +41,12 @@ declare class FTReactNativeLogWrapper {
41
41
  */
42
42
  logConfig(config: FTLogConfig): Promise<void>;
43
43
  /**
44
- * Output log.
45
- * @param content log content
46
- * @param status log status
47
- * @param property log context (optional)
48
- */
49
- logging(content: String, logStatus: FTLogStatus | String, property?: object): Promise<void>;
44
+ * Output log.
45
+ * @param content log content
46
+ * @param status log status
47
+ * @param property log context (optional)
48
+ */
49
+ logging(content: string, logStatus: FTLogStatus | string, property?: object): Promise<void>;
50
50
  }
51
51
  export declare const FTReactNativeLog: FTReactNativeLogWrapper;
52
52
  export {};
@@ -1,3 +1,37 @@
1
+ import { EmitterSubscription } from 'react-native';
2
+ /**
3
+ * Bridge context manager for managing shared properties across RUM and Logger modules
4
+ * This class provides a centralized way to store and retrieve global properties that will be
5
+ * automatically merged with local properties when making calls to RUM and Logger functions
6
+ */
7
+ declare class BridgeContextManager {
8
+ private static instance;
9
+ private properties;
10
+ private constructor();
11
+ /**
12
+ * Initialize SDK information properties
13
+ * @private
14
+ */
15
+ private initializeSDKInfo;
16
+ /**
17
+ * Get singleton instance of BridgeContextManager
18
+ * @returns BridgeContextManager instance
19
+ */
20
+ static getInstance(): BridgeContextManager;
21
+ /**
22
+ * Add bridge context properties that will be automatically merged with local properties
23
+ * @param properties Object containing key-value pairs
24
+ */
25
+ appendBridgeContext(properties: Record<string, any>): void;
26
+ /**
27
+ * Merge bridge context properties with local properties
28
+ * Bridge context properties take precedence over local properties
29
+ * @param localProperties Local properties to merge with bridge context properties
30
+ * @returns Merged properties object
31
+ */
32
+ mergeWithLocalPropertiesSync(localProperties?: object): Record<string, any>;
33
+ }
34
+ export declare const bridgeContextManager: BridgeContextManager;
1
35
  /**
2
36
  * Environment.
3
37
  */
@@ -12,6 +46,83 @@ export declare enum FTDBCacheDiscard {
12
46
  discard = 0,
13
47
  discardOldest = 1
14
48
  }
49
+ /**
50
+ * Remote config override rule matching condition for custom keys. Supports exact match and contains match.
51
+ * For exact match, set the value directly, for example: "userid": "test_user", which means the rule will be applied when the custom key "userid" is exactly "test_user".
52
+ * For contains match, set the value as an object with a "contains" field, for example: "userid": { "contains": "test_user" }, which means the rule will be applied when the custom key "userid" contains the object "test_user".
53
+ */
54
+ export type FTRemoteConfigCustomKeyContainsMatch = {
55
+ contains: string | number | boolean;
56
+ };
57
+ /**
58
+ * Matching rules for remote config override
59
+ * Defines matching conditions using customKeys
60
+ */
61
+ export type FTRemoteConfigOverrideMatch = {
62
+ customKeys?: Record<string, string | number | boolean | FTRemoteConfigCustomKeyContainsMatch>;
63
+ };
64
+ /**
65
+ * Values that can be modified by remote config override rules.
66
+ * These values will adjust the fetched remote configuration before it is applied.
67
+ */
68
+ export type FTRemoteConfigOverrideValues = {
69
+ env?: string;
70
+ serviceName?: string;
71
+ autoSync?: boolean;
72
+ compressIntakeRequests?: boolean;
73
+ syncPageSize?: number;
74
+ syncSleepTime?: number;
75
+ rumSampleRate?: number;
76
+ rumSessionOnErrorSampleRate?: number;
77
+ rumEnableTraceUserAction?: boolean;
78
+ rumEnableTraceUserView?: boolean;
79
+ rumEnableTraceUserResource?: boolean;
80
+ rumEnableResourceHostIP?: boolean;
81
+ rumEnableTrackAppUIBlock?: boolean;
82
+ rumBlockDurationMs?: number;
83
+ rumEnableTrackAppCrash?: boolean;
84
+ rumEnableTrackAppANR?: boolean;
85
+ rumEnableTraceWebView?: boolean;
86
+ rumAllowWebViewHost?: Array<string>;
87
+ traceSampleRate?: number;
88
+ traceEnableAutoTrace?: boolean;
89
+ traceType?: string;
90
+ logSampleRate?: number;
91
+ logLevelFilters?: Array<string>;
92
+ logEnableCustomLog?: boolean;
93
+ logEnableConsoleLog?: boolean;
94
+ };
95
+ /**
96
+ * Remote config override rules .
97
+ * Adjust the fetched remote configuration before application.
98
+ */
99
+ export type FTRemoteConfigOverrideRule = {
100
+ id?: string;
101
+ enabled?: boolean;
102
+ match: FTRemoteConfigOverrideMatch;
103
+ override: FTRemoteConfigOverrideValues;
104
+ };
105
+ /**
106
+ * Final result of the remote config update
107
+ * @param triggerType the type of remote config update trigger, auto or manual
108
+ * @param success whether the remote config update was successful
109
+ * @param platform the platform of the device, ios or android
110
+ * @param timestamp the timestamp when the remote config update was triggered
111
+ * @param rawJson the final remote config update result, in JSON string format
112
+ * @param errorCode the error code if the remote config update failed, may be null if the update was successful
113
+ * @param errorMessage the error message if the remote config update failed, may be null if the update was successful
114
+ * @param appliedOverrideRuleIds the list of override rule IDs applied in this remote config update, may be null if no rules were applied
115
+ */
116
+ export type FTRemoteConfigResult = {
117
+ triggerType: 'auto' | 'manual';
118
+ success: boolean;
119
+ platform: 'ios' | 'android';
120
+ timestamp: number;
121
+ rawJson?: string;
122
+ errorCode?: string | number;
123
+ errorMessage?: string;
124
+ appliedOverrideRuleIds?: string[];
125
+ };
15
126
  /**
16
127
  * Configure SDK startup parameters.
17
128
  * @param serverUrl data reporting address, deprecated, use [datakitUrl] instead
@@ -26,6 +137,8 @@ export declare enum FTDBCacheDiscard {
26
137
  * @param syncSleepTime interval time between each request during data synchronization, unit milliseconds, 0 < syncSleepTime < 100
27
138
  * @param enableDataIntegerCompatible whether to enable data integer compatibility during data synchronization, enabled by default
28
139
  * @param compressIntakeRequests whether to compress synchronized data
140
+ * @param enableDataFilter whether to enable SDK-side local data filters, enabled by default
141
+ * @param dataFilters local blocklist filter rules. Supported categories include `logging` and `rum`. Any data that matches a rule will be discarded.
29
142
  * @param globalContext custom global parameters
30
143
  * @param groupIdentifiers iOS side sets the AppGroups Identifier array corresponding to the collected Widget Extension
31
144
  * @param enableLimitWithDbSize set whether to enable using db to limit data size, after enabling, `FTLogConfig.logCacheLimitCount` and `FTRUMConfig.rumCacheLimitCount` will no longer take effect
@@ -33,6 +146,9 @@ export declare enum FTDBCacheDiscard {
33
146
  * @param dbDiscardStrategy db data discard strategy
34
147
  * @param dataModifier data modifier, modify individual fields {key:value}, after setting, the SDK will replace the original value with the set value according to the key
35
148
  * @param lineDataModifier data modifier, modify single data {"measurement":measurement,"data":{key:value}}, after setting, the SDK will replace the original value with the set value according to the key
149
+ * @param remoteConfiguration Set whether to enable remote dynamic configuration
150
+ * @param remoteConfigMiniUpdateInterval Set remote dynamic configuration minimum update interval, unit seconds, default 12*60*60
151
+ * @param remoteConfigOverrideRules Remote config override rules .Adjust the fetched remote configuration before application.
36
152
  */
37
153
  export interface FTMobileConfig {
38
154
  /**
@@ -51,14 +167,18 @@ export interface FTMobileConfig {
51
167
  syncSleepTime?: number;
52
168
  enableDataIntegerCompatible?: boolean;
53
169
  compressIntakeRequests?: boolean;
170
+ enableDataFilter?: boolean;
171
+ dataFilters?: Record<string, Array<string>>;
54
172
  globalContext?: object;
55
173
  groupIdentifiers?: Array<string>;
56
174
  enableLimitWithDbSize?: boolean;
57
175
  dbCacheLimit?: number;
58
176
  dbDiscardStrategy?: FTDBCacheDiscard;
59
- pkgInfo?: string;
60
177
  dataModifier?: object;
61
178
  lineDataModifier?: object;
179
+ remoteConfiguration?: boolean;
180
+ remoteConfigMiniUpdateInterval?: number;
181
+ remoteConfigOverrideRules?: Array<FTRemoteConfigOverrideRule>;
62
182
  }
63
183
  type FTMobileReactNativeType = {
64
184
  /**
@@ -67,6 +187,19 @@ type FTMobileReactNativeType = {
67
187
  * @returns a Promise.
68
188
  */
69
189
  sdkConfig(config: FTMobileConfig): Promise<void>;
190
+ /**
191
+ * Dynamically set the Datakit upload URL after SDK initialization.
192
+ * @param datakitUrl Datakit upload URL.
193
+ * @returns a Promise.
194
+ */
195
+ setDatakitURL(datakitUrl: string): Promise<void>;
196
+ /**
197
+ * Dynamically set the Dataway upload URL and client token after SDK initialization.
198
+ * @param datawayUrl Dataway upload URL.
199
+ * @param clientToken Dataway authentication token.
200
+ * @returns a Promise.
201
+ */
202
+ setDatawayURL(datawayUrl: string, clientToken: string): Promise<void>;
70
203
  /**
71
204
  * Bind user.
72
205
  * @param userId user ID.
@@ -82,16 +215,16 @@ type FTMobileReactNativeType = {
82
215
  */
83
216
  unbindRUMUserData(): Promise<void>;
84
217
  /**
85
- * Add custom global parameters. Applies to RUM and Log data
86
- * @param context custom global parameters.
87
- * @returns a Promise.
88
- */
218
+ * Add custom global parameters. Applies to RUM and Log data
219
+ * @param context custom global parameters.
220
+ * @returns a Promise.
221
+ */
89
222
  appendGlobalContext(context: object): Promise<void>;
90
223
  /**
91
- * Add custom RUM global parameters. Applies to RUM data
92
- * @param context custom RUM global parameters.
93
- * @returns a Promise.
94
- */
224
+ * Add custom RUM global parameters. Applies to RUM data
225
+ * @param context custom RUM global parameters.
226
+ * @returns a Promise.
227
+ */
95
228
  appendRUMGlobalContext(context: object): Promise<void>;
96
229
  /**
97
230
  * Add custom RUM and Log global parameters. Applies to Log data
@@ -102,13 +235,13 @@ type FTMobileReactNativeType = {
102
235
  /**
103
236
  * Actively synchronize data. When `FTMobileConfig.autoSync=false` is configured, you need to actively trigger this method to synchronize data.
104
237
  * @returns a Promise.
105
- */
238
+ */
106
239
  flushSyncData(): Promise<void>;
107
240
  /**
108
- * Synchronize events in iOS Widget Extension, iOS only
109
- * @param groupIdentifier app groupId
110
- * @returns {groupIdentifier:string,datas:Array<object>} can be used to view data collected in Extension.
111
- */
241
+ * Synchronize events in iOS Widget Extension, iOS only
242
+ * @param groupIdentifier app groupId
243
+ * @returns {groupIdentifier:string,datas:Array<object>} can be used to view data collected in Extension.
244
+ */
112
245
  trackEventFromExtension(identifier: string): Promise<object>;
113
246
  /**
114
247
  * Shut down objects currently running in the SDK
@@ -118,6 +251,28 @@ type FTMobileReactNativeType = {
118
251
  * Clear all data that has not yet been uploaded to the server.
119
252
  */
120
253
  clearAllData(): Promise<void>;
254
+ /**
255
+ * Add bridge context properties that will be automatically merged with local properties
256
+ * @param properties Object containing key-value pairs
257
+ */
258
+ appendBridgeContext(properties: Record<string, any>): void;
259
+ /**
260
+ * Update remote configuration, after enabling remote configuration, you can call this method to update the configuration in real time.
261
+ */
262
+ updateRemoteConfig(): Promise<FTRemoteConfigResult>;
263
+ /**
264
+ * Update remote configuration with minimum update interval, after enabling remote configuration, you can call this method to update the configuration in real time.
265
+ * This method is used to set the minimum update interval for remote configuration updates. If the time since the last update is less than the specified interval, the update will not be performed.
266
+ * @param interval minimum update interval, unit seconds
267
+ * @param rules Remote config override rules .Adjust the fetched remote configuration before application.
268
+ * @returns the result of the remote config update
269
+ */
270
+ updateRemoteConfigWithMiniUpdateInterval(interval: number, rules?: Array<FTRemoteConfigOverrideRule>): Promise<FTRemoteConfigResult>;
271
+ /**
272
+ * Listen for auto remote configuration updates triggered by the native SDK.
273
+ * Manual updates are returned through the update Promise instead of this event.
274
+ */
275
+ addRemoteConfigListener(listener: (result: FTRemoteConfigResult) => void): EmitterSubscription;
121
276
  };
122
277
  export declare const FTMobileReactNative: FTMobileReactNativeType;
123
278
  export {};