@truewatchtech/react-native-mobile 0.3.15 → 0.4.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.
- package/FTMobileReactNativeSDK.podspec +32 -2
- package/android/build.gradle +10 -4
- package/android/src/main/java/com/ft/sdk/reactnative/FTMobileImpl.java +434 -5
- package/android/src/main/java/com/ft/sdk/reactnative/FTRUMImpl.java +12 -0
- package/android/src/main/java/com/ft/sdk/reactnative/FTTraceImpl.java +1 -1
- package/android/src/newarch/java/com/ft/sdk/reactnative/FTLogModule.java +7 -14
- package/android/src/newarch/java/com/ft/sdk/reactnative/FTMobileModule.java +46 -12
- package/android/src/newarch/java/com/ft/sdk/reactnative/FTRUMModule.java +12 -13
- package/android/src/newarch/java/com/ft/sdk/reactnative/FTTraceModule.java +6 -8
- package/android/src/oldarch/java/com/ft/sdk/reactnative/FTMobileModule.java +34 -2
- package/android/src/rnpost74/java/com/ft/sdk/reactnative/FTMobilePackage.java +14 -4
- package/android/src/rnpre74/java/com/ft/sdk/reactnative/FTMobilePackage.java +0 -2
- package/ios/FTMobileReactNative.h +9 -5
- package/ios/FTMobileReactNative.mm +619 -0
- package/ios/FTReactNativeLog.h +8 -3
- package/ios/FTReactNativeLog.mm +79 -0
- package/ios/FTReactNativeRUM.h +8 -4
- package/ios/{FTReactNativeRUM.m → FTReactNativeRUM.mm} +143 -84
- package/ios/FTReactNativeTrace.h +7 -3
- package/ios/FTReactNativeTrace.mm +74 -0
- package/ios/FtMobileAgent.xcodeproj/project.pbxproj +22 -0
- package/lib/commonjs/ft_logger.js +14 -13
- package/lib/commonjs/ft_logger.js.map +1 -1
- package/lib/commonjs/ft_mobile_agent.js +153 -6
- package/lib/commonjs/ft_mobile_agent.js.map +1 -1
- package/lib/commonjs/ft_rum.js +55 -21
- package/lib/commonjs/ft_rum.js.map +1 -1
- package/lib/commonjs/ft_tracing.js +29 -10
- package/lib/commonjs/ft_tracing.js.map +1 -1
- package/lib/commonjs/index.js +30 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/rum/FTRumActionTracking.js +10 -4
- package/lib/commonjs/rum/FTRumActionTracking.js.map +1 -1
- package/lib/commonjs/rum/FTRumErrorTracking.js +4 -4
- package/lib/commonjs/rum/FTRumErrorTracking.js.map +1 -1
- package/lib/commonjs/specs/NativeFTMobileReactNative.js +10 -0
- package/lib/commonjs/specs/NativeFTMobileReactNative.js.map +1 -0
- package/lib/commonjs/specs/NativeFTReactNativeLog.js +10 -0
- package/lib/commonjs/specs/NativeFTReactNativeLog.js.map +1 -0
- package/lib/commonjs/specs/NativeFTReactNativeRUM.js +10 -0
- package/lib/commonjs/specs/NativeFTReactNativeRUM.js.map +1 -0
- package/lib/commonjs/specs/NativeFTReactNativeTrace.js +10 -0
- package/lib/commonjs/specs/NativeFTReactNativeTrace.js.map +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/ft_logger.js +14 -12
- package/lib/module/ft_logger.js.map +1 -1
- package/lib/module/ft_mobile_agent.js +159 -5
- package/lib/module/ft_mobile_agent.js.map +1 -1
- package/lib/module/ft_rum.js +54 -16
- package/lib/module/ft_rum.js.map +1 -1
- package/lib/module/ft_tracing.js +29 -9
- package/lib/module/ft_tracing.js.map +1 -1
- package/lib/module/index.js +3 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/rum/FTRumActionTracking.js +10 -4
- package/lib/module/rum/FTRumActionTracking.js.map +1 -1
- package/lib/module/rum/FTRumErrorTracking.js +4 -4
- package/lib/module/rum/FTRumErrorTracking.js.map +1 -1
- package/lib/module/specs/NativeFTMobileReactNative.js +5 -0
- package/lib/module/specs/NativeFTMobileReactNative.js.map +1 -0
- package/lib/module/specs/NativeFTReactNativeLog.js +5 -0
- package/lib/module/specs/NativeFTReactNativeLog.js.map +1 -0
- package/lib/module/specs/NativeFTReactNativeRUM.js +5 -0
- package/lib/module/specs/NativeFTReactNativeRUM.js.map +1 -0
- package/lib/module/specs/NativeFTReactNativeTrace.js +5 -0
- package/lib/module/specs/NativeFTReactNativeTrace.js.map +1 -0
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/ft_logger.d.ts +6 -6
- package/lib/typescript/ft_mobile_agent.d.ts +165 -14
- package/lib/typescript/ft_rum.d.ts +32 -8
- package/lib/typescript/ft_tracing.d.ts +6 -6
- package/lib/typescript/index.d.ts +3 -3
- package/lib/typescript/specs/NativeFTMobileReactNative.d.ts +75 -0
- package/lib/typescript/specs/NativeFTReactNativeLog.d.ts +23 -0
- package/lib/typescript/specs/NativeFTReactNativeRUM.d.ts +89 -0
- package/lib/typescript/specs/NativeFTReactNativeTrace.d.ts +24 -0
- package/lib/typescript/version.d.ts +1 -1
- package/package.json +29 -96
- package/scripts/replace-react-require.js +37 -38
- package/src/ft_logger.tsx +71 -40
- package/src/ft_mobile_agent.tsx +374 -92
- package/src/ft_rum.tsx +227 -123
- package/src/ft_tracing.tsx +58 -38
- package/src/index.tsx +58 -16
- package/src/rum/FTRumActionTracking.tsx +212 -204
- package/src/rum/FTRumErrorTracking.tsx +70 -71
- package/src/specs/NativeFTMobileReactNative.ts +83 -0
- package/src/specs/NativeFTReactNativeLog.ts +29 -0
- package/src/specs/NativeFTReactNativeRUM.ts +104 -0
- package/src/specs/NativeFTReactNativeTrace.ts +26 -0
- package/src/version.ts +1 -1
- package/LICENSE +0 -201
- package/android/.project +0 -17
- package/android/.settings/org.eclipse.buildship.core.prefs +0 -13
- package/android/gradlew +0 -185
- package/android/local.properties +0 -8
- package/android/src/main/java/com/ft/sdk/InnerClassProxy.java +0 -8
- package/ios/.idea/.name +0 -1
- package/ios/.idea/ios.iml +0 -2
- package/ios/.idea/modules.xml +0 -8
- package/ios/.idea/vcs.xml +0 -6
- package/ios/.idea/xcode.xml +0 -4
- package/ios/FTMobileReactNative.m +0 -183
- package/ios/FTReactNativeLog.m +0 -60
- package/ios/FTReactNativeTrace.m +0 -58
- package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -4
- package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/xcuserdata/Brandon.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/xcuserdata/Brandon.xcuserdatad/xcschemes/xcschememanagement.plist +0 -5
- package/ios/FtMobileAgent.xcodeproj/xcuserdata/Brandon.xcuserdatad/xcschemes/FtMobileAgent.xcscheme +0 -56
- package/ios/FtMobileAgent.xcodeproj/xcuserdata/Brandon.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- package/ios/RCTVersion.h +0 -8
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["FTMobileConfig","FTMobileReactNative","EnvType","FTDBCacheDiscard","FTLogConfig","FTReactNativeLog","FTLogStatus","FTLogCacheDiscard","FTRUMConfig","FTRUMResource","FTReactNativeRUM","ErrorMonitorType","DeviceMetricsMonitorType","DetectFrequency","FTRUMResourceMetrics","FTRUMCacheDiscard","FTTraceConfig","FTReactNativeTrace","TraceType","FTRumActionTracking","FTRumErrorTracking"],"sources":["index.tsx"],"sourcesContent":["import {FTMobileConfig
|
|
1
|
+
{"version":3,"names":["FTMobileConfig","FTMobileReactNative","EnvType","FTDBCacheDiscard","FTRemoteConfigResult","FTRemoteConfigOverrideRule","FTRemoteConfigOverrideMatch","FTRemoteConfigOverrideValues","FTLogConfig","FTReactNativeLog","FTLogStatus","FTLogCacheDiscard","FTRUMConfig","FTRUMResource","FTReactNativeRUM","ErrorMonitorType","DeviceMetricsMonitorType","DetectFrequency","FTRUMResourceMetrics","FTRUMCacheDiscard","IOSCrashMonitoringType","FTTraceConfig","FTReactNativeTrace","TraceType","FTRumActionTracking","FTRumErrorTracking"],"sources":["index.tsx"],"sourcesContent":["import {\n FTMobileConfig,\n FTMobileReactNative,\n EnvType,\n FTDBCacheDiscard,\n FTRemoteConfigResult,\n FTRemoteConfigOverrideRule,\n FTRemoteConfigOverrideMatch,\n FTRemoteConfigOverrideValues,\n} from './ft_mobile_agent';\nimport {\n FTLogConfig,\n FTReactNativeLog,\n FTLogStatus,\n FTLogCacheDiscard,\n} from './ft_logger';\nimport {\n FTRUMConfig,\n FTRUMResource,\n FTReactNativeRUM,\n ErrorMonitorType,\n DeviceMetricsMonitorType,\n DetectFrequency,\n FTRUMResourceMetrics,\n FTRUMCacheDiscard,\n IOSCrashMonitoringType,\n} from './ft_rum';\nimport { FTTraceConfig, FTReactNativeTrace, TraceType } from './ft_tracing';\nimport { FTRumActionTracking } from './rum/FTRumActionTracking';\nimport { FTRumErrorTracking } from './rum/FTRumErrorTracking';\n\nexport {\n FTMobileReactNative,\n FTMobileConfig,\n EnvType,\n FTDBCacheDiscard,\n FTRemoteConfigResult,\n FTRemoteConfigOverrideRule,\n FTRemoteConfigOverrideMatch,\n FTRemoteConfigOverrideValues,\n FTLogConfig,\n FTReactNativeLog,\n FTLogStatus,\n FTLogCacheDiscard,\n FTRUMConfig,\n FTReactNativeRUM,\n FTRUMResource,\n ErrorMonitorType,\n DeviceMetricsMonitorType,\n DetectFrequency,\n FTRUMResourceMetrics,\n FTRUMCacheDiscard,\n IOSCrashMonitoringType,\n FTTraceConfig,\n FTReactNativeTrace,\n TraceType,\n FTRumActionTracking,\n FTRumErrorTracking,\n};\n"],"mappings":"AAAA,SACEA,cAAc,EACdC,mBAAmB,EACnBC,OAAO,EACPC,gBAAgB,EAChBC,oBAAoB,EACpBC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,4BAA4B,QACvB,mBAAmB;AAC1B,SACEC,WAAW,EACXC,gBAAgB,EAChBC,WAAW,EACXC,iBAAiB,QACZ,aAAa;AACpB,SACEC,WAAW,EACXC,aAAa,EACbC,gBAAgB,EAChBC,gBAAgB,EAChBC,wBAAwB,EACxBC,eAAe,EACfC,oBAAoB,EACpBC,iBAAiB,EACjBC,sBAAsB,QACjB,UAAU;AACjB,SAASC,aAAa,EAAEC,kBAAkB,EAAEC,SAAS,QAAQ,cAAc;AAC3E,SAASC,mBAAmB,QAAQ,2BAA2B;AAC/D,SAASC,kBAAkB,QAAQ,0BAA0B;AAE7D,SACExB,mBAAmB,EACnBD,cAAc,EACdE,OAAO,EACPC,gBAAgB,EAChBC,oBAAoB,EACpBC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,4BAA4B,EAC5BC,WAAW,EACXC,gBAAgB,EAChBC,WAAW,EACXC,iBAAiB,EACjBC,WAAW,EACXE,gBAAgB,EAChBD,aAAa,EACbE,gBAAgB,EAChBC,wBAAwB,EACxBC,eAAe,EACfC,oBAAoB,EACpBC,iBAAiB,EACjBC,sBAAsB,EACtBC,aAAa,EACbC,kBAAkB,EAClBC,SAAS,EACTC,mBAAmB,EACnBC,kBAAkB","ignoreList":[]}
|
|
@@ -22,13 +22,17 @@ export class FTRumActionTracking {
|
|
|
22
22
|
jsxRuntime.jsx = (...args) => {
|
|
23
23
|
return this.patchCreateElementFunction(originaljsx, args);
|
|
24
24
|
};
|
|
25
|
-
} catch (e) {
|
|
25
|
+
} catch (e) {
|
|
26
|
+
// Ignore missing jsx runtime support on older React versions.
|
|
27
|
+
}
|
|
26
28
|
const originalMemo = React.memo;
|
|
27
29
|
React.memo = (component, propsAreEqual) => {
|
|
28
30
|
return originalMemo(component, (prev, next) => {
|
|
29
31
|
if (!next.onPress || !prev.onPress) {
|
|
30
32
|
return propsAreEqual ? propsAreEqual(prev, next) : areObjectShallowEqual(prev, next);
|
|
31
33
|
}
|
|
34
|
+
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
32
36
|
const {
|
|
33
37
|
onPress: _prevOnPress,
|
|
34
38
|
...partialPrevProps
|
|
@@ -37,6 +41,8 @@ export class FTRumActionTracking {
|
|
|
37
41
|
...partialPrevProps,
|
|
38
42
|
onPress: prev.__FT_INTERNAL_ORIGINAL_ON_PRESS__
|
|
39
43
|
};
|
|
44
|
+
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
40
46
|
const {
|
|
41
47
|
onPress: _nextOnPress,
|
|
42
48
|
...partialNextProps
|
|
@@ -119,9 +125,9 @@ export class FTRumActionTracking {
|
|
|
119
125
|
let elementTypeName = accessibilityRole;
|
|
120
126
|
if (!accessibilityRole) {
|
|
121
127
|
let elementType = targetNode.elementType;
|
|
122
|
-
if (typeof elementType ===
|
|
128
|
+
if (typeof elementType === 'string') {
|
|
123
129
|
elementTypeName = elementType;
|
|
124
|
-
} else if (elementType && typeof elementType.name ===
|
|
130
|
+
} else if (elementType && typeof elementType.name === 'string') {
|
|
125
131
|
elementTypeName = elementType.name;
|
|
126
132
|
}
|
|
127
133
|
}
|
|
@@ -147,7 +153,7 @@ export class FTRumActionTracking {
|
|
|
147
153
|
while (currentNode) {
|
|
148
154
|
const props = currentNode.memoizedProps;
|
|
149
155
|
if (props && props[FT_ENABLE_TRACK]) {
|
|
150
|
-
enable = props[FT_ENABLE_TRACK]
|
|
156
|
+
enable = props[FT_ENABLE_TRACK] === 'true';
|
|
151
157
|
break;
|
|
152
158
|
}
|
|
153
159
|
currentNode = currentNode.return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","FTReactNativeRUM","FT_ENABLE_TRACK","FT_EXTRA_PROPERTY","FTRumActionTracking","startTracking","isTracking","original","createElement","args","patchCreateElementFunction","jsxRuntime","getJsxRuntime","originaljsx","jsx","originalJsx","e","originalMemo","memo","component","propsAreEqual","prev","next","onPress","areObjectShallowEqual","_prevOnPress","partialPrevProps","prevProps","__FT_INTERNAL_ORIGINAL_ON_PRESS__","_nextOnPress","partialNextProps","nextProps","stopTracking","originalCreateElement","interceptOnPress","length","_targetInst","currentTime","Date","now","timestampDifference","Math","abs","preActionTimestamp","targetNode","handleTargetEvent","enable","findActionEnableTrack","extraProperty","findActionProperty","elementTypeName","resolveActionName","jsonObject","JSON","parse","error","console","warn","startAction","_targetNode$memoizedP","_targetNode$memoizedP2","_targetNode$memoizedP3","accessibilityLabel","memoizedProps","accessibilityRole","subTitle","children","Array","isArray","props","elementType","name","currentNode","return","_FTRumActionTracking","_defineProperty","Number","MIN_VALUE","originalFunction","element","rest","originalOnPress","objectA","objectB","keys","Object","key","major","minor","require","version","split","Error"],"sources":["FTRumActionTracking.tsx"],"sourcesContent":["import React from 'react'\nimport { FTReactNativeRUM } from '../ft_rum';\nconst FT_ENABLE_TRACK = 'ft-enable-track';\nconst FT_EXTRA_PROPERTY = 'ft-extra-property';\nexport class FTRumActionTracking {\n\tprivate static isTracking = false\n\tprivate static preActionTimestamp = Number.MIN_VALUE;\n\tprivate static originalMemo = React.memo;\n private static originalJsx = null;\n private static originalCreateElement = React.createElement;\n\n\tprivate static patchCreateElementFunction = (\n originalFunction: typeof React.createElement,\n [element, props, ...rest]: Parameters<typeof React.createElement>\n ): ReturnType<typeof React.createElement> => {\n if (\n props &&\n typeof (props as Record<string, unknown>).onPress === 'function'\n ) {\n const originalOnPress = (props as Record<string, unknown>) // eslint-disable-next-line @typescript-eslint/ban-types\n .onPress as Function;\n (props as Record<string, unknown>).onPress = (...args: any[]) => {\n FTRumActionTracking.interceptOnPress(\n ...args\n );\n return originalOnPress(...args);\n };\n \n (props as Record<\n string,\n unknown\n >).__FT_INTERNAL_ORIGINAL_ON_PRESS__ = originalOnPress;\n }\n return originalFunction(element, props, ...rest);\n };\n\tstatic startTracking(): void {\n\t\tif (FTRumActionTracking.isTracking) {\n\t\t\treturn\n\t\t}\n\t\tconst original = React.createElement\n\t\tReact.createElement = (\n ...args: Parameters<typeof React.createElement>\n ): any => {\n return this.patchCreateElementFunction(original, args);\n };\n try {\n const jsxRuntime = getJsxRuntime();\n const originaljsx = jsxRuntime.jsx;\n this.originalJsx = originaljsx;\n jsxRuntime.jsx = (\n ...args: Parameters<typeof React.createElement>\n ): ReturnType<typeof React.createElement> => {\n return this.patchCreateElementFunction(originaljsx, args);\n };\n } catch (e) {\n \n }\n\n const originalMemo = React.memo;\n React.memo = (\n component: any,\n propsAreEqual?: (prevProps: any, newProps: any) => boolean\n ) => {\n return originalMemo(component, (prev, next) => {\n if (!next.onPress || !prev.onPress) {\n return propsAreEqual\n ? propsAreEqual(prev, next)\n : areObjectShallowEqual(prev, next);\n }\n\n\t\t\t\tconst { onPress: _prevOnPress, ...partialPrevProps } = prev;\n const prevProps = {\n ...partialPrevProps,\n onPress: prev.__FT_INTERNAL_ORIGINAL_ON_PRESS__\n };\n\n const { onPress: _nextOnPress, ...partialNextProps } = next;\n const nextProps = {\n ...partialNextProps,\n onPress: next.__FT_INTERNAL_ORIGINAL_ON_PRESS__\n };\n\n return propsAreEqual\n ? propsAreEqual(prevProps, nextProps)\n : areObjectShallowEqual(nextProps, prevProps);\n });\n };\n\t\tFTRumActionTracking.isTracking = true\n\t}\n\tstatic stopTracking() {\n React.createElement = this.originalCreateElement;\n React.memo = this.originalMemo;\n FTRumActionTracking.isTracking = false;\n if (this.originalJsx) {\n const jsxRuntime = getJsxRuntime();\n jsxRuntime.jsx = this.originalJsx;\n this.originalJsx = null;\n }\n }\n\n\tprivate static interceptOnPress(...args: any[]): void {\n\t\tif (args.length > 0 && args[0] && args[0]._targetInst) {\n\t\t\tconst currentTime = Date.now()\n\t\t\tconst timestampDifference = Math.abs(Date.now() - FTRumActionTracking.preActionTimestamp)\n\t\t\tif (timestampDifference > 10) {\n\t\t\t\tconst targetNode = args[0]._targetInst\n\t\t\t\tthis.handleTargetEvent(targetNode)\n\t\t\t\tFTRumActionTracking.preActionTimestamp = currentTime \n\t\t\t}\n\t\t}\n\t}\n\n private static handleTargetEvent(targetNode: any | null) {\n if (targetNode) {\n const enable = FTRumActionTracking.findActionEnableTrack(targetNode);\n if (enable) {\n const extraProperty = FTRumActionTracking.findActionProperty(targetNode);\n const elementTypeName = FTRumActionTracking.resolveActionName(targetNode);\n if (elementTypeName) {\n let jsonObject = null\n if (extraProperty) {\n try {\n jsonObject = JSON.parse(extraProperty)\n } catch (error) {\n console.warn(`Error parsing JSON string ${extraProperty}:`,error);\n }\n }\n if (jsonObject){\n FTReactNativeRUM.startAction(elementTypeName, 'click',jsonObject);\n }else{\n FTReactNativeRUM.startAction(elementTypeName, 'click');\n }\n }\n }\n }\n }\n\n\tprivate static resolveActionName(targetNode:any): string | null {\n\t\tconst accessibilityLabel = targetNode.memoizedProps?.accessibilityLabel\n\t\tif(accessibilityLabel != null){\n\t\t\treturn accessibilityLabel;\n\t\t}\n\t\tconst accessibilityRole = targetNode.memoizedProps?.accessibilityRole;\n\t\t\tlet subTitle = '';\n\t\t\tlet children = targetNode.memoizedProps?.children;\n\t\t\twhile (children){\n\t\t\t\tif(Array.isArray(children) && children.length>0 && children[0]){\n\t\t\t\t\tchildren = children[0];\n\t\t\t\t}else if(typeof children === 'object' && children.props && children.props.children){\n\t\t\t\t\tchildren = children.props.children;\n\t\t\t\t}else if(typeof children === 'string'){\n\t\t\t\t\tsubTitle = children;\n\t\t\t\t\tchildren = null;\n\t\t\t\t}else{\n\t\t\t\t\tchildren = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet elementTypeName = accessibilityRole;\n\t\t\tif(!accessibilityRole){\n\t\t\t\tlet elementType = targetNode.elementType;\n\t\t\t\tif (typeof elementType === \"string\") {\n\t\t\t\t\telementTypeName = elementType\n\t\t\t\t} else if (elementType && typeof elementType.name === \"string\") {\n\t\t\t\t\telementTypeName = elementType.name\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(elementTypeName){\n\t\t\t\treturn '['+elementTypeName+']'+subTitle;\n\t\t\t}\n\t\t\treturn null;\n \n\t}\n private static findActionProperty(targetNode: any): string | null {\n let currentNode = targetNode;\n while (currentNode) {\n const props = currentNode.memoizedProps;\n if (props && props[FT_EXTRA_PROPERTY]) {\n return props[FT_EXTRA_PROPERTY];\n }\n currentNode = currentNode.return;\n }\n return null;\n }\n private static findActionEnableTrack(targetNode: any): boolean {\n let currentNode = targetNode;\n let enable = true\n while (currentNode) {\n const props = currentNode.memoizedProps;\n if (props && props[FT_ENABLE_TRACK]) {\n enable = props[FT_ENABLE_TRACK] == \"true\";\n break;\n }\n currentNode = currentNode.return;\n }\n return enable;\n }\n}\n\nconst areObjectShallowEqual = (\n\tobjectA: Record<string, unknown> | undefined | null,\n\tobjectB: Record<string, unknown> | undefined | null\n): boolean => {\n\tif (!objectA || !objectB) {\n\t\treturn objectA === objectB;\n\t}\n\n\tconst keys = Object.keys(objectA);\n\tif (keys.length !== Object.keys(objectB).length) {\n\t\treturn false;\n\t}\n\tfor (const key of keys) {\n\t\tif (objectA[key] !== objectB[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\nconst getJsxRuntime = () => {\n // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires\n const [major, minor] = require('react/package.json').version.split('.');\n\t// JSX Transform applies to > 16.14.0\n if (Number(major)<=16&&Number(minor)<14) {\n throw new Error('React version does not support new jsx transform');\n }\n\n // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires\n const jsxRuntime = require('react/jsx-runtime');\n if (!jsxRuntime.jsx) {\n throw new Error('React jsx runtime does not export new jsx transform');\n }\n return jsxRuntime;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","FTReactNativeRUM","FT_ENABLE_TRACK","FT_EXTRA_PROPERTY","FTRumActionTracking","startTracking","isTracking","original","createElement","args","patchCreateElementFunction","jsxRuntime","getJsxRuntime","originaljsx","jsx","originalJsx","e","originalMemo","memo","component","propsAreEqual","prev","next","onPress","areObjectShallowEqual","_prevOnPress","partialPrevProps","prevProps","__FT_INTERNAL_ORIGINAL_ON_PRESS__","_nextOnPress","partialNextProps","nextProps","stopTracking","originalCreateElement","interceptOnPress","length","_targetInst","currentTime","Date","now","timestampDifference","Math","abs","preActionTimestamp","targetNode","handleTargetEvent","enable","findActionEnableTrack","extraProperty","findActionProperty","elementTypeName","resolveActionName","jsonObject","JSON","parse","error","console","warn","startAction","_targetNode$memoizedP","_targetNode$memoizedP2","_targetNode$memoizedP3","accessibilityLabel","memoizedProps","accessibilityRole","subTitle","children","Array","isArray","props","elementType","name","currentNode","return","_FTRumActionTracking","_defineProperty","Number","MIN_VALUE","originalFunction","element","rest","originalOnPress","objectA","objectB","keys","Object","key","major","minor","require","version","split","Error"],"sources":["FTRumActionTracking.tsx"],"sourcesContent":["import React from 'react';\nimport { FTReactNativeRUM } from '../ft_rum';\nconst FT_ENABLE_TRACK = 'ft-enable-track';\nconst FT_EXTRA_PROPERTY = 'ft-extra-property';\nexport class FTRumActionTracking {\n private static isTracking = false;\n private static preActionTimestamp = Number.MIN_VALUE;\n private static originalMemo = React.memo;\n private static originalJsx = null;\n private static originalCreateElement = React.createElement;\n\n private static patchCreateElementFunction = (\n originalFunction: typeof React.createElement,\n [element, props, ...rest]: Parameters<typeof React.createElement>\n ): ReturnType<typeof React.createElement> => {\n if (\n props &&\n typeof (props as Record<string, unknown>).onPress === 'function'\n ) {\n const originalOnPress = (props as Record<string, unknown>) // eslint-disable-next-line @typescript-eslint/ban-types\n .onPress as Function;\n (props as Record<string, unknown>).onPress = (...args: any[]) => {\n FTRumActionTracking.interceptOnPress(...args);\n return originalOnPress(...args);\n };\n\n (props as Record<string, unknown>).__FT_INTERNAL_ORIGINAL_ON_PRESS__ =\n originalOnPress;\n }\n return originalFunction(element, props, ...rest);\n };\n static startTracking(): void {\n if (FTRumActionTracking.isTracking) {\n return;\n }\n const original = React.createElement;\n React.createElement = (\n ...args: Parameters<typeof React.createElement>\n ): any => {\n return this.patchCreateElementFunction(original, args);\n };\n try {\n const jsxRuntime = getJsxRuntime();\n const originaljsx = jsxRuntime.jsx;\n this.originalJsx = originaljsx;\n jsxRuntime.jsx = (\n ...args: Parameters<typeof React.createElement>\n ): ReturnType<typeof React.createElement> => {\n return this.patchCreateElementFunction(originaljsx, args);\n };\n } catch (e) {\n // Ignore missing jsx runtime support on older React versions.\n }\n\n const originalMemo = React.memo;\n React.memo = (\n component: any,\n propsAreEqual?: (prevProps: any, newProps: any) => boolean\n ) => {\n return originalMemo(component, (prev, next) => {\n if (!next.onPress || !prev.onPress) {\n return propsAreEqual\n ? propsAreEqual(prev, next)\n : areObjectShallowEqual(prev, next);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { onPress: _prevOnPress, ...partialPrevProps } = prev;\n const prevProps = {\n ...partialPrevProps,\n onPress: prev.__FT_INTERNAL_ORIGINAL_ON_PRESS__,\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { onPress: _nextOnPress, ...partialNextProps } = next;\n const nextProps = {\n ...partialNextProps,\n onPress: next.__FT_INTERNAL_ORIGINAL_ON_PRESS__,\n };\n\n return propsAreEqual\n ? propsAreEqual(prevProps, nextProps)\n : areObjectShallowEqual(nextProps, prevProps);\n });\n };\n FTRumActionTracking.isTracking = true;\n }\n static stopTracking() {\n React.createElement = this.originalCreateElement;\n React.memo = this.originalMemo;\n FTRumActionTracking.isTracking = false;\n if (this.originalJsx) {\n const jsxRuntime = getJsxRuntime();\n jsxRuntime.jsx = this.originalJsx;\n this.originalJsx = null;\n }\n }\n\n private static interceptOnPress(...args: any[]): void {\n if (args.length > 0 && args[0] && args[0]._targetInst) {\n const currentTime = Date.now();\n const timestampDifference = Math.abs(\n Date.now() - FTRumActionTracking.preActionTimestamp\n );\n if (timestampDifference > 10) {\n const targetNode = args[0]._targetInst;\n this.handleTargetEvent(targetNode);\n FTRumActionTracking.preActionTimestamp = currentTime;\n }\n }\n }\n\n private static handleTargetEvent(targetNode: any | null) {\n if (targetNode) {\n const enable = FTRumActionTracking.findActionEnableTrack(targetNode);\n if (enable) {\n const extraProperty =\n FTRumActionTracking.findActionProperty(targetNode);\n const elementTypeName =\n FTRumActionTracking.resolveActionName(targetNode);\n if (elementTypeName) {\n let jsonObject = null;\n if (extraProperty) {\n try {\n jsonObject = JSON.parse(extraProperty);\n } catch (error) {\n console.warn(\n `Error parsing JSON string ${extraProperty}:`,\n error\n );\n }\n }\n if (jsonObject) {\n FTReactNativeRUM.startAction(elementTypeName, 'click', jsonObject);\n } else {\n FTReactNativeRUM.startAction(elementTypeName, 'click');\n }\n }\n }\n }\n }\n\n private static resolveActionName(targetNode: any): string | null {\n const accessibilityLabel = targetNode.memoizedProps?.accessibilityLabel;\n if (accessibilityLabel != null) {\n return accessibilityLabel;\n }\n const accessibilityRole = targetNode.memoizedProps?.accessibilityRole;\n let subTitle = '';\n let children = targetNode.memoizedProps?.children;\n while (children) {\n if (Array.isArray(children) && children.length > 0 && children[0]) {\n children = children[0];\n } else if (\n typeof children === 'object' &&\n children.props &&\n children.props.children\n ) {\n children = children.props.children;\n } else if (typeof children === 'string') {\n subTitle = children;\n children = null;\n } else {\n children = null;\n }\n }\n let elementTypeName = accessibilityRole;\n if (!accessibilityRole) {\n let elementType = targetNode.elementType;\n if (typeof elementType === 'string') {\n elementTypeName = elementType;\n } else if (elementType && typeof elementType.name === 'string') {\n elementTypeName = elementType.name;\n }\n }\n if (elementTypeName) {\n return '[' + elementTypeName + ']' + subTitle;\n }\n return null;\n }\n private static findActionProperty(targetNode: any): string | null {\n let currentNode = targetNode;\n while (currentNode) {\n const props = currentNode.memoizedProps;\n if (props && props[FT_EXTRA_PROPERTY]) {\n return props[FT_EXTRA_PROPERTY];\n }\n currentNode = currentNode.return;\n }\n return null;\n }\n private static findActionEnableTrack(targetNode: any): boolean {\n let currentNode = targetNode;\n let enable = true;\n while (currentNode) {\n const props = currentNode.memoizedProps;\n if (props && props[FT_ENABLE_TRACK]) {\n enable = props[FT_ENABLE_TRACK] === 'true';\n break;\n }\n currentNode = currentNode.return;\n }\n return enable;\n }\n}\n\nconst areObjectShallowEqual = (\n objectA: Record<string, unknown> | undefined | null,\n objectB: Record<string, unknown> | undefined | null\n): boolean => {\n if (!objectA || !objectB) {\n return objectA === objectB;\n }\n\n const keys = Object.keys(objectA);\n if (keys.length !== Object.keys(objectB).length) {\n return false;\n }\n for (const key of keys) {\n if (objectA[key] !== objectB[key]) {\n return false;\n }\n }\n return true;\n};\nconst getJsxRuntime = () => {\n // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires\n const [major, minor] = require('react/package.json').version.split('.');\n // JSX Transform applies to > 16.14.0\n if (Number(major) <= 16 && Number(minor) < 14) {\n throw new Error('React version does not support new jsx transform');\n }\n\n // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires\n const jsxRuntime = require('react/jsx-runtime');\n if (!jsxRuntime.jsx) {\n throw new Error('React jsx runtime does not export new jsx transform');\n }\n return jsxRuntime;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
|
|
|
3
3
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
4
|
import { FTReactNativeRUM } from '../ft_rum';
|
|
5
5
|
const EMPTY_MESSAGE = 'Unknown Error';
|
|
6
|
-
const CONSOLE_ERROR =
|
|
6
|
+
const CONSOLE_ERROR = 'console_error';
|
|
7
7
|
export class FTRumErrorTracking {
|
|
8
8
|
static startTracking() {
|
|
9
9
|
if (FTRumErrorTracking.isTracking) {
|
|
@@ -38,7 +38,7 @@ export class FTRumErrorTracking {
|
|
|
38
38
|
for (let i = 0; i < params.length; i += 1) {
|
|
39
39
|
const param = params[i];
|
|
40
40
|
const paramStack = FTRumErrorTracking.getErrorStackTrace(param);
|
|
41
|
-
if (paramStack
|
|
41
|
+
if (paramStack !== '') {
|
|
42
42
|
stack = paramStack;
|
|
43
43
|
break;
|
|
44
44
|
}
|
|
@@ -56,7 +56,7 @@ export class FTRumErrorTracking {
|
|
|
56
56
|
}
|
|
57
57
|
static getErrorMessage(error) {
|
|
58
58
|
let message = EMPTY_MESSAGE;
|
|
59
|
-
if (error ==
|
|
59
|
+
if (error == null) {
|
|
60
60
|
message = EMPTY_MESSAGE;
|
|
61
61
|
} else if (typeof error === 'object' && 'message' in error) {
|
|
62
62
|
message = String(error.message);
|
|
@@ -67,7 +67,7 @@ export class FTRumErrorTracking {
|
|
|
67
67
|
}
|
|
68
68
|
static getErrorStackTrace(error) {
|
|
69
69
|
let stack = '';
|
|
70
|
-
if (error ==
|
|
70
|
+
if (error == null) {
|
|
71
71
|
stack = '';
|
|
72
72
|
} else if (typeof error === 'string') {
|
|
73
73
|
stack = '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["FTReactNativeRUM","EMPTY_MESSAGE","CONSOLE_ERROR","FTRumErrorTracking","startTracking","isTracking","ErrorUtils","defaultErrorHandler","getGlobalHandler","defaultConsoleError","console","error","setGlobalHandler","onGlobalError","onConsoleError","isFatal","message","getErrorMessage","stacktrace","getErrorStackTrace","addError","then","isInDefaultErrorHandler","params","stack","i","length","param","paramStack","
|
|
1
|
+
{"version":3,"names":["FTReactNativeRUM","EMPTY_MESSAGE","CONSOLE_ERROR","FTRumErrorTracking","startTracking","isTracking","ErrorUtils","defaultErrorHandler","getGlobalHandler","defaultConsoleError","console","error","setGlobalHandler","onGlobalError","onConsoleError","isFatal","message","getErrorMessage","stacktrace","getErrorStackTrace","addError","then","isInDefaultErrorHandler","params","stack","i","length","param","paramStack","map","join","addErrorWithType","apply","String","componentStack","sourceURL","line","column","_defineProperty","_error","_isFatal","_params"],"sources":["FTRumErrorTracking.tsx"],"sourcesContent":["import type { ErrorHandlerCallback } from 'react-native';\nimport { FTReactNativeRUM } from '../ft_rum';\nconst EMPTY_MESSAGE = 'Unknown Error';\nconst CONSOLE_ERROR = 'console_error';\n\nexport class FTRumErrorTracking {\n private static isTracking = false;\n\n private static isInDefaultErrorHandler = false;\n\n // Original error handler method\n private static defaultErrorHandler: ErrorHandlerCallback = (\n _error: any,\n _isFatal?: boolean\n ) => {};\n\n // Original console error handler method\n private static defaultConsoleError = (..._params: unknown[]) => {};\n\n static startTracking(): void {\n if (FTRumErrorTracking.isTracking) {\n return;\n }\n if (ErrorUtils) {\n FTRumErrorTracking.defaultErrorHandler = ErrorUtils.getGlobalHandler;\n FTRumErrorTracking.defaultConsoleError = console.error;\n ErrorUtils.setGlobalHandler(FTRumErrorTracking.onGlobalError);\n console.error = FTRumErrorTracking.onConsoleError;\n FTRumErrorTracking.isTracking = true;\n }\n }\n static onGlobalError(error: any, isFatal?: boolean): void {\n const message = FTRumErrorTracking.getErrorMessage(error);\n const stacktrace = FTRumErrorTracking.getErrorStackTrace(error);\n FTReactNativeRUM.addError(stacktrace, message).then(() => {\n try {\n FTRumErrorTracking.isInDefaultErrorHandler = true;\n //Call the original error handler method\n FTRumErrorTracking.defaultErrorHandler(error, isFatal);\n } finally {\n FTRumErrorTracking.isInDefaultErrorHandler = false;\n }\n });\n }\n\n static onConsoleError(...params: unknown[]): void {\n if (FTRumErrorTracking.isInDefaultErrorHandler) {\n return;\n }\n\n let stack: string = '';\n for (let i = 0; i < params.length; i += 1) {\n const param = params[i];\n const paramStack = FTRumErrorTracking.getErrorStackTrace(param);\n if (paramStack !== '') {\n stack = paramStack;\n break;\n }\n }\n\n const message = params\n .map((param) => {\n if (typeof param === 'string') {\n return param;\n } else {\n return FTRumErrorTracking.getErrorMessage(param);\n }\n })\n .join(' ');\n\n FTReactNativeRUM.addErrorWithType(CONSOLE_ERROR, stack, message).then(\n () => {\n FTRumErrorTracking.defaultConsoleError.apply(console, params);\n }\n );\n }\n private static getErrorMessage(error: any | undefined): string {\n let message = EMPTY_MESSAGE;\n if (error == null) {\n message = EMPTY_MESSAGE;\n } else if (typeof error === 'object' && 'message' in error) {\n message = String(error.message);\n } else {\n message = String(error);\n }\n\n return message;\n }\n\n private static getErrorStackTrace(error: any | undefined): string {\n let stack = '';\n\n if (error == null) {\n stack = '';\n } else if (typeof error === 'string') {\n stack = '';\n } else if ('componentStack' in error) {\n stack = String(error.componentStack);\n } else if ('stacktrace' in error) {\n stack = String(error.stacktrace);\n } else if ('stack' in error) {\n stack = String(error.stack);\n } else if ('sourceURL' in error && 'line' in error && 'column' in error) {\n stack = `at ${error.sourceURL}:${error.line}:${error.column}`;\n }\n\n return stack;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","get"],"sources":["NativeFTMobileReactNative.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport type { TurboModule } from 'react-native';\nimport { TurboModuleRegistry } from 'react-native';\n\nexport interface Spec extends TurboModule {\n /**\n * SDK initialization method.\n * @param config SDK initialization configuration items.\n * @returns a Promise.\n */\n sdkConfig(config: Object): Promise<void>;\n /**\n * Dynamically set the Datakit upload URL after SDK initialization.\n * @param datakitUrl Datakit upload URL.\n * @returns a Promise.\n */\n setDatakitURL(datakitUrl: string): Promise<void>;\n /**\n * Dynamically set the Dataway upload URL and client token after SDK initialization.\n * @param datawayUrl Dataway upload URL.\n * @param clientToken Dataway authentication token.\n * @returns a Promise.\n */\n setDatawayURL(datawayUrl: string, clientToken: string): Promise<void>;\n /**\n * Bind user.\n * @param userId user ID.\n * @param userName user name.\n * @param userEmail user email\n * @param extra additional user information\n * @returns a Promise.\n */\n bindRUMUserData(\n userId: string,\n userName?: string,\n userEmail?: string,\n extra?: Object\n ): Promise<void>;\n /**\n * Unbind user.\n * @returns a Promise.\n */\n unbindRUMUserData(): Promise<void>;\n /**\n * Add custom global parameters. Applies to RUM and Log data\n * @param context custom global parameters.\n * @returns a Promise.\n */\n appendGlobalContext(context: Object): Promise<void>;\n /**\n * Add custom RUM global parameters. Applies to RUM data\n * @param context custom RUM global parameters.\n * @returns a Promise.\n */\n appendRUMGlobalContext(context: Object): Promise<void>;\n /**\n * Add custom RUM and Log global parameters. Applies to Log data\n * @param context custom Log global parameters.\n * @returns a Promise.\n */\n appendLogGlobalContext(context: Object): Promise<void>;\n /**\n * Actively synchronize data. When `FTMobileConfig.autoSync=false` is configured, you need to actively trigger this method to synchronize data.\n * @returns a Promise.\n */\n flushSyncData(): Promise<void>;\n\n /**\n * Synchronize events in iOS Widget Extension, iOS only\n * @param groupIdentifier app groupId\n * @returns {groupIdentifier:string,datas:Array<Object>} can be used to view data collected in Extension.\n */\n trackEventFromExtension(identifier: string): Promise<Object>;\n /**\n * Shut down objects currently running in the SDK\n */\n shutDown(): Promise<void>;\n /**\n * Clear all data that has not yet been uploaded to the server.\n */\n clearAllData(): Promise<void>;\n}\nexport default TurboModuleRegistry.get<Spec>('FTMobileReactNative');\n"],"mappings":"AAAA;;AAEA,SAASA,mBAAmB,QAAQ,cAAc;AAgFlD,eAAeA,mBAAmB,CAACC,GAAG,CAAO,qBAAqB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","get"],"sources":["NativeFTReactNativeLog.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport type { TurboModule } from 'react-native';\nimport { TurboModuleRegistry } from 'react-native';\n\nexport interface Spec extends TurboModule {\n /**\n *Configure log output configuration to enable log collection.\n */\n logConfig(config: Object): Promise<void>;\n /**\n * Output log.\n * @param content log content\n * @param status log status\n * @param property log context (optional)\n */\n logging(content: string, logStatus: number, property?: Object): Promise<void>;\n /**\n * Output log.\n * @param content log content\n * @param status log status\n * @param property log context (optional)\n */\n logWithStatusString(\n content: string,\n logStatus: string,\n property?: Object\n ): Promise<void>;\n}\nexport default TurboModuleRegistry.get<Spec>('FTReactNativeLog');\n"],"mappings":"AAAA;;AAEA,SAASA,mBAAmB,QAAQ,cAAc;AA0BlD,eAAeA,mBAAmB,CAACC,GAAG,CAAO,kBAAkB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","get"],"sources":["NativeFTReactNativeRUM.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport type { TurboModule } from 'react-native';\nimport { TurboModuleRegistry } from 'react-native';\n\nexport interface Spec extends TurboModule {\n /**\n * Set RUM tracking conditions and enable RUM collection.\n * @param config rum configuration parameters.\n * @returns a Promise.\n */\n setConfig(config: Object): Promise<void>;\n /**\n * Start RUM Action.\n * RUM will bind Resource, Error, LongTask events that may be triggered by this Action.\n * Avoid adding multiple times within 0.1s, only one Action will be associated with the same View at the same time, and new Actions will be discarded if the previous one has not ended.\n * Adding Action with `addAction` method does not affect each other.\n * @param actionName action name\n * @param actionType action type\n * @param property event context (optional)\n * @returns a Promise.\n */\n startAction(\n actionName: string,\n actionType: string,\n property?: Object\n ): Promise<void>;\n /**\n * Add Action event. This type of data cannot be associated with Error, Resource, LongTask data, and has no discard logic.\n * @param actionName action name\n * @param actionType action type\n * @param property event context (optional)\n * @returns a Promise.\n */\n addAction(\n actionName: string,\n actionType: string,\n property?: Object\n ): Promise<void>;\n /**\n * view load duration.\n * @param viewName view name\n * @param loadTime view load duration\n * @returns a Promise.\n */\n onCreateView(viewName: string, loadTime: number): Promise<void>;\n /**\n * view start.\n * @param viewName page name\n * @param property event context (optional)\n * @returns a Promise.\n */\n startView(viewName: string, property?: Object): Promise<void>;\n /**\n * view end.\n * @param property event context (optional)\n * @returns a Promise.\n */\n stopView(property?: Object): Promise<void>;\n /**\n * Exception capture and log collection.\n * @param stack stack log\n * @param message error message\n * @param property event context (optional)\n * @returns a Promise.\n */\n addError(stack: string, message: string, property?: Object): Promise<void>;\n /**\n * Exception capture and log collection.\n * @param type error type\n * @param stack stack log\n * @param message error message\n * @param property event context (optional)\n * @returns a Promise.\n */\n addErrorWithType(\n type: string,\n stack: string,\n message: string,\n property?: Object\n ): Promise<void>;\n /**\n * Start resource request.\n * @param key unique id\n * @param property event context (optional)\n * @returns a Promise.\n */\n startResource(key: string, property?: Object): Promise<void>;\n /**\n * End resource request.\n * @param key unique id\n * @param property event context (optional)\n * @returns a Promise.\n */\n stopResource(key: string, property?: Object): Promise<void>;\n /**\n * Send resource data metrics.\n * @param key unique id\n * @param resource resource data\n * @param metrics resource performance data\n * @returns a Promise.\n */\n addResource(key: string, resource: Object, metrics?: Object): Promise<void>;\n}\nexport default TurboModuleRegistry.get<Spec>('FTReactNativeRUM');\n"],"mappings":"AAAA;;AAEA,SAASA,mBAAmB,QAAQ,cAAc;AAqGlD,eAAeA,mBAAmB,CAACC,GAAG,CAAO,kBAAkB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","get"],"sources":["NativeFTReactNativeTrace.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport type { TurboModule } from 'react-native';\nimport { TurboModuleRegistry } from 'react-native';\n\nexport interface Spec extends TurboModule {\n /**\n * Configure trace to enable distributed tracing.\n * @param config trace configuration parameters.\n * @returns a Promise.\n */\n setConfig(config: Object): Promise<void>;\n /**\n * Get trace HTTP request header data.\n * @param url request URL\n * @returns trace request header parameters\n * @deprecated use getTraceHeaderFields() replace.\n */\n getTraceHeader(key: string, url: string): Promise<Object>;\n /**\n * Get trace HTTP request header data.\n * @param url request URL\n * @returns trace request header parameters\n */\n getTraceHeaderFields(url: string, key?: string): Promise<Object>;\n}\nexport default TurboModuleRegistry.get<Spec>('FTReactNativeTrace');\n"],"mappings":"AAAA;;AAEA,SAASA,mBAAmB,QAAQ,cAAc;AAuBlD,eAAeA,mBAAmB,CAACC,GAAG,CAAO,oBAAoB,CAAC","ignoreList":[]}
|
package/lib/module/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["version"],"sources":["version.ts"],"sourcesContent":["// generated by genversion\nexport const version = '0.
|
|
1
|
+
{"version":3,"names":["version"],"sources":["version.ts"],"sourcesContent":["// generated by genversion\nexport const version = '0.4.1';\n"],"mappings":"AAAA;AACA,OAAO,MAAMA,OAAO,GAAG,OAAO","ignoreList":[]}
|
|
@@ -41,12 +41,12 @@ declare class FTReactNativeLogWrapper {
|
|
|
41
41
|
*/
|
|
42
42
|
logConfig(config: FTLogConfig): Promise<void>;
|
|
43
43
|
/**
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
logging(content:
|
|
44
|
+
* Output log.
|
|
45
|
+
* @param content log content
|
|
46
|
+
* @param status log status
|
|
47
|
+
* @param property log context (optional)
|
|
48
|
+
*/
|
|
49
|
+
logging(content: string, logStatus: FTLogStatus | string, property?: object): Promise<void>;
|
|
50
50
|
}
|
|
51
51
|
export declare const FTReactNativeLog: FTReactNativeLogWrapper;
|
|
52
52
|
export {};
|
|
@@ -1,3 +1,37 @@
|
|
|
1
|
+
import { EmitterSubscription } from 'react-native';
|
|
2
|
+
/**
|
|
3
|
+
* Bridge context manager for managing shared properties across RUM and Logger modules
|
|
4
|
+
* This class provides a centralized way to store and retrieve global properties that will be
|
|
5
|
+
* automatically merged with local properties when making calls to RUM and Logger functions
|
|
6
|
+
*/
|
|
7
|
+
declare class BridgeContextManager {
|
|
8
|
+
private static instance;
|
|
9
|
+
private properties;
|
|
10
|
+
private constructor();
|
|
11
|
+
/**
|
|
12
|
+
* Initialize SDK information properties
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
15
|
+
private initializeSDKInfo;
|
|
16
|
+
/**
|
|
17
|
+
* Get singleton instance of BridgeContextManager
|
|
18
|
+
* @returns BridgeContextManager instance
|
|
19
|
+
*/
|
|
20
|
+
static getInstance(): BridgeContextManager;
|
|
21
|
+
/**
|
|
22
|
+
* Add bridge context properties that will be automatically merged with local properties
|
|
23
|
+
* @param properties Object containing key-value pairs
|
|
24
|
+
*/
|
|
25
|
+
appendBridgeContext(properties: Record<string, any>): void;
|
|
26
|
+
/**
|
|
27
|
+
* Merge bridge context properties with local properties
|
|
28
|
+
* Bridge context properties take precedence over local properties
|
|
29
|
+
* @param localProperties Local properties to merge with bridge context properties
|
|
30
|
+
* @returns Merged properties object
|
|
31
|
+
*/
|
|
32
|
+
mergeWithLocalPropertiesSync(localProperties?: object): Record<string, any>;
|
|
33
|
+
}
|
|
34
|
+
export declare const bridgeContextManager: BridgeContextManager;
|
|
1
35
|
/**
|
|
2
36
|
* Environment.
|
|
3
37
|
*/
|
|
@@ -12,6 +46,83 @@ export declare enum FTDBCacheDiscard {
|
|
|
12
46
|
discard = 0,
|
|
13
47
|
discardOldest = 1
|
|
14
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Remote config override rule matching condition for custom keys. Supports exact match and contains match.
|
|
51
|
+
* For exact match, set the value directly, for example: "userid": "test_user", which means the rule will be applied when the custom key "userid" is exactly "test_user".
|
|
52
|
+
* For contains match, set the value as an object with a "contains" field, for example: "userid": { "contains": "test_user" }, which means the rule will be applied when the custom key "userid" contains the object "test_user".
|
|
53
|
+
*/
|
|
54
|
+
export type FTRemoteConfigCustomKeyContainsMatch = {
|
|
55
|
+
contains: string | number | boolean;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Matching rules for remote config override
|
|
59
|
+
* Defines matching conditions using customKeys
|
|
60
|
+
*/
|
|
61
|
+
export type FTRemoteConfigOverrideMatch = {
|
|
62
|
+
customKeys?: Record<string, string | number | boolean | FTRemoteConfigCustomKeyContainsMatch>;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Values that can be modified by remote config override rules.
|
|
66
|
+
* These values will adjust the fetched remote configuration before it is applied.
|
|
67
|
+
*/
|
|
68
|
+
export type FTRemoteConfigOverrideValues = {
|
|
69
|
+
env?: string;
|
|
70
|
+
serviceName?: string;
|
|
71
|
+
autoSync?: boolean;
|
|
72
|
+
compressIntakeRequests?: boolean;
|
|
73
|
+
syncPageSize?: number;
|
|
74
|
+
syncSleepTime?: number;
|
|
75
|
+
rumSampleRate?: number;
|
|
76
|
+
rumSessionOnErrorSampleRate?: number;
|
|
77
|
+
rumEnableTraceUserAction?: boolean;
|
|
78
|
+
rumEnableTraceUserView?: boolean;
|
|
79
|
+
rumEnableTraceUserResource?: boolean;
|
|
80
|
+
rumEnableResourceHostIP?: boolean;
|
|
81
|
+
rumEnableTrackAppUIBlock?: boolean;
|
|
82
|
+
rumBlockDurationMs?: number;
|
|
83
|
+
rumEnableTrackAppCrash?: boolean;
|
|
84
|
+
rumEnableTrackAppANR?: boolean;
|
|
85
|
+
rumEnableTraceWebView?: boolean;
|
|
86
|
+
rumAllowWebViewHost?: Array<string>;
|
|
87
|
+
traceSampleRate?: number;
|
|
88
|
+
traceEnableAutoTrace?: boolean;
|
|
89
|
+
traceType?: string;
|
|
90
|
+
logSampleRate?: number;
|
|
91
|
+
logLevelFilters?: Array<string>;
|
|
92
|
+
logEnableCustomLog?: boolean;
|
|
93
|
+
logEnableConsoleLog?: boolean;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Remote config override rules .
|
|
97
|
+
* Adjust the fetched remote configuration before application.
|
|
98
|
+
*/
|
|
99
|
+
export type FTRemoteConfigOverrideRule = {
|
|
100
|
+
id?: string;
|
|
101
|
+
enabled?: boolean;
|
|
102
|
+
match: FTRemoteConfigOverrideMatch;
|
|
103
|
+
override: FTRemoteConfigOverrideValues;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Final result of the remote config update
|
|
107
|
+
* @param triggerType the type of remote config update trigger, auto or manual
|
|
108
|
+
* @param success whether the remote config update was successful
|
|
109
|
+
* @param platform the platform of the device, ios or android
|
|
110
|
+
* @param timestamp the timestamp when the remote config update was triggered
|
|
111
|
+
* @param rawJson the final remote config update result, in JSON string format
|
|
112
|
+
* @param errorCode the error code if the remote config update failed, may be null if the update was successful
|
|
113
|
+
* @param errorMessage the error message if the remote config update failed, may be null if the update was successful
|
|
114
|
+
* @param appliedOverrideRuleIds the list of override rule IDs applied in this remote config update, may be null if no rules were applied
|
|
115
|
+
*/
|
|
116
|
+
export type FTRemoteConfigResult = {
|
|
117
|
+
triggerType: 'auto' | 'manual';
|
|
118
|
+
success: boolean;
|
|
119
|
+
platform: 'ios' | 'android';
|
|
120
|
+
timestamp: number;
|
|
121
|
+
rawJson?: string;
|
|
122
|
+
errorCode?: string | number;
|
|
123
|
+
errorMessage?: string;
|
|
124
|
+
appliedOverrideRuleIds?: string[];
|
|
125
|
+
};
|
|
15
126
|
/**
|
|
16
127
|
* Configure SDK startup parameters.
|
|
17
128
|
* @param serverUrl data reporting address, deprecated, use [datakitUrl] instead
|
|
@@ -33,6 +144,9 @@ export declare enum FTDBCacheDiscard {
|
|
|
33
144
|
* @param dbDiscardStrategy db data discard strategy
|
|
34
145
|
* @param dataModifier data modifier, modify individual fields {key:value}, after setting, the SDK will replace the original value with the set value according to the key
|
|
35
146
|
* @param lineDataModifier data modifier, modify single data {"measurement":measurement,"data":{key:value}}, after setting, the SDK will replace the original value with the set value according to the key
|
|
147
|
+
* @param remoteConfiguration Set whether to enable remote dynamic configuration
|
|
148
|
+
* @param remoteConfigMiniUpdateInterval Set remote dynamic configuration minimum update interval, unit seconds, default 12*60*60
|
|
149
|
+
* @param remoteConfigOverrideRules Remote config override rules .Adjust the fetched remote configuration before application.
|
|
36
150
|
*/
|
|
37
151
|
export interface FTMobileConfig {
|
|
38
152
|
/**
|
|
@@ -56,9 +170,11 @@ export interface FTMobileConfig {
|
|
|
56
170
|
enableLimitWithDbSize?: boolean;
|
|
57
171
|
dbCacheLimit?: number;
|
|
58
172
|
dbDiscardStrategy?: FTDBCacheDiscard;
|
|
59
|
-
pkgInfo?: string;
|
|
60
173
|
dataModifier?: object;
|
|
61
174
|
lineDataModifier?: object;
|
|
175
|
+
remoteConfiguration?: boolean;
|
|
176
|
+
remoteConfigMiniUpdateInterval?: number;
|
|
177
|
+
remoteConfigOverrideRules?: Array<FTRemoteConfigOverrideRule>;
|
|
62
178
|
}
|
|
63
179
|
type FTMobileReactNativeType = {
|
|
64
180
|
/**
|
|
@@ -67,6 +183,19 @@ type FTMobileReactNativeType = {
|
|
|
67
183
|
* @returns a Promise.
|
|
68
184
|
*/
|
|
69
185
|
sdkConfig(config: FTMobileConfig): Promise<void>;
|
|
186
|
+
/**
|
|
187
|
+
* Dynamically set the Datakit upload URL after SDK initialization.
|
|
188
|
+
* @param datakitUrl Datakit upload URL.
|
|
189
|
+
* @returns a Promise.
|
|
190
|
+
*/
|
|
191
|
+
setDatakitURL(datakitUrl: string): Promise<void>;
|
|
192
|
+
/**
|
|
193
|
+
* Dynamically set the Dataway upload URL and client token after SDK initialization.
|
|
194
|
+
* @param datawayUrl Dataway upload URL.
|
|
195
|
+
* @param clientToken Dataway authentication token.
|
|
196
|
+
* @returns a Promise.
|
|
197
|
+
*/
|
|
198
|
+
setDatawayURL(datawayUrl: string, clientToken: string): Promise<void>;
|
|
70
199
|
/**
|
|
71
200
|
* Bind user.
|
|
72
201
|
* @param userId user ID.
|
|
@@ -82,16 +211,16 @@ type FTMobileReactNativeType = {
|
|
|
82
211
|
*/
|
|
83
212
|
unbindRUMUserData(): Promise<void>;
|
|
84
213
|
/**
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
214
|
+
* Add custom global parameters. Applies to RUM and Log data
|
|
215
|
+
* @param context custom global parameters.
|
|
216
|
+
* @returns a Promise.
|
|
217
|
+
*/
|
|
89
218
|
appendGlobalContext(context: object): Promise<void>;
|
|
90
219
|
/**
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
220
|
+
* Add custom RUM global parameters. Applies to RUM data
|
|
221
|
+
* @param context custom RUM global parameters.
|
|
222
|
+
* @returns a Promise.
|
|
223
|
+
*/
|
|
95
224
|
appendRUMGlobalContext(context: object): Promise<void>;
|
|
96
225
|
/**
|
|
97
226
|
* Add custom RUM and Log global parameters. Applies to Log data
|
|
@@ -102,13 +231,13 @@ type FTMobileReactNativeType = {
|
|
|
102
231
|
/**
|
|
103
232
|
* Actively synchronize data. When `FTMobileConfig.autoSync=false` is configured, you need to actively trigger this method to synchronize data.
|
|
104
233
|
* @returns a Promise.
|
|
105
|
-
|
|
234
|
+
*/
|
|
106
235
|
flushSyncData(): Promise<void>;
|
|
107
236
|
/**
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
237
|
+
* Synchronize events in iOS Widget Extension, iOS only
|
|
238
|
+
* @param groupIdentifier app groupId
|
|
239
|
+
* @returns {groupIdentifier:string,datas:Array<object>} can be used to view data collected in Extension.
|
|
240
|
+
*/
|
|
112
241
|
trackEventFromExtension(identifier: string): Promise<object>;
|
|
113
242
|
/**
|
|
114
243
|
* Shut down objects currently running in the SDK
|
|
@@ -118,6 +247,28 @@ type FTMobileReactNativeType = {
|
|
|
118
247
|
* Clear all data that has not yet been uploaded to the server.
|
|
119
248
|
*/
|
|
120
249
|
clearAllData(): Promise<void>;
|
|
250
|
+
/**
|
|
251
|
+
* Add bridge context properties that will be automatically merged with local properties
|
|
252
|
+
* @param properties Object containing key-value pairs
|
|
253
|
+
*/
|
|
254
|
+
appendBridgeContext(properties: Record<string, any>): void;
|
|
255
|
+
/**
|
|
256
|
+
* Update remote configuration, after enabling remote configuration, you can call this method to update the configuration in real time.
|
|
257
|
+
*/
|
|
258
|
+
updateRemoteConfig(): Promise<FTRemoteConfigResult>;
|
|
259
|
+
/**
|
|
260
|
+
* Update remote configuration with minimum update interval, after enabling remote configuration, you can call this method to update the configuration in real time.
|
|
261
|
+
* This method is used to set the minimum update interval for remote configuration updates. If the time since the last update is less than the specified interval, the update will not be performed.
|
|
262
|
+
* @param interval minimum update interval, unit seconds
|
|
263
|
+
* @param rules Remote config override rules .Adjust the fetched remote configuration before application.
|
|
264
|
+
* @returns the result of the remote config update
|
|
265
|
+
*/
|
|
266
|
+
updateRemoteConfigWithMiniUpdateInterval(interval: number, rules?: Array<FTRemoteConfigOverrideRule>): Promise<FTRemoteConfigResult>;
|
|
267
|
+
/**
|
|
268
|
+
* Listen for auto remote configuration updates triggered by the native SDK.
|
|
269
|
+
* Manual updates are returned through the update Promise instead of this event.
|
|
270
|
+
*/
|
|
271
|
+
addRemoteConfigListener(listener: (result: FTRemoteConfigResult) => void): EmitterSubscription;
|
|
121
272
|
};
|
|
122
273
|
export declare const FTMobileReactNative: FTMobileReactNativeType;
|
|
123
274
|
export {};
|
|
@@ -8,8 +8,8 @@ export declare enum ErrorMonitorType {
|
|
|
8
8
|
cpu = 8
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
* Page monitoring supplement type
|
|
12
|
-
*/
|
|
11
|
+
* Page monitoring supplement type
|
|
12
|
+
*/
|
|
13
13
|
export declare enum DeviceMetricsMonitorType {
|
|
14
14
|
all = 4294967295,
|
|
15
15
|
battery = 2,
|
|
@@ -29,6 +29,24 @@ export declare enum FTRUMCacheDiscard {
|
|
|
29
29
|
discard = 0,
|
|
30
30
|
discardOldest = 1
|
|
31
31
|
}
|
|
32
|
+
export declare enum IOSCrashMonitoringType {
|
|
33
|
+
/** Monitor Mach kernel exceptions. */
|
|
34
|
+
machException = 1,
|
|
35
|
+
/** Monitor fatal signals. */
|
|
36
|
+
signal = 2,
|
|
37
|
+
/** Monitor uncaught C++ exceptions. */
|
|
38
|
+
cppException = 4,
|
|
39
|
+
/** Monitor uncaught Objective-C NSExceptions. */
|
|
40
|
+
nsException = 8,
|
|
41
|
+
/** Track and inject system information. */
|
|
42
|
+
system = 64,
|
|
43
|
+
/** Track and inject application state information. */
|
|
44
|
+
applicationState = 128,
|
|
45
|
+
/** All crash monitor types. */
|
|
46
|
+
all = 207,
|
|
47
|
+
/** High compatibility crash monitor types (excludes Mach exceptions). */
|
|
48
|
+
highCompatibility = 206
|
|
49
|
+
}
|
|
32
50
|
/**
|
|
33
51
|
* Set RUM tracking conditions.
|
|
34
52
|
* @param androidAppId appId, apply during monitoring
|
|
@@ -51,6 +69,9 @@ export declare enum FTRUMCacheDiscard {
|
|
|
51
69
|
* @param globalContext custom global parameters
|
|
52
70
|
* @param rumCacheLimitCount RUM max cache size, default 100_000
|
|
53
71
|
* @param rumDiscardStrategy RUM data discard strategy
|
|
72
|
+
* @param enableTraceWebView Set whether to enable WebView data collection, default true
|
|
73
|
+
* @param allowWebViewHost Set specific hosts or domains allowed to collect WebView data, nil means collect all
|
|
74
|
+
* @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.
|
|
54
75
|
*/
|
|
55
76
|
export interface FTRUMConfig {
|
|
56
77
|
androidAppId: string;
|
|
@@ -73,6 +94,9 @@ export interface FTRUMConfig {
|
|
|
73
94
|
globalContext?: object;
|
|
74
95
|
rumCacheLimitCount?: number;
|
|
75
96
|
rumDiscardStrategy?: FTRUMCacheDiscard;
|
|
97
|
+
enableTraceWebView?: boolean;
|
|
98
|
+
allowWebViewHost?: Array<string>;
|
|
99
|
+
iosCrashMonitoringType?: IOSCrashMonitoringType;
|
|
76
100
|
}
|
|
77
101
|
/**
|
|
78
102
|
* RUM Resource data.
|
|
@@ -129,12 +153,12 @@ type FTReactNativeRUMType = {
|
|
|
129
153
|
*/
|
|
130
154
|
startAction(actionName: string, actionType: string, property?: object): Promise<void>;
|
|
131
155
|
/**
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
156
|
+
* Add Action event. This type of data cannot be associated with Error, Resource, LongTask data, and has no discard logic.
|
|
157
|
+
* @param actionName action name
|
|
158
|
+
* @param actionType action type
|
|
159
|
+
* @param property event context (optional)
|
|
160
|
+
* @returns a Promise.
|
|
161
|
+
*/
|
|
138
162
|
addAction(actionName: string, actionType: string, property?: object): Promise<void>;
|
|
139
163
|
/**
|
|
140
164
|
* view load duration.
|