@truewatchtech/react-native-mobile 0.3.15-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/FTMobileReactNativeSDK.podspec +22 -0
  2. package/LICENSE +201 -0
  3. package/README.md +37 -0
  4. package/android/.project +17 -0
  5. package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
  6. package/android/build.gradle +183 -0
  7. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  8. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  9. package/android/gradle.properties +5 -0
  10. package/android/gradlew +185 -0
  11. package/android/gradlew.bat +89 -0
  12. package/android/local.properties +8 -0
  13. package/android/src/main/AndroidManifest.xml +4 -0
  14. package/android/src/main/AndroidManifestNew.xml +4 -0
  15. package/android/src/main/java/com/ft/sdk/InnerClassProxy.java +8 -0
  16. package/android/src/main/java/com/ft/sdk/reactnative/FTLogImpl.java +133 -0
  17. package/android/src/main/java/com/ft/sdk/reactnative/FTMobileImpl.java +198 -0
  18. package/android/src/main/java/com/ft/sdk/reactnative/FTRUMImpl.java +267 -0
  19. package/android/src/main/java/com/ft/sdk/reactnative/FTTraceImpl.java +89 -0
  20. package/android/src/main/java/com/ft/sdk/reactnative/utils/ReactNativeUtils.java +59 -0
  21. package/android/src/newarch/java/com/ft/sdk/reactnative/FTLogModule.java +39 -0
  22. package/android/src/newarch/java/com/ft/sdk/reactnative/FTMobileModule.java +69 -0
  23. package/android/src/newarch/java/com/ft/sdk/reactnative/FTRUMModule.java +84 -0
  24. package/android/src/newarch/java/com/ft/sdk/reactnative/FTTraceModule.java +34 -0
  25. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTLogModule.java +36 -0
  26. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTMobileModule.java +69 -0
  27. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTRUMModule.java +70 -0
  28. package/android/src/oldarch/java/com/ft/sdk/reactnative/FTTraceModule.java +30 -0
  29. package/android/src/rnpost74/java/com/ft/sdk/reactnative/FTMobilePackage.java +71 -0
  30. package/android/src/rnpre74/java/com/ft/sdk/reactnative/FTMobilePackage.java +33 -0
  31. package/ios/.idea/.name +1 -0
  32. package/ios/.idea/ios.iml +2 -0
  33. package/ios/.idea/modules.xml +8 -0
  34. package/ios/.idea/vcs.xml +6 -0
  35. package/ios/.idea/xcode.xml +4 -0
  36. package/ios/FTMobileReactNative.h +18 -0
  37. package/ios/FTMobileReactNative.m +183 -0
  38. package/ios/FTReactNativeLog.h +18 -0
  39. package/ios/FTReactNativeLog.m +60 -0
  40. package/ios/FTReactNativeRUM.h +19 -0
  41. package/ios/FTReactNativeRUM.m +173 -0
  42. package/ios/FTReactNativeTrace.h +20 -0
  43. package/ios/FTReactNativeTrace.m +58 -0
  44. package/ios/FTReactNativeUtils.h +16 -0
  45. package/ios/FTReactNativeUtils.m +32 -0
  46. package/ios/FtMobileAgent.xcodeproj/project.pbxproj +293 -0
  47. package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/contents.xcworkspacedata +4 -0
  48. package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/xcuserdata/Brandon.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  49. package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/xcuserdata/Brandon.xcuserdatad/xcschemes/xcschememanagement.plist +5 -0
  50. package/ios/FtMobileAgent.xcodeproj/xcuserdata/Brandon.xcuserdatad/xcschemes/FtMobileAgent.xcscheme +56 -0
  51. package/ios/FtMobileAgent.xcodeproj/xcuserdata/Brandon.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  52. package/ios/RCTVersion.h +8 -0
  53. package/lib/commonjs/ft_logger.js +70 -0
  54. package/lib/commonjs/ft_logger.js.map +1 -0
  55. package/lib/commonjs/ft_mobile_agent.js +93 -0
  56. package/lib/commonjs/ft_mobile_agent.js.map +1 -0
  57. package/lib/commonjs/ft_rum.js +143 -0
  58. package/lib/commonjs/ft_rum.js.map +1 -0
  59. package/lib/commonjs/ft_tracing.js +61 -0
  60. package/lib/commonjs/ft_tracing.js.map +1 -0
  61. package/lib/commonjs/index.js +138 -0
  62. package/lib/commonjs/index.js.map +1 -0
  63. package/lib/commonjs/rum/FTRumActionTracking.js +214 -0
  64. package/lib/commonjs/rum/FTRumActionTracking.js.map +1 -0
  65. package/lib/commonjs/rum/FTRumErrorTracking.js +99 -0
  66. package/lib/commonjs/rum/FTRumErrorTracking.js.map +1 -0
  67. package/lib/commonjs/version.js +9 -0
  68. package/lib/commonjs/version.js.map +1 -0
  69. package/lib/module/ft_logger.js +64 -0
  70. package/lib/module/ft_logger.js.map +1 -0
  71. package/lib/module/ft_mobile_agent.js +88 -0
  72. package/lib/module/ft_mobile_agent.js.map +1 -0
  73. package/lib/module/ft_rum.js +138 -0
  74. package/lib/module/ft_rum.js.map +1 -0
  75. package/lib/module/ft_tracing.js +56 -0
  76. package/lib/module/ft_tracing.js.map +1 -0
  77. package/lib/module/index.js +8 -0
  78. package/lib/module/index.js.map +1 -0
  79. package/lib/module/rum/FTRumActionTracking.js +206 -0
  80. package/lib/module/rum/FTRumActionTracking.js.map +1 -0
  81. package/lib/module/rum/FTRumErrorTracking.js +92 -0
  82. package/lib/module/rum/FTRumErrorTracking.js.map +1 -0
  83. package/lib/module/version.js +3 -0
  84. package/lib/module/version.js.map +1 -0
  85. package/lib/typescript/ft_logger.d.ts +52 -0
  86. package/lib/typescript/ft_mobile_agent.d.ts +123 -0
  87. package/lib/typescript/ft_rum.d.ts +200 -0
  88. package/lib/typescript/ft_tracing.d.ts +47 -0
  89. package/lib/typescript/index.d.ts +7 -0
  90. package/lib/typescript/rum/FTRumActionTracking.d.ts +15 -0
  91. package/lib/typescript/rum/FTRumErrorTracking.d.ts +11 -0
  92. package/lib/typescript/version.d.ts +1 -0
  93. package/package.json +167 -0
  94. package/scripts/replace-react-require.js +52 -0
  95. package/src/ft_logger.tsx +77 -0
  96. package/src/ft_mobile_agent.tsx +162 -0
  97. package/src/ft_rum.tsx +247 -0
  98. package/src/ft_tracing.tsx +79 -0
  99. package/src/index.tsx +17 -0
  100. package/src/rum/FTRumActionTracking.tsx +232 -0
  101. package/src/rum/FTRumErrorTracking.tsx +110 -0
  102. package/src/version.ts +2 -0
