@truewatchtech/react-native-mobile 0.4.2 → 0.4.3

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 (153) hide show
  1. package/FTMobileReactNativeSDK.podspec +7 -5
  2. package/android/build.gradle +10 -3
  3. package/android/src/main/java/com/ft/sdk/reactnative/FTLogImpl.java +10 -2
  4. package/android/src/main/java/com/ft/sdk/reactnative/FTMobileImpl.java +45 -10
  5. package/android/src/main/java/com/ft/sdk/reactnative/FTRUMImpl.java +131 -6
  6. package/android/src/main/java/com/ft/sdk/reactnative/FTTraceImpl.java +10 -3
  7. package/android/src/main/java/com/ft/sdk/reactnative/JsLongTaskMonitor.java +281 -0
  8. package/android/src/main/java/com/ft/sdk/reactnative/ViewTiming.java +17 -0
  9. package/android/src/main/java/com/ft/sdk/reactnative/VisitorIdConfigMapper.java +50 -0
  10. package/android/src/main/java/com/ft/sdk/reactnative/utils/ReactNativeUtils.java +5 -12
  11. package/android/src/newarch/java/com/ft/sdk/reactnative/FTMobileModule.java +14 -5
  12. package/android/src/newarch/java/com/ft/sdk/reactnative/FTRUMModule.java +44 -1
  13. package/android/src/newarch/java/com/ft/sdk/reactnative/FTTraceModule.java +14 -0
  14. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTMobileModule.java +7 -2
  15. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTRUMModule.java +39 -1
  16. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTTraceModule.java +12 -0
  17. package/android/src/rnpost70/java/com/ft/sdk/reactnative/ReactJsThreadExecutor.java +21 -0
  18. package/android/src/rnpre70/java/com/ft/sdk/reactnative/ReactJsThreadExecutor.java +37 -0
  19. package/android/src/test/java/com/ft/sdk/reactnative/FTMobileImplTest.java +53 -0
  20. package/android/src/test/java/com/ft/sdk/reactnative/FTRUMModuleTest.java +117 -0
  21. package/android/src/test/java/com/ft/sdk/reactnative/JsLongTaskMonitorTest.java +446 -0
  22. package/android/src/test/java/com/ft/sdk/reactnative/utils/ReactNativeUtilsTest.java +33 -0
  23. package/ios/FTJSLongTaskMonitor.h +51 -0
  24. package/ios/FTJSLongTaskMonitor.m +250 -0
  25. package/ios/FTMobileReactNative.mm +54 -18
  26. package/ios/FTReactNativeLog.mm +9 -5
  27. package/ios/FTReactNativeRUM.mm +196 -31
  28. package/ios/FTReactNativeResource.h +4 -0
  29. package/ios/FTReactNativeResource.m +64 -0
  30. package/ios/FTReactNativeTrace.mm +59 -14
  31. package/ios/FTReactNativeUtils.m +10 -15
  32. package/ios/FTReactNativeViewTiming.h +18 -0
  33. package/ios/FTReactNativeWebSocket.h +10 -0
  34. package/ios/FTReactNativeWebSocket.mm +201 -0
  35. package/ios/FTWebSocketMetadataStore.h +25 -0
  36. package/ios/FTWebSocketMetadataStore.m +622 -0
  37. package/ios/FTWebSocketResourceData.h +20 -0
  38. package/ios/FTWebSocketResourceData.m +106 -0
  39. package/lib/commonjs/ft_logger.js +3 -1
  40. package/lib/commonjs/ft_logger.js.map +1 -1
  41. package/lib/commonjs/ft_mobile_agent.js +47 -4
  42. package/lib/commonjs/ft_mobile_agent.js.map +1 -1
  43. package/lib/commonjs/ft_rum.js +65 -5
  44. package/lib/commonjs/ft_rum.js.map +1 -1
  45. package/lib/commonjs/ft_tracing.js +14 -4
  46. package/lib/commonjs/ft_tracing.js.map +1 -1
  47. package/lib/commonjs/index.js +21 -0
  48. package/lib/commonjs/index.js.map +1 -1
  49. package/lib/commonjs/rum/FTBabelInteractionTracking.js +72 -0
  50. package/lib/commonjs/rum/FTBabelInteractionTracking.js.map +1 -0
  51. package/lib/commonjs/rum/FTBabelUtils.js +87 -0
  52. package/lib/commonjs/rum/FTBabelUtils.js.map +1 -0
  53. package/lib/commonjs/rum/FTRumActionTracking.js +10 -39
  54. package/lib/commonjs/rum/FTRumActionTracking.js.map +1 -1
  55. package/lib/commonjs/rum/FTRumActionTrackingContext.js +50 -0
  56. package/lib/commonjs/rum/FTRumActionTrackingContext.js.map +1 -0
  57. package/lib/commonjs/rum/FTRumViewTracking.js +147 -0
  58. package/lib/commonjs/rum/FTRumViewTracking.js.map +1 -0
  59. package/lib/commonjs/rum/FTRumWebSocketNative.js +73 -0
  60. package/lib/commonjs/rum/FTRumWebSocketNative.js.map +1 -0
  61. package/lib/commonjs/rum/FTRumWebSocketTiming.js +73 -0
  62. package/lib/commonjs/rum/FTRumWebSocketTiming.js.map +1 -0
  63. package/lib/commonjs/rum/FTRumWebSocketTracking.js +506 -0
  64. package/lib/commonjs/rum/FTRumWebSocketTracking.js.map +1 -0
  65. package/lib/commonjs/rum/longTasksUtils.js +25 -0
  66. package/lib/commonjs/rum/longTasksUtils.js.map +1 -0
  67. package/lib/commonjs/specs/NativeFTMobileReactNative.js.map +1 -1
  68. package/lib/commonjs/specs/NativeFTReactNativeRUM.js.map +1 -1
  69. package/lib/commonjs/specs/NativeFTReactNativeTrace.js.map +1 -1
  70. package/lib/commonjs/specs/NativeFTReactNativeWebSocket.js +11 -0
  71. package/lib/commonjs/specs/NativeFTReactNativeWebSocket.js.map +1 -0
  72. package/lib/commonjs/version.js +1 -1
  73. package/lib/commonjs/version.js.map +1 -1
  74. package/lib/commonjs/visitorIdConfig.js +37 -0
  75. package/lib/commonjs/visitorIdConfig.js.map +1 -0
  76. package/lib/module/ft_logger.js +3 -1
  77. package/lib/module/ft_logger.js.map +1 -1
  78. package/lib/module/ft_mobile_agent.js +47 -4
  79. package/lib/module/ft_mobile_agent.js.map +1 -1
  80. package/lib/module/ft_rum.js +65 -5
  81. package/lib/module/ft_rum.js.map +1 -1
  82. package/lib/module/ft_tracing.js +14 -2
  83. package/lib/module/ft_tracing.js.map +1 -1
  84. package/lib/module/index.js +4 -1
  85. package/lib/module/index.js.map +1 -1
  86. package/lib/module/rum/FTBabelInteractionTracking.js +66 -0
  87. package/lib/module/rum/FTBabelInteractionTracking.js.map +1 -0
  88. package/lib/module/rum/FTBabelUtils.js +80 -0
  89. package/lib/module/rum/FTBabelUtils.js.map +1 -0
  90. package/lib/module/rum/FTRumActionTracking.js +10 -39
  91. package/lib/module/rum/FTRumActionTracking.js.map +1 -1
  92. package/lib/module/rum/FTRumActionTrackingContext.js +43 -0
  93. package/lib/module/rum/FTRumActionTrackingContext.js.map +1 -0
  94. package/lib/module/rum/FTRumViewTracking.js +140 -0
  95. package/lib/module/rum/FTRumViewTracking.js.map +1 -0
  96. package/lib/module/rum/FTRumWebSocketNative.js +62 -0
  97. package/lib/module/rum/FTRumWebSocketNative.js.map +1 -0
  98. package/lib/module/rum/FTRumWebSocketTiming.js +67 -0
  99. package/lib/module/rum/FTRumWebSocketTiming.js.map +1 -0
  100. package/lib/module/rum/FTRumWebSocketTracking.js +499 -0
  101. package/lib/module/rum/FTRumWebSocketTracking.js.map +1 -0
  102. package/lib/module/rum/longTasksUtils.js +18 -0
  103. package/lib/module/rum/longTasksUtils.js.map +1 -0
  104. package/lib/module/specs/NativeFTMobileReactNative.js.map +1 -1
  105. package/lib/module/specs/NativeFTReactNativeRUM.js.map +1 -1
  106. package/lib/module/specs/NativeFTReactNativeTrace.js.map +1 -1
  107. package/lib/module/specs/NativeFTReactNativeWebSocket.js +8 -0
  108. package/lib/module/specs/NativeFTReactNativeWebSocket.js.map +1 -0
  109. package/lib/module/version.js +1 -1
  110. package/lib/module/version.js.map +1 -1
  111. package/lib/module/visitorIdConfig.js +31 -0
  112. package/lib/module/visitorIdConfig.js.map +1 -0
  113. package/lib/typescript/ft_logger.d.ts +11 -1
  114. package/lib/typescript/ft_mobile_agent.d.ts +28 -0
  115. package/lib/typescript/ft_rum.d.ts +42 -5
  116. package/lib/typescript/ft_tracing.d.ts +9 -1
  117. package/lib/typescript/index.d.ts +5 -1
  118. package/lib/typescript/rum/FTBabelInteractionTracking.d.ts +30 -0
  119. package/lib/typescript/rum/FTBabelUtils.d.ts +1 -0
  120. package/lib/typescript/rum/FTRumActionTracking.d.ts +0 -2
  121. package/lib/typescript/rum/FTRumActionTrackingContext.d.ts +11 -0
  122. package/lib/typescript/rum/FTRumViewTracking.d.ts +32 -0
  123. package/lib/typescript/rum/FTRumWebSocketNative.d.ts +22 -0
  124. package/lib/typescript/rum/FTRumWebSocketTiming.d.ts +7 -0
  125. package/lib/typescript/rum/FTRumWebSocketTracking.d.ts +54 -0
  126. package/lib/typescript/rum/longTasksUtils.d.ts +8 -0
  127. package/lib/typescript/specs/NativeFTMobileReactNative.d.ts +15 -0
  128. package/lib/typescript/specs/NativeFTReactNativeRUM.d.ts +11 -1
  129. package/lib/typescript/specs/NativeFTReactNativeTrace.d.ts +12 -0
  130. package/lib/typescript/specs/NativeFTReactNativeWebSocket.d.ts +13 -0
  131. package/lib/typescript/version.d.ts +1 -1
  132. package/lib/typescript/visitorIdConfig.d.ts +11 -0
  133. package/package.json +6 -4
  134. package/src/ft_logger.tsx +11 -1
  135. package/src/ft_mobile_agent.tsx +79 -7
  136. package/src/ft_rum.tsx +111 -7
  137. package/src/ft_tracing.tsx +24 -2
  138. package/src/index.tsx +8 -0
  139. package/src/rum/FTBabelInteractionTracking.ts +124 -0
  140. package/src/rum/FTBabelUtils.tsx +99 -0
  141. package/src/rum/FTRumActionTracking.tsx +14 -43
  142. package/src/rum/FTRumActionTrackingContext.ts +68 -0
  143. package/src/rum/FTRumViewTracking.ts +179 -0
  144. package/src/rum/FTRumWebSocketNative.ts +107 -0
  145. package/src/rum/FTRumWebSocketTiming.ts +82 -0
  146. package/src/rum/FTRumWebSocketTracking.ts +722 -0
  147. package/src/rum/longTasksUtils.ts +17 -0
  148. package/src/specs/NativeFTMobileReactNative.ts +18 -0
  149. package/src/specs/NativeFTReactNativeRUM.ts +19 -1
  150. package/src/specs/NativeFTReactNativeTrace.ts +12 -0
  151. package/src/specs/NativeFTReactNativeWebSocket.ts +33 -0
  152. package/src/version.ts +1 -1
  153. package/src/visitorIdConfig.ts +123 -0
