@multiplayer-app/session-recorder-react-native 0.0.1-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 (128) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +226 -0
  3. package/babel.config.js +13 -0
  4. package/dist/config/masking.d.ts +30 -0
  5. package/dist/config/masking.js +1 -0
  6. package/dist/config/masking.js.map +1 -0
  7. package/dist/expo.d.ts +11 -0
  8. package/dist/expo.js +1 -0
  9. package/dist/expo.js.map +1 -0
  10. package/dist/index.d.ts +11 -0
  11. package/dist/index.js +1 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/otel/helpers.d.ts +3 -0
  14. package/dist/otel/helpers.js +1 -0
  15. package/dist/otel/helpers.js.map +1 -0
  16. package/dist/otel/index.d.ts +40 -0
  17. package/dist/otel/index.js +1 -0
  18. package/dist/otel/index.js.map +1 -0
  19. package/dist/otel/instrumentations/gestureInstrumentation.d.ts +15 -0
  20. package/dist/otel/instrumentations/gestureInstrumentation.js +1 -0
  21. package/dist/otel/instrumentations/gestureInstrumentation.js.map +1 -0
  22. package/dist/otel/instrumentations/index.d.ts +5 -0
  23. package/dist/otel/instrumentations/index.js +1 -0
  24. package/dist/otel/instrumentations/index.js.map +1 -0
  25. package/dist/otel/instrumentations/reactNativeInstrumentation.d.ts +8 -0
  26. package/dist/otel/instrumentations/reactNativeInstrumentation.js +1 -0
  27. package/dist/otel/instrumentations/reactNativeInstrumentation.js.map +1 -0
  28. package/dist/otel/instrumentations/reactNavigationInstrumentation.d.ts +12 -0
  29. package/dist/otel/instrumentations/reactNavigationInstrumentation.js +1 -0
  30. package/dist/otel/instrumentations/reactNavigationInstrumentation.js.map +1 -0
  31. package/dist/recorder/gestureRecorder.d.ts +42 -0
  32. package/dist/recorder/gestureRecorder.js +1 -0
  33. package/dist/recorder/gestureRecorder.js.map +1 -0
  34. package/dist/recorder/index.d.ts +16 -0
  35. package/dist/recorder/index.js +1 -0
  36. package/dist/recorder/index.js.map +1 -0
  37. package/dist/recorder/navigationTracker.d.ts +43 -0
  38. package/dist/recorder/navigationTracker.js +1 -0
  39. package/dist/recorder/navigationTracker.js.map +1 -0
  40. package/dist/recorder/screenRecorder.d.ts +46 -0
  41. package/dist/recorder/screenRecorder.js +1 -0
  42. package/dist/recorder/screenRecorder.js.map +1 -0
  43. package/dist/services/api.service.d.ts +20 -0
  44. package/dist/services/api.service.js +1 -0
  45. package/dist/services/api.service.js.map +1 -0
  46. package/dist/services/storage.service.d.ts +23 -0
  47. package/dist/services/storage.service.js +1 -0
  48. package/dist/services/storage.service.js.map +1 -0
  49. package/dist/sessionRecorder.d.ts +54 -0
  50. package/dist/sessionRecorder.js +1 -0
  51. package/dist/sessionRecorder.js.map +1 -0
  52. package/dist/types/index.d.ts +81 -0
  53. package/dist/types/index.js +1 -0
  54. package/dist/types/index.js.map +1 -0
  55. package/dist/utils/platform.d.ts +9 -0
  56. package/dist/utils/platform.js +1 -0
  57. package/dist/utils/platform.js.map +1 -0
  58. package/dist/version.d.ts +1 -0
  59. package/dist/version.js +1 -0
  60. package/dist/version.js.map +1 -0
  61. package/examples/sample-expo-app/README.md +142 -0
  62. package/examples/sample-expo-app/app/(tabs)/_layout.tsx +60 -0
  63. package/examples/sample-expo-app/app/(tabs)/explore.tsx +110 -0
  64. package/examples/sample-expo-app/app/(tabs)/index.tsx +125 -0
  65. package/examples/sample-expo-app/app/(tabs)/posts.tsx +96 -0
  66. package/examples/sample-expo-app/app/(tabs)/users.tsx +131 -0
  67. package/examples/sample-expo-app/app/+not-found.tsx +32 -0
  68. package/examples/sample-expo-app/app/_layout.tsx +53 -0
  69. package/examples/sample-expo-app/app/post/[id].tsx +199 -0
  70. package/examples/sample-expo-app/app/user/[id].tsx +270 -0
  71. package/examples/sample-expo-app/app.json +42 -0
  72. package/examples/sample-expo-app/assets/fonts/SpaceMono-Regular.ttf +0 -0
  73. package/examples/sample-expo-app/assets/images/adaptive-icon.png +0 -0
  74. package/examples/sample-expo-app/assets/images/favicon.png +0 -0
  75. package/examples/sample-expo-app/assets/images/icon.png +0 -0
  76. package/examples/sample-expo-app/assets/images/partial-react-logo.png +0 -0
  77. package/examples/sample-expo-app/assets/images/react-logo.png +0 -0
  78. package/examples/sample-expo-app/assets/images/react-logo@2x.png +0 -0
  79. package/examples/sample-expo-app/assets/images/react-logo@3x.png +0 -0
  80. package/examples/sample-expo-app/assets/images/splash-icon.png +0 -0
  81. package/examples/sample-expo-app/components/Collapsible.tsx +45 -0
  82. package/examples/sample-expo-app/components/ErrorView.tsx +52 -0
  83. package/examples/sample-expo-app/components/ExternalLink.tsx +24 -0
  84. package/examples/sample-expo-app/components/HapticTab.tsx +18 -0
  85. package/examples/sample-expo-app/components/HelloWave.tsx +40 -0
  86. package/examples/sample-expo-app/components/LoadingSpinner.tsx +34 -0
  87. package/examples/sample-expo-app/components/ParallaxScrollView.tsx +82 -0
  88. package/examples/sample-expo-app/components/ThemedText.tsx +60 -0
  89. package/examples/sample-expo-app/components/ThemedView.tsx +14 -0
  90. package/examples/sample-expo-app/components/ui/IconSymbol.ios.tsx +32 -0
  91. package/examples/sample-expo-app/components/ui/IconSymbol.tsx +41 -0
  92. package/examples/sample-expo-app/components/ui/TabBarBackground.ios.tsx +19 -0
  93. package/examples/sample-expo-app/components/ui/TabBarBackground.tsx +6 -0
  94. package/examples/sample-expo-app/constants/Colors.ts +26 -0
  95. package/examples/sample-expo-app/eslint.config.js +10 -0
  96. package/examples/sample-expo-app/hooks/useApi.ts +41 -0
  97. package/examples/sample-expo-app/hooks/useColorScheme.ts +1 -0
  98. package/examples/sample-expo-app/hooks/useColorScheme.web.ts +21 -0
  99. package/examples/sample-expo-app/hooks/useThemeColor.ts +21 -0
  100. package/examples/sample-expo-app/metro.config.js +26 -0
  101. package/examples/sample-expo-app/package-lock.json +26296 -0
  102. package/examples/sample-expo-app/package.json +59 -0
  103. package/examples/sample-expo-app/scripts/reset-project.js +112 -0
  104. package/examples/sample-expo-app/services/api.ts +98 -0
  105. package/examples/sample-expo-app/tsconfig.json +17 -0
  106. package/examples/sample-expo-app/utils/navigation.ts +19 -0
  107. package/package.json +98 -0
  108. package/src/config/masking.ts +78 -0
  109. package/src/expo.ts +41 -0
  110. package/src/index.ts +20 -0
  111. package/src/otel/helpers.ts +21 -0
  112. package/src/otel/index.ts +348 -0
  113. package/src/otel/instrumentations/gestureInstrumentation.ts +141 -0
  114. package/src/otel/instrumentations/index.ts +86 -0
  115. package/src/otel/instrumentations/reactNativeInstrumentation.ts +164 -0
  116. package/src/otel/instrumentations/reactNavigationInstrumentation.ts +114 -0
  117. package/src/recorder/gestureRecorder.ts +429 -0
  118. package/src/recorder/index.ts +71 -0
  119. package/src/recorder/navigationTracker.ts +447 -0
  120. package/src/recorder/screenRecorder.ts +411 -0
  121. package/src/services/api.service.ts +78 -0
  122. package/src/services/storage.service.ts +130 -0
  123. package/src/sessionRecorder.ts +367 -0
  124. package/src/types/expo.d.ts +23 -0
  125. package/src/types/index.ts +88 -0
  126. package/src/utils/platform.ts +75 -0
  127. package/src/version.ts +1 -0
  128. package/tsconfig.json +24 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Multiplayer Software, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,226 @@