@@ -0,0 +1,138 @@
1
+ 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; }
2
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
+ import { NativeModules } from 'react-native';
5
+ import { FTRumErrorTracking } from './rum/FTRumErrorTracking';
6
+ import { FTRumActionTracking } from './rum/FTRumActionTracking';
7
+
8
+ /**
9
+ * Error monitoring type.
10
+ */
11
+ export let ErrorMonitorType = /*#__PURE__*/function (ErrorMonitorType) {
12
+ ErrorMonitorType[ErrorMonitorType["all"] = 4294967295] = "all";
13
+ ErrorMonitorType[ErrorMonitorType["battery"] = 2] = "battery";
14
+ ErrorMonitorType[ErrorMonitorType["memory"] = 4] = "memory";
15
+ ErrorMonitorType[ErrorMonitorType["cpu"] = 8] = "cpu";
16
+ return ErrorMonitorType;
17
+ }({});
18
+ /**
19
+ * Page monitoring supplement type
20
+ */
21
+ export let DeviceMetricsMonitorType = /*#__PURE__*/function (DeviceMetricsMonitorType) {
22
+ DeviceMetricsMonitorType[DeviceMetricsMonitorType["all"] = 4294967295] = "all";
23
+ DeviceMetricsMonitorType[DeviceMetricsMonitorType["battery"] = 2] = "battery";
24
+ DeviceMetricsMonitorType[DeviceMetricsMonitorType["memory"] = 4] = "memory";
25
+ DeviceMetricsMonitorType[DeviceMetricsMonitorType["cpu"] = 8] = "cpu";
26
+ DeviceMetricsMonitorType[DeviceMetricsMonitorType["fps"] = 16] = "fps";
27
+ return DeviceMetricsMonitorType;
28
+ }({});
29
+ /**
30
+ * Device information monitoring cycle.
31
+ */
32
+ export let DetectFrequency = /*#__PURE__*/function (DetectFrequency) {
33
+ DetectFrequency[DetectFrequency["normal"] = 0] = "normal";
34
+ DetectFrequency[DetectFrequency["frequent"] = 1] = "frequent";
35
+ DetectFrequency[DetectFrequency["rare"] = 2] = "rare";
36
+ return DetectFrequency;
37
+ }({});
38
+ export let FTRUMCacheDiscard = /*#__PURE__*/function (FTRUMCacheDiscard) {
39
+ FTRUMCacheDiscard[FTRUMCacheDiscard["discard"] = 0] = "discard";
40
+ FTRUMCacheDiscard[FTRUMCacheDiscard["discardOldest"] = 1] = "discardOldest";
41
+ return FTRUMCacheDiscard;
42
+ }({});
43
+ ;
44
+
45
+ /**
46
+ * Set RUM tracking conditions.
47
+ * @param androidAppId appId, apply during monitoring
48
+ * @param iOSAppId appId, apply during monitoring
49
+ * @param sampleRate sampling rate
50
+ * @param sessionOnErrorSampleRate error session sampling rate. For sessions not sampled, if ERROR is hit, collect data 1 minute before the error occurs
51
+ * @param enableAutoTrackUserAction whether to automatically collect react-native control click events, can set actionName with accessibilityLabel when enabled
52
+ * @param enableTrackError whether to automatically collect react-native Error
53
+ * @param enableTrackNativeCrash whether to collect Native Error
54
+ * @param enableTrackNativeAppANR whether to collect Native ANR
55
+ * @param enableTrackNativeFreeze whether to collect Native Freeze
56
+ * @param nativeFreezeDurationMs set the threshold for collecting Native Freeze, value range [100,), unit ms. iOS default 250ms, Android default 1000ms
57
+ * @param enableNativeUserAction whether to start Native Action tracking, Button click events, recommended to disable for pure react-native apps
58
+ * @param enableNativeUserView whether to start Native View auto tracking, recommended to disable for pure react-native apps
59
+ * @param enableNativeUserResource whether to automatically collect react-native Resource
60
+ * @param enableResourceHostIP whether to collect network request Host IP (only for native http, iOS 13 and above)
61
+ * @param errorMonitorType error monitoring supplement type
62
+ * @param deviceMonitorType page monitoring supplement type
63
+ * @param detectFrequency monitoring frequency
64
+ * @param globalContext custom global parameters
65
+ * @param rumCacheLimitCount RUM max cache size, default 100_000
66
+ * @param rumDiscardStrategy RUM data discard strategy
67
+ */
68
+
69
+ /**
70
+ * RUM Resource data.
71
+ * @param url request URL
72
+ * @param httpMethod request method
73
+ * @param requestHeader request header parameters
74
+ * @param responseHeader response header parameters
75
+ * @param responseBody response content
76
+ * @param resourceStatus response status code
77
+ */
78
+
79
+ ;
80
+ /**
81
+ * RUM Resource performance metrics.
82
+ * @param duration resource load time
83
+ * @param resource_dns resource DNS resolution time
84
+ * @param resource_tcp resource TCP connection time
85
+ * @param resource_ssl resource SSL connection time
86
+ * @param resource_ttfb resource request response time
87
+ * @param resource_trans resource content transfer time
88
+ * @param resource_first_byte resource first byte time
89
+ */
90
+
91
+ ;
92
+ class FTReactNativeRUMWrapper {
93
+ constructor() {
94
+ _defineProperty(this, "rum", NativeModules.FTReactNativeRUM);
95
+ }
96
+ setConfig(config) {
97
+ console.log('FTRUMConfig');
98
+ if (config.enableAutoTrackError) {
99
+ FTRumErrorTracking.startTracking();
100
+ }
101
+ if (config.enableAutoTrackUserAction) {
102
+ FTRumActionTracking.startTracking();
103
+ }
104
+ return this.rum.setConfig(config);
105
+ }
106
+ startAction(actionName, actionType, property) {
107
+ return this.rum.startAction(actionName, actionType, property);
108
+ }
109
+ addAction(actionName, actionType, property) {
110
+ return this.rum.addAction(actionName, actionType, property);
111
+ }
112
+ onCreateView(viewName, loadTime) {
113
+ return this.rum.onCreateView(viewName, loadTime);
114
+ }
115
+ startView(viewName, property) {
116
+ return this.rum.startView(viewName, property);
117
+ }
118
+ stopView(property) {
119
+ return this.rum.stopView(property);
120
+ }
121
+ addError(stack, message, property) {
122
+ return this.rum.addError(stack, message, property);
123
+ }
124
+ addErrorWithType(type, stack, message, property) {
125
+ return this.rum.addErrorWithType(type, stack, message, property);
126
+ }
127
+ startResource(key, property) {
128
+ return this.rum.startResource(key, property);
129
+ }
130
+ stopResource(key, property) {
131
+ return this.rum.stopResource(key, property);
132
+ }
133
+ addResource(key, resource, metrics = {}) {
134
+ return this.rum.addResource(key, resource, metrics);
135
+ }
136
+ }
137
+ export const FTReactNativeRUM = new FTReactNativeRUMWrapper();
138
+ //# sourceMappingURL=ft_rum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeModules","FTRumErrorTracking","FTRumActionTracking","ErrorMonitorType","DeviceMetricsMonitorType","DetectFrequency","FTRUMCacheDiscard","FTReactNativeRUMWrapper","constructor","_defineProperty","FTReactNativeRUM","setConfig","config","console","log","enableAutoTrackError","startTracking","enableAutoTrackUserAction","rum","startAction","actionName","actionType","property","addAction","onCreateView","viewName","loadTime","startView","stopView","addError","stack","message","addErrorWithType","type","startResource","key","stopResource","addResource","resource","metrics"],"sources":["ft_rum.tsx"],"sourcesContent":["import { NativeModules } from 'react-native';\nimport { FTRumErrorTracking} from './rum/FTRumErrorTracking';\nimport { FTRumActionTracking} from './rum/FTRumActionTracking';\n\n/**\n * Error monitoring type.\n */\n export 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 */\n export 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 */\n export enum DetectFrequency { normal, frequent, rare }\n\n export enum FTRUMCacheDiscard { discard, discardOldest };\n\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 */\n export 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 }\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 */\n export 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 */\n export interface FTRUMResourceMetrics{\n\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 };\n type 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(actionName:string,actionType:string,property?:object): 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(actionName:string,actionType:string,property?:object): 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(type:string,stack: string, message: string,property?:object): Promise<void>;\n /**\n * Start resource request.\n * @param key unique id\n * @param property event context (optional)\n * @returns a Promise.\n */\n startResource(key: string,property?:object): Promise<void>;\n /**\n * End resource request.\n * @param key unique id\n * @param property event context (optional)\n * @returns a Promise.\n */\n stopResource(key: string,property?:object): Promise<void>;\n /**\n * Send resource data metrics.\n * @param key unique id\n * @param resource resource data\n * @param metrics resource performance data\n * @returns a Promise.\n */\n addResource(key:string, resource:FTRUMResource,metrics?:FTRUMResourceMetrics):Promise<void>;\n }\n\n class FTReactNativeRUMWrapper implements FTReactNativeRUMType {\n private rum: FTReactNativeRUMType = NativeModules.FTReactNativeRUM;\n\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(actionName:string,actionType:string,property?:object): Promise<void>{\n return this.rum.startAction(actionName,actionType,property);\n }\n addAction(actionName: string, actionType: string, property?: object): Promise<void> {\n return this.rum.addAction(actionName,actionType,property);\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 return this.rum.startView(viewName,property);\n }\n stopView(property?:object): Promise<void>{\n return this.rum.stopView(property);\n }\n addError(stack: string, message: string,property?:object): Promise<void>{\n return this.rum.addError(stack,message,property);\n }\n addErrorWithType(type:string,stack: string, message: string,property?:object): Promise<void>{\n return this.rum.addErrorWithType(type,stack,message,property);\n }\n startResource(key: string,property?:object): Promise<void>{\n return this.rum.startResource(key,property);\n }\n stopResource(key: string,property?:object): Promise<void>{\n return this.rum.stopResource(key,property);\n }\n addResource(key:string, resource:FTRUMResource,metrics:FTRUMResourceMetrics={}):Promise<void>{\n return this.rum.addResource(key,resource,metrics);\n }\n }\n\n export const FTReactNativeRUM: FTReactNativeRUMType = new FTReactNativeRUMWrapper();\n\n"],"mappings":";;;AAAA,SAASA,aAAa,QAAQ,cAAc;AAC5C,SAASC,kBAAkB,QAAO,0BAA0B;AAC5D,SAASC,mBAAmB,QAAO,2BAA2B;;AAE9D;AACA;AACA;AACC,WAAYC,gBAAgB,0BAAhBA,gBAAgB;EAAhBA,gBAAgB,CAAhBA,gBAAgB;EAAhBA,gBAAgB,CAAhBA,gBAAgB;EAAhBA,gBAAgB,CAAhBA,gBAAgB;EAAhBA,gBAAgB,CAAhBA,gBAAgB;EAAA,OAAhBA,gBAAgB;AAAA;AAM3B;AACF;AACA;AACC,WAAYC,wBAAwB,0BAAxBA,wBAAwB;EAAxBA,wBAAwB,CAAxBA,wBAAwB;EAAxBA,wBAAwB,CAAxBA,wBAAwB;EAAxBA,wBAAwB,CAAxBA,wBAAwB;EAAxBA,wBAAwB,CAAxBA,wBAAwB;EAAxBA,wBAAwB,CAAxBA,wBAAwB;EAAA,OAAxBA,wBAAwB;AAAA;AAOpC;AACD;AACA;AACC,WAAYC,eAAe,0BAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAE3B,WAAYC,iBAAiB,0BAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;AAA2B;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUE;AAwFD,MAAMC,uBAAuB,CAAiC;EAAAC,YAAA;IAAAC,eAAA,cACvBT,aAAa,CAACU,gBAAgB;EAAA;EAGnEC,SAASA,CAACC,MAAkB,EAAgB;IAC1CC,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;IAC1B,IAAGF,MAAM,CAACG,oBAAoB,EAAC;MAC5Bd,kBAAkB,CAACe,aAAa,CAAC,CAAC;IACrC;IACA,IAAGJ,MAAM,CAACK,yBAAyB,EAAC;MACjCf,mBAAmB,CAACc,aAAa,CAAC,CAAC;IACtC;IACA,OAAO,IAAI,CAACE,GAAG,CAACP,SAAS,CAACC,MAAM,CAAC;EACnC;EACAO,WAAWA,CAACC,UAAiB,EAACC,UAAiB,EAACC,QAAgB,EAAgB;IAC9E,OAAO,IAAI,CAACJ,GAAG,CAACC,WAAW,CAACC,UAAU,EAACC,UAAU,EAACC,QAAQ,CAAC;EAC7D;EACAC,SAASA,CAACH,UAAkB,EAAEC,UAAkB,EAAEC,QAAiB,EAAiB;IACnF,OAAO,IAAI,CAACJ,GAAG,CAACK,SAAS,CAACH,UAAU,EAACC,UAAU,EAACC,QAAQ,CAAC;EAC1D;EACAE,YAAYA,CAACC,QAAe,EAACC,QAAe,EAAgB;IAC1D,OAAO,IAAI,CAACR,GAAG,CAACM,YAAY,CAACC,QAAQ,EAACC,QAAQ,CAAC;EACjD;EACAC,SAASA,CAACF,QAAgB,EAAEH,QAAgB,EAAgB;IAC1D,OAAO,IAAI,CAACJ,GAAG,CAACS,SAAS,CAACF,QAAQ,EAACH,QAAQ,CAAC;EAC9C;EACAM,QAAQA,CAACN,QAAgB,EAAgB;IACvC,OAAO,IAAI,CAACJ,GAAG,CAACU,QAAQ,CAACN,QAAQ,CAAC;EACpC;EACAO,QAAQA,CAACC,KAAa,EAAEC,OAAe,EAACT,QAAgB,EAAgB;IACtE,OAAO,IAAI,CAACJ,GAAG,CAACW,QAAQ,CAACC,KAAK,EAACC,OAAO,EAACT,QAAQ,CAAC;EAClD;EACAU,gBAAgBA,CAACC,IAAW,EAACH,KAAa,EAAEC,OAAe,EAACT,QAAgB,EAAgB;IAC3F,OAAO,IAAI,CAACJ,GAAG,CAACc,gBAAgB,CAACC,IAAI,EAACH,KAAK,EAACC,OAAO,EAACT,QAAQ,CAAC;EAC/D;EACCY,aAAaA,CAACC,GAAW,EAACb,QAAgB,EAAgB;IACxD,OAAO,IAAI,CAACJ,GAAG,CAACgB,aAAa,CAACC,GAAG,EAACb,QAAQ,CAAC;EAC7C;EACAc,YAAYA,CAACD,GAAW,EAACb,QAAgB,EAAgB;IACvD,OAAO,IAAI,CAACJ,GAAG,CAACkB,YAAY,CAACD,GAAG,EAACb,QAAQ,CAAC;EAC5C;EACAe,WAAWA,CAACF,GAAU,EAAEG,QAAsB,EAACC,OAA4B,GAAC,CAAC,CAAC,EAAe;IAC3F,OAAO,IAAI,CAACrB,GAAG,CAACmB,WAAW,CAACF,GAAG,EAACG,QAAQ,EAACC,OAAO,CAAC;EACnD;AACF;AAEA,OAAO,MAAM7B,gBAAsC,GAAG,IAAIH,uBAAuB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,56 @@
1
+ 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; }
2
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
+ import { NativeModules } from 'react-native';
5
+ //FTReactNativeTrace
6
+
7
+ /**
8
+ * Trace types for use.
9
+ */
10
+ export let TraceType = /*#__PURE__*/function (TraceType) {
11
+ TraceType[TraceType["ddTrace"] = 0] = "ddTrace";
12
+ TraceType[TraceType["zipkinMulti"] = 1] = "zipkinMulti";
13
+ TraceType[TraceType["zipkinSingle"] = 2] = "zipkinSingle";
14
+ TraceType[TraceType["traceparent"] = 3] = "traceparent";
15
+ TraceType[TraceType["skywalking"] = 4] = "skywalking";
16
+ TraceType[TraceType["jaeger"] = 5] = "jaeger";
17
+ return TraceType;
18
+ }({});
19
+ ;
20
+ /**
21
+ * Configure trace.
22
+ * @param sampleRate sampling rate
23
+ * @param traceType trace type
24
+ * @param enableLinkRUMData whether to link with RUM data
25
+ * @param enableNativeAutoTrace whether to enable automatic tracing
26
+ */
27
+
28
+ ;
29
+ class FTReactNativeTraceWrapper {
30
+ constructor() {
31
+ _defineProperty(this, "trace", NativeModules.FTReactNativeTrace);
32
+ }
33
+ setConfig(config) {
34
+ return this.trace.setConfig(config);
35
+ }
36
+ /**
37
+ * Get trace HTTP request header data.
38
+ * @param key unique id
39
+ * @param url request URL
40
+ * @returns a Promise.
41
+ */
42
+ getTraceHeader(key, url) {
43
+ return this.trace.getTraceHeaderFields(url, key);
44
+ }
45
+ /**
46
+ * Get trace HTTP request header data.
47
+ * @param url request URL
48
+ * @param key unique id
49
+ * @returns a Promise.
50
+ */
51
+ getTraceHeaderFields(url, key) {
52
+ return this.trace.getTraceHeaderFields(url, key);
53
+ }
54
+ }
55
+ export const FTReactNativeTrace = new FTReactNativeTraceWrapper();
56
+ //# sourceMappingURL=ft_tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeModules","TraceType","FTReactNativeTraceWrapper","constructor","_defineProperty","FTReactNativeTrace","setConfig","config","trace","getTraceHeader","key","url","getTraceHeaderFields"],"sources":["ft_tracing.tsx"],"sourcesContent":["import { NativeModules } from 'react-native';\n//FTReactNativeTrace\n\n/**\n * Trace types for use.\n */\n export enum TraceType {\n ddTrace,\n zipkinMulti,\n zipkinSingle,\n traceparent,\n skywalking,\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 */\n export interface FTTraceConfig{\n sampleRate?:number,\n traceType?:TraceType,\n enableLinkRUMData?:boolean,\n enableNativeAutoTrace?:boolean,\n };\n\n type 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\n class FTReactNativeTraceWrapper implements FTReactNativeTraceType {\n private trace: FTReactNativeTraceType = NativeModules.FTReactNativeTrace;\n\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\n }\n export const FTReactNativeTrace:FTReactNativeTraceType = new FTReactNativeTraceWrapper(); \n\n"],"mappings":";;;AAAA,SAASA,aAAa,QAAQ,cAAc;AAC5C;;AAEA;AACA;AACA;AACC,WAAYC,SAAS,0BAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAAA,OAATA,SAAS;AAAA;AAOpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;AAME;AAwBD,MAAMC,yBAAyB,CAAmC;EAAAC,YAAA;IAAAC,eAAA,gBACxBJ,aAAa,CAACK,kBAAkB;EAAA;EAGxEC,SAASA,CAACC,MAAoB,EAAgB;IAC5C,OAAO,IAAI,CAACC,KAAK,CAACF,SAAS,CAACC,MAAM,CAAC;EACrC;EACD;AACF;AACA;AACA;AACA;AACA;EACGE,cAAcA,CAACC,GAAU,EAAEC,GAAW,EAAkB;IACtD,OAAO,IAAI,CAACH,KAAK,CAACI,oBAAoB,CAACD,GAAG,EAACD,GAAG,CAAC;EACjD;EACC;AACJ;AACA;AACA;AACA;AACA;EACGE,oBAAoBA,CAACD,GAAW,EAACD,GAAW,EAAkB;IAC7D,OAAO,IAAI,CAACF,KAAK,CAACI,oBAAoB,CAACD,GAAG,EAACD,GAAG,CAAC;EAChD;AAEF;AACA,OAAO,MAAML,kBAAyC,GAAG,IAAIH,yBAAyB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import { FTMobileConfig, FTMobileReactNative, EnvType, FTDBCacheDiscard } from './ft_mobile_agent';
2
+ import { FTLogConfig, FTReactNativeLog, FTLogStatus, FTLogCacheDiscard } from './ft_logger';
3
+ import { FTRUMConfig, FTRUMResource, FTReactNativeRUM, ErrorMonitorType, DeviceMetricsMonitorType, DetectFrequency, FTRUMResourceMetrics, FTRUMCacheDiscard } from './ft_rum';
4
+ import { FTTraceConfig, FTReactNativeTrace, TraceType } from './ft_tracing';
5
+ import { FTRumActionTracking } from './rum/FTRumActionTracking';
6
+ import { FTRumErrorTracking } from './rum/FTRumErrorTracking';
7
+ export { FTMobileReactNative, FTMobileConfig, EnvType, FTDBCacheDiscard, FTLogConfig, FTReactNativeLog, FTLogStatus, FTLogCacheDiscard, FTRUMConfig, FTReactNativeRUM, FTRUMResource, ErrorMonitorType, DeviceMetricsMonitorType, DetectFrequency, FTRUMResourceMetrics, FTRUMCacheDiscard, FTTraceConfig, FTReactNativeTrace, TraceType, FTRumActionTracking, FTRumErrorTracking };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FTMobileConfig","FTMobileReactNative","EnvType","FTDBCacheDiscard","FTLogConfig","FTReactNativeLog","FTLogStatus","FTLogCacheDiscard","FTRUMConfig","FTRUMResource","FTReactNativeRUM","ErrorMonitorType","DeviceMetricsMonitorType","DetectFrequency","FTRUMResourceMetrics","FTRUMCacheDiscard","FTTraceConfig","FTReactNativeTrace","TraceType","FTRumActionTracking","FTRumErrorTracking"],"sources":["index.tsx"],"sourcesContent":["import {FTMobileConfig,FTMobileReactNative,EnvType,FTDBCacheDiscard} from './ft_mobile_agent'\nimport {FTLogConfig,FTReactNativeLog,FTLogStatus,FTLogCacheDiscard} from './ft_logger'\nimport {FTRUMConfig,FTRUMResource,FTReactNativeRUM,ErrorMonitorType,DeviceMetricsMonitorType,DetectFrequency,FTRUMResourceMetrics,FTRUMCacheDiscard} from './ft_rum'\nimport {FTTraceConfig,FTReactNativeTrace,TraceType} from './ft_tracing'\nimport {FTRumActionTracking} from './rum/FTRumActionTracking'\nimport {FTRumErrorTracking} from './rum/FTRumErrorTracking'\n\n \n export {\n FTMobileReactNative,FTMobileConfig,EnvType,FTDBCacheDiscard,\n FTLogConfig, FTReactNativeLog,FTLogStatus,FTLogCacheDiscard,\n FTRUMConfig,FTReactNativeRUM,FTRUMResource,ErrorMonitorType,DeviceMetricsMonitorType,DetectFrequency,FTRUMResourceMetrics,FTRUMCacheDiscard,\n FTTraceConfig,FTReactNativeTrace,TraceType,\n FTRumActionTracking,\n FTRumErrorTracking\n };\n\n"],"mappings":"AAAA,SAAQA,cAAc,EAACC,mBAAmB,EAACC,OAAO,EAACC,gBAAgB,QAAO,mBAAmB;AAC7F,SAAQC,WAAW,EAACC,gBAAgB,EAACC,WAAW,EAACC,iBAAiB,QAAO,aAAa;AACtF,SAAQC,WAAW,EAACC,aAAa,EAACC,gBAAgB,EAACC,gBAAgB,EAACC,wBAAwB,EAACC,eAAe,EAACC,oBAAoB,EAACC,iBAAiB,QAAO,UAAU;AACpK,SAAQC,aAAa,EAACC,kBAAkB,EAACC,SAAS,QAAO,cAAc;AACvE,SAAQC,mBAAmB,QAAO,2BAA2B;AAC7D,SAAQC,kBAAkB,QAAO,0BAA0B;AAG1D,SACEnB,mBAAmB,EAACD,cAAc,EAACE,OAAO,EAACC,gBAAgB,EAC3DC,WAAW,EAAEC,gBAAgB,EAACC,WAAW,EAACC,iBAAiB,EAC3DC,WAAW,EAACE,gBAAgB,EAACD,aAAa,EAACE,gBAAgB,EAACC,wBAAwB,EAACC,eAAe,EAACC,oBAAoB,EAACC,iBAAiB,EAC3IC,aAAa,EAACC,kBAAkB,EAACC,SAAS,EAC1CC,mBAAmB,EACnBC,kBAAkB","ignoreList":[]}
@@ -0,0 +1,206 @@
1
+ var _FTRumActionTracking;
2
+ 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; }
3
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
4
+ 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); }
5
+ import React from 'react';
6
+ import { FTReactNativeRUM } from '../ft_rum';
7
+ const FT_ENABLE_TRACK = 'ft-enable-track';
8
+ const FT_EXTRA_PROPERTY = 'ft-extra-property';
9
+ export class FTRumActionTracking {
10
+ static startTracking() {
11
+ if (FTRumActionTracking.isTracking) {
12
+ return;
13
+ }
14
+ const original = React.createElement;
15
+ React.createElement = (...args) => {
16
+ return this.patchCreateElementFunction(original, args);
17
+ };
18
+ try {
19
+ const jsxRuntime = getJsxRuntime();
20
+ const originaljsx = jsxRuntime.jsx;
21
+ this.originalJsx = originaljsx;
22
+ jsxRuntime.jsx = (...args) => {
23
+ return this.patchCreateElementFunction(originaljsx, args);
24
+ };
25
+ } catch (e) {}
26
+ const originalMemo = React.memo;
27
+ React.memo = (component, propsAreEqual) => {
28
+ return originalMemo(component, (prev, next) => {
29
+ if (!next.onPress || !prev.onPress) {
30
+ return propsAreEqual ? propsAreEqual(prev, next) : areObjectShallowEqual(prev, next);
31
+ }
32
+ const {
33
+ onPress: _prevOnPress,
34
+ ...partialPrevProps
35
+ } = prev;
36
+ const prevProps = {
37
+ ...partialPrevProps,
38
+ onPress: prev.__FT_INTERNAL_ORIGINAL_ON_PRESS__
39
+ };
40
+ const {
41
+ onPress: _nextOnPress,
42
+ ...partialNextProps
43
+ } = next;
44
+ const nextProps = {
45
+ ...partialNextProps,
46
+ onPress: next.__FT_INTERNAL_ORIGINAL_ON_PRESS__
47
+ };
48
+ return propsAreEqual ? propsAreEqual(prevProps, nextProps) : areObjectShallowEqual(nextProps, prevProps);
49
+ });
50
+ };
51
+ FTRumActionTracking.isTracking = true;
52
+ }
53
+ static stopTracking() {
54
+ React.createElement = this.originalCreateElement;
55
+ React.memo = this.originalMemo;
56
+ FTRumActionTracking.isTracking = false;
57
+ if (this.originalJsx) {
58
+ const jsxRuntime = getJsxRuntime();
59
+ jsxRuntime.jsx = this.originalJsx;
60
+ this.originalJsx = null;
61
+ }
62
+ }
63
+ static interceptOnPress(...args) {
64
+ if (args.length > 0 && args[0] && args[0]._targetInst) {
65
+ const currentTime = Date.now();
66
+ const timestampDifference = Math.abs(Date.now() - FTRumActionTracking.preActionTimestamp);
67
+ if (timestampDifference > 10) {
68
+ const targetNode = args[0]._targetInst;
69
+ this.handleTargetEvent(targetNode);
70
+ FTRumActionTracking.preActionTimestamp = currentTime;
71
+ }
72
+ }
73
+ }
74
+ static handleTargetEvent(targetNode) {
75
+ if (targetNode) {
76
+ const enable = FTRumActionTracking.findActionEnableTrack(targetNode);
77
+ if (enable) {
78
+ const extraProperty = FTRumActionTracking.findActionProperty(targetNode);
79
+ const elementTypeName = FTRumActionTracking.resolveActionName(targetNode);
80
+ if (elementTypeName) {
81
+ let jsonObject = null;
82
+ if (extraProperty) {
83
+ try {
84
+ jsonObject = JSON.parse(extraProperty);
85
+ } catch (error) {
86
+ console.warn(`Error parsing JSON string ${extraProperty}:`, error);
87
+ }
88
+ }
89
+ if (jsonObject) {
90
+ FTReactNativeRUM.startAction(elementTypeName, 'click', jsonObject);
91
+ } else {
92
+ FTReactNativeRUM.startAction(elementTypeName, 'click');
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ static resolveActionName(targetNode) {
99
+ var _targetNode$memoizedP, _targetNode$memoizedP2, _targetNode$memoizedP3;
100
+ const accessibilityLabel = (_targetNode$memoizedP = targetNode.memoizedProps) === null || _targetNode$memoizedP === void 0 ? void 0 : _targetNode$memoizedP.accessibilityLabel;
101
+ if (accessibilityLabel != null) {
102
+ return accessibilityLabel;
103
+ }
104
+ const accessibilityRole = (_targetNode$memoizedP2 = targetNode.memoizedProps) === null || _targetNode$memoizedP2 === void 0 ? void 0 : _targetNode$memoizedP2.accessibilityRole;
105
+ let subTitle = '';
106
+ let children = (_targetNode$memoizedP3 = targetNode.memoizedProps) === null || _targetNode$memoizedP3 === void 0 ? void 0 : _targetNode$memoizedP3.children;
107
+ while (children) {
108
+ if (Array.isArray(children) && children.length > 0 && children[0]) {
109
+ children = children[0];
110
+ } else if (typeof children === 'object' && children.props && children.props.children) {
111
+ children = children.props.children;
112
+ } else if (typeof children === 'string') {
113
+ subTitle = children;
114
+ children = null;
115
+ } else {
116
+ children = null;
117
+ }
118
+ }
119
+ let elementTypeName = accessibilityRole;
120
+ if (!accessibilityRole) {
121
+ let elementType = targetNode.elementType;
122
+ if (typeof elementType === "string") {
123
+ elementTypeName = elementType;
124
+ } else if (elementType && typeof elementType.name === "string") {
125
+ elementTypeName = elementType.name;
126
+ }
127
+ }
128
+ if (elementTypeName) {
129
+ return '[' + elementTypeName + ']' + subTitle;
130
+ }
131
+ return null;
132
+ }
133
+ static findActionProperty(targetNode) {
134
+ let currentNode = targetNode;
135
+ while (currentNode) {
136
+ const props = currentNode.memoizedProps;
137
+ if (props && props[FT_EXTRA_PROPERTY]) {
138
+ return props[FT_EXTRA_PROPERTY];
139
+ }
140
+ currentNode = currentNode.return;
141
+ }
142
+ return null;
143
+ }
144
+ static findActionEnableTrack(targetNode) {
145
+ let currentNode = targetNode;
146
+ let enable = true;
147
+ while (currentNode) {
148
+ const props = currentNode.memoizedProps;
149
+ if (props && props[FT_ENABLE_TRACK]) {
150
+ enable = props[FT_ENABLE_TRACK] == "true";
151
+ break;
152
+ }
153
+ currentNode = currentNode.return;
154
+ }
155
+ return enable;
156
+ }
157
+ }
158
+ _FTRumActionTracking = FTRumActionTracking;
159
+ _defineProperty(FTRumActionTracking, "isTracking", false);
160
+ _defineProperty(FTRumActionTracking, "preActionTimestamp", Number.MIN_VALUE);
161
+ _defineProperty(FTRumActionTracking, "originalMemo", React.memo);
162
+ _defineProperty(FTRumActionTracking, "originalJsx", null);
163
+ _defineProperty(FTRumActionTracking, "originalCreateElement", React.createElement);
164
+ _defineProperty(FTRumActionTracking, "patchCreateElementFunction", (originalFunction, [element, props, ...rest]) => {
165
+ if (props && typeof props.onPress === 'function') {
166
+ const originalOnPress = props // eslint-disable-next-line @typescript-eslint/ban-types
167
+ .onPress;
168
+ props.onPress = (...args) => {
169
+ _FTRumActionTracking.interceptOnPress(...args);
170
+ return originalOnPress(...args);
171
+ };
172
+ props.__FT_INTERNAL_ORIGINAL_ON_PRESS__ = originalOnPress;
173
+ }
174
+ return originalFunction(element, props, ...rest);
175
+ });
176
+ const areObjectShallowEqual = (objectA, objectB) => {
177
+ if (!objectA || !objectB) {
178
+ return objectA === objectB;
179
+ }
180
+ const keys = Object.keys(objectA);
181
+ if (keys.length !== Object.keys(objectB).length) {
182
+ return false;
183
+ }
184
+ for (const key of keys) {
185
+ if (objectA[key] !== objectB[key]) {
186
+ return false;
187
+ }
188
+ }
189
+ return true;
190
+ };
191
+ const getJsxRuntime = () => {
192
+ // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires
193
+ const [major, minor] = require('react/package.json').version.split('.');
194
+ // JSX Transform applies to > 16.14.0
195
+ if (Number(major) <= 16 && Number(minor) < 14) {
196
+ throw new Error('React version does not support new jsx transform');
197
+ }
198
+
199
+ // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires
200
+ const jsxRuntime = require('react/jsx-runtime');
201
+ if (!jsxRuntime.jsx) {
202
+ throw new Error('React jsx runtime does not export new jsx transform');
203
+ }
204
+ return jsxRuntime;
205
+ };
206
+ //# sourceMappingURL=FTRumActionTracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","FTReactNativeRUM","FT_ENABLE_TRACK","FT_EXTRA_PROPERTY","FTRumActionTracking","startTracking","isTracking","original","createElement","args","patchCreateElementFunction","jsxRuntime","getJsxRuntime","originaljsx","jsx","originalJsx","e","originalMemo","memo","component","propsAreEqual","prev","next","onPress","areObjectShallowEqual","_prevOnPress","partialPrevProps","prevProps","__FT_INTERNAL_ORIGINAL_ON_PRESS__","_nextOnPress","partialNextProps","nextProps","stopTracking","originalCreateElement","interceptOnPress","length","_targetInst","currentTime","Date","now","timestampDifference","Math","abs","preActionTimestamp","targetNode","handleTargetEvent","enable","findActionEnableTrack","extraProperty","findActionProperty","elementTypeName","resolveActionName","jsonObject","JSON","parse","error","console","warn","startAction","_targetNode$memoizedP","_targetNode$memoizedP2","_targetNode$memoizedP3","accessibilityLabel","memoizedProps","accessibilityRole","subTitle","children","Array","isArray","props","elementType","name","currentNode","return","_FTRumActionTracking","_defineProperty","Number","MIN_VALUE","originalFunction","element","rest","originalOnPress","objectA","objectB","keys","Object","key","major","minor","require","version","split","Error"],"sources":["FTRumActionTracking.tsx"],"sourcesContent":["import React from 'react'\nimport { FTReactNativeRUM } from '../ft_rum';\nconst FT_ENABLE_TRACK = 'ft-enable-track';\nconst FT_EXTRA_PROPERTY = 'ft-extra-property';\nexport class FTRumActionTracking {\n\tprivate static isTracking = false\n\tprivate static preActionTimestamp = Number.MIN_VALUE;\n\tprivate static originalMemo = React.memo;\n private static originalJsx = null;\n private static originalCreateElement = React.createElement;\n\n\tprivate static patchCreateElementFunction = (\n originalFunction: typeof React.createElement,\n [element, props, ...rest]: Parameters<typeof React.createElement>\n ): ReturnType<typeof React.createElement> => {\n if (\n props &&\n typeof (props as Record<string, unknown>).onPress === 'function'\n ) {\n const originalOnPress = (props as Record<string, unknown>) // eslint-disable-next-line @typescript-eslint/ban-types\n .onPress as Function;\n (props as Record<string, unknown>).onPress = (...args: any[]) => {\n FTRumActionTracking.interceptOnPress(\n ...args\n );\n return originalOnPress(...args);\n };\n \n (props as Record<\n string,\n unknown\n >).__FT_INTERNAL_ORIGINAL_ON_PRESS__ = originalOnPress;\n }\n return originalFunction(element, props, ...rest);\n };\n\tstatic startTracking(): void {\n\t\tif (FTRumActionTracking.isTracking) {\n\t\t\treturn\n\t\t}\n\t\tconst original = React.createElement\n\t\tReact.createElement = (\n ...args: Parameters<typeof React.createElement>\n ): any => {\n return this.patchCreateElementFunction(original, args);\n };\n try {\n const jsxRuntime = getJsxRuntime();\n const originaljsx = jsxRuntime.jsx;\n this.originalJsx = originaljsx;\n jsxRuntime.jsx = (\n ...args: Parameters<typeof React.createElement>\n ): ReturnType<typeof React.createElement> => {\n return this.patchCreateElementFunction(originaljsx, args);\n };\n } catch (e) {\n \n }\n\n const originalMemo = React.memo;\n React.memo = (\n component: any,\n propsAreEqual?: (prevProps: any, newProps: any) => boolean\n ) => {\n return originalMemo(component, (prev, next) => {\n if (!next.onPress || !prev.onPress) {\n return propsAreEqual\n ? propsAreEqual(prev, next)\n : areObjectShallowEqual(prev, next);\n }\n\n\t\t\t\tconst { onPress: _prevOnPress, ...partialPrevProps } = prev;\n const prevProps = {\n ...partialPrevProps,\n onPress: prev.__FT_INTERNAL_ORIGINAL_ON_PRESS__\n };\n\n const { onPress: _nextOnPress, ...partialNextProps } = next;\n const nextProps = {\n ...partialNextProps,\n onPress: next.__FT_INTERNAL_ORIGINAL_ON_PRESS__\n };\n\n return propsAreEqual\n ? propsAreEqual(prevProps, nextProps)\n : areObjectShallowEqual(nextProps, prevProps);\n });\n };\n\t\tFTRumActionTracking.isTracking = true\n\t}\n\tstatic stopTracking() {\n React.createElement = this.originalCreateElement;\n React.memo = this.originalMemo;\n FTRumActionTracking.isTracking = false;\n if (this.originalJsx) {\n const jsxRuntime = getJsxRuntime();\n jsxRuntime.jsx = this.originalJsx;\n this.originalJsx = null;\n }\n }\n\n\tprivate static interceptOnPress(...args: any[]): void {\n\t\tif (args.length > 0 && args[0] && args[0]._targetInst) {\n\t\t\tconst currentTime = Date.now()\n\t\t\tconst timestampDifference = Math.abs(Date.now() - FTRumActionTracking.preActionTimestamp)\n\t\t\tif (timestampDifference > 10) {\n\t\t\t\tconst targetNode = args[0]._targetInst\n\t\t\t\tthis.handleTargetEvent(targetNode)\n\t\t\t\tFTRumActionTracking.preActionTimestamp = currentTime \n\t\t\t}\n\t\t}\n\t}\n\n private static handleTargetEvent(targetNode: any | null) {\n if (targetNode) {\n const enable = FTRumActionTracking.findActionEnableTrack(targetNode);\n if (enable) {\n const extraProperty = FTRumActionTracking.findActionProperty(targetNode);\n const elementTypeName = FTRumActionTracking.resolveActionName(targetNode);\n if (elementTypeName) {\n let jsonObject = null\n if (extraProperty) {\n try {\n jsonObject = JSON.parse(extraProperty)\n } catch (error) {\n console.warn(`Error parsing JSON string ${extraProperty}:`,error);\n }\n }\n if (jsonObject){\n FTReactNativeRUM.startAction(elementTypeName, 'click',jsonObject);\n }else{\n FTReactNativeRUM.startAction(elementTypeName, 'click');\n }\n }\n }\n }\n }\n\n\tprivate static resolveActionName(targetNode:any): string | null {\n\t\tconst accessibilityLabel = targetNode.memoizedProps?.accessibilityLabel\n\t\tif(accessibilityLabel != null){\n\t\t\treturn accessibilityLabel;\n\t\t}\n\t\tconst accessibilityRole = targetNode.memoizedProps?.accessibilityRole;\n\t\t\tlet subTitle = '';\n\t\t\tlet children = targetNode.memoizedProps?.children;\n\t\t\twhile (children){\n\t\t\t\tif(Array.isArray(children) && children.length>0 && children[0]){\n\t\t\t\t\tchildren = children[0];\n\t\t\t\t}else if(typeof children === 'object' && children.props && children.props.children){\n\t\t\t\t\tchildren = children.props.children;\n\t\t\t\t}else if(typeof children === 'string'){\n\t\t\t\t\tsubTitle = children;\n\t\t\t\t\tchildren = null;\n\t\t\t\t}else{\n\t\t\t\t\tchildren = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet elementTypeName = accessibilityRole;\n\t\t\tif(!accessibilityRole){\n\t\t\t\tlet elementType = targetNode.elementType;\n\t\t\t\tif (typeof elementType === \"string\") {\n\t\t\t\t\telementTypeName = elementType\n\t\t\t\t} else if (elementType && typeof elementType.name === \"string\") {\n\t\t\t\t\telementTypeName = elementType.name\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(elementTypeName){\n\t\t\t\treturn '['+elementTypeName+']'+subTitle;\n\t\t\t}\n\t\t\treturn null;\n \n\t}\n private static findActionProperty(targetNode: any): string | null {\n let currentNode = targetNode;\n while (currentNode) {\n const props = currentNode.memoizedProps;\n if (props && props[FT_EXTRA_PROPERTY]) {\n return props[FT_EXTRA_PROPERTY];\n }\n currentNode = currentNode.return;\n }\n return null;\n }\n private static findActionEnableTrack(targetNode: any): boolean {\n let currentNode = targetNode;\n let enable = true\n while (currentNode) {\n const props = currentNode.memoizedProps;\n if (props && props[FT_ENABLE_TRACK]) {\n enable = props[FT_ENABLE_TRACK] == \"true\";\n break;\n }\n currentNode = currentNode.return;\n }\n return enable;\n }\n}\n\nconst areObjectShallowEqual = (\n\tobjectA: Record<string, unknown> | undefined | null,\n\tobjectB: Record<string, unknown> | undefined | null\n): boolean => {\n\tif (!objectA || !objectB) {\n\t\treturn objectA === objectB;\n\t}\n\n\tconst keys = Object.keys(objectA);\n\tif (keys.length !== Object.keys(objectB).length) {\n\t\treturn false;\n\t}\n\tfor (const key of keys) {\n\t\tif (objectA[key] !== objectB[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\nconst getJsxRuntime = () => {\n // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires\n const [major, minor] = require('react/package.json').version.split('.');\n\t// JSX Transform applies to > 16.14.0\n if (Number(major)<=16&&Number(minor)<14) {\n throw new Error('React version does not support new jsx transform');\n }\n\n // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires\n const jsxRuntime = require('react/jsx-runtime');\n if (!jsxRuntime.jsx) {\n throw new Error('React jsx runtime does not export new jsx transform');\n }\n return jsxRuntime;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,92 @@
1
+ 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; }
2
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
+ import { FTReactNativeRUM } from '../ft_rum';
5
+ const EMPTY_MESSAGE = 'Unknown Error';
6
+ const CONSOLE_ERROR = "console_error";
7
+ export class FTRumErrorTracking {
8
+ static startTracking() {
9
+ if (FTRumErrorTracking.isTracking) {
10
+ return;
11
+ }
12
+ if (ErrorUtils) {
13
+ FTRumErrorTracking.defaultErrorHandler = ErrorUtils.getGlobalHandler;
14
+ FTRumErrorTracking.defaultConsoleError = console.error;
15
+ ErrorUtils.setGlobalHandler(FTRumErrorTracking.onGlobalError);
16
+ console.error = FTRumErrorTracking.onConsoleError;
17
+ FTRumErrorTracking.isTracking = true;
18
+ }
19
+ }
20
+ static onGlobalError(error, isFatal) {
21
+ const message = FTRumErrorTracking.getErrorMessage(error);
22
+ const stacktrace = FTRumErrorTracking.getErrorStackTrace(error);
23
+ FTReactNativeRUM.addError(stacktrace, message).then(() => {
24
+ try {
25
+ FTRumErrorTracking.isInDefaultErrorHandler = true;
26
+ //Call the original error handler method
27
+ FTRumErrorTracking.defaultErrorHandler(error, isFatal);
28
+ } finally {
29
+ FTRumErrorTracking.isInDefaultErrorHandler = false;
30
+ }
31
+ });
32
+ }
33
+ static onConsoleError(...params) {
34
+ if (FTRumErrorTracking.isInDefaultErrorHandler) {
35
+ return;
36
+ }
37
+ let stack = '';
38
+ for (let i = 0; i < params.length; i += 1) {
39
+ const param = params[i];
40
+ const paramStack = FTRumErrorTracking.getErrorStackTrace(param);
41
+ if (paramStack != undefined && paramStack != '') {
42
+ stack = paramStack;
43
+ break;
44
+ }
45
+ }
46
+ const message = params.map(param => {
47
+ if (typeof param === 'string') {
48
+ return param;
49
+ } else {
50
+ return FTRumErrorTracking.getErrorMessage(param);
51
+ }
52
+ }).join(' ');
53
+ FTReactNativeRUM.addErrorWithType(CONSOLE_ERROR, stack, message).then(() => {
54
+ FTRumErrorTracking.defaultConsoleError.apply(console, params);
55
+ });
56
+ }
57
+ static getErrorMessage(error) {
58
+ let message = EMPTY_MESSAGE;
59
+ if (error == undefined || error === null) {
60
+ message = EMPTY_MESSAGE;
61
+ } else if (typeof error === 'object' && 'message' in error) {
62
+ message = String(error.message);
63
+ } else {
64
+ message = String(error);
65
+ }
66
+ return message;
67
+ }
68
+ static getErrorStackTrace(error) {
69
+ let stack = '';
70
+ if (error == undefined) {
71
+ stack = '';
72
+ } else if (typeof error === 'string') {
73
+ stack = '';
74
+ } else if ('componentStack' in error) {
75
+ stack = String(error.componentStack);
76
+ } else if ('stacktrace' in error) {
77
+ stack = String(error.stacktrace);
78
+ } else if ('stack' in error) {
79
+ stack = String(error.stack);
80
+ } else if ('sourceURL' in error && 'line' in error && 'column' in error) {
81
+ stack = `at ${error.sourceURL}:${error.line}:${error.column}`;
82
+ }
83
+ return stack;
84
+ }
85
+ }
86
+ _defineProperty(FTRumErrorTracking, "isTracking", false);
87
+ _defineProperty(FTRumErrorTracking, "isInDefaultErrorHandler", false);
88
+ // Original error handler method
89
+ _defineProperty(FTRumErrorTracking, "defaultErrorHandler", (_error, _isFatal) => {});
90
+ // Original console error handler method
91
+ _defineProperty(FTRumErrorTracking, "defaultConsoleError", (..._params) => {});
92
+ //# sourceMappingURL=FTRumErrorTracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FTReactNativeRUM","EMPTY_MESSAGE","CONSOLE_ERROR","FTRumErrorTracking","startTracking","isTracking","ErrorUtils","defaultErrorHandler","getGlobalHandler","defaultConsoleError","console","error","setGlobalHandler","onGlobalError","onConsoleError","isFatal","message","getErrorMessage","stacktrace","getErrorStackTrace","addError","then","isInDefaultErrorHandler","params","stack","i","length","param","paramStack","undefined","map","join","addErrorWithType","apply","String","componentStack","sourceURL","line","column","_defineProperty","_error","_isFatal","_params"],"sources":["FTRumErrorTracking.tsx"],"sourcesContent":["import type { ErrorHandlerCallback } from 'react-native';\nimport { FTReactNativeRUM } from '../ft_rum';\nconst EMPTY_MESSAGE = 'Unknown Error';\nconst CONSOLE_ERROR = \"console_error\";\n\nexport class FTRumErrorTracking {\n private static isTracking = false;\n\n private static isInDefaultErrorHandler = false;\n\n // Original error handler method\n private static defaultErrorHandler: ErrorHandlerCallback = (_error: any, _isFatal?: boolean) => { }\n\n // Original console error handler method\n private static defaultConsoleError = (..._params: unknown[]) => { }\n\n static startTracking(): void {\n if(FTRumErrorTracking.isTracking){\n return;\n }\n if (ErrorUtils) {\n FTRumErrorTracking.defaultErrorHandler = ErrorUtils.getGlobalHandler;\n FTRumErrorTracking.defaultConsoleError = console.error;\n ErrorUtils.setGlobalHandler(FTRumErrorTracking.onGlobalError);\n console.error = FTRumErrorTracking.onConsoleError;\n FTRumErrorTracking.isTracking = true;\n }\n }\n static onGlobalError(error: any, isFatal?: boolean): void {\n const message = FTRumErrorTracking.getErrorMessage(error);\n const stacktrace = FTRumErrorTracking.getErrorStackTrace(error);\n FTReactNativeRUM.addError(\n stacktrace,\n message\n ).then(() => {\n try {\n FTRumErrorTracking.isInDefaultErrorHandler = true;\n //Call the original error handler method\n FTRumErrorTracking.defaultErrorHandler(error, isFatal);\n } finally {\n FTRumErrorTracking.isInDefaultErrorHandler = false;\n }\n });\n }\n\n static onConsoleError(...params: unknown[]): void {\n if ( FTRumErrorTracking.isInDefaultErrorHandler) {\n return;\n }\n\n let stack: string = '';\n for (let i = 0; i < params.length; i += 1) {\n const param = params[i];\n const paramStack = FTRumErrorTracking.getErrorStackTrace(param);\n if (paramStack != undefined && paramStack != '') {\n stack = paramStack;\n break;\n }\n }\n\n const message = params.map((param) => {\n if (typeof param === 'string') { return param; }\n else { return FTRumErrorTracking.getErrorMessage(param); }\n }).join(' ');\n\n\n FTReactNativeRUM.addErrorWithType(\n CONSOLE_ERROR,\n stack,\n message,\n ).then(() => {\n FTRumErrorTracking.defaultConsoleError.apply(console, params);\n });\n\n }\n private static getErrorMessage(error: any | undefined): string {\n let message = EMPTY_MESSAGE;\n if (error == undefined || error === null) {\n message = EMPTY_MESSAGE;\n } else if (typeof error === 'object' && 'message' in error){\n message = String(error.message);\n } else {\n message = String(error);\n }\n\n return message\n }\n\n private static getErrorStackTrace(error: any | undefined): string {\n let stack = '';\n\n if (error == undefined) {\n stack = '';\n } else if (typeof error === 'string') {\n stack = '';\n } else if ('componentStack' in error) {\n stack = String(error.componentStack);\n } else if ('stacktrace' in error) {\n stack = String(error.stacktrace);\n } else if ('stack' in error) {\n stack = String(error.stack);\n } else if (('sourceURL' in error) && ('line' in error) && ('column' in error)) {\n stack = `at ${error.sourceURL}:${error.line}:${error.column}`;\n }\n\n return stack\n }\n }\n\n\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ // generated by genversion
2
+ export const version = '0.3.15-alpha.1';
3
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["version"],"sources":["version.ts"],"sourcesContent":["// generated by genversion\nexport const version = '0.3.15-alpha.1';\n"],"mappings":"AAAA;AACA,OAAO,MAAMA,OAAO,GAAG,gBAAgB","ignoreList":[]}