@@ -1 +1 @@
1
- {"version":3,"names":["_FTRumErrorTracking","require","_FTRumActionTracking","_ft_mobile_agent","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ErrorMonitorType","exports","DeviceMetricsMonitorType","DetectFrequency","FTRUMCacheDiscard","IOSCrashMonitoringType","FTReactNativeRUMWrapper","constructor","default","setConfig","config","console","log","enableAutoTrackError","FTRumErrorTracking","startTracking","enableAutoTrackUserAction","FTRumActionTracking","rum","startAction","actionName","actionType","property","mergedProperties","bridgeContextManager","mergeWithLocalPropertiesSync","addAction","onCreateView","viewName","loadTime","startView","stopView","addError","stack","message","addErrorWithType","type","startResource","key","stopResource","addResource","resource","metrics","FTReactNativeRUM"],"sources":["ft_rum.tsx"],"sourcesContent":["// import { NativeModules } from 'react-native';\nimport { FTRumErrorTracking } from './rum/FTRumErrorTracking';\nimport { FTRumActionTracking } from './rum/FTRumActionTracking';\nimport { bridgeContextManager } from './ft_mobile_agent';\n\n/**\n * Error monitoring type.\n */\n/* eslint-disable no-bitwise */\nexport enum ErrorMonitorType {\n all = 0xffffffff,\n battery = 1 << 1,\n memory = 1 << 2,\n cpu = 1 << 3,\n}\n/**\n * Page monitoring supplement type\n */\nexport enum DeviceMetricsMonitorType {\n all = 0xffffffff,\n battery = 1 << 1,\n memory = 1 << 2,\n cpu = 1 << 3,\n fps = 1 << 4,\n}\n/**\n * Device information monitoring cycle.\n */\nexport enum DetectFrequency {\n normal,\n frequent,\n rare,\n}\n\nexport enum FTRUMCacheDiscard {\n discard,\n discardOldest,\n}\n\nexport enum IOSCrashMonitoringType {\n /** Monitor Mach kernel exceptions. */\n machException = 0x01,\n\n /** Monitor fatal signals. */\n signal = 0x02,\n\n /** Monitor uncaught C++ exceptions. */\n cppException = 0x04,\n\n /** Monitor uncaught Objective-C NSExceptions. */\n nsException = 0x08,\n\n /** Track and inject system information. */\n system = 0x40,\n\n /** Track and inject application state information. */\n applicationState = 0x80,\n\n /** All crash monitor types. */\n all = machException |\n signal |\n cppException |\n nsException |\n applicationState |\n system,\n\n /** High compatibility crash monitor types (excludes Mach exceptions). */\n highCompatibility = all & ~machException,\n}\n/* eslint-enable no-bitwise */\n/**\n * Set RUM tracking conditions.\n * @param androidAppId appId, apply during monitoring\n * @param iOSAppId appId, apply during monitoring\n * @param sampleRate sampling rate\n * @param sessionOnErrorSampleRate error session sampling rate. For sessions not sampled, if ERROR is hit, collect data 1 minute before the error occurs\n * @param enableAutoTrackUserAction whether to automatically collect react-native control click events, can set actionName with accessibilityLabel when enabled\n * @param enableTrackError whether to automatically collect react-native Error\n * @param enableTrackNativeCrash whether to collect Native Error\n * @param enableTrackNativeAppANR whether to collect Native ANR\n * @param enableTrackNativeFreeze whether to collect Native Freeze\n * @param nativeFreezeDurationMs set the threshold for collecting Native Freeze, value range [100,), unit ms. iOS default 250ms, Android default 1000ms\n * @param enableNativeUserAction whether to start Native Action tracking, Button click events, recommended to disable for pure react-native apps\n * @param enableNativeUserView whether to start Native View auto tracking, recommended to disable for pure react-native apps\n * @param enableNativeUserResource whether to automatically collect react-native Resource\n * @param enableResourceHostIP whether to collect network request Host IP (only for native http, iOS 13 and above)\n * @param errorMonitorType error monitoring supplement type\n * @param deviceMonitorType page monitoring supplement type\n * @param detectFrequency monitoring frequency\n * @param globalContext custom global parameters\n * @param rumCacheLimitCount RUM max cache size, default 100_000\n * @param rumDiscardStrategy RUM data discard strategy\n * @param enableTraceWebView Set whether to enable WebView data collection, default true\n * @param allowWebViewHost Set specific hosts or domains allowed to collect WebView data, nil means collect all\n * @param iosCrashMonitoringType iOS crash monitoring type , default is highCompatibility, which does not include Mach exceptions for better compatibility. you must enable system crash monitoring to get crash stack traces and crash information.\n */\nexport interface FTRUMConfig {\n androidAppId: string;\n iOSAppId: string;\n sampleRate?: number;\n sessionOnErrorSampleRate?: number;\n enableAutoTrackUserAction?: boolean;\n enableAutoTrackError?: boolean;\n enableTrackNativeCrash?: boolean;\n enableTrackNativeAppANR?: boolean;\n enableTrackNativeFreeze?: boolean;\n nativeFreezeDurationMs?: number;\n enableNativeUserAction?: boolean;\n enableNativeUserView?: boolean;\n enableNativeUserResource?: boolean;\n enableResourceHostIP?: boolean;\n errorMonitorType?: ErrorMonitorType;\n deviceMonitorType?: DeviceMetricsMonitorType;\n detectFrequency?: DetectFrequency;\n globalContext?: object;\n rumCacheLimitCount?: number;\n rumDiscardStrategy?: FTRUMCacheDiscard;\n enableTraceWebView?: boolean;\n allowWebViewHost?: Array<string>;\n iosCrashMonitoringType?: IOSCrashMonitoringType;\n}\n/**\n * RUM Resource data.\n * @param url request URL\n * @param httpMethod request method\n * @param requestHeader request header parameters\n * @param responseHeader response header parameters\n * @param responseBody response content\n * @param resourceStatus response status code\n */\nexport interface FTRUMResource {\n url: string;\n httpMethod: string;\n requestHeader: object;\n responseHeader?: object;\n responseBody?: string;\n resourceStatus?: number;\n}\n/**\n * RUM Resource performance metrics.\n * @param duration resource load time\n * @param resource_dns resource DNS resolution time\n * @param resource_tcp resource TCP connection time\n * @param resource_ssl resource SSL connection time\n * @param resource_ttfb resource request response time\n * @param resource_trans resource content transfer time\n * @param resource_first_byte resource first byte time\n */\nexport interface FTRUMResourceMetrics {\n duration?: number;\n resource_dns?: number;\n resource_tcp?: number;\n resource_ssl?: number;\n resource_ttfb?: number;\n resource_trans?: number;\n resource_first_byte?: number;\n}\ntype FTReactNativeRUMType = {\n /**\n * Set RUM tracking conditions and enable RUM collection.\n * @param config rum configuration parameters.\n * @returns a Promise.\n */\n setConfig(config: FTRUMConfig): 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(\n key: string,\n resource: FTRUMResource,\n metrics?: FTRUMResourceMetrics\n ): Promise<void>;\n};\n\nclass FTReactNativeRUMWrapper implements FTReactNativeRUMType {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n private rum: FTReactNativeRUMType = require('./specs/NativeFTReactNativeRUM')\n .default;\n\n setConfig(config: FTRUMConfig): Promise<void> {\n console.log('FTRUMConfig');\n if (config.enableAutoTrackError) {\n FTRumErrorTracking.startTracking();\n }\n if (config.enableAutoTrackUserAction) {\n FTRumActionTracking.startTracking();\n }\n return this.rum.setConfig(config);\n }\n startAction(\n actionName: string,\n actionType: string,\n property?: object\n ): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.startAction(actionName, actionType, mergedProperties);\n }\n addAction(\n actionName: string,\n actionType: string,\n property?: object\n ): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.addAction(actionName, actionType, mergedProperties);\n }\n onCreateView(viewName: string, loadTime: number): Promise<void> {\n return this.rum.onCreateView(viewName, loadTime);\n }\n startView(viewName: string, property?: object): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.startView(viewName, mergedProperties);\n }\n stopView(property?: object): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.stopView(mergedProperties);\n }\n addError(stack: string, message: string, property?: object): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.addError(stack, message, mergedProperties);\n }\n addErrorWithType(\n type: string,\n stack: string,\n message: string,\n property?: object\n ): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.addErrorWithType(type, stack, message, mergedProperties);\n }\n startResource(key: string, property?: object): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.startResource(key, mergedProperties);\n }\n stopResource(key: string, property?: object): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.stopResource(key, mergedProperties);\n }\n addResource(\n key: string,\n resource: FTRUMResource,\n metrics: FTRUMResourceMetrics = {}\n ): Promise<void> {\n return this.rum.addResource(key, resource, metrics);\n }\n}\n\nexport const FTReactNativeRUM: FTReactNativeRUMType =\n new FTReactNativeRUMWrapper();\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_visitorIdConfig","require","_reactNative","_FTRumErrorTracking","_FTRumActionTracking","_FTBabelInteractionTracking","_FTRumWebSocketTracking","_ft_mobile_agent","_longTasksUtils","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ErrorMonitorType","exports","DeviceMetricsMonitorType","DetectFrequency","FTRUMCacheDiscard","IOSCrashMonitoringType","isBabelPluginEnabled","globalThis","__FT_RN_BABEL_PLUGIN_ENABLED__","global","FTReactNativeRUMWrapper","constructor","default","setConfig","config","visitorIdConfig","validateVisitorIdConfig","error","Promise","reject","bridgeContextManager","configureLongTaskContext","enableLongTask","webSocketLifecycle","FTRumWebSocketTracking","getLifecycleVersion","webSocketConfigVersion","trackWebSocket","enableIOSWebSocketResource","console","log","enableAutoTrackError","FTRumErrorTracking","startTracking","babelPluginEnabled","FTBabelInteractionTracking","configure","trackInteractions","Boolean","enableAutoTrackUserAction","actionReporter","actionName","actionType","property","startAction","FTRumActionTracking","stopTracking","rum","longTaskThresholdMs","normalizeLongTaskThreshold","then","Platform","OS","mergedProperties","mergeWithLocalPropertiesSync","addAction","onCreateView","viewName","loadTime","updateViewLoadingTime","duration","isSafeInteger","RangeError","startView","stopView","addError","stack","message","addErrorWithType","type","startResource","key","stopResource","addResource","resource","metrics","FTReactNativeRUM"],"sources":["ft_rum.tsx"],"sourcesContent":["import { FTVisitorIdConfig, validateVisitorIdConfig } from './visitorIdConfig';\n// import { NativeModules } from 'react-native';\nimport { Platform } from 'react-native';\nimport { FTRumErrorTracking } from './rum/FTRumErrorTracking';\nimport { FTRumActionTracking } from './rum/FTRumActionTracking';\nimport { FTBabelInteractionTracking } from './rum/FTBabelInteractionTracking';\nimport { FTRumWebSocketTracking } from './rum/FTRumWebSocketTracking';\nimport { bridgeContextManager } from './ft_mobile_agent';\nimport { normalizeLongTaskThreshold } from './rum/longTasksUtils';\n\n/**\n * Error monitoring type.\n */\n/* eslint-disable no-bitwise */\nexport enum ErrorMonitorType {\n all = 0xffffffff,\n battery = 1 << 1,\n memory = 1 << 2,\n cpu = 1 << 3,\n}\n/**\n * Page monitoring supplement type\n */\nexport enum DeviceMetricsMonitorType {\n all = 0xffffffff,\n battery = 1 << 1,\n memory = 1 << 2,\n cpu = 1 << 3,\n fps = 1 << 4,\n}\n/**\n * Device information monitoring cycle.\n */\nexport enum DetectFrequency {\n normal,\n frequent,\n rare,\n}\n\nexport enum FTRUMCacheDiscard {\n discard,\n discardOldest,\n}\n\nexport enum IOSCrashMonitoringType {\n /** Monitor Mach kernel exceptions. */\n machException = 0x01,\n\n /** Monitor fatal signals. */\n signal = 0x02,\n\n /** Monitor uncaught C++ exceptions. */\n cppException = 0x04,\n\n /** Monitor uncaught Objective-C NSExceptions. */\n nsException = 0x08,\n\n /** Track and inject system information. */\n system = 0x40,\n\n /** Track and inject application state information. */\n applicationState = 0x80,\n\n /** All crash monitor types. */\n all = machException |\n signal |\n cppException |\n nsException |\n applicationState |\n system,\n\n /** High compatibility crash monitor types (excludes Mach exceptions). */\n highCompatibility = all & ~machException,\n}\n/* eslint-enable no-bitwise */\n/**\n * Set RUM tracking conditions.\n * @param androidAppId appId, apply during monitoring\n * @param iOSAppId appId, apply during monitoring\n * @param sessionSamplingRate RUM session sampling percentage in [0, 100], default 100. Supports fractional percentages and takes precedence over sampleRate.\n * @param sessionOnErrorSamplingRate Sampling percentage in [0, 100] for otherwise unsampled sessions when an error occurs, default 0. Supports fractional percentages and takes precedence over sessionOnErrorSampleRate.\n * @param sampleRate Deprecated RUM session sampling probability in [0, 1], default 1. Used only when sessionSamplingRate is omitted; multiplied by 100 before passing to Native.\n * @param sessionOnErrorSampleRate Deprecated error session sampling probability in [0, 1], default 0. Used only when sessionOnErrorSamplingRate is omitted; multiplied by 100 before passing to Native.\n * @param enableAutoTrackUserAction whether to automatically collect react-native control click events, can set actionName with accessibilityLabel when enabled\n * @param enableTrackError whether to automatically collect react-native Error\n * @param enableTrackNativeCrash whether to collect Native Error\n * @param enableTrackNativeAppANR whether to collect Native ANR\n * @param enableTrackNativeFreeze whether to collect Native Freeze\n * @param nativeFreezeDurationMs set the threshold for collecting Native Freeze, value range [100,), unit ms. iOS default 250ms, Android default 1000ms\n * @param enableLongTask whether to collect React Native JavaScript LongTasks, default false\n * @param longTaskThresholdMs set the threshold for collecting React Native JavaScript LongTasks, unit ms. Defaults to 100 and is clamped to [100, 5000]\n * @param enableNativeUserAction whether to start Native Action tracking, Button click events, recommended to disable for pure react-native apps\n * @param enableNativeUserView whether to start Native View auto tracking, recommended to disable for pure react-native apps\n * @param enableNativeUserResource whether to automatically collect react-native Resource\n * @param enableIOSWebSocketResource whether to collect iOS WebSocket opening handshakes as RUM Resources. Defaults to false.\n * Independent of enableNativeUserResource. Android native WebSocket collection is unaffected.\n * iOS WebSocket Trace header injection requires both this option and enableNativeAutoTrace.\n * When disabled, new iOS WebSocket connections are not instrumented or automatically injected with Trace headers by this SDK.\n * @param enableResourceHostIP whether to collect network request Host IP (only for native http, iOS 13 and above)\n * @param errorMonitorType error monitoring supplement type\n * @param deviceMonitorType page monitoring supplement type\n * @param detectFrequency monitoring frequency\n * @param globalContext custom global parameters\n * @param rumCacheLimitCount RUM max cache size, default 100_000\n * @param rumDiscardStrategy RUM data discard strategy\n * @param enableTraceWebView Set whether to enable WebView data collection, default true\n * @param allowWebViewHost Deprecated; use FTMobileConfig.allowWebViewHost for shared WebView host filtering.\n * @param iosCrashMonitoringType iOS crash monitoring type , default is highCompatibility, which does not include Mach exceptions for better compatibility. you must enable system crash monitoring to get crash stack traces and crash information.\n */\nexport interface FTRUMConfig {\n /** Valid config enables Visitor ID; omitted/null disables it. */\n visitorIdConfig?: FTVisitorIdConfig | null;\n androidAppId: string;\n iOSAppId: string;\n /**\n * RUM session sampling percentage in [0, 100], default 100.\n * Supports fractional percentages: 12.5 means 12.5%, not 0.125.\n * Takes precedence over sampleRate when both are supplied, including 0.\n * Setting 0 disables regular session sampling; error session sampling is separate.\n */\n sessionSamplingRate?: number;\n /** @deprecated Use sessionSamplingRate. Probability in [0, 1], default 1; 0.125 maps to 12.5%. Ignored when sessionSamplingRate is supplied. */\n sampleRate?: number;\n /**\n * Sampling percentage for otherwise unsampled RUM sessions when an error occurs.\n * Range [0, 100], default 0; fractional percentages are supported.\n * Takes precedence over sessionOnErrorSampleRate when both are supplied, including 0.\n */\n sessionOnErrorSamplingRate?: number;\n /** @deprecated Use sessionOnErrorSamplingRate. Probability in [0, 1], default 0; multiplied by 100. Ignored when sessionOnErrorSamplingRate is supplied. */\n sessionOnErrorSampleRate?: number;\n enableAutoTrackUserAction?: boolean;\n enableAutoTrackError?: boolean;\n enableTrackNativeCrash?: boolean;\n enableTrackNativeAppANR?: boolean;\n enableTrackNativeFreeze?: boolean;\n nativeFreezeDurationMs?: number;\n enableLongTask?: boolean;\n longTaskThresholdMs?: number;\n enableNativeUserAction?: boolean;\n enableNativeUserView?: boolean;\n enableNativeUserResource?: boolean;\n enableIOSWebSocketResource?: boolean;\n enableResourceHostIP?: boolean;\n errorMonitorType?: ErrorMonitorType;\n deviceMonitorType?: DeviceMetricsMonitorType;\n detectFrequency?: DetectFrequency;\n globalContext?: object;\n rumCacheLimitCount?: number;\n rumDiscardStrategy?: FTRUMCacheDiscard;\n enableTraceWebView?: boolean;\n /** @deprecated Configure the shared host allowlist in FTMobileConfig.allowWebViewHost. */\n allowWebViewHost?: Array<string> | null;\n iosCrashMonitoringType?: IOSCrashMonitoringType;\n}\n/**\n * RUM Resource data.\n * @param url request URL\n * @param httpMethod request method\n * @param requestHeader request header parameters\n * @param responseHeader response header parameters\n * @param responseBody response content\n * @param resourceStatus response status code\n */\nexport interface FTRUMResource {\n url: string;\n httpMethod: string;\n requestHeader: object;\n responseHeader?: object;\n responseBody?: string;\n resourceStatus?: number;\n}\n/**\n * RUM Resource performance metrics.\n * @param duration resource load time\n * @param resource_dns resource DNS resolution time\n * @param resource_tcp resource TCP connection time\n * @param resource_ssl resource SSL connection time\n * @param resource_ttfb resource request response time\n * @param resource_trans resource content transfer time\n * @param resource_first_byte resource first byte time\n */\nexport interface FTRUMResourceMetrics {\n duration?: number;\n resource_dns?: number;\n resource_tcp?: number;\n resource_ssl?: number;\n resource_ttfb?: number;\n resource_trans?: number;\n resource_first_byte?: number;\n}\ntype FTReactNativeRUMType = {\n /**\n * Set RUM tracking conditions and enable RUM collection.\n * @param config rum configuration parameters.\n * @returns a Promise.\n */\n setConfig(config: FTRUMConfig): 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 monotonic view load duration in nanoseconds\n * @returns a Promise.\n */\n onCreateView(viewName: string, loadTime: number): Promise<void>;\n /**\n * Replace the current active View's loading duration, between startView and stopView.\n * @param duration monotonic elapsed time in nanoseconds; a non-negative safe integer.\n * Zero clears loading time. Late calls can update a newer View; no View ID is supplied.\n * @returns a Promise for the native call, not for data upload.\n */\n updateViewLoadingTime(duration: 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(\n key: string,\n resource: FTRUMResource,\n metrics?: FTRUMResourceMetrics\n ): Promise<void>;\n};\n\nfunction isBabelPluginEnabled(): boolean {\n if (typeof globalThis !== 'undefined') {\n return globalThis.__FT_RN_BABEL_PLUGIN_ENABLED__ === true;\n }\n if (typeof global !== 'undefined') {\n return global.__FT_RN_BABEL_PLUGIN_ENABLED__ === true;\n }\n return false;\n}\n\nclass FTReactNativeRUMWrapper implements FTReactNativeRUMType {\n private webSocketConfigVersion = 0;\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n private rum: FTReactNativeRUMType = require('./specs/NativeFTReactNativeRUM')\n .default;\n\n setConfig(config: FTRUMConfig): Promise<void> {\n if (config.visitorIdConfig != null) {\n try {\n validateVisitorIdConfig(config.visitorIdConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n }\n bridgeContextManager.configureLongTaskContext(\n config.enableLongTask === true\n );\n const webSocketLifecycle = FTRumWebSocketTracking.getLifecycleVersion();\n const webSocketConfigVersion = ++this.webSocketConfigVersion;\n const trackWebSocket = config.enableIOSWebSocketResource === true;\n console.log('FTRUMConfig');\n if (config.enableAutoTrackError) {\n FTRumErrorTracking.startTracking();\n }\n const babelPluginEnabled = isBabelPluginEnabled();\n FTBabelInteractionTracking.configure({\n trackInteractions:\n babelPluginEnabled && Boolean(config.enableAutoTrackUserAction),\n actionReporter: (actionName, actionType, property) =>\n this.startAction(actionName, actionType, property),\n });\n if (config.enableAutoTrackUserAction && !babelPluginEnabled) {\n FTRumActionTracking.startTracking();\n } else {\n FTRumActionTracking.stopTracking();\n }\n return this.rum\n .setConfig({\n ...config,\n enableLongTask: config.enableLongTask === true,\n longTaskThresholdMs: normalizeLongTaskThreshold(\n config.longTaskThresholdMs\n ),\n })\n .then(() => {\n if (\n webSocketLifecycle !== FTRumWebSocketTracking.getLifecycleVersion() ||\n webSocketConfigVersion !== this.webSocketConfigVersion\n ) {\n return;\n }\n if (Platform.OS === 'ios' && trackWebSocket) {\n FTRumWebSocketTracking.startTracking(this);\n } else {\n FTRumWebSocketTracking.stopTracking();\n }\n });\n }\n startAction(\n actionName: string,\n actionType: string,\n property?: object\n ): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.startAction(actionName, actionType, mergedProperties);\n }\n addAction(\n actionName: string,\n actionType: string,\n property?: object\n ): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.addAction(actionName, actionType, mergedProperties);\n }\n onCreateView(viewName: string, loadTime: number): Promise<void> {\n return this.rum.onCreateView(viewName, loadTime);\n }\n updateViewLoadingTime(duration: number): Promise<void> {\n if (!Number.isSafeInteger(duration) || duration < 0) {\n return Promise.reject(\n new RangeError(\n 'duration must be a non-negative safe integer in nanoseconds'\n )\n );\n }\n return this.rum.updateViewLoadingTime(duration);\n }\n startView(viewName: string, property?: object): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.startView(viewName, mergedProperties);\n }\n stopView(property?: object): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.stopView(mergedProperties);\n }\n addError(stack: string, message: string, property?: object): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.addError(stack, message, mergedProperties);\n }\n addErrorWithType(\n type: string,\n stack: string,\n message: string,\n property?: object\n ): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.addErrorWithType(type, stack, message, mergedProperties);\n }\n startResource(key: string, property?: object): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.startResource(key, mergedProperties);\n }\n stopResource(key: string, property?: object): Promise<void> {\n // Automatically merge bridge context properties with local properties\n const mergedProperties =\n bridgeContextManager.mergeWithLocalPropertiesSync(property);\n return this.rum.stopResource(key, mergedProperties);\n }\n addResource(\n key: string,\n resource: FTRUMResource,\n metrics: FTRUMResourceMetrics = {}\n ): Promise<void> {\n return this.rum.addResource(key, resource, metrics);\n }\n}\n\nexport const FTReactNativeRUM: FTReactNativeRUMType =\n new FTReactNativeRUMWrapper();\n"],"mappings":"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","ignoreList":[]}
@@ -4,10 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.TraceType = exports.FTReactNativeTrace = void 0;
7
+ var _FTRumWebSocketTracking = require("./rum/FTRumWebSocketTracking");
7
8
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
8
9
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
9
- 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); }
10
- // import { NativeModules } from 'react-native';
10
+ 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); } // import { NativeModules } from 'react-native';
11
11
  //FTReactNativeTrace
12
12
  /**
13
13
  * Trace types for use.
@@ -42,20 +42,30 @@ let TraceType = exports.TraceType = /*#__PURE__*/function (TraceType) {
42
42
  }({});
43
43
  /**
44
44
  * Configure trace.
45
- * @param sampleRate sampling rate
45
+ * @param traceSamplingRate Trace sampling percentage in [0, 100], default 100. Supports fractional percentages and takes precedence over sampleRate.
46
+ * @param sampleRate Deprecated Trace sampling probability in [0, 1], default 1. Used only when traceSamplingRate is omitted; multiplied by 100 before passing to Native.
46
47
  * @param traceType trace type
47
48
  * @param enableLinkRUMData whether to link with RUM data
48
49
  * @param enableNativeAutoTrace whether to enable automatic tracing
49
50
  */
50
51
  class FTReactNativeTraceWrapper {
51
52
  constructor() {
53
+ _defineProperty(this, "webSocketConfigVersion", 0);
52
54
  /* eslint-disable @typescript-eslint/no-var-requires */
53
55
  _defineProperty(this, "trace", require('./specs/NativeFTReactNativeTrace').default);
54
56
  }
55
57
  /* eslint-enable @typescript-eslint/no-var-requires */
56
58
 
57
59
  setConfig(config) {
58
- return this.trace.setConfig(config);
60
+ const webSocketLifecycle = _FTRumWebSocketTracking.FTRumWebSocketTracking.getLifecycleVersion();
61
+ const webSocketConfigVersion = ++this.webSocketConfigVersion;
62
+ const traceWebSocket = config.enableNativeAutoTrace === true;
63
+ return this.trace.setConfig(config).then(() => {
64
+ if (webSocketLifecycle !== _FTRumWebSocketTracking.FTRumWebSocketTracking.getLifecycleVersion() || webSocketConfigVersion !== this.webSocketConfigVersion) {
65
+ return;
66
+ }
67
+ _FTRumWebSocketTracking.FTRumWebSocketTracking.setNativeAutoTraceEnabled(traceWebSocket);
68
+ });
59
69
  }
60
70
  /**
61
71
  * Get trace HTTP request header data.
@@ -1 +1 @@
1
- {"version":3,"names":["TraceType","exports","FTReactNativeTraceWrapper","constructor","_defineProperty","require","default","setConfig","config","trace","getTraceHeader","key","url","getTraceHeaderFields","FTReactNativeTrace"],"sources":["ft_tracing.tsx"],"sourcesContent":["// import { NativeModules } from 'react-native';\n//FTReactNativeTrace\n\n/**\n * Trace types for use.\n */\nexport enum TraceType {\n //\n // datadog trace\n //\n // x-datadog-trace-id\n // x-datadog-parent-id\n // x-datadog-sampling-priority\n // x-datadog-origin\n //\n ddTrace,\n //\n // zipkin multi header\n //\n // X-B3-TraceId\n // X-B3-SpanId\n // X-B3-Sampled\n //\n zipkinMulti,\n /// zipkin single header,b3\n zipkinSingle,\n // w3c, traceparent\n traceparent,\n // skywalking 8.0+, sw-8\n skywalking,\n // jaeger, header uber-trace-id\n jaeger,\n}\n/**\n * Configure trace.\n * @param sampleRate sampling rate\n * @param traceType trace type\n * @param enableLinkRUMData whether to link with RUM data\n * @param enableNativeAutoTrace whether to enable automatic tracing\n */\nexport interface FTTraceConfig {\n sampleRate?: number;\n traceType?: TraceType;\n enableLinkRUMData?: boolean;\n enableNativeAutoTrace?: boolean;\n}\n\ntype FTReactNativeTraceType = {\n /**\n * Configure trace to enable distributed tracing.\n * @param config trace configuration parameters.\n * @returns a Promise.\n */\n setConfig(config: FTTraceConfig): 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};\n\nclass FTReactNativeTraceWrapper implements FTReactNativeTraceType {\n /* eslint-disable @typescript-eslint/no-var-requires */\n private trace: FTReactNativeTraceType =\n require('./specs/NativeFTReactNativeTrace').default;\n /* eslint-enable @typescript-eslint/no-var-requires */\n\n setConfig(config: FTTraceConfig): Promise<void> {\n return this.trace.setConfig(config);\n }\n /**\n * Get trace HTTP request header data.\n * @param key unique id\n * @param url request URL\n * @returns a Promise.\n */\n getTraceHeader(key: string, url: string): Promise<object> {\n return this.trace.getTraceHeaderFields(url, key);\n }\n /**\n * Get trace HTTP request header data.\n * @param url request URL\n * @param key unique id\n * @returns a Promise.\n */\n getTraceHeaderFields(url: string, key?: string): Promise<object> {\n return this.trace.getTraceHeaderFields(url, key);\n }\n}\nexport const FTReactNativeTrace: FTReactNativeTraceType =\n new FTReactNativeTraceWrapper();\n"],"mappings":";;;;;;;;;AAAA;AACA;AAEA;AACA;AACA;AAFA,IAGYA,SAAS,GAAAC,OAAA,CAAAD,SAAA,0BAATA,SAAS;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EARUA,SAAS,CAATA,SAAS;EAUnB;EACA;EACA;EACA;EACA;EACA;EACA;EAhBUA,SAAS,CAATA,SAAS;EAkBnB;EAlBUA,SAAS,CAATA,SAAS;EAoBnB;EApBUA,SAAS,CAATA,SAAS;EAsBnB;EAtBUA,SAAS,CAATA,SAAS;EAwBnB;EAxBUA,SAAS,CAATA,SAAS;EAAA,OAATA,SAAS;AAAA;AA2BrB;AACA;AACA;AACA;AACA;AACA;AACA;AA8BA,MAAME,yBAAyB,CAAmC;EAAAC,YAAA;IAChE;IAAAC,eAAA,gBAEEC,OAAO,CAAC,kCAAkC,CAAC,CAACC,OAAO;EAAA;EACrD;;EAEAC,SAASA,CAACC,MAAqB,EAAiB;IAC9C,OAAO,IAAI,CAACC,KAAK,CAACF,SAAS,CAACC,MAAM,CAAC;EACrC;EACA;AACF;AACA;AACA;AACA;AACA;EACEE,cAAcA,CAACC,GAAW,EAAEC,GAAW,EAAmB;IACxD,OAAO,IAAI,CAACH,KAAK,CAACI,oBAAoB,CAACD,GAAG,EAAED,GAAG,CAAC;EAClD;EACA;AACF;AACA;AACA;AACA;AACA;EACEE,oBAAoBA,CAACD,GAAW,EAAED,GAAY,EAAmB;IAC/D,OAAO,IAAI,CAACF,KAAK,CAACI,oBAAoB,CAACD,GAAG,EAAED,GAAG,CAAC;EAClD;AACF;AACO,MAAMG,kBAA0C,GAAAb,OAAA,CAAAa,kBAAA,GACrD,IAAIZ,yBAAyB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_FTRumWebSocketTracking","require","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","TraceType","exports","FTReactNativeTraceWrapper","constructor","default","setConfig","config","webSocketLifecycle","FTRumWebSocketTracking","getLifecycleVersion","webSocketConfigVersion","traceWebSocket","enableNativeAutoTrace","trace","then","setNativeAutoTraceEnabled","getTraceHeader","key","url","getTraceHeaderFields","FTReactNativeTrace"],"sources":["ft_tracing.tsx"],"sourcesContent":["// import { NativeModules } from 'react-native';\n//FTReactNativeTrace\n\nimport { FTRumWebSocketTracking } from './rum/FTRumWebSocketTracking';\n\n/**\n * Trace types for use.\n */\nexport enum TraceType {\n //\n // datadog trace\n //\n // x-datadog-trace-id\n // x-datadog-parent-id\n // x-datadog-sampling-priority\n // x-datadog-origin\n //\n ddTrace,\n //\n // zipkin multi header\n //\n // X-B3-TraceId\n // X-B3-SpanId\n // X-B3-Sampled\n //\n zipkinMulti,\n /// zipkin single header,b3\n zipkinSingle,\n // w3c, traceparent\n traceparent,\n // skywalking 8.0+, sw-8\n skywalking,\n // jaeger, header uber-trace-id\n jaeger,\n}\n/**\n * Configure trace.\n * @param traceSamplingRate Trace sampling percentage in [0, 100], default 100. Supports fractional percentages and takes precedence over sampleRate.\n * @param sampleRate Deprecated Trace sampling probability in [0, 1], default 1. Used only when traceSamplingRate is omitted; multiplied by 100 before passing to Native.\n * @param traceType trace type\n * @param enableLinkRUMData whether to link with RUM data\n * @param enableNativeAutoTrace whether to enable automatic tracing\n */\nexport interface FTTraceConfig {\n /**\n * Trace sampling percentage in [0, 100], default 100.\n * Supports fractional percentages: 12.5 means 12.5%, not 0.125.\n * Takes precedence over sampleRate when both are supplied, including 0.\n */\n traceSamplingRate?: number;\n /** @deprecated Use traceSamplingRate. Probability in [0, 1], default 1; 0.125 maps to 12.5%. Ignored when traceSamplingRate is supplied. */\n sampleRate?: number;\n traceType?: TraceType;\n enableLinkRUMData?: boolean;\n enableNativeAutoTrace?: boolean;\n}\n\ntype FTReactNativeTraceType = {\n /**\n * Configure trace to enable distributed tracing.\n * @param config trace configuration parameters.\n * @returns a Promise.\n */\n setConfig(config: FTTraceConfig): 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};\n\nclass FTReactNativeTraceWrapper implements FTReactNativeTraceType {\n private webSocketConfigVersion = 0;\n /* eslint-disable @typescript-eslint/no-var-requires */\n private trace: FTReactNativeTraceType =\n require('./specs/NativeFTReactNativeTrace').default;\n /* eslint-enable @typescript-eslint/no-var-requires */\n\n setConfig(config: FTTraceConfig): Promise<void> {\n const webSocketLifecycle = FTRumWebSocketTracking.getLifecycleVersion();\n const webSocketConfigVersion = ++this.webSocketConfigVersion;\n const traceWebSocket = config.enableNativeAutoTrace === true;\n return this.trace.setConfig(config).then(() => {\n if (\n webSocketLifecycle !== FTRumWebSocketTracking.getLifecycleVersion() ||\n webSocketConfigVersion !== this.webSocketConfigVersion\n ) {\n return;\n }\n FTRumWebSocketTracking.setNativeAutoTraceEnabled(traceWebSocket);\n });\n }\n /**\n * Get trace HTTP request header data.\n * @param key unique id\n * @param url request URL\n * @returns a Promise.\n */\n getTraceHeader(key: string, url: string): Promise<object> {\n return this.trace.getTraceHeaderFields(url, key);\n }\n /**\n * Get trace HTTP request header data.\n * @param url request URL\n * @param key unique id\n * @returns a Promise.\n */\n getTraceHeaderFields(url: string, key?: string): Promise<object> {\n return this.trace.getTraceHeaderFields(url, key);\n }\n}\nexport const FTReactNativeTrace: FTReactNativeTraceType =\n new FTReactNativeTraceWrapper();\n"],"mappings":";;;;;;AAGA,IAAAA,uBAAA,GAAAC,OAAA;AAAsE,SAAAC,gBAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAD,CAAA,GAAAI,MAAA,CAAAC,cAAA,CAAAL,CAAA,EAAAC,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAT,CAAA,CAAAC,CAAA,IAAAC,CAAA,EAAAF,CAAA;AAAA,SAAAG,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAb,CAAA,QAAAU,CAAA,GAAAV,CAAA,CAAAc,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA,KAHtE;AACA;AAIA;AACA;AACA;AAFA,IAGYgB,SAAS,GAAAC,OAAA,CAAAD,SAAA,0BAATA,SAAS;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EARUA,SAAS,CAATA,SAAS;EAUnB;EACA;EACA;EACA;EACA;EACA;EACA;EAhBUA,SAAS,CAATA,SAAS;EAkBnB;EAlBUA,SAAS,CAATA,SAAS;EAoBnB;EApBUA,SAAS,CAATA,SAAS;EAsBnB;EAtBUA,SAAS,CAATA,SAAS;EAwBnB;EAxBUA,SAAS,CAATA,SAAS;EAAA,OAATA,SAAS;AAAA;AA2BrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAqCA,MAAME,yBAAyB,CAAmC;EAAAC,YAAA;IAAAtB,eAAA,iCAC/B,CAAC;IAClC;IAAAA,eAAA,gBAEED,OAAO,CAAC,kCAAkC,CAAC,CAACwB,OAAO;EAAA;EACrD;;EAEAC,SAASA,CAACC,MAAqB,EAAiB;IAC9C,MAAMC,kBAAkB,GAAGC,8CAAsB,CAACC,mBAAmB,CAAC,CAAC;IACvE,MAAMC,sBAAsB,GAAG,EAAE,IAAI,CAACA,sBAAsB;IAC5D,MAAMC,cAAc,GAAGL,MAAM,CAACM,qBAAqB,KAAK,IAAI;IAC5D,OAAO,IAAI,CAACC,KAAK,CAACR,SAAS,CAACC,MAAM,CAAC,CAACQ,IAAI,CAAC,MAAM;MAC7C,IACEP,kBAAkB,KAAKC,8CAAsB,CAACC,mBAAmB,CAAC,CAAC,IACnEC,sBAAsB,KAAK,IAAI,CAACA,sBAAsB,EACtD;QACA;MACF;MACAF,8CAAsB,CAACO,yBAAyB,CAACJ,cAAc,CAAC;IAClE,CAAC,CAAC;EACJ;EACA;AACF;AACA;AACA;AACA;AACA;EACEK,cAAcA,CAACC,GAAW,EAAEC,GAAW,EAAmB;IACxD,OAAO,IAAI,CAACL,KAAK,CAACM,oBAAoB,CAACD,GAAG,EAAED,GAAG,CAAC;EAClD;EACA;AACF;AACA;AACA;AACA;AACA;EACEE,oBAAoBA,CAACD,GAAW,EAAED,GAAY,EAAmB;IAC/D,OAAO,IAAI,CAACJ,KAAK,CAACM,oBAAoB,CAACD,GAAG,EAAED,GAAG,CAAC;EAClD;AACF;AACO,MAAMG,kBAA0C,GAAAnB,OAAA,CAAAmB,kBAAA,GACrD,IAAIlB,yBAAyB,CAAC,CAAC","ignoreList":[]}
@@ -27,6 +27,12 @@ Object.defineProperty(exports, "ErrorMonitorType", {
27
27
  return _ft_rum.ErrorMonitorType;
28
28
  }
29
29
  });
30
+ Object.defineProperty(exports, "FTBabelInteractionTracking", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _FTBabelInteractionTracking.FTBabelInteractionTracking;
34
+ }
35
+ });
30
36
  Object.defineProperty(exports, "FTDBCacheDiscard", {
31
37
  enumerable: true,
32
38
  get: function () {
@@ -141,6 +147,12 @@ Object.defineProperty(exports, "FTRumErrorTracking", {
141
147
  return _FTRumErrorTracking.FTRumErrorTracking;
142
148
  }
143
149
  });
150
+ Object.defineProperty(exports, "FTRumViewTracking", {
151
+ enumerable: true,
152
+ get: function () {
153
+ return _FTRumViewTracking.FTRumViewTracking;
154
+ }
155
+ });
144
156
  Object.defineProperty(exports, "FTTraceConfig", {
145
157
  enumerable: true,
146
158
  get: function () {
@@ -159,10 +171,19 @@ Object.defineProperty(exports, "TraceType", {
159
171
  return _ft_tracing.TraceType;
160
172
  }
161
173
  });
174
+ Object.defineProperty(exports, "__ftExtractText", {
175
+ enumerable: true,
176
+ get: function () {
177
+ return _FTBabelUtils.__ftExtractText;
178
+ }
179
+ });
162
180
  var _ft_mobile_agent = require("./ft_mobile_agent");
163
181
  var _ft_logger = require("./ft_logger");
164
182
  var _ft_rum = require("./ft_rum");
165
183
  var _ft_tracing = require("./ft_tracing");
166
184
  var _FTRumActionTracking = require("./rum/FTRumActionTracking");
167
185
  var _FTRumErrorTracking = require("./rum/FTRumErrorTracking");
186
+ var _FTBabelInteractionTracking = require("./rum/FTBabelInteractionTracking");
187
+ var _FTBabelUtils = require("./rum/FTBabelUtils");
188
+ var _FTRumViewTracking = require("./rum/FTRumViewTracking");
168
189
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_ft_mobile_agent","require","_ft_logger","_ft_rum","_ft_tracing","_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,IAAAA,gBAAA,GAAAC,OAAA;AAUA,IAAAC,UAAA,GAAAD,OAAA;AAMA,IAAAE,OAAA,GAAAF,OAAA;AAWA,IAAAG,WAAA,GAAAH,OAAA;AACA,IAAAI,oBAAA,GAAAJ,OAAA;AACA,IAAAK,mBAAA,GAAAL,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["_ft_mobile_agent","require","_ft_logger","_ft_rum","_ft_tracing","_FTRumActionTracking","_FTRumErrorTracking","_FTBabelInteractionTracking","_FTBabelUtils","_FTRumViewTracking"],"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';\nimport { FTBabelInteractionTracking } from './rum/FTBabelInteractionTracking';\nimport { __ftExtractText } from './rum/FTBabelUtils';\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 FTBabelInteractionTracking,\n __ftExtractText,\n};\n\nexport type { FTVisitorIdConfig } from './visitorIdConfig';\n\nexport { FTRumViewTracking } from './rum/FTRumViewTracking';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AAUA,IAAAC,UAAA,GAAAD,OAAA;AAMA,IAAAE,OAAA,GAAAF,OAAA;AAWA,IAAAG,WAAA,GAAAH,OAAA;AACA,IAAAI,oBAAA,GAAAJ,OAAA;AACA,IAAAK,mBAAA,GAAAL,OAAA;AACA,IAAAM,2BAAA,GAAAN,OAAA;AACA,IAAAO,aAAA,GAAAP,OAAA;AAmCA,IAAAQ,kBAAA,GAAAR,OAAA","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FTBabelInteractionTracking = void 0;
7
+ var _FTRumActionTrackingContext = require("./FTRumActionTrackingContext");
8
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
9
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
10
+ 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); }
11
+ const DEFAULT_ACTION_TYPE = 'click';
12
+ const normalize = value => value.replace(/\s+/g, ' ').trim();
13
+ const normalizeActionType = value => typeof value === 'string' && value.trim() ? value.trim() : DEFAULT_ACTION_TYPE;
14
+ const nonEmpty = values => {
15
+ if (!values) {
16
+ return null;
17
+ }
18
+ const normalized = values.map(normalize).filter(Boolean);
19
+ return normalized.length > 0 ? normalized : null;
20
+ };
21
+ class BabelInteractionTracking {
22
+ constructor() {
23
+ _defineProperty(this, "trackInteractions", false);
24
+ _defineProperty(this, "actionReporter", void 0);
25
+ }
26
+ getInstance() {
27
+ return this;
28
+ }
29
+ configure(config) {
30
+ this.trackInteractions = config.trackInteractions;
31
+ this.actionReporter = config.actionReporter;
32
+ }
33
+ getTargetName(target) {
34
+ let selectedContent = nonEmpty(target['ft-action-name']);
35
+ selectedContent || (selectedContent = nonEmpty(target.customActionName));
36
+ selectedContent || (selectedContent = nonEmpty(target.accessibilityLabel));
37
+ if (!selectedContent && target.options.useContent) {
38
+ var _target$getContent;
39
+ selectedContent = nonEmpty((_target$getContent = target.getContent) === null || _target$getContent === void 0 ? void 0 : _target$getContent.call(target));
40
+ }
41
+ if (!selectedContent) {
42
+ return target.componentName;
43
+ }
44
+ const handlerArgs = target.handlerArgs || [];
45
+ const numericArgument = handlerArgs.find(value => typeof value === 'number');
46
+ const index = numericArgument !== undefined && Number.isInteger(numericArgument) && numericArgument >= 0 && numericArgument < selectedContent.length ? numericArgument : 0;
47
+ const output = selectedContent[index] || selectedContent[0];
48
+ return target.options.useNamePrefix ? `${target.componentName} ("${output}")` : output;
49
+ }
50
+ wrapRumAction(handler, actionType, target) {
51
+ const normalizedActionType = normalizeActionType(actionType);
52
+ return (...args) => {
53
+ try {
54
+ if (this.trackInteractions && this.actionReporter) {
55
+ const context = (0, _FTRumActionTrackingContext.resolveActionTrackingContext)(args);
56
+ if (context.enabled) {
57
+ const actionName = this.getTargetName({
58
+ ...target,
59
+ handlerArgs: args
60
+ });
61
+ Promise.resolve(this.actionReporter(actionName, normalizedActionType, context.property)).catch(() => undefined);
62
+ }
63
+ }
64
+ } catch (_error) {
65
+ // Tracking must never block the application's original handler.
66
+ }
67
+ return handler === null || handler === void 0 ? void 0 : handler(...args);
68
+ };
69
+ }
70
+ }
71
+ const FTBabelInteractionTracking = exports.FTBabelInteractionTracking = new BabelInteractionTracking();
72
+ //# sourceMappingURL=FTBabelInteractionTracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_FTRumActionTrackingContext","require","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","DEFAULT_ACTION_TYPE","normalize","replace","trim","normalizeActionType","nonEmpty","values","normalized","map","filter","Boolean","length","BabelInteractionTracking","constructor","getInstance","configure","config","trackInteractions","actionReporter","getTargetName","target","selectedContent","customActionName","accessibilityLabel","options","useContent","_target$getContent","getContent","componentName","handlerArgs","numericArgument","find","index","undefined","isInteger","output","useNamePrefix","wrapRumAction","handler","actionType","normalizedActionType","args","context","resolveActionTrackingContext","enabled","actionName","Promise","resolve","property","catch","_error","FTBabelInteractionTracking","exports"],"sources":["FTBabelInteractionTracking.ts"],"sourcesContent":["import { resolveActionTrackingContext } from './FTRumActionTrackingContext';\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __FT_RN_BABEL_PLUGIN_ENABLED__: boolean | undefined;\n}\n\nexport type FTBabelActionTarget = {\n 'options': {\n useContent: boolean;\n useNamePrefix: boolean;\n };\n 'handlerArgs'?: unknown[];\n 'componentName': string;\n 'getContent'?: () => string[];\n 'ft-action-name'?: string[];\n 'customActionName'?: string[];\n 'accessibilityLabel'?: string[];\n};\n\ntype ActionReporter = (\n actionName: string,\n actionType: string,\n property?: object\n) => Promise<void>;\n\ntype BabelTrackingConfig = {\n trackInteractions: boolean;\n actionReporter?: ActionReporter;\n};\n\nconst DEFAULT_ACTION_TYPE = 'click';\n\nconst normalize = (value: string): string => value.replace(/\\s+/g, ' ').trim();\n\nconst normalizeActionType = (value: unknown): string =>\n typeof value === 'string' && value.trim()\n ? value.trim()\n : DEFAULT_ACTION_TYPE;\n\nconst nonEmpty = (values: string[] | undefined): string[] | null => {\n if (!values) {\n return null;\n }\n const normalized = values.map(normalize).filter(Boolean);\n return normalized.length > 0 ? normalized : null;\n};\n\nclass BabelInteractionTracking {\n private trackInteractions = false;\n private actionReporter: ActionReporter | undefined;\n\n getInstance(): BabelInteractionTracking {\n return this;\n }\n\n configure(config: BabelTrackingConfig): void {\n this.trackInteractions = config.trackInteractions;\n this.actionReporter = config.actionReporter;\n }\n\n getTargetName(target: FTBabelActionTarget): string {\n let selectedContent = nonEmpty(target['ft-action-name']);\n selectedContent ||= nonEmpty(target.customActionName);\n selectedContent ||= nonEmpty(target.accessibilityLabel);\n if (!selectedContent && target.options.useContent) {\n selectedContent = nonEmpty(target.getContent?.());\n }\n\n if (!selectedContent) {\n return target.componentName;\n }\n\n const handlerArgs = target.handlerArgs || [];\n const numericArgument = handlerArgs.find(\n (value) => typeof value === 'number'\n ) as number | undefined;\n const index =\n numericArgument !== undefined &&\n Number.isInteger(numericArgument) &&\n numericArgument >= 0 &&\n numericArgument < selectedContent.length\n ? numericArgument\n : 0;\n const output = selectedContent[index] || selectedContent[0];\n\n return target.options.useNamePrefix\n ? `${target.componentName} (\"${output}\")`\n : output;\n }\n\n wrapRumAction(\n handler: ((...args: any[]) => any) | null | undefined,\n actionType: string,\n target: FTBabelActionTarget\n ): (...args: any[]) => any {\n const normalizedActionType = normalizeActionType(actionType);\n return (...args: any[]) => {\n try {\n if (this.trackInteractions && this.actionReporter) {\n const context = resolveActionTrackingContext(args);\n if (context.enabled) {\n const actionName = this.getTargetName({\n ...target,\n handlerArgs: args,\n });\n Promise.resolve(\n this.actionReporter(\n actionName,\n normalizedActionType,\n context.property\n )\n ).catch(() => undefined);\n }\n }\n } catch (_error) {\n // Tracking must never block the application's original handler.\n }\n return handler?.(...args);\n };\n }\n}\n\nexport const FTBabelInteractionTracking = new BabelInteractionTracking();\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.__ftExtractText = __ftExtractText;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ const LABEL_PROPS = ['label', 'title', 'text'];
10
+ const normalize = value => value.replace(/\s+/g, ' ').trim();
11
+ function flattenText(values) {
12
+ const output = [];
13
+ for (const value of values) {
14
+ for (const text of __ftExtractText(value)) {
15
+ output.push(text);
16
+ }
17
+ }
18
+ return output;
19
+ }
20
+ function __ftExtractText(node, prefer) {
21
+ if (Array.isArray(prefer)) {
22
+ const preferred = flattenText(prefer);
23
+ if (preferred.length > 0) {
24
+ return preferred;
25
+ }
26
+ }
27
+ if (node == null || typeof node === 'boolean') {
28
+ return [];
29
+ }
30
+ if (typeof node === 'string' || typeof node === 'number') {
31
+ const value = normalize(String(node));
32
+ return value ? [value] : [];
33
+ }
34
+ if (Array.isArray(node)) {
35
+ return flattenText(node);
36
+ }
37
+ if (typeof node === 'object' && typeof Symbol !== 'undefined' && Symbol.iterator in node) {
38
+ return flattenText(Array.from(node));
39
+ }
40
+ if (typeof node === 'function' && node.length === 0) {
41
+ try {
42
+ return __ftExtractText(node());
43
+ } catch (_error) {
44
+ return [];
45
+ }
46
+ }
47
+ if (! /*#__PURE__*/_react.default.isValidElement(node)) {
48
+ return [];
49
+ }
50
+ const props = node.props || {};
51
+ for (const propertyName of LABEL_PROPS) {
52
+ if (props[propertyName] != null) {
53
+ const label = __ftExtractText(props[propertyName]);
54
+ if (label.length > 0) {
55
+ return label;
56
+ }
57
+ }
58
+ }
59
+ const rawChildren = Array.isArray(props.children) ? props.children : [props.children];
60
+ const children = rawChildren.filter(child => child != null && child !== false);
61
+ if (children.length === 0) {
62
+ return [];
63
+ }
64
+ const perChild = children.map(child => __ftExtractText(child));
65
+ let labeledChildCount = 0;
66
+ children.forEach((child, index) => {
67
+ const childProps = /*#__PURE__*/_react.default.isValidElement(child) ? child.props || {} : null;
68
+ const hasLabelProperty = childProps !== null && LABEL_PROPS.some(propertyName => childProps[propertyName] != null);
69
+ if (hasLabelProperty || perChild[index].length > 0) {
70
+ labeledChildCount += 1;
71
+ }
72
+ });
73
+
74
+ // Each child has already been extracted and normalized. Only merge its text.
75
+ const flattened = [];
76
+ for (const values of perChild) {
77
+ for (const value of values) {
78
+ flattened.push(value);
79
+ }
80
+ }
81
+ if (labeledChildCount > 1) {
82
+ return Array.from(new Set(flattened));
83
+ }
84
+ const joined = flattened.join(' ');
85
+ return joined ? [joined] : [];
86
+ }
87
+ //# sourceMappingURL=FTBabelUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","e","__esModule","default","LABEL_PROPS","normalize","value","replace","trim","flattenText","values","output","text","__ftExtractText","push","node","prefer","Array","isArray","preferred","length","String","Symbol","iterator","from","_error","React","isValidElement","props","propertyName","label","rawChildren","children","filter","child","perChild","map","labeledChildCount","forEach","index","childProps","hasLabelProperty","some","flattened","Set","joined","join"],"sources":["FTBabelUtils.tsx"],"sourcesContent":["import React from 'react';\n\nconst LABEL_PROPS = ['label', 'title', 'text'] as const;\n\nconst normalize = (value: string): string => value.replace(/\\s+/g, ' ').trim();\n\nfunction flattenText(values: unknown[]): string[] {\n const output: string[] = [];\n for (const value of values) {\n for (const text of __ftExtractText(value)) {\n output.push(text);\n }\n }\n return output;\n}\n\nexport function __ftExtractText(node: any, prefer?: any[]): string[] {\n if (Array.isArray(prefer)) {\n const preferred = flattenText(prefer);\n if (preferred.length > 0) {\n return preferred;\n }\n }\n\n if (node == null || typeof node === 'boolean') {\n return [];\n }\n if (typeof node === 'string' || typeof node === 'number') {\n const value = normalize(String(node));\n return value ? [value] : [];\n }\n if (Array.isArray(node)) {\n return flattenText(node);\n }\n if (\n typeof node === 'object' &&\n typeof Symbol !== 'undefined' &&\n Symbol.iterator in node\n ) {\n return flattenText(Array.from(node as Iterable<unknown>));\n }\n if (typeof node === 'function' && node.length === 0) {\n try {\n return __ftExtractText(node());\n } catch (_error) {\n return [];\n }\n }\n if (!React.isValidElement(node)) {\n return [];\n }\n\n const props = (node.props || {}) as Record<string, unknown>;\n for (const propertyName of LABEL_PROPS) {\n if (props[propertyName] != null) {\n const label = __ftExtractText(props[propertyName]);\n if (label.length > 0) {\n return label;\n }\n }\n }\n\n const rawChildren = Array.isArray(props.children)\n ? props.children\n : [props.children];\n const children = rawChildren.filter(\n (child) => child != null && child !== false\n );\n if (children.length === 0) {\n return [];\n }\n\n const perChild = children.map((child) => __ftExtractText(child));\n let labeledChildCount = 0;\n children.forEach((child, index) => {\n const childProps = React.isValidElement(child)\n ? ((child.props || {}) as Record<string, unknown>)\n : null;\n const hasLabelProperty =\n childProps !== null &&\n LABEL_PROPS.some((propertyName) => childProps[propertyName] != null);\n if (hasLabelProperty || perChild[index].length > 0) {\n labeledChildCount += 1;\n }\n });\n\n // Each child has already been extracted and normalized. Only merge its text.\n const flattened: string[] = [];\n for (const values of perChild) {\n for (const value of values) {\n flattened.push(value);\n }\n }\n if (labeledChildCount > 1) {\n return Array.from(new Set(flattened));\n }\n const joined = flattened.join(' ');\n return joined ? [joined] : [];\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,19 +6,19 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.FTRumActionTracking = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _ft_rum = require("../ft_rum");
9
+ var _FTRumActionTrackingContext = require("./FTRumActionTrackingContext");
9
10
  var _FTRumActionTracking;
10
11
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
12
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
12
13
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
13
14
  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); }
14
- const FT_ENABLE_TRACK = 'ft-enable-track';
15
- const FT_EXTRA_PROPERTY = 'ft-extra-property';
16
15
  class FTRumActionTracking {
17
16
  static startTracking() {
18
17
  if (FTRumActionTracking.isTracking) {
19
18
  return;
20
19
  }
21
20
  const original = _react.default.createElement;
21
+ this.originalCreateElement = original;
22
22
  _react.default.createElement = (...args) => {
23
23
  return this.patchCreateElementFunction(original, args);
24
24
  };
@@ -33,6 +33,7 @@ class FTRumActionTracking {
33
33
  // Ignore missing jsx runtime support on older React versions.
34
34
  }
35
35
  const originalMemo = _react.default.memo;
36
+ this.originalMemo = originalMemo;
36
37
  _react.default.memo = (component, propsAreEqual) => {
37
38
  return originalMemo(component, (prev, next) => {
38
39
  if (!next.onPress || !prev.onPress) {
@@ -64,6 +65,9 @@ class FTRumActionTracking {
64
65
  FTRumActionTracking.isTracking = true;
65
66
  }
66
67
  static stopTracking() {
68
+ if (!FTRumActionTracking.isTracking) {
69
+ return;
70
+ }
67
71
  _react.default.createElement = this.originalCreateElement;
68
72
  _react.default.memo = this.originalMemo;
69
73
  FTRumActionTracking.isTracking = false;
@@ -86,21 +90,12 @@ class FTRumActionTracking {
86
90
  }
87
91
  static handleTargetEvent(targetNode) {
88
92
  if (targetNode) {
89
- const enable = FTRumActionTracking.findActionEnableTrack(targetNode);
90
- if (enable) {
91
- const extraProperty = FTRumActionTracking.findActionProperty(targetNode);
93
+ const context = (0, _FTRumActionTrackingContext.resolveActionTrackingContextFromTarget)(targetNode);
94
+ if (context.enabled) {
92
95
  const elementTypeName = FTRumActionTracking.resolveActionName(targetNode);
93
96
  if (elementTypeName) {
94
- let jsonObject = null;
95
- if (extraProperty) {
96
- try {
97
- jsonObject = JSON.parse(extraProperty);
98
- } catch (error) {
99
- console.warn(`Error parsing JSON string ${extraProperty}:`, error);
100
- }
101
- }
102
- if (jsonObject) {
103
- _ft_rum.FTReactNativeRUM.startAction(elementTypeName, 'click', jsonObject);
97
+ if (context.property) {
98
+ _ft_rum.FTReactNativeRUM.startAction(elementTypeName, 'click', context.property);
104
99
  } else {
105
100
  _ft_rum.FTReactNativeRUM.startAction(elementTypeName, 'click');
106
101
  }
@@ -143,30 +138,6 @@ class FTRumActionTracking {
143
138
  }
144
139
  return null;
145
140
  }
146
- static findActionProperty(targetNode) {
147
- let currentNode = targetNode;
148
- while (currentNode) {
149
- const props = currentNode.memoizedProps;
150
- if (props && props[FT_EXTRA_PROPERTY]) {
151
- return props[FT_EXTRA_PROPERTY];
152
- }
153
- currentNode = currentNode.return;
154
- }
155
- return null;
156
- }
157
- static findActionEnableTrack(targetNode) {
158
- let currentNode = targetNode;
159
- let enable = true;
160
- while (currentNode) {
161
- const props = currentNode.memoizedProps;
162
- if (props && props[FT_ENABLE_TRACK]) {
163
- enable = props[FT_ENABLE_TRACK] === 'true';
164
- break;
165
- }
166
- currentNode = currentNode.return;
167
- }
168
- return enable;
169
- }
170
141
  }
171
142
  exports.FTRumActionTracking = FTRumActionTracking;
172
143
  _FTRumActionTracking = FTRumActionTracking;
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_ft_rum","_FTRumActionTracking","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","FT_ENABLE_TRACK","FT_EXTRA_PROPERTY","FTRumActionTracking","startTracking","isTracking","original","React","createElement","args","patchCreateElementFunction","jsxRuntime","getJsxRuntime","originaljsx","jsx","originalJsx","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","FTReactNativeRUM","startAction","_targetNode$memoizedP","_targetNode$memoizedP2","_targetNode$memoizedP3","accessibilityLabel","memoizedProps","accessibilityRole","subTitle","children","Array","isArray","props","elementType","name","currentNode","return","exports","MIN_VALUE","originalFunction","element","rest","originalOnPress","objectA","objectB","keys","key","major","minor","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":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_ft_rum","_FTRumActionTrackingContext","_FTRumActionTracking","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","FTRumActionTracking","startTracking","isTracking","original","React","createElement","originalCreateElement","args","patchCreateElementFunction","jsxRuntime","getJsxRuntime","originaljsx","jsx","originalJsx","originalMemo","memo","component","propsAreEqual","prev","next","onPress","areObjectShallowEqual","_prevOnPress","partialPrevProps","prevProps","__FT_INTERNAL_ORIGINAL_ON_PRESS__","_nextOnPress","partialNextProps","nextProps","stopTracking","interceptOnPress","length","_targetInst","currentTime","Date","now","timestampDifference","Math","abs","preActionTimestamp","targetNode","handleTargetEvent","context","resolveActionTrackingContextFromTarget","enabled","elementTypeName","resolveActionName","property","FTReactNativeRUM","startAction","_targetNode$memoizedP","_targetNode$memoizedP2","_targetNode$memoizedP3","accessibilityLabel","memoizedProps","accessibilityRole","subTitle","children","Array","isArray","props","elementType","name","exports","MIN_VALUE","originalFunction","element","rest","originalOnPress","objectA","objectB","keys","key","major","minor","version","split","Error"],"sources":["FTRumActionTracking.tsx"],"sourcesContent":["import React from 'react';\nimport { FTReactNativeRUM } from '../ft_rum';\nimport { resolveActionTrackingContextFromTarget } from './FTRumActionTrackingContext';\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 this.originalCreateElement = original;\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 this.originalMemo = originalMemo;\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 if (!FTRumActionTracking.isTracking) {\n return;\n }\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 context = resolveActionTrackingContextFromTarget(targetNode);\n if (context.enabled) {\n const elementTypeName =\n FTRumActionTracking.resolveActionName(targetNode);\n if (elementTypeName) {\n if (context.property) {\n FTReactNativeRUM.startAction(\n elementTypeName,\n 'click',\n context.property\n );\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}\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":[]}