1
+ # Multiplayer Session Recorder for React Native
2
+
3
+ The Multiplayer Session Recorder for React Native provides session recording capabilities for React Native applications, including gesture tracking, navigation monitoring, and screen recording. It also includes full support for Expo applications.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @multiplayer-app/session-recorder-react-native
9
+ # or
10
+ yarn add @multiplayer-app/session-recorder-react-native
11
+ ```
12
+
13
+ ### Required Dependencies
14
+
15
+ This package requires the following dependencies to be installed in your React Native application:
16
+
17
+ ```bash
18
+ npm install @react-native-async-storage/async-storage @react-native-community/netinfo react-native-mmkv
19
+ # or
20
+ yarn add @react-native-async-storage/async-storage @react-native-community/netinfo react-native-mmkv
21
+ ```
22
+
23
+ **Note**: If these dependencies are not installed, the session recorder will throw clear error messages indicating which dependencies are missing.
24
+
25
+ ### Expo Installation
26
+
27
+ For Expo applications, the package automatically detects the Expo environment and provides Expo-specific optimizations:
28
+
29
+ ```bash
30
+ npx expo install @multiplayer-app/session-recorder-react-native
31
+ ```
32
+
33
+ The package will automatically detect if you're running in an Expo environment and provide the appropriate configuration.
34
+
35
+ ## Setup
36
+
37
+ ### Basic Configuration
38
+
39
+ ```javascript
40
+ import SessionRecorder from '@multiplayer-app/session-recorder-react-native'
41
+
42
+ SessionRecorder.init({
43
+ application: 'my-react-native-app',
44
+ version: '1.0.0',
45
+ environment: 'production',
46
+ apiKey: 'MULTIPLAYER_OTLP_KEY',
47
+ recordGestures: true,
48
+ recordNavigation: true,
49
+ recordScreen: false // Requires additional permissions
50
+ })
51
+ ```
52
+
53
+ ### Expo Configuration
54
+
55
+ For Expo applications, the package automatically detects the Expo environment. You can also explicitly specify the platform:
56
+
57
+ ```javascript
58
+ import SessionRecorder from '@multiplayer-app/session-recorder-react-native'
59
+
60
+ SessionRecorder.init({
61
+ application: 'my-expo-app',
62
+ version: '1.0.0',
63
+ environment: 'production',
64
+ apiKey: 'MULTIPLAYER_OTLP_KEY',
65
+ platform: 'expo', // Optional: explicitly set platform
66
+ recordGestures: true,
67
+ recordNavigation: true,
68
+ recordScreen: false
69
+ })
70
+ ```
71
+
72
+ The package will automatically:
73
+
74
+ - Detect Expo environment using `expo-constants`
75
+ - Add Expo-specific attributes to traces
76
+ - Optimize performance for Expo runtime
77
+
78
+ ### React Navigation Integration
79
+
80
+ ```javascript
81
+ import { NavigationContainer } from '@react-navigation/native'
82
+ import SessionRecorder from '@multiplayer-app/session-recorder-react-native'
83
+
84
+ export default function App() {
85
+ const navigationRef = useRef(null)
86
+
87
+ return (
88
+ <NavigationContainer
89
+ ref={navigationRef}
90
+ onReady={() => {
91
+ SessionRecorder.setNavigationRef(navigationRef.current)
92
+ }}
93
+ >
94
+ {/* Your navigation stack */}
95
+ </NavigationContainer>
96
+ )
97
+ }
98
+ ```
99
+
100
+ ### Manual Control
101
+
102
+ ```javascript
103
+ // Start recording
104
+ SessionRecorder.start()
105
+
106
+ // Pause recording
107
+ SessionRecorder.pause()
108
+
109
+ // Resume recording
110
+ SessionRecorder.resume()
111
+
112
+ // Stop recording
113
+ SessionRecorder.stop('Session completed')
114
+
115
+ // Save continuous recording
116
+ SessionRecorder.save()
117
+ ```
118
+
119
+ ## Features
120
+
121
+ - **Gesture Recording**: Track taps, swipes, and other touch interactions
122
+ - **Navigation Tracking**: Monitor screen transitions and navigation state
123
+ - **Screen Recording**: Capture periodic screenshots (requires permissions)
124
+ - **OpenTelemetry Integration**: Correlate with backend traces
125
+ - **HTTP Masking**: Protect sensitive data in request/response headers and bodies
126
+ - **Session Management**: Start, pause, resume, and stop sessions
127
+ - **Expo Support**: Full compatibility with Expo applications including automatic environment detection
128
+
129
+ ## Permissions
130
+
131
+ For screen recording, you'll need to add permissions to your app:
132
+
133
+ ### iOS (Info.plist)
134
+
135
+ ```xml
136
+ <key>NSCameraUsageDescription</key>
137
+ <string>This app needs camera access to record screen interactions</string>
138
+ ```
139
+
140
+ ### Android (AndroidManifest.xml)
141
+
142
+ ```xml
143
+ <uses-permission android:name="android.permission.CAMERA" />
144
+ <uses-permission android:name="android.permission.RECORD_AUDIO" />
145
+ ```
146
+
147
+ ## Configuration Options
148
+
149
+ | Option | Type | Default | Description |
150
+ | ------------------ | ------- | ------- | --------------------------------------- |
151
+ | `apiKey` | string | - | Your Multiplayer API key |
152
+ | `application` | string | - | Application name |
153
+ | `version` | string | - | Application version |
154
+ | `environment` | string | - | Environment (production, staging, etc.) |
155
+ | `platform` | string | auto | Platform ('react-native' or 'expo') |
156
+ | `recordGestures` | boolean | true | Enable gesture recording |
157
+ | `recordNavigation` | boolean | true | Enable navigation tracking |
158
+ | `recordScreen` | boolean | false | Enable screen recording |
159
+ | `sampleTraceRatio` | number | 0.15 | Trace sampling ratio |
160
+ | `captureBody` | boolean | true | Capture request/response bodies |
161
+ | `captureHeaders` | boolean | true | Capture request/response headers |
162
+ | `httpMasking` | object | - | HTTP masking configuration |
163
+
164
+ ## Advanced Configuration
165
+
166
+ ```javascript
167
+ SessionRecorder.init({
168
+ application: 'my-app',
169
+ version: '1.0.0',
170
+ environment: 'production',
171
+ apiKey: 'MULTIPLAYER_OTLP_KEY',
172
+
173
+ // Recording options
174
+ recordGestures: true,
175
+ recordNavigation: true,
176
+ recordScreen: false,
177
+
178
+ // Network monitoring
179
+ ignoreUrls: [/https:\/\/analytics\.example\.com/],
180
+ captureBody: true,
181
+ captureHeaders: true,
182
+ maxCapturingHttpPayloadSize: 100000,
183
+
184
+ // HTTP masking
185
+ httpMasking: {
186
+ isContentMaskingEnabled: true,
187
+ maskHeadersList: ['authorization', 'cookie', 'x-api-key'],
188
+ maskBodyFieldsList: ['password', 'token', 'secret']
189
+ },
190
+
191
+ // Session attributes
192
+ sessionAttributes: {
193
+ userId: '12345',
194
+ userType: 'premium'
195
+ }
196
+ })
197
+ ```
198
+
199
+ ## Troubleshooting
200
+
201
+ ### Common Issues
202
+
203
+ 1. **Screen recording not working**: Ensure you have the necessary permissions
204
+ 2. **Navigation tracking not working**: Make sure you've set the navigation ref
205
+ 3. **Gesture recording issues**: Check that react-native-gesture-handler is properly configured
206
+ 4. **Expo environment not detected**: Ensure `expo-constants` is installed and accessible
207
+ 5. **Expo build issues**: Make sure you're using the correct entry point for Expo applications
208
+
209
+ ### Debug Mode
210
+
211
+ Enable debug logging:
212
+
213
+ ```javascript
214
+ SessionRecorder.init({
215
+ // ... other config
216
+ debug: true
217
+ })
218
+ ```
219
+
220
+ ## Contributing
221
+
222
+ Please read our contributing guidelines before submitting pull requests.
223
+
224
+ ## License
225
+
226
+ MIT License - see LICENSE file for details.
@@ -0,0 +1,13 @@
1
+ module.exports = {
2
+ presets: [
3
+ '@react-native/babel-preset',
4
+ '@babel/preset-env',
5
+ '@babel/preset-typescript',
6
+ ['@babel/preset-react', { runtime: 'automatic' }],
7
+ ],
8
+ plugins: [
9
+ ['@babel/plugin-transform-private-property-in-object', { loose: true }],
10
+ ['@babel/plugin-transform-private-methods', { loose: true }],
11
+ ['@babel/plugin-transform-class-properties', { loose: true }],
12
+ ],
13
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * HTTP Masking Configuration Interface
3
+ * Focused only on HTTP request/response masking for OpenTelemetry traces
4
+ */
5
+ export interface HttpMaskingConfig {
6
+ /** If true, enables masking for debug span payload in traces */
7
+ isContentMaskingEnabled?: boolean;
8
+ /** Custom function for masking body in traces */
9
+ maskBody?: (payload: any, span: any) => any;
10
+ /** Custom function for masking headers in traces */
11
+ maskHeaders?: (headers: any, span: any) => any;
12
+ /** List of body fields to mask in traces */
13
+ maskBodyFieldsList?: string[];
14
+ /** List of headers to mask in traces */
15
+ maskHeadersList?: string[];
16
+ /** List of headers to include in traces (if specified, only these headers will be captured) */
17
+ headersToInclude?: string[];
18
+ /** List of headers to exclude from traces */
19
+ headersToExclude?: string[];
20
+ }
21
+ /**
22
+ * Default HTTP masking configuration
23
+ */
24
+ export declare const DEFAULT_HTTP_MASKING_CONFIG: HttpMaskingConfig;
25
+ /**
26
+ * Get HTTP masking configuration
27
+ * @param masking Optional masking configuration
28
+ * @returns Processed HTTP masking configuration
29
+ */
30
+ export declare const getHttpMaskingConfig: (masking?: HttpMaskingConfig) => HttpMaskingConfig;
@@ -0,0 +1 @@
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.getHttpMaskingConfig=exports.DEFAULT_HTTP_MASKING_CONFIG=void 0;var _typeof2=_interopRequireDefault(require("@babel/runtime/helpers/typeof"));var _sessionRecorderCommon=require("@multiplayer-app/session-recorder-common");var mask=_sessionRecorderCommon.SessionRecorderSdk.mask,sensitiveFields=_sessionRecorderCommon.SessionRecorderSdk.sensitiveFields,sensitiveHeaders=_sessionRecorderCommon.SessionRecorderSdk.sensitiveHeaders;var DEFAULT_HTTP_MASKING_CONFIG=exports.DEFAULT_HTTP_MASKING_CONFIG={isContentMaskingEnabled:true,maskBody:mask(sensitiveFields),maskHeaders:mask(sensitiveHeaders),maskBodyFieldsList:sensitiveFields,maskHeadersList:sensitiveHeaders,headersToInclude:[],headersToExclude:[]};var isValidArray=function isValidArray(value,defaultValue){return Array.isArray(value)?value:defaultValue;};var isValidBoolean=function isValidBoolean(value,defaultValue){return typeof value==='boolean'?value:defaultValue;};var isValidFunction=function isValidFunction(value,defaultValue){return typeof value==='function'?value:defaultValue;};var getHttpMaskingConfig=exports.getHttpMaskingConfig=function getHttpMaskingConfig(masking){var _a,_b,_c;var baseMasking=DEFAULT_HTTP_MASKING_CONFIG;if((0,_typeof2["default"])(masking)!=='object'){return baseMasking;}var maskHeadersList=isValidArray(masking.maskHeadersList,sensitiveHeaders);var maskBodyFieldsList=isValidArray(masking.maskBodyFieldsList,sensitiveFields);return{isContentMaskingEnabled:isValidBoolean(masking.isContentMaskingEnabled,(_a=baseMasking.isContentMaskingEnabled)!==null&&_a!==void 0?_a:true),maskBody:isValidFunction(masking.maskBody,mask(maskBodyFieldsList)),maskHeaders:isValidFunction(masking.maskHeaders,mask(maskHeadersList)),maskBodyFieldsList:maskBodyFieldsList,maskHeadersList:maskHeadersList,headersToInclude:isValidArray(masking.headersToInclude,(_b=baseMasking.headersToInclude)!==null&&_b!==void 0?_b:[]),headersToExclude:isValidArray(masking.headersToExclude,(_c=baseMasking.headersToExclude)!==null&&_c!==void 0?_c:[])};};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masking.js","sourceRoot":"","sources":["../../src/config/masking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAA;AAE7E,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,kBAAkB,CAAA;AAuBtE;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAsB;IAC5D,uBAAuB,EAAE,IAAI;IAC7B,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC;IAC/B,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC;IACnC,kBAAkB,EAAE,eAAe;IACnC,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,EAAE;IACpB,gBAAgB,EAAE,EAAE;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAE,YAAmB,EAAS,EAAE;IAC5E,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAA;AACpD,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,KAA0B,EAAE,YAAqB,EAAW,EAAE;IACpF,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAA;AAC1D,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,KAAU,EAAE,YAAiB,EAAO,EAAE;IAC7D,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAA;AAC3D,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAA2B,EAAqB,EAAE;;IACrF,MAAM,WAAW,GAAG,2BAA2B,CAAA;IAE/C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAA;IAC/E,MAAM,kBAAkB,GAAG,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAA;IAEpF,OAAO;QACL,uBAAuB,EAAE,cAAc,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAA,WAAW,CAAC,uBAAuB,mCAAI,IAAI,CAAC;QACrH,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACrE,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACxE,kBAAkB;QAClB,eAAe;QACf,gBAAgB,EAAE,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAA,WAAW,CAAC,gBAAgB,mCAAI,EAAE,CAAC;QAC5F,gBAAgB,EAAE,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAA,WAAW,CAAC,gBAAgB,mCAAI,EAAE,CAAC;KAC7F,CAAA;AACH,CAAC,CAAA"}
package/dist/expo.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { SessionRecorder } from './sessionRecorder';
2
+ declare const SessionRecorderExpoInstance: SessionRecorder;
3
+ export default SessionRecorderExpoInstance;
4
+ export * from './types';
5
+ export { SessionRecorder } from './sessionRecorder';
6
+ export { TracerReactNativeSDK } from './otel';
7
+ export { RecorderReactNativeSDK } from './recorder';
8
+ export { ApiService } from './services/api.service';
9
+ export { StorageService } from './services/storage.service';
10
+ export * from '@multiplayer-app/session-recorder-common';
11
+ export { isExpoEnvironment, getPlatformAttributes } from './utils/platform';
package/dist/expo.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});var _exportNames={SessionRecorder:true,isExpoEnvironment:true,getPlatformAttributes:true,TracerReactNativeSDK:true,RecorderReactNativeSDK:true,ApiService:true,StorageService:true};Object.defineProperty(exports,"ApiService",{enumerable:true,get:function get(){return _api.ApiService;}});Object.defineProperty(exports,"RecorderReactNativeSDK",{enumerable:true,get:function get(){return _recorder.RecorderReactNativeSDK;}});Object.defineProperty(exports,"SessionRecorder",{enumerable:true,get:function get(){return _sessionRecorder.SessionRecorder;}});Object.defineProperty(exports,"StorageService",{enumerable:true,get:function get(){return _storage.StorageService;}});Object.defineProperty(exports,"TracerReactNativeSDK",{enumerable:true,get:function get(){return _otel.TracerReactNativeSDK;}});exports["default"]=void 0;Object.defineProperty(exports,"getPlatformAttributes",{enumerable:true,get:function get(){return _platform.getPlatformAttributes;}});Object.defineProperty(exports,"isExpoEnvironment",{enumerable:true,get:function get(){return _platform.isExpoEnvironment;}});var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _sessionRecorder=require("./sessionRecorder");var _platform=require("./utils/platform");var _types=require("./types");Object.keys(_types).forEach(function(key){if(key==="default"||key==="__esModule")return;if(Object.prototype.hasOwnProperty.call(_exportNames,key))return;if(key in exports&&exports[key]===_types[key])return;Object.defineProperty(exports,key,{enumerable:true,get:function get(){return _types[key];}});});var _otel=require("./otel");var _recorder=require("./recorder");var _api=require("./services/api.service");var _storage=require("./services/storage.service");var _sessionRecorderCommon=require("@multiplayer-app/session-recorder-common");Object.keys(_sessionRecorderCommon).forEach(function(key){if(key==="default"||key==="__esModule")return;if(Object.prototype.hasOwnProperty.call(_exportNames,key))return;if(key in exports&&exports[key]===_sessionRecorderCommon[key])return;Object.defineProperty(exports,key,{enumerable:true,get:function get(){return _sessionRecorderCommon[key];}});});function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){(0,_defineProperty2["default"])(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}var SessionRecorderExpoInstance=new _sessionRecorder.SessionRecorder();var originalInit=SessionRecorderExpoInstance.init.bind(SessionRecorderExpoInstance);SessionRecorderExpoInstance.init=function(){var _ref=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(options){var expoOptions;return _regenerator["default"].wrap(function(_context){while(1)switch(_context.prev=_context.next){case 0:expoOptions=_objectSpread(_objectSpread({},options),{},{platform:'expo'});if((0,_platform.isExpoEnvironment)()){console.log('Multiplayer Session Recorder: Running in Expo environment');}return _context.abrupt("return",originalInit(expoOptions));case 1:case"end":return _context.stop();}},_callee);}));return function(_x){return _ref.apply(this,arguments);};}();var _default=exports["default"]=SessionRecorderExpoInstance;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expo.js","sourceRoot":"","sources":["../src/expo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,yCAAyC;AACzC,MAAM,2BAA2B,GAAG,IAAI,eAAe,EAAE,CAAA;AAEzD,mCAAmC;AACnC,MAAM,YAAY,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;AAEvF,2BAA2B,CAAC,IAAI,GAAG,KAAK,WAAU,OAAY;IAC5D,kCAAkC;IAClC,MAAM,WAAW,GAAG;QAClB,GAAG,OAAO;QACV,6BAA6B;QAC7B,QAAQ,EAAE,MAAM;KACjB,CAAA;IAED,iCAAiC;IACjC,IAAI,iBAAiB,EAAE,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,YAAY,CAAC,WAAW,CAAC,CAAA;AAClC,CAAC,CAAA;AAED,sCAAsC;AACtC,eAAe,2BAA2B,CAAA;AAE1C,2BAA2B;AAC3B,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,sBAAsB;AACtB,cAAc,0CAA0C,CAAA;AAExD,iCAAiC;AACjC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { SessionRecorder } from './sessionRecorder';
2
+ declare const SessionRecorderInstance: SessionRecorder;
3
+ export default SessionRecorderInstance;
4
+ export * from './types';
5
+ export { SessionRecorder } from './sessionRecorder';
6
+ export { TracerReactNativeSDK } from './otel';
7
+ export { RecorderReactNativeSDK } from './recorder';
8
+ export { ApiService } from './services/api.service';
9
+ export { StorageService } from './services/storage.service';
10
+ export * from '@multiplayer-app/session-recorder-common';
11
+ export { isExpoEnvironment, getPlatformAttributes, detectPlatform } from './utils/platform';
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});var _exportNames={SessionRecorder:true,TracerReactNativeSDK:true,RecorderReactNativeSDK:true,ApiService:true,StorageService:true,isExpoEnvironment:true,getPlatformAttributes:true,detectPlatform:true};Object.defineProperty(exports,"ApiService",{enumerable:true,get:function get(){return _api.ApiService;}});Object.defineProperty(exports,"RecorderReactNativeSDK",{enumerable:true,get:function get(){return _recorder.RecorderReactNativeSDK;}});Object.defineProperty(exports,"SessionRecorder",{enumerable:true,get:function get(){return _sessionRecorder.SessionRecorder;}});Object.defineProperty(exports,"StorageService",{enumerable:true,get:function get(){return _storage.StorageService;}});Object.defineProperty(exports,"TracerReactNativeSDK",{enumerable:true,get:function get(){return _otel.TracerReactNativeSDK;}});exports["default"]=void 0;Object.defineProperty(exports,"detectPlatform",{enumerable:true,get:function get(){return _platform.detectPlatform;}});Object.defineProperty(exports,"getPlatformAttributes",{enumerable:true,get:function get(){return _platform.getPlatformAttributes;}});Object.defineProperty(exports,"isExpoEnvironment",{enumerable:true,get:function get(){return _platform.isExpoEnvironment;}});var _sessionRecorder=require("./sessionRecorder");var _types=require("./types");Object.keys(_types).forEach(function(key){if(key==="default"||key==="__esModule")return;if(Object.prototype.hasOwnProperty.call(_exportNames,key))return;if(key in exports&&exports[key]===_types[key])return;Object.defineProperty(exports,key,{enumerable:true,get:function get(){return _types[key];}});});var _otel=require("./otel");var _recorder=require("./recorder");var _api=require("./services/api.service");var _storage=require("./services/storage.service");var _sessionRecorderCommon=require("@multiplayer-app/session-recorder-common");Object.keys(_sessionRecorderCommon).forEach(function(key){if(key==="default"||key==="__esModule")return;if(Object.prototype.hasOwnProperty.call(_exportNames,key))return;if(key in exports&&exports[key]===_sessionRecorderCommon[key])return;Object.defineProperty(exports,key,{enumerable:true,get:function get(){return _sessionRecorderCommon[key];}});});var _platform=require("./utils/platform");var SessionRecorderInstance=new _sessionRecorder.SessionRecorder();var _default=exports["default"]=SessionRecorderInstance;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,uBAAuB,GAAG,IAAI,eAAe,EAAE,CAAA;AAErD,iCAAiC;AACjC,eAAe,uBAAuB,CAAA;AAEtC,2BAA2B;AAC3B,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,sBAAsB;AACtB,cAAc,0CAA0C,CAAA;AAExD,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export declare function getExporterEndpoint(endpoint?: string): string;
2
+ export declare function processHttpPayload(payload: string, maxSize?: number): string;
3
+ export declare function headersToObject(headers: Headers): Record<string, string>;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getExporterEndpoint=getExporterEndpoint;exports.headersToObject=headersToObject;exports.processHttpPayload=processHttpPayload;function getExporterEndpoint(endpoint){return endpoint||'http://localhost:4318/v1/traces';}function processHttpPayload(payload){var maxSize=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1000000;if(payload.length<=maxSize){return payload;}return payload.substring(0,maxSize)+'... [truncated]';}function headersToObject(headers){var result={};headers.forEach(function(value,key){result[key]=value;});return result;}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/otel/helpers.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,mBAAmB,CAAC,QAAiB;IACnD,OAAO,QAAQ,IAAI,iCAAiC,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,UAAkB,OAAO;IAC3E,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,qCAAqC;IACrC,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE;QAC7C,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACrB,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { SessionType } from '@multiplayer-app/session-recorder-common';
2
+ import { TracerReactNativeConfig } from '../types';
3
+ export declare class TracerReactNativeSDK {
4
+ private tracerProvider?;
5
+ private config?;
6
+ private httpMaskingConfig;
7
+ private sessionId;
8
+ private idGenerator;
9
+ private exporter?;
10
+ private navigationInstrumentation;
11
+ private gestureInstrumentation;
12
+ private isInitialized;
13
+ constructor();
14
+ private _setSessionId;
15
+ init(options: TracerReactNativeConfig): void;
16
+ private _getSpanSessionIdProcessor;
17
+ setSessionId(sessionId: string, sessionType: SessionType): void;
18
+ setNavigationRef(ref: any): void;
19
+ recordNavigate(routeName: string, params?: Record<string, any>): void;
20
+ recordGoBack(): void;
21
+ recordReset(routes: any[]): void;
22
+ enableGestureTracking(): void;
23
+ disableGestureTracking(): void;
24
+ recordTap(x: number, y: number, target?: string): void;
25
+ recordSwipe(direction: string, target?: string): void;
26
+ recordPinch(scale: number, target?: string): void;
27
+ recordPan(deltaX: number, deltaY: number, target?: string): void;
28
+ recordLongPress(duration: number, target?: string): void;
29
+ recordGestureError(error: Error, gestureType: string): void;
30
+ startTrace(name: string, attributes?: Record<string, any>): any;
31
+ endTrace(span: any, status?: any): void;
32
+ captureException(error: Error, context?: Record<string, any>): void;
33
+ recordNetworkRequest(url: string, method: string, statusCode: number, duration: number): void;
34
+ recordScreenLoad(screenName: string, loadTime: number): void;
35
+ recordMemoryUsage(usedMemory: number, totalMemory: number): void;
36
+ recordBatteryLevel(level: number, isCharging: boolean): void;
37
+ recordAppStateChange(state: string): void;
38
+ recordCustomEvent(eventName: string, attributes?: Record<string, any>): void;
39
+ shutdown(): Promise<void>;
40
+ }
@@ -0,0 +1 @@
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _typeof=require("@babel/runtime/helpers/typeof");Object.defineProperty(exports,"__esModule",{value:true});exports.TracerReactNativeSDK=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _resources=require("@opentelemetry/resources");var _core=require("@opentelemetry/core");var _sdkTraceBase=require("@opentelemetry/sdk-trace-base");var SemanticAttributes=_interopRequireWildcard(require("@opentelemetry/semantic-conventions"));var _instrumentation=require("@opentelemetry/instrumentation");var _sessionRecorderCommon=require("@multiplayer-app/session-recorder-common");var _instrumentations=require("./instrumentations");var _helpers=require("./helpers");var _reactNavigationInstrumentation=require("./instrumentations/reactNavigationInstrumentation");var _gestureInstrumentation=require("./instrumentations/gestureInstrumentation");var _masking=require("../config/masking");var _platform=require("../utils/platform");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap(),n=new WeakMap();return(_interopRequireWildcard=function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var o,i,f={__proto__:null,"default":e};if(null===e||"object"!=_typeof(e)&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f);}for(var _t2 in e)"default"!==_t2&&{}.hasOwnProperty.call(e,_t2)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,_t2))&&(i.get||i.set)?o(f,_t2,i):f[_t2]=e[_t2]);return f;})(e,t);}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){(0,_defineProperty2["default"])(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}var ReactNativeTracerProvider=function(){function ReactNativeTracerProvider(options){(0,_classCallCheck2["default"])(this,ReactNativeTracerProvider);this.resource=options.resource;this.idGenerator=options.idGenerator;this.sampler=options.sampler;this.spanProcessors=options.spanProcessors;this.propagator=options.propagator;}return(0,_createClass2["default"])(ReactNativeTracerProvider,[{key:"register",value:function register(options){console.log('ReactNativeTracerProvider registered');}},{key:"getTracer",value:function getTracer(name,version,options){return{startSpan:function startSpan(name,options){return{setAttribute:function setAttribute(key,value){},setStatus:function setStatus(status){},end:function end(){},recordException:function recordException(error){}};}};}}]);}();var TracerReactNativeSDK=exports.TracerReactNativeSDK=function(){function TracerReactNativeSDK(){(0,_classCallCheck2["default"])(this,TracerReactNativeSDK);this.sessionId='';this.isInitialized=false;this.idGenerator=new _sessionRecorderCommon.SessionRecorderIdGenerator();this.navigationInstrumentation=new _reactNavigationInstrumentation.ReactNavigationInstrumentation();this.gestureInstrumentation=new _gestureInstrumentation.GestureInstrumentation();}return(0,_createClass2["default"])(TracerReactNativeSDK,[{key:"_setSessionId",value:function _setSessionId(sessionId){var sessionType=arguments.length>1&&arguments[1]!==undefined?arguments[1]:_sessionRecorderCommon.SessionType.PLAIN;this.sessionId=sessionId;this.idGenerator.setSessionId(sessionId,sessionType);}},{key:"init",value:function init(options){if(this.isInitialized){console.warn('TracerReactNativeSDK already initialized');return;}this.config=options;this.httpMaskingConfig=(0,_masking.getHttpMaskingConfig)(options.httpMasking);var _this$config=this.config,application=_this$config.application,version=_this$config.version,environment=_this$config.environment;var _require=require('@opentelemetry/exporter-trace-otlp-http'),OTLPTraceExporter=_require.OTLPTraceExporter;this.exporter=new OTLPTraceExporter({url:(0,_helpers.getExporterEndpoint)(options.exporterEndpoint),headers:{'Authorization':"Bearer ".concat(options.apiKey)}});this.tracerProvider=new ReactNativeTracerProvider({resource:(0,_resources.resourceFromAttributes)(_objectSpread((0,_defineProperty2["default"])((0,_defineProperty2["default"])((0,_defineProperty2["default"])({},SemanticAttributes.SEMRESATTRS_SERVICE_NAME,application),SemanticAttributes.SEMRESATTRS_SERVICE_VERSION,version),SemanticAttributes.SEMRESATTRS_DEPLOYMENT_ENVIRONMENT,environment),(0,_platform.getPlatformAttributes)())),idGenerator:this.idGenerator,sampler:new _sessionRecorderCommon.SessionRecorderTraceIdRatioBasedSampler(this.config.sampleTraceRatio||0.15),spanProcessors:[this._getSpanSessionIdProcessor(),new _sdkTraceBase.BatchSpanProcessor(this.exporter)]});this.tracerProvider.register({propagator:new _core.W3CTraceContextPropagator()});(0,_instrumentation.registerInstrumentations)({tracerProvider:this.tracerProvider,instrumentations:(0,_instrumentations.getInstrumentations)(this.config)});this.isInitialized=true;console.log('TracerReactNativeSDK initialized successfully');}},{key:"_getSpanSessionIdProcessor",value:function _getSpanSessionIdProcessor(){var _this=this;return{onStart:function onStart(span){if(_this.sessionId){span.setAttribute(_sessionRecorderCommon.ATTR_MULTIPLAYER_SESSION_ID,_this.sessionId);}span.setAttribute('platform','react-native');span.setAttribute('timestamp',Date.now());},onEnd:function onEnd(){},shutdown:function shutdown(){return Promise.resolve();},forceFlush:function forceFlush(){return Promise.resolve();}};}},{key:"setSessionId",value:function setSessionId(sessionId,sessionType){this._setSessionId(sessionId,sessionType);}},{key:"setNavigationRef",value:function setNavigationRef(ref){this.navigationInstrumentation.setNavigationRef(ref);}},{key:"recordNavigate",value:function recordNavigate(routeName,params){this.navigationInstrumentation.recordNavigate(routeName,params);}},{key:"recordGoBack",value:function recordGoBack(){this.navigationInstrumentation.recordGoBack();}},{key:"recordReset",value:function recordReset(routes){this.navigationInstrumentation.recordReset(routes);}},{key:"enableGestureTracking",value:function enableGestureTracking(){this.gestureInstrumentation.enable();}},{key:"disableGestureTracking",value:function disableGestureTracking(){this.gestureInstrumentation.disable();}},{key:"recordTap",value:function recordTap(x,y,target){this.gestureInstrumentation.recordTap(x,y,target);}},{key:"recordSwipe",value:function recordSwipe(direction,target){this.gestureInstrumentation.recordSwipe(direction,target);}},{key:"recordPinch",value:function recordPinch(scale,target){this.gestureInstrumentation.recordPinch(scale,target);}},{key:"recordPan",value:function recordPan(deltaX,deltaY,target){this.gestureInstrumentation.recordPan(deltaX,deltaY,target);}},{key:"recordLongPress",value:function recordLongPress(duration,target){this.gestureInstrumentation.recordLongPress(duration,target);}},{key:"recordGestureError",value:function recordGestureError(error,gestureType){this.gestureInstrumentation.recordGestureError(error,gestureType);}},{key:"startTrace",value:function startTrace(name,attributes){if(!this.isInitialized){console.warn('TracerReactNativeSDK not initialized');return null;}var _require2=require('@opentelemetry/api'),trace=_require2.trace;var span=trace.startSpan(name,{attributes:_objectSpread({'trace.type':'performance','trace.name':name},attributes)});return span;}},{key:"endTrace",value:function endTrace(span,status){if(span){if(status){span.setStatus(status);}span.end();}}},{key:"captureException",value:function captureException(error,context){if(!this.isInitialized)return;var _require3=require('@opentelemetry/api'),trace=_require3.trace,SpanStatusCode=_require3.SpanStatusCode;var span=trace.startSpan('error.capture',{attributes:_objectSpread({'error.type':error.name,'error.message':error.message,'error.stack':error.stack},context)});span.setStatus({code:SpanStatusCode.ERROR,message:error.message});span.recordException(error);span.end();}},{key:"recordNetworkRequest",value:function recordNetworkRequest(url,method,statusCode,duration){if(!this.isInitialized)return;var _require4=require('@opentelemetry/api'),trace=_require4.trace;var span=trace.startSpan('network.request',{attributes:{'http.url':url,'http.method':method,'http.status_code':statusCode,'http.duration':duration,'network.type':'fetch'}});span.setStatus({code:statusCode>=400?2:1});span.end();}},{key:"recordScreenLoad",value:function recordScreenLoad(screenName,loadTime){if(!this.isInitialized)return;var _require5=require('@opentelemetry/api'),trace=_require5.trace;var span=trace.startSpan('screen.load',{attributes:{'screen.name':screenName,'screen.load_time':loadTime,'screen.type':'react_native'}});span.end();}},{key:"recordMemoryUsage",value:function recordMemoryUsage(usedMemory,totalMemory){if(!this.isInitialized)return;var _require6=require('@opentelemetry/api'),trace=_require6.trace;var span=trace.startSpan('memory.usage',{attributes:{'memory.used':usedMemory,'memory.total':totalMemory,'memory.percentage':usedMemory/totalMemory*100}});span.end();}},{key:"recordBatteryLevel",value:function recordBatteryLevel(level,isCharging){if(!this.isInitialized)return;var _require7=require('@opentelemetry/api'),trace=_require7.trace;var span=trace.startSpan('battery.status',{attributes:{'battery.level':level,'battery.charging':isCharging}});span.end();}},{key:"recordAppStateChange",value:function recordAppStateChange(state){if(!this.isInitialized)return;var _require8=require('@opentelemetry/api'),trace=_require8.trace;var span=trace.startSpan('app.state_change',{attributes:{'app.state':state,'app.timestamp':Date.now()}});span.end();}},{key:"recordCustomEvent",value:function recordCustomEvent(eventName,attributes){if(!this.isInitialized)return;var _require9=require('@opentelemetry/api'),trace=_require9.trace;var span=trace.startSpan("custom.".concat(eventName),{attributes:_objectSpread({'event.name':eventName,'event.type':'custom'},attributes)});span.end();}},{key:"shutdown",value:function shutdown(){this.isInitialized=false;console.log('TracerReactNativeSDK shutdown');return Promise.resolve();}}]);}();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/otel/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { InstrumentationBase } from '@opentelemetry/instrumentation';
2
+ export declare class GestureInstrumentation extends InstrumentationBase {
3
+ private _isEnabled;
4
+ constructor();
5
+ init(): void;
6
+ enable(): void;
7
+ disable(): void;
8
+ isEnabled(): boolean;
9
+ recordTap(x: number, y: number, target?: string): void;
10
+ recordSwipe(direction: string, target?: string): void;
11
+ recordPinch(scale: number, target?: string): void;
12
+ recordPan(deltaX: number, deltaY: number, target?: string): void;
13
+ recordLongPress(duration: number, target?: string): void;
14
+ recordGestureError(error: Error, gestureType: string): void;
15
+ }
@@ -0,0 +1 @@
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.GestureInstrumentation=void 0;var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _possibleConstructorReturn2=_interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _instrumentation=require("@opentelemetry/instrumentation");var _api=require("@opentelemetry/api");function _callSuper(t,o,e){return o=(0,_getPrototypeOf2["default"])(o),(0,_possibleConstructorReturn2["default"])(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],(0,_getPrototypeOf2["default"])(t).constructor):o.apply(t,e));}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}var GestureInstrumentation=exports.GestureInstrumentation=function(_InstrumentationBase){function GestureInstrumentation(){var _this;(0,_classCallCheck2["default"])(this,GestureInstrumentation);_this=_callSuper(this,GestureInstrumentation,['react-native-gesture','1.0.0',{}]);_this._isEnabled=false;return _this;}(0,_inherits2["default"])(GestureInstrumentation,_InstrumentationBase);return(0,_createClass2["default"])(GestureInstrumentation,[{key:"init",value:function init(){}},{key:"enable",value:function enable(){this._isEnabled=true;}},{key:"disable",value:function disable(){this._isEnabled=false;}},{key:"isEnabled",value:function isEnabled(){return this._isEnabled;}},{key:"recordTap",value:function recordTap(x,y,target){if(!this._isEnabled)return;var span=_api.trace.getTracer('gesture').startSpan('Gesture.tap',{attributes:{'gesture.type':'tap','gesture.coordinates.x':x,'gesture.coordinates.y':y,'gesture.timestamp':Date.now()}});if(target){span.setAttribute('gesture.target',target);}span.setStatus({code:_api.SpanStatusCode.OK});span.end();}},{key:"recordSwipe",value:function recordSwipe(direction,target){if(!this._isEnabled)return;var span=_api.trace.getTracer('gesture').startSpan('Gesture.swipe',{attributes:{'gesture.type':'swipe','gesture.direction':direction,'gesture.timestamp':Date.now()}});if(target){span.setAttribute('gesture.target',target);}span.setStatus({code:_api.SpanStatusCode.OK});span.end();}},{key:"recordPinch",value:function recordPinch(scale,target){if(!this._isEnabled)return;var span=_api.trace.getTracer('gesture').startSpan('Gesture.pinch',{attributes:{'gesture.type':'pinch','gesture.scale':scale,'gesture.timestamp':Date.now()}});if(target){span.setAttribute('gesture.target',target);}span.setStatus({code:_api.SpanStatusCode.OK});span.end();}},{key:"recordPan",value:function recordPan(deltaX,deltaY,target){if(!this._isEnabled)return;var span=_api.trace.getTracer('gesture').startSpan('Gesture.pan',{attributes:{'gesture.type':'pan','gesture.delta_x':deltaX,'gesture.delta_y':deltaY,'gesture.timestamp':Date.now()}});if(target){span.setAttribute('gesture.target',target);}span.setStatus({code:_api.SpanStatusCode.OK});span.end();}},{key:"recordLongPress",value:function recordLongPress(duration,target){if(!this._isEnabled)return;var span=_api.trace.getTracer('gesture').startSpan('Gesture.longPress',{attributes:{'gesture.type':'longPress','gesture.duration':duration,'gesture.timestamp':Date.now()}});if(target){span.setAttribute('gesture.target',target);}span.setStatus({code:_api.SpanStatusCode.OK});span.end();}},{key:"recordGestureError",value:function recordGestureError(error,gestureType){if(!this._isEnabled)return;var span=_api.trace.getTracer('gesture').startSpan("Gesture.".concat(gestureType,".error"),{attributes:{'gesture.type':gestureType,'gesture.error':true,'gesture.timestamp':Date.now()}});span.setStatus({code:_api.SpanStatusCode.ERROR,message:error.message});span.recordException(error);span.end();}}]);}(_instrumentation.InstrumentationBase);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gestureInstrumentation.js","sourceRoot":"","sources":["../../../src/otel/instrumentations/gestureInstrumentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { TracerReactNativeConfig } from '../../types';
2
+ export declare function getInstrumentations(config: TracerReactNativeConfig): any[];
3
+ export { ReactNativeInstrumentation } from './reactNativeInstrumentation';
4
+ export { ReactNavigationInstrumentation } from './reactNavigationInstrumentation';
5
+ export { GestureInstrumentation } from './gestureInstrumentation';
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"GestureInstrumentation",{enumerable:true,get:function get(){return _gestureInstrumentation.GestureInstrumentation;}});Object.defineProperty(exports,"ReactNativeInstrumentation",{enumerable:true,get:function get(){return _reactNativeInstrumentation.ReactNativeInstrumentation;}});Object.defineProperty(exports,"ReactNavigationInstrumentation",{enumerable:true,get:function get(){return _reactNavigationInstrumentation.ReactNavigationInstrumentation;}});exports.getInstrumentations=getInstrumentations;var _reactNativeInstrumentation=require("./reactNativeInstrumentation");var _masking=require("../../config/masking");var _reactNavigationInstrumentation=require("./reactNavigationInstrumentation");var _gestureInstrumentation=require("./gestureInstrumentation");function getInstrumentations(config){var httpMaskingConfig=(0,_masking.getHttpMaskingConfig)(config.httpMasking);var instrumentations=[];try{var _require=require('@opentelemetry/instrumentation-fetch'),FetchInstrumentation=_require.FetchInstrumentation;instrumentations.push(new FetchInstrumentation({ignoreUrls:config.ignoreUrls||[],propagateTraceHeaderCorsUrls:config.propagateTraceHeaderCorsUrls||[],applyCustomAttributesOnSpan:function applyCustomAttributesOnSpan(span,request){if(config.captureHeaders){var headers=request.headers;if(headers&&httpMaskingConfig.maskHeaders){var maskedHeaders=httpMaskingConfig.maskHeaders(headers,span);Object.keys(maskedHeaders).forEach(function(key){span.setAttribute("http.request.header.".concat(key),maskedHeaders[key]);});}else if(headers){Object.keys(headers).forEach(function(key){span.setAttribute("http.request.header.".concat(key),headers[key]);});}}},applyCustomAttributesOnSpanResponse:function applyCustomAttributesOnSpanResponse(span,response){if(config.captureBody&&httpMaskingConfig.maskBody){var maskedBody=httpMaskingConfig.maskBody(response.body,span);span.setAttribute('http.response.body',JSON.stringify(maskedBody));}else if(config.captureBody){span.setAttribute('http.response.body',JSON.stringify(response.body));}}}));}catch(error){console.warn('Fetch instrumentation not available:',error);}try{var _require2=require('@opentelemetry/instrumentation-xml-http-request'),XMLHttpRequestInstrumentation=_require2.XMLHttpRequestInstrumentation;instrumentations.push(new XMLHttpRequestInstrumentation({ignoreUrls:config.ignoreUrls||[],propagateTraceHeaderCorsUrls:config.propagateTraceHeaderCorsUrls||[],applyCustomAttributesOnSpan:function applyCustomAttributesOnSpan(span,xhr){if(config.captureHeaders){var headers=xhr.getAllResponseHeaders();if(headers&&httpMaskingConfig.maskHeaders){var maskedHeaders=httpMaskingConfig.maskHeaders(headers,span);Object.keys(maskedHeaders).forEach(function(key){span.setAttribute("http.response.header.".concat(key),maskedHeaders[key]);});}else if(headers){Object.keys(headers).forEach(function(key){span.setAttribute("http.response.header.".concat(key),headers[key]);});}}}}));}catch(error){console.warn('XMLHttpRequest instrumentation not available:',error);}try{instrumentations.push(new _reactNativeInstrumentation.ReactNativeInstrumentation());}catch(error){console.warn('React Native instrumentation not available:',error);}return instrumentations;}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/otel/instrumentations/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { InstrumentationBase } from '@opentelemetry/instrumentation';
2
+ export declare class ReactNativeInstrumentation extends InstrumentationBase {
3
+ constructor();
4
+ init(): void;
5
+ enable(): void;
6
+ disable(): void;
7
+ private _wrapAsyncStorage;
8
+ }
@@ -0,0 +1 @@
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.ReactNativeInstrumentation=void 0;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _possibleConstructorReturn2=_interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _instrumentation=require("@opentelemetry/instrumentation");var _api=require("@opentelemetry/api");function _callSuper(t,o,e){return o=(0,_getPrototypeOf2["default"])(o),(0,_possibleConstructorReturn2["default"])(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],(0,_getPrototypeOf2["default"])(t).constructor):o.apply(t,e));}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}var ReactNativeInstrumentation=exports.ReactNativeInstrumentation=function(_InstrumentationBase){function ReactNativeInstrumentation(){(0,_classCallCheck2["default"])(this,ReactNativeInstrumentation);return _callSuper(this,ReactNativeInstrumentation,['react-native','1.0.0',{}]);}(0,_inherits2["default"])(ReactNativeInstrumentation,_InstrumentationBase);return(0,_createClass2["default"])(ReactNativeInstrumentation,[{key:"init",value:function init(){}},{key:"enable",value:function enable(){try{var asyncStorage=require('@react-native-async-storage/async-storage');if(asyncStorage){this._wrap(asyncStorage,'AsyncStorage',this._wrapAsyncStorage);}}catch(error){console.warn('@react-native-async-storage/async-storage is not available. AsyncStorage instrumentation will be disabled.');}}},{key:"disable",value:function disable(){try{var asyncStorage=require('@react-native-async-storage/async-storage');if(asyncStorage){this._unwrap(asyncStorage,'AsyncStorage');}}catch(error){}}},{key:"_wrapAsyncStorage",value:function _wrapAsyncStorage(originalModule){var self=this;var originalSetItem=originalModule.setItem;originalModule.setItem=function(){var _ref=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(key,value){var startTime,result,span,_span,errorMessage,_t;return _regenerator["default"].wrap(function(_context){while(1)switch(_context.prev=_context.next){case 0:startTime=Date.now();_context.prev=1;_context.next=2;return originalSetItem.call(this,key,value);case 2:result=_context.sent;span=_api.trace.getTracer('react-native').startSpan('AsyncStorage.setItem',{attributes:{'storage.operation':'setItem','storage.key':key,'storage.value_length':value.length,'storage.duration':Date.now()-startTime}});span.setStatus({code:_api.SpanStatusCode.OK});span.end();return _context.abrupt("return",result);case 3:_context.prev=3;_t=_context["catch"](1);_span=_api.trace.getTracer('react-native').startSpan('AsyncStorage.setItem',{attributes:{'storage.operation':'setItem','storage.key':key,'storage.error':true,'storage.duration':Date.now()-startTime}});errorMessage=_t instanceof Error?_t.message:String(_t);_span.setStatus({code:_api.SpanStatusCode.ERROR,message:errorMessage});if(_t instanceof Error){_span.recordException(_t);}_span.end();throw _t;case 4:case"end":return _context.stop();}},_callee,this,[[1,3]]);}));return function(_x,_x2){return _ref.apply(this,arguments);};}();var originalGetItem=originalModule.getItem;originalModule.getItem=function(){var _ref2=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2(key){var startTime,result,span,_span2,errorMessage,_t2;return _regenerator["default"].wrap(function(_context2){while(1)switch(_context2.prev=_context2.next){case 0:startTime=Date.now();_context2.prev=1;_context2.next=2;return originalGetItem.call(this,key);case 2:result=_context2.sent;span=_api.trace.getTracer('react-native').startSpan('AsyncStorage.getItem',{attributes:{'storage.operation':'getItem','storage.key':key,'storage.value_length':result?result.length:0,'storage.duration':Date.now()-startTime}});span.setStatus({code:_api.SpanStatusCode.OK});span.end();return _context2.abrupt("return",result);case 3:_context2.prev=3;_t2=_context2["catch"](1);_span2=_api.trace.getTracer('react-native').startSpan('AsyncStorage.getItem',{attributes:{'storage.operation':'getItem','storage.key':key,'storage.error':true,'storage.duration':Date.now()-startTime}});errorMessage=_t2 instanceof Error?_t2.message:String(_t2);_span2.setStatus({code:_api.SpanStatusCode.ERROR,message:errorMessage});if(_t2 instanceof Error){_span2.recordException(_t2);}_span2.end();throw _t2;case 4:case"end":return _context2.stop();}},_callee2,this,[[1,3]]);}));return function(_x3){return _ref2.apply(this,arguments);};}();var originalRemoveItem=originalModule.removeItem;originalModule.removeItem=function(){var _ref3=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3(key){var startTime,result,span,_span3,errorMessage,_t3;return _regenerator["default"].wrap(function(_context3){while(1)switch(_context3.prev=_context3.next){case 0:startTime=Date.now();_context3.prev=1;_context3.next=2;return originalRemoveItem.call(this,key);case 2:result=_context3.sent;span=_api.trace.getTracer('react-native').startSpan('AsyncStorage.removeItem',{attributes:{'storage.operation':'removeItem','storage.key':key,'storage.duration':Date.now()-startTime}});span.setStatus({code:_api.SpanStatusCode.OK});span.end();return _context3.abrupt("return",result);case 3:_context3.prev=3;_t3=_context3["catch"](1);_span3=_api.trace.getTracer('react-native').startSpan('AsyncStorage.removeItem',{attributes:{'storage.operation':'removeItem','storage.key':key,'storage.error':true,'storage.duration':Date.now()-startTime}});errorMessage=_t3 instanceof Error?_t3.message:String(_t3);_span3.setStatus({code:_api.SpanStatusCode.ERROR,message:errorMessage});if(_t3 instanceof Error){_span3.recordException(_t3);}_span3.end();throw _t3;case 4:case"end":return _context3.stop();}},_callee3,this,[[1,3]]);}));return function(_x4){return _ref3.apply(this,arguments);};}();return originalModule;}}]);}(_instrumentation.InstrumentationBase);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactNativeInstrumentation.js","sourceRoot":"","sources":["../../../src/otel/instrumentations/reactNativeInstrumentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { InstrumentationBase } from '@opentelemetry/instrumentation';
2
+ export declare class ReactNavigationInstrumentation extends InstrumentationBase {
3
+ private navigationRef;
4
+ constructor();
5
+ init(): void;
6
+ setNavigationRef(ref: any): void;
7
+ private _setupNavigationListener;
8
+ private _recordNavigationEvent;
9
+ recordNavigate(routeName: string, params?: Record<string, any>): void;
10
+ recordGoBack(): void;
11
+ recordReset(routes: any[]): void;
12
+ }
@@ -0,0 +1 @@
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.ReactNavigationInstrumentation=void 0;var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _possibleConstructorReturn2=_interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _instrumentation=require("@opentelemetry/instrumentation");var _api=require("@opentelemetry/api");function _callSuper(t,o,e){return o=(0,_getPrototypeOf2["default"])(o),(0,_possibleConstructorReturn2["default"])(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],(0,_getPrototypeOf2["default"])(t).constructor):o.apply(t,e));}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}var ReactNavigationInstrumentation=exports.ReactNavigationInstrumentation=function(_InstrumentationBase){function ReactNavigationInstrumentation(){var _this;(0,_classCallCheck2["default"])(this,ReactNavigationInstrumentation);_this=_callSuper(this,ReactNavigationInstrumentation,['react-navigation','1.0.0',{}]);_this.navigationRef=null;return _this;}(0,_inherits2["default"])(ReactNavigationInstrumentation,_InstrumentationBase);return(0,_createClass2["default"])(ReactNavigationInstrumentation,[{key:"init",value:function init(){}},{key:"setNavigationRef",value:function setNavigationRef(ref){this.navigationRef=ref;this._setupNavigationListener();}},{key:"_setupNavigationListener",value:function _setupNavigationListener(){var _this2=this;if(!this.navigationRef)return;this.navigationRef.addListener('state',function(e){_this2._recordNavigationEvent('state_change',e.data);});this.navigationRef.addListener('focus',function(e){_this2._recordNavigationEvent('focus',e.data);});this.navigationRef.addListener('blur',function(e){_this2._recordNavigationEvent('blur',e.data);});}},{key:"_recordNavigationEvent",value:function _recordNavigationEvent(eventType,data){var span=_api.trace.getTracer('navigation').startSpan("Navigation.".concat(eventType),{attributes:{'navigation.system':'ReactNavigation','navigation.operation':eventType,'navigation.type':eventType,'navigation.timestamp':Date.now()}});if(data){if(data.routeName){span.setAttribute('navigation.route_name',data.routeName);}if(data.params){span.setAttribute('navigation.params',JSON.stringify(data.params));}if(data.key){span.setAttribute('navigation.key',data.key);}}span.setStatus({code:_api.SpanStatusCode.OK});span.end();}},{key:"recordNavigate",value:function recordNavigate(routeName,params){var span=_api.trace.getTracer('navigation').startSpan('Navigation.navigate',{attributes:{'navigation.system':'ReactNavigation','navigation.operation':'navigate','navigation.route_name':routeName,'navigation.timestamp':Date.now()}});if(params){span.setAttribute('navigation.params',JSON.stringify(params));}span.setStatus({code:_api.SpanStatusCode.OK});span.end();}},{key:"recordGoBack",value:function recordGoBack(){var span=_api.trace.getTracer('navigation').startSpan('Navigation.goBack',{attributes:{'navigation.system':'ReactNavigation','navigation.operation':'goBack','navigation.timestamp':Date.now()}});span.setStatus({code:_api.SpanStatusCode.OK});span.end();}},{key:"recordReset",value:function recordReset(routes){var span=_api.trace.getTracer('navigation').startSpan('Navigation.reset',{attributes:{'navigation.system':'ReactNavigation','navigation.operation':'reset','navigation.routes_count':routes.length,'navigation.timestamp':Date.now()}});if(routes.length>0){span.setAttribute('navigation.initial_route',routes[0].name);}span.setStatus({code:_api.SpanStatusCode.OK});span.end();}}]);}(_instrumentation.InstrumentationBase);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactNavigationInstrumentation.js","sourceRoot":"","sources":["../../../src/otel/instrumentations/reactNavigationInstrumentation.ts"],"names":[],"mappings":"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"}