@multiplayer-app/session-recorder-react-native 0.0.1-beta.1 → 0.0.1-beta.11
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/SessionRecorderNative.podspec +29 -0
- package/android/build.gradle +32 -0
- package/copy-react-native-dist.sh +4 -10
- package/dist/components/MaskableComponent.d.ts +22 -0
- package/dist/components/MaskableComponent.js +1 -0
- package/dist/components/MaskableComponent.js.map +1 -0
- package/dist/components/MaskableTextInput.d.ts +14 -0
- package/dist/components/MaskableTextInput.js +1 -0
- package/dist/components/MaskableTextInput.js.map +1 -0
- package/dist/components/SessionRecorderWidget/FinalPopover.d.ts +11 -0
- package/dist/components/SessionRecorderWidget/FinalPopover.js +1 -0
- package/dist/components/SessionRecorderWidget/FinalPopover.js.map +1 -0
- package/dist/components/SessionRecorderWidget/FloatingButton.d.ts +8 -0
- package/dist/components/SessionRecorderWidget/FloatingButton.js +1 -0
- package/dist/components/SessionRecorderWidget/FloatingButton.js.map +1 -0
- package/dist/components/SessionRecorderWidget/InitialPopover.d.ts +13 -0
- package/dist/components/SessionRecorderWidget/InitialPopover.js +1 -0
- package/dist/components/SessionRecorderWidget/InitialPopover.js.map +1 -0
- package/dist/components/SessionRecorderWidget/ModalContainer.d.ts +8 -0
- package/dist/components/SessionRecorderWidget/ModalContainer.js +1 -0
- package/dist/components/SessionRecorderWidget/ModalContainer.js.map +1 -0
- package/dist/components/SessionRecorderWidget/ModalHeader.d.ts +6 -0
- package/dist/components/SessionRecorderWidget/ModalHeader.js +1 -0
- package/dist/components/SessionRecorderWidget/ModalHeader.js.map +1 -0
- package/dist/components/SessionRecorderWidget/SessionRecorderWidget.d.ts +5 -0
- package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js +1 -0
- package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js.map +1 -0
- package/dist/components/SessionRecorderWidget/icons.d.ts +11 -0
- package/dist/components/SessionRecorderWidget/icons.js +1 -0
- package/dist/components/SessionRecorderWidget/icons.js.map +1 -0
- package/dist/components/SessionRecorderWidget/index.d.ts +2 -0
- package/dist/components/SessionRecorderWidget/index.js +1 -0
- package/dist/components/SessionRecorderWidget/index.js.map +1 -0
- package/dist/components/SessionRecorderWidget/styles.d.ts +145 -0
- package/dist/components/SessionRecorderWidget/styles.js +1 -0
- package/dist/components/SessionRecorderWidget/styles.js.map +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/config/defaults.js +1 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/masking.js +1 -1
- package/dist/config/masking.js.map +1 -1
- package/dist/context/SessionRecorderContext.d.ts +5 -3
- package/dist/context/SessionRecorderContext.js +1 -1
- package/dist/context/SessionRecorderContext.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/native/ScreenMasking.d.ts +21 -0
- package/dist/native/ScreenMasking.js +1 -0
- package/dist/native/ScreenMasking.js.map +1 -0
- package/dist/native/SessionRecorderNative.d.ts +21 -0
- package/dist/native/SessionRecorderNative.js +1 -0
- package/dist/native/SessionRecorderNative.js.map +1 -0
- package/dist/patch/xhr.js +1 -1
- package/dist/patch/xhr.js.map +1 -1
- package/dist/recorder/screenRecorder.d.ts +1 -0
- package/dist/recorder/screenRecorder.js +1 -1
- package/dist/recorder/screenRecorder.js.map +1 -1
- package/dist/recorder/screenshotManager.d.ts +10 -0
- package/dist/recorder/screenshotManager.js +1 -0
- package/dist/recorder/screenshotManager.js.map +1 -0
- package/dist/services/screenMaskingService.d.ts +39 -0
- package/dist/services/screenMaskingService.js +1 -0
- package/dist/services/screenMaskingService.js.map +1 -0
- package/dist/services/storage.service.d.ts +18 -2
- package/dist/services/storage.service.js +1 -1
- package/dist/services/storage.service.js.map +1 -1
- package/dist/session-recorder.d.ts +2 -1
- package/dist/session-recorder.js +1 -1
- package/dist/session-recorder.js.map +1 -1
- package/dist/types/session-recorder.d.ts +6 -0
- package/dist/types/session-recorder.js.map +1 -1
- package/dist/utils/componentRegistry.d.ts +64 -0
- package/dist/utils/componentRegistry.js +1 -0
- package/dist/utils/componentRegistry.js.map +1 -0
- package/dist/utils/nativeModuleTest.d.ts +8 -0
- package/dist/utils/nativeModuleTest.js +1 -0
- package/dist/utils/nativeModuleTest.js.map +1 -0
- package/dist/utils/platform.d.ts +3 -0
- package/dist/utils/reactNativeHierarchyExtractor.d.ts +38 -0
- package/dist/utils/reactNativeHierarchyExtractor.js +1 -0
- package/dist/utils/reactNativeHierarchyExtractor.js.map +1 -0
- package/dist/utils/screenshotMasker.d.ts +96 -0
- package/dist/utils/screenshotMasker.js +1 -0
- package/dist/utils/screenshotMasker.js.map +1 -0
- package/dist/utils/viewHierarchyTracker.d.ts +89 -0
- package/dist/utils/viewHierarchyTracker.js +1 -0
- package/dist/utils/viewHierarchyTracker.js.map +1 -0
- package/ios/SessionRecorderNative.m +17 -0
- package/ios/SessionRecorderNative.podspec +26 -0
- package/ios/SessionRecorderNative.swift +205 -0
- package/package.json +22 -7
- package/react-native.config.js +15 -0
- package/RRWEB_INTEGRATION.md +0 -336
- package/VIEWSHOT_INTEGRATION_TEST.md +0 -123
- package/babel.config.js +0 -13
- package/dist/components/GestureCaptureWrapper.d.ts +0 -6
- package/dist/components/GestureCaptureWrapper.js +0 -1
- package/dist/components/GestureCaptureWrapper.js.map +0 -1
- package/dist/expo.d.ts +0 -7
- package/dist/expo.js +0 -1
- package/dist/expo.js.map +0 -1
- package/dist/otel/instrumentations/gestureInstrumentation.d.ts +0 -15
- package/dist/otel/instrumentations/gestureInstrumentation.js +0 -1
- package/dist/otel/instrumentations/gestureInstrumentation.js.map +0 -1
- package/dist/otel/instrumentations/reactNativeInstrumentation.d.ts +0 -8
- package/dist/otel/instrumentations/reactNativeInstrumentation.js +0 -1
- package/dist/otel/instrumentations/reactNativeInstrumentation.js.map +0 -1
- package/dist/otel/instrumentations/reactNavigationInstrumentation.d.ts +0 -13
- package/dist/otel/instrumentations/reactNavigationInstrumentation.js +0 -1
- package/dist/otel/instrumentations/reactNavigationInstrumentation.js.map +0 -1
- package/dist/recorder/gestureHandlerRecorder.d.ts +0 -19
- package/dist/recorder/gestureHandlerRecorder.js +0 -1
- package/dist/recorder/gestureHandlerRecorder.js.map +0 -1
- package/dist/types/rrweb.d.ts +0 -118
- package/dist/types/rrweb.js +0 -1
- package/dist/types/rrweb.js.map +0 -1
- package/scripts/generate-app-metadata.js +0 -173
- package/src/components/GestureCaptureWrapper/GestureCaptureWrapper.tsx +0 -86
- package/src/components/GestureCaptureWrapper/index.ts +0 -1
- package/src/components/ScreenRecorderView/ScreenRecorderView.tsx +0 -72
- package/src/components/ScreenRecorderView/index.ts +0 -1
- package/src/components/index.ts +0 -1
- package/src/config/constants.ts +0 -60
- package/src/config/defaults.ts +0 -82
- package/src/config/index.ts +0 -6
- package/src/config/masking.ts +0 -27
- package/src/config/session-recorder.ts +0 -55
- package/src/config/validators.ts +0 -31
- package/src/context/SessionRecorderContext.tsx +0 -75
- package/src/expo.ts +0 -11
- package/src/index.ts +0 -17
- package/src/otel/helpers.ts +0 -275
- package/src/otel/index.ts +0 -138
- package/src/otel/instrumentations/index.ts +0 -115
- package/src/patch/index.ts +0 -1
- package/src/patch/xhr.ts +0 -142
- package/src/recorder/eventExporter.ts +0 -141
- package/src/recorder/gestureRecorder.ts +0 -498
- package/src/recorder/index.ts +0 -179
- package/src/recorder/navigationTracker.ts +0 -449
- package/src/recorder/screenRecorder.ts +0 -498
- package/src/services/api.service.ts +0 -203
- package/src/services/storage.service.ts +0 -158
- package/src/session-recorder.ts +0 -600
- package/src/types/expo.d.ts +0 -23
- package/src/types/index.ts +0 -28
- package/src/types/session-recorder.ts +0 -423
- package/src/types/session.ts +0 -65
- package/src/utils/app-metadata.ts +0 -31
- package/src/utils/index.ts +0 -8
- package/src/utils/logger.ts +0 -225
- package/src/utils/platform.ts +0 -384
- package/src/utils/request-utils.ts +0 -61
- package/src/utils/rrweb-events.ts +0 -309
- package/src/utils/session.ts +0 -18
- package/src/utils/time.ts +0 -17
- package/src/utils/type-utils.ts +0 -75
- package/src/version.ts +0 -1
- package/tsconfig.json +0 -24
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
# ViewShot Integration Test
|
|
2
|
-
|
|
3
|
-
This document explains how to test the complete react-native-view-shot integration.
|
|
4
|
-
|
|
5
|
-
## Test Setup
|
|
6
|
-
|
|
7
|
-
1. **Install Dependencies**
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm install react-native-view-shot
|
|
11
|
-
# For iOS
|
|
12
|
-
cd ios && pod install && cd ..
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
2. **Test the Integration**
|
|
16
|
-
|
|
17
|
-
```typescript
|
|
18
|
-
import React from 'react'
|
|
19
|
-
import { View, Text, Button } from 'react-native'
|
|
20
|
-
import { SessionRecorderProvider, useSessionRecorder } from './src/context/SessionRecorderContext'
|
|
21
|
-
|
|
22
|
-
function TestApp() {
|
|
23
|
-
const { client } = useSessionRecorder()
|
|
24
|
-
|
|
25
|
-
const testScreenCapture = async () => {
|
|
26
|
-
// Start session to enable automatic screen capture
|
|
27
|
-
await client.start()
|
|
28
|
-
|
|
29
|
-
// Wait a moment for initial screen capture
|
|
30
|
-
setTimeout(() => {
|
|
31
|
-
console.log('Screen capture should have happened automatically!')
|
|
32
|
-
// Check the recorded events
|
|
33
|
-
const events = client.getRecordedEvents?.()
|
|
34
|
-
console.log('Recorded events:', events)
|
|
35
|
-
}, 2000)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<View style={{ flex: 1, padding: 20 }}>
|
|
40
|
-
<Text>ViewShot Integration Test</Text>
|
|
41
|
-
<Button title='Test Screen Capture' onPress={testScreenCapture} />
|
|
42
|
-
<Text>Touch the screen to test touch recording</Text>
|
|
43
|
-
</View>
|
|
44
|
-
)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export default function App() {
|
|
48
|
-
return (
|
|
49
|
-
<SessionRecorderProvider
|
|
50
|
-
options={{
|
|
51
|
-
apiKey: 'test-key',
|
|
52
|
-
version: '1.0.0',
|
|
53
|
-
application: 'TestApp',
|
|
54
|
-
environment: 'test',
|
|
55
|
-
recordScreen: true,
|
|
56
|
-
recordGestures: true
|
|
57
|
-
}}
|
|
58
|
-
>
|
|
59
|
-
<TestApp />
|
|
60
|
-
</SessionRecorderProvider>
|
|
61
|
-
)
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## Expected Behavior
|
|
66
|
-
|
|
67
|
-
When you run this test:
|
|
68
|
-
|
|
69
|
-
1. **Automatic Screen Capture**: The system should automatically capture the screen when the session starts
|
|
70
|
-
2. **Touch Recording**: Touching the screen should generate rrweb MouseInteraction events
|
|
71
|
-
3. **ViewShot Integration**: The same View that handles touch events should be used for screen capture
|
|
72
|
-
4. **Event Generation**: Both FullSnapshotEvent and IncrementalSnapshotEvent should be generated
|
|
73
|
-
|
|
74
|
-
## Verification Steps
|
|
75
|
-
|
|
76
|
-
1. **Check Console Logs**: Look for screen capture success/failure messages
|
|
77
|
-
2. **Verify Events**: Check that `getRecordedEvents()` returns both screen and touch events
|
|
78
|
-
3. **Test Touch Interactions**: Touch the screen and verify touch events are recorded
|
|
79
|
-
4. **Check Event Format**: Ensure events are in proper rrweb format
|
|
80
|
-
|
|
81
|
-
## Troubleshooting
|
|
82
|
-
|
|
83
|
-
### Common Issues
|
|
84
|
-
|
|
85
|
-
1. **"ViewShot ref not available"**: The ref setup might be timing-related
|
|
86
|
-
|
|
87
|
-
- Solution: Ensure the SessionRecorderProvider wraps your app properly
|
|
88
|
-
|
|
89
|
-
2. **Screen capture fails**: react-native-view-shot might not be properly installed
|
|
90
|
-
|
|
91
|
-
- Solution: Check installation and run `pod install` for iOS
|
|
92
|
-
|
|
93
|
-
3. **No events recorded**: Session might not be started
|
|
94
|
-
- Solution: Call `client.start()` before testing
|
|
95
|
-
|
|
96
|
-
### Debug Information
|
|
97
|
-
|
|
98
|
-
Add this to your test component to debug:
|
|
99
|
-
|
|
100
|
-
```typescript
|
|
101
|
-
const debugInfo = () => {
|
|
102
|
-
console.log('Session State:', client.sessionState)
|
|
103
|
-
console.log('Is Recording:', client.isRecording)
|
|
104
|
-
console.log('Events Count:', client.getRecordedEvents?.()?.length || 0)
|
|
105
|
-
}
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
## Success Criteria
|
|
109
|
-
|
|
110
|
-
✅ Screen capture works automatically when session starts
|
|
111
|
-
✅ Touch events are recorded automatically
|
|
112
|
-
✅ Events are in proper rrweb format
|
|
113
|
-
✅ No manual ref setup required
|
|
114
|
-
✅ Perfect synchronization between touch and screen events
|
|
115
|
-
|
|
116
|
-
## Next Steps
|
|
117
|
-
|
|
118
|
-
Once the test passes:
|
|
119
|
-
|
|
120
|
-
1. Integrate into your main app
|
|
121
|
-
2. Configure capture intervals and quality as needed
|
|
122
|
-
3. Export events for rrweb playback
|
|
123
|
-
4. Customize event filtering if required
|
package/babel.config.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var _typeof=require("@babel/runtime/helpers/typeof");Object.defineProperty(exports,"__esModule",{value:true});exports.GestureCaptureWrapper=void 0;var _react=_interopRequireWildcard(require("react"));var _reactNativeGestureHandler=require("react-native-gesture-handler");var _jsxRuntime=require("react/jsx-runtime");var _this=void 0,_jsxFileName="/Users/gegham/www/multiplayer-debugger-javascript/packages/session-recorder-react-native/dist/components/GestureCaptureWrapper.js";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);}var GestureCaptureWrapper=exports.GestureCaptureWrapper=function GestureCaptureWrapper(_ref){var children=_ref.children,onGestureRecord=_ref.onGestureRecord;var recordGesture=(0,_react.useCallback)(function(gestureType,data){onGestureRecord(gestureType,data);},[onGestureRecord]);var tapGesture=(0,_react.useMemo)(function(){return _reactNativeGestureHandler.Gesture.Tap().runOnJS(true).onStart(function(event){recordGesture('tap',{x:event.x,y:event.y,timestamp:Date.now()});});},[recordGesture]);var panGesture=(0,_react.useMemo)(function(){return _reactNativeGestureHandler.Gesture.Pan().runOnJS(true).onStart(function(event){recordGesture('pan_start',{x:event.x,y:event.y,timestamp:Date.now()});}).onUpdate(function(event){recordGesture('pan_update',{x:event.x,y:event.y,translationX:event.translationX,translationY:event.translationY,velocityX:event.velocityX,velocityY:event.velocityY,timestamp:Date.now()});}).onEnd(function(event){recordGesture('pan_end',{x:event.x,y:event.y,translationX:event.translationX,translationY:event.translationY,velocityX:event.velocityX,velocityY:event.velocityY,timestamp:Date.now()});});},[recordGesture]);var longPressGesture=(0,_react.useMemo)(function(){return _reactNativeGestureHandler.Gesture.LongPress().runOnJS(true).minDuration(500).onStart(function(event){recordGesture('long_press',{x:event.x,y:event.y,duration:500,timestamp:Date.now()});});},[recordGesture]);return(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureHandlerRootView,{style:{flex:1},children:(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:_reactNativeGestureHandler.Gesture.Simultaneous(tapGesture,panGesture,longPressGesture),children:children})});};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GestureCaptureWrapper.js","sourceRoot":"","sources":["../../src/components/GestureCaptureWrapper.tsx"],"names":[],"mappings":"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"}
|
package/dist/expo.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import './patch';
|
|
2
|
-
import SessionRecorder from './session-recorder';
|
|
3
|
-
export * from '@multiplayer-app/session-recorder-common';
|
|
4
|
-
export * from './context/SessionRecorderContext';
|
|
5
|
-
export { SessionRecorder };
|
|
6
|
-
export default SessionRecorder;
|
|
7
|
-
export { isExpoEnvironment, getPlatformAttributes } from './utils/platform';
|
package/dist/expo.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});var _exportNames={SessionRecorder:true,isExpoEnvironment:true,getPlatformAttributes:true};Object.defineProperty(exports,"SessionRecorder",{enumerable:true,get:function get(){return _sessionRecorder["default"];}});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;}});require("./patch");var _sessionRecorder=_interopRequireDefault(require("./session-recorder"));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 _SessionRecorderContext=require("./context/SessionRecorderContext");Object.keys(_SessionRecorderContext).forEach(function(key){if(key==="default"||key==="__esModule")return;if(Object.prototype.hasOwnProperty.call(_exportNames,key))return;if(key in exports&&exports[key]===_SessionRecorderContext[key])return;Object.defineProperty(exports,key,{enumerable:true,get:function get(){return _SessionRecorderContext[key];}});});var _platform=require("./utils/platform");var _default=exports["default"]=_sessionRecorder["default"];
|
package/dist/expo.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"expo.js","sourceRoot":"","sources":["../src/expo.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAA;AAChB,OAAO,eAAe,MAAM,oBAAoB,CAAA;AAChD,cAAc,0CAA0C,CAAA;AACxD,cAAc,kCAAkC,CAAA;AAEhD,OAAO,EAAE,eAAe,EAAE,CAAA;AAC1B,iCAAiC;AACjC,eAAe,eAAe,CAAA;AAE9B,iCAAiC;AACjC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -1,15 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
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 scopeName="@opentelemetry/instrumentation-user-interaction";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(scopeName).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(scopeName).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(scopeName).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(scopeName).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(scopeName).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(scopeName).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);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gestureInstrumentation.js","sourceRoot":"","sources":["../../../src/otel/instrumentations/gestureInstrumentation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
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 _utils=require("../../utils");var _api=require("@opentelemetry/api");var _asyncStorage=_interopRequireDefault(require("@react-native-async-storage/async-storage"));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{if(_asyncStorage["default"]){this._wrap(_asyncStorage["default"],'setItem',this._wrapAsyncStorage);}}catch(error){_utils.logger.warn('DEBUGGER_LIB','@react-native-async-storage/async-storage is not available. AsyncStorage instrumentation will be disabled.');}}},{key:"disable",value:function disable(){try{if(_asyncStorage["default"]){this._unwrap(_asyncStorage["default"],'setItem');}}catch(error){}}},{key:"_wrapAsyncStorage",value:function _wrapAsyncStorage(originalMethod){return 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 originalMethod.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);};}();}}]);}(_instrumentation.InstrumentationBase);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reactNativeInstrumentation.js","sourceRoot":"","sources":["../../../src/otel/instrumentations/reactNativeInstrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,YAAY,MAAM,2CAA2C,CAAA;AAEpE,MAAM,OAAO,0BAA2B,SAAQ,mBAAmB;IACjE;QACE,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;IACpC,CAAC;IAED,IAAI;QACF,iCAAiC;IACnC,CAAC;IAED,MAAM;QACJ,6CAA6C;QAC7C,IAAI,CAAC;YACH,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;YAC7D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,4GAA4G,CAAC,CAAA;QAC3I,CAAC;IACH,CAAC;IAED,OAAO;QACL,+CAA+C;QAC/C,IAAI,CAAC;YACH,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;YACvC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oDAAoD;QACtD,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,cAAmB;QAC3C,OAAO,KAAK,WAAsB,GAAW,EAAE,KAAa;YAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC5B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;gBAE1D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,sBAAsB,EAAE;oBAC7E,UAAU,EAAE;wBACV,mBAAmB,EAAE,SAAS;wBAC9B,aAAa,EAAE,GAAG;wBAClB,sBAAsB,EAAE,KAAK,CAAC,MAAM;wBACpC,kBAAkB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;qBAC3C;iBACF,CAAC,CAAA;gBAEF,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAA;gBAC3C,IAAI,CAAC,GAAG,EAAE,CAAA;gBAEV,OAAO,MAAM,CAAA;YACf,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,sBAAsB,EAAE;oBAC7E,UAAU,EAAE;wBACV,mBAAmB,EAAE,SAAS;wBAC9B,aAAa,EAAE,GAAG;wBAClB,eAAe,EAAE,IAAI;wBACrB,kBAAkB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;qBAC3C;iBACF,CAAC,CAAA;gBAEF,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAC3E,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAA;gBACrE,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;oBAC3B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;gBAC7B,CAAC;gBACD,IAAI,CAAC,GAAG,EAAE,CAAA;gBAEV,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC,CAAA;IACH,CAAC;CACF"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { InstrumentationBase } from '@opentelemetry/instrumentation';
|
|
2
|
-
export declare class ReactNavigationInstrumentation extends InstrumentationBase {
|
|
3
|
-
private navigationRef;
|
|
4
|
-
constructor();
|
|
5
|
-
init(): void;
|
|
6
|
-
enable(): void;
|
|
7
|
-
setNavigationRef(ref: any): void;
|
|
8
|
-
private _setupNavigationListener;
|
|
9
|
-
private _recordNavigationEvent;
|
|
10
|
-
recordNavigate(routeName: string, params?: Record<string, any>): void;
|
|
11
|
-
recordGoBack(): void;
|
|
12
|
-
recordReset(routes: any[]): void;
|
|
13
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
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 _get2=_interopRequireDefault(require("@babel/runtime/helpers/get"));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;})();}function _superPropGet(t,o,e,r){var p=(0,_get2["default"])((0,_getPrototypeOf2["default"])(1&r?t.prototype:t),o,e);return 2&r&&"function"==typeof p?function(t){return p.apply(e,t);}:p;}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:"enable",value:function enable(){_superPropGet(ReactNavigationInstrumentation,"enable",this,3)([]);}},{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);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reactNavigationInstrumentation.js","sourceRoot":"","sources":["../../../src/otel/instrumentations/reactNavigationInstrumentation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import { SessionState } from '../types';
|
|
3
|
-
export interface GestureHandlerRecorderProps {
|
|
4
|
-
children: ReactNode;
|
|
5
|
-
sessionState: SessionState | null;
|
|
6
|
-
onGestureRecord: (gestureType: string, data: any) => void;
|
|
7
|
-
}
|
|
8
|
-
export declare class GestureHandlerRecorder {
|
|
9
|
-
private gestureInstrumentation;
|
|
10
|
-
private onGestureRecord?;
|
|
11
|
-
constructor();
|
|
12
|
-
setGestureCallback(callback: (gestureType: string, data: any) => void): void;
|
|
13
|
-
createTapGesture(): import("react-native-gesture-handler/lib/typescript/handlers/gestures/tapGesture").TapGesture;
|
|
14
|
-
createPanGesture(): import("react-native-gesture-handler/lib/typescript/handlers/gestures/panGesture").PanGesture;
|
|
15
|
-
createPinchGesture(): import("react-native-gesture-handler/lib/typescript/handlers/gestures/pinchGesture").PinchGesture;
|
|
16
|
-
createLongPressGesture(): import("react-native-gesture-handler/lib/typescript/handlers/gestures/longPressGesture").LongPressGesture;
|
|
17
|
-
private recordGesture;
|
|
18
|
-
createGestureDetector(children: ReactNode, sessionState: SessionState | null): ReactNode;
|
|
19
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.GestureHandlerRecorder=void 0;var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _reactNativeGestureHandler=require("react-native-gesture-handler");var _types=require("../types");var _gestureInstrumentation=require("../otel/instrumentations/gestureInstrumentation");var GestureHandlerRecorder=exports.GestureHandlerRecorder=function(){function GestureHandlerRecorder(){(0,_classCallCheck2["default"])(this,GestureHandlerRecorder);this.gestureInstrumentation=new _gestureInstrumentation.GestureInstrumentation();this.gestureInstrumentation.enable();}return(0,_createClass2["default"])(GestureHandlerRecorder,[{key:"setGestureCallback",value:function setGestureCallback(callback){this.onGestureRecord=callback;}},{key:"createTapGesture",value:function createTapGesture(){var _this=this;return _reactNativeGestureHandler.Gesture.Tap().onStart(function(event){_this.recordGesture('tap',{x:event.x,y:event.y,timestamp:Date.now()});});}},{key:"createPanGesture",value:function createPanGesture(){var _this2=this;return _reactNativeGestureHandler.Gesture.Pan().onStart(function(event){_this2.recordGesture('pan_start',{x:event.x,y:event.y,timestamp:Date.now()});}).onUpdate(function(event){_this2.recordGesture('pan_update',{x:event.x,y:event.y,translationX:event.translationX,translationY:event.translationY,velocityX:event.velocityX,velocityY:event.velocityY,timestamp:Date.now()});}).onEnd(function(event){_this2.recordGesture('pan_end',{x:event.x,y:event.y,translationX:event.translationX,translationY:event.translationY,velocityX:event.velocityX,velocityY:event.velocityY,timestamp:Date.now()});});}},{key:"createPinchGesture",value:function createPinchGesture(){var _this3=this;return _reactNativeGestureHandler.Gesture.Pinch().onStart(function(event){_this3.recordGesture('pinch_start',{scale:event.scale,focalX:event.focalX,focalY:event.focalY,timestamp:Date.now()});}).onUpdate(function(event){_this3.recordGesture('pinch_update',{scale:event.scale,focalX:event.focalX,focalY:event.focalY,timestamp:Date.now()});}).onEnd(function(event){_this3.recordGesture('pinch_end',{scale:event.scale,focalX:event.focalX,focalY:event.focalY,timestamp:Date.now()});});}},{key:"createLongPressGesture",value:function createLongPressGesture(){var _this4=this;return _reactNativeGestureHandler.Gesture.LongPress().minDuration(500).onStart(function(event){_this4.recordGesture('long_press',{x:event.x,y:event.y,duration:500,timestamp:Date.now()});});}},{key:"recordGesture",value:function recordGesture(gestureType,data){switch(gestureType){case'tap':this.gestureInstrumentation.recordTap(data.x,data.y);break;case'pan_start':case'pan_update':case'pan_end':this.gestureInstrumentation.recordPan(data.translationX||0,data.translationY||0);break;case'pinch_start':case'pinch_update':case'pinch_end':this.gestureInstrumentation.recordPinch(data.scale,undefined);break;case'long_press':this.gestureInstrumentation.recordLongPress(data.duration,undefined);break;}if(this.onGestureRecord){this.onGestureRecord(gestureType,data);}}},{key:"createGestureDetector",value:function createGestureDetector(children,sessionState){if(sessionState!==_types.SessionState.started){return children;}var tapGesture=this.createTapGesture();var panGesture=this.createPanGesture();var pinchGesture=this.createPinchGesture();var longPressGesture=this.createLongPressGesture();return children;}}]);}();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gestureHandlerRecorder.js","sourceRoot":"","sources":["../../src/recorder/gestureHandlerRecorder.ts"],"names":[],"mappings":"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"}
|
package/dist/types/rrweb.d.ts
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RRWeb event types for React Native session recording
|
|
3
|
-
* Based on rrweb specification: https://github.com/rrweb-io/rrweb
|
|
4
|
-
*/
|
|
5
|
-
export declare enum EventType {
|
|
6
|
-
DomContentLoaded = 0,
|
|
7
|
-
Load = 1,
|
|
8
|
-
FullSnapshot = 2,
|
|
9
|
-
IncrementalSnapshot = 3,
|
|
10
|
-
Meta = 4,
|
|
11
|
-
Custom = 5,
|
|
12
|
-
Plugin = 6
|
|
13
|
-
}
|
|
14
|
-
export declare enum IncrementalSource {
|
|
15
|
-
Mutation = 0,
|
|
16
|
-
MouseMove = 1,
|
|
17
|
-
MouseInteraction = 2,
|
|
18
|
-
Scroll = 3,
|
|
19
|
-
ViewportResize = 4,
|
|
20
|
-
Input = 5,
|
|
21
|
-
TouchMove = 6,
|
|
22
|
-
MediaInteraction = 7,
|
|
23
|
-
StyleSheetRule = 8,
|
|
24
|
-
CanvasMutation = 9,
|
|
25
|
-
Font = 10,
|
|
26
|
-
Selection = 11,
|
|
27
|
-
AdoptedStyleSheet = 12
|
|
28
|
-
}
|
|
29
|
-
export declare enum MouseInteractionType {
|
|
30
|
-
MouseUp = 0,
|
|
31
|
-
MouseDown = 1,
|
|
32
|
-
Click = 2,
|
|
33
|
-
ContextMenu = 3,
|
|
34
|
-
DblClick = 4,
|
|
35
|
-
Focus = 5,
|
|
36
|
-
Blur = 6,
|
|
37
|
-
TouchStart = 7,
|
|
38
|
-
TouchMove = 8,
|
|
39
|
-
TouchEnd = 9,
|
|
40
|
-
TouchCancel = 10
|
|
41
|
-
}
|
|
42
|
-
export interface MouseInteractionData {
|
|
43
|
-
type: MouseInteractionType;
|
|
44
|
-
id: number;
|
|
45
|
-
x: number;
|
|
46
|
-
y: number;
|
|
47
|
-
}
|
|
48
|
-
export interface TouchInteractionData {
|
|
49
|
-
type: MouseInteractionType;
|
|
50
|
-
id: number;
|
|
51
|
-
x: number;
|
|
52
|
-
y: number;
|
|
53
|
-
pressure?: number;
|
|
54
|
-
target?: string;
|
|
55
|
-
}
|
|
56
|
-
export interface FullSnapshotEvent {
|
|
57
|
-
type: EventType.FullSnapshot;
|
|
58
|
-
data: {
|
|
59
|
-
node: SerializedNodeWithId;
|
|
60
|
-
initialOffset: {
|
|
61
|
-
left: number;
|
|
62
|
-
top: number;
|
|
63
|
-
};
|
|
64
|
-
};
|
|
65
|
-
timestamp: number;
|
|
66
|
-
}
|
|
67
|
-
export interface IncrementalSnapshotEvent {
|
|
68
|
-
type: EventType.IncrementalSnapshot;
|
|
69
|
-
data: {
|
|
70
|
-
source: IncrementalSource;
|
|
71
|
-
id?: number;
|
|
72
|
-
x?: number;
|
|
73
|
-
y?: number;
|
|
74
|
-
type?: MouseInteractionType;
|
|
75
|
-
} & Partial<MouseInteractionData> & Partial<TouchInteractionData>;
|
|
76
|
-
timestamp: number;
|
|
77
|
-
}
|
|
78
|
-
export interface SerializedNodeWithId {
|
|
79
|
-
type: number;
|
|
80
|
-
id: number;
|
|
81
|
-
tagName?: string;
|
|
82
|
-
attributes?: Record<string, string>;
|
|
83
|
-
childNodes?: SerializedNodeWithId[];
|
|
84
|
-
textContent?: string;
|
|
85
|
-
style?: Record<string, string>;
|
|
86
|
-
}
|
|
87
|
-
export interface MetaEvent {
|
|
88
|
-
type: EventType.Meta;
|
|
89
|
-
data: {
|
|
90
|
-
href?: string;
|
|
91
|
-
width?: number;
|
|
92
|
-
height?: number;
|
|
93
|
-
[key: string]: any;
|
|
94
|
-
};
|
|
95
|
-
timestamp: number;
|
|
96
|
-
}
|
|
97
|
-
export interface RRWebEvent {
|
|
98
|
-
type: EventType;
|
|
99
|
-
data: any;
|
|
100
|
-
timestamp: number;
|
|
101
|
-
}
|
|
102
|
-
export interface ReactNativeScreenData {
|
|
103
|
-
width: number;
|
|
104
|
-
height: number;
|
|
105
|
-
base64Image: string;
|
|
106
|
-
timestamp: number;
|
|
107
|
-
screenName?: string;
|
|
108
|
-
}
|
|
109
|
-
export interface ReactNativeTouchData {
|
|
110
|
-
pageX: number;
|
|
111
|
-
pageY: number;
|
|
112
|
-
target?: string;
|
|
113
|
-
pressure?: number;
|
|
114
|
-
timestamp: number;
|
|
115
|
-
}
|
|
116
|
-
export interface EventRecorder {
|
|
117
|
-
recordEvent(event: RRWebEvent): void;
|
|
118
|
-
}
|
package/dist/types/rrweb.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MouseInteractionType=exports.IncrementalSource=exports.EventType=void 0;var EventType;(function(EventType){EventType[EventType["DomContentLoaded"]=0]="DomContentLoaded";EventType[EventType["Load"]=1]="Load";EventType[EventType["FullSnapshot"]=2]="FullSnapshot";EventType[EventType["IncrementalSnapshot"]=3]="IncrementalSnapshot";EventType[EventType["Meta"]=4]="Meta";EventType[EventType["Custom"]=5]="Custom";EventType[EventType["Plugin"]=6]="Plugin";})(EventType||(exports.EventType=EventType={}));var IncrementalSource;(function(IncrementalSource){IncrementalSource[IncrementalSource["Mutation"]=0]="Mutation";IncrementalSource[IncrementalSource["MouseMove"]=1]="MouseMove";IncrementalSource[IncrementalSource["MouseInteraction"]=2]="MouseInteraction";IncrementalSource[IncrementalSource["Scroll"]=3]="Scroll";IncrementalSource[IncrementalSource["ViewportResize"]=4]="ViewportResize";IncrementalSource[IncrementalSource["Input"]=5]="Input";IncrementalSource[IncrementalSource["TouchMove"]=6]="TouchMove";IncrementalSource[IncrementalSource["MediaInteraction"]=7]="MediaInteraction";IncrementalSource[IncrementalSource["StyleSheetRule"]=8]="StyleSheetRule";IncrementalSource[IncrementalSource["CanvasMutation"]=9]="CanvasMutation";IncrementalSource[IncrementalSource["Font"]=10]="Font";IncrementalSource[IncrementalSource["Selection"]=11]="Selection";IncrementalSource[IncrementalSource["AdoptedStyleSheet"]=12]="AdoptedStyleSheet";})(IncrementalSource||(exports.IncrementalSource=IncrementalSource={}));var MouseInteractionType;(function(MouseInteractionType){MouseInteractionType[MouseInteractionType["MouseUp"]=0]="MouseUp";MouseInteractionType[MouseInteractionType["MouseDown"]=1]="MouseDown";MouseInteractionType[MouseInteractionType["Click"]=2]="Click";MouseInteractionType[MouseInteractionType["ContextMenu"]=3]="ContextMenu";MouseInteractionType[MouseInteractionType["DblClick"]=4]="DblClick";MouseInteractionType[MouseInteractionType["Focus"]=5]="Focus";MouseInteractionType[MouseInteractionType["Blur"]=6]="Blur";MouseInteractionType[MouseInteractionType["TouchStart"]=7]="TouchStart";MouseInteractionType[MouseInteractionType["TouchMove"]=8]="TouchMove";MouseInteractionType[MouseInteractionType["TouchEnd"]=9]="TouchEnd";MouseInteractionType[MouseInteractionType["TouchCancel"]=10]="TouchCancel";})(MouseInteractionType||(exports.MouseInteractionType=MouseInteractionType={}));
|
package/dist/types/rrweb.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rrweb.js","sourceRoot":"","sources":["../../src/types/rrweb.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAN,IAAY,SAQX;AARD,WAAY,SAAS;IACnB,iEAAoB,CAAA;IACpB,yCAAQ,CAAA;IACR,yDAAgB,CAAA;IAChB,uEAAuB,CAAA;IACvB,yCAAQ,CAAA;IACR,6CAAU,CAAA;IACV,6CAAU,CAAA;AACZ,CAAC,EARW,SAAS,KAAT,SAAS,QAQpB;AAED,MAAM,CAAN,IAAY,iBAcX;AAdD,WAAY,iBAAiB;IAC3B,iEAAY,CAAA;IACZ,mEAAa,CAAA;IACb,iFAAoB,CAAA;IACpB,6DAAU,CAAA;IACV,6EAAkB,CAAA;IAClB,2DAAS,CAAA;IACT,mEAAa,CAAA;IACb,iFAAoB,CAAA;IACpB,6EAAkB,CAAA;IAClB,6EAAkB,CAAA;IAClB,0DAAS,CAAA;IACT,oEAAc,CAAA;IACd,oFAAsB,CAAA;AACxB,CAAC,EAdW,iBAAiB,KAAjB,iBAAiB,QAc5B;AAED,MAAM,CAAN,IAAY,oBAYX;AAZD,WAAY,oBAAoB;IAC9B,qEAAW,CAAA;IACX,yEAAa,CAAA;IACb,iEAAS,CAAA;IACT,6EAAe,CAAA;IACf,uEAAY,CAAA;IACZ,iEAAS,CAAA;IACT,+DAAQ,CAAA;IACR,2EAAc,CAAA;IACd,yEAAa,CAAA;IACb,uEAAY,CAAA;IACZ,8EAAgB,CAAA;AAClB,CAAC,EAZW,oBAAoB,KAApB,oBAAoB,QAY/B"}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Build script to automatically extract app metadata from configuration files
|
|
5
|
-
* This runs without developer intervention and generates app-metadata.ts
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
const fs = require('fs')
|
|
9
|
-
const path = require('path')
|
|
10
|
-
|
|
11
|
-
function findProjectRoot() {
|
|
12
|
-
let currentDir = process.cwd()
|
|
13
|
-
|
|
14
|
-
// Look for package.json going up the directory tree
|
|
15
|
-
while (currentDir !== path.dirname(currentDir)) {
|
|
16
|
-
if (fs.existsSync(path.join(currentDir, 'package.json'))) {
|
|
17
|
-
return currentDir
|
|
18
|
-
}
|
|
19
|
-
currentDir = path.dirname(currentDir)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return process.cwd()
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function extractAppMetadata(projectRoot) {
|
|
26
|
-
const metadata = {
|
|
27
|
-
name: undefined,
|
|
28
|
-
version: undefined,
|
|
29
|
-
bundleId: undefined,
|
|
30
|
-
buildNumber: undefined,
|
|
31
|
-
displayName: undefined,
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
try {
|
|
35
|
-
// Method 1: Try app.json
|
|
36
|
-
const appJsonPath = path.join(projectRoot, 'app.json')
|
|
37
|
-
if (fs.existsSync(appJsonPath)) {
|
|
38
|
-
const appConfig = JSON.parse(fs.readFileSync(appJsonPath, 'utf8'))
|
|
39
|
-
|
|
40
|
-
metadata.name = appConfig.name || appConfig.displayName
|
|
41
|
-
metadata.version = appConfig.version
|
|
42
|
-
metadata.displayName = appConfig.displayName
|
|
43
|
-
|
|
44
|
-
// Extract bundle ID from platform-specific configs
|
|
45
|
-
if (appConfig.ios?.bundleIdentifier) {
|
|
46
|
-
metadata.bundleId = appConfig.ios.bundleIdentifier
|
|
47
|
-
} else if (appConfig.android?.package) {
|
|
48
|
-
metadata.bundleId = appConfig.android.package
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (appConfig.ios?.buildNumber) {
|
|
52
|
-
metadata.buildNumber = appConfig.ios.buildNumber.toString()
|
|
53
|
-
} else if (appConfig.android?.versionCode) {
|
|
54
|
-
metadata.buildNumber = appConfig.android.versionCode.toString()
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
console.log('✅ Extracted metadata from app.json')
|
|
58
|
-
return metadata
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Method 2: Try app.config.js
|
|
62
|
-
const appConfigJsPath = path.join(projectRoot, 'app.config.js')
|
|
63
|
-
if (fs.existsSync(appConfigJsPath)) {
|
|
64
|
-
try {
|
|
65
|
-
// Clear require cache to get fresh config
|
|
66
|
-
delete require.cache[require.resolve(appConfigJsPath)]
|
|
67
|
-
const appConfig = require(appConfigJsPath)
|
|
68
|
-
|
|
69
|
-
metadata.name = appConfig.name || appConfig.displayName
|
|
70
|
-
metadata.version = appConfig.version
|
|
71
|
-
metadata.displayName = appConfig.displayName
|
|
72
|
-
|
|
73
|
-
// Extract bundle ID from platform-specific configs
|
|
74
|
-
if (appConfig.ios?.bundleIdentifier) {
|
|
75
|
-
metadata.bundleId = appConfig.ios.bundleIdentifier
|
|
76
|
-
} else if (appConfig.android?.package) {
|
|
77
|
-
metadata.bundleId = appConfig.android.package
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (appConfig.ios?.buildNumber) {
|
|
81
|
-
metadata.buildNumber = appConfig.ios.buildNumber.toString()
|
|
82
|
-
} else if (appConfig.android?.versionCode) {
|
|
83
|
-
metadata.buildNumber = appConfig.android.versionCode.toString()
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
console.log('✅ Extracted metadata from app.config.js')
|
|
87
|
-
return metadata
|
|
88
|
-
} catch (error) {
|
|
89
|
-
console.warn('⚠️ Could not parse app.config.js:', error.message)
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// Method 3: Fallback to package.json
|
|
94
|
-
const packageJsonPath = path.join(projectRoot, 'package.json')
|
|
95
|
-
if (fs.existsSync(packageJsonPath)) {
|
|
96
|
-
const packageConfig = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
|
|
97
|
-
|
|
98
|
-
metadata.name = packageConfig.name
|
|
99
|
-
metadata.version = packageConfig.version
|
|
100
|
-
|
|
101
|
-
console.log('✅ Extracted metadata from package.json')
|
|
102
|
-
return metadata
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
} catch (error) {
|
|
106
|
-
console.warn('⚠️ Error extracting app metadata:', error.message)
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
return metadata
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
function generateAppMetadataFile(metadata, outputPath) {
|
|
113
|
-
const content = `/**
|
|
114
|
-
* Auto-generated app metadata
|
|
115
|
-
* This file is generated at build time to provide app metadata without developer intervention
|
|
116
|
-
*/
|
|
117
|
-
|
|
118
|
-
// This file is automatically generated by the build process
|
|
119
|
-
// It extracts metadata from app.json, app.config.js, or package.json
|
|
120
|
-
|
|
121
|
-
export interface AppMetadata {
|
|
122
|
-
name?: string
|
|
123
|
-
version?: string
|
|
124
|
-
bundleId?: string
|
|
125
|
-
buildNumber?: string
|
|
126
|
-
displayName?: string
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// Auto-detected values from project configuration files
|
|
130
|
-
export const APP_METADATA: AppMetadata = {
|
|
131
|
-
name: ${metadata.name ? `'${metadata.name}'` : 'undefined'},
|
|
132
|
-
version: ${metadata.version ? `'${metadata.version}'` : 'undefined'},
|
|
133
|
-
bundleId: ${metadata.bundleId ? `'${metadata.bundleId}'` : 'undefined'},
|
|
134
|
-
buildNumber: ${metadata.buildNumber ? `'${metadata.buildNumber}'` : 'undefined'},
|
|
135
|
-
displayName: ${metadata.displayName ? `'${metadata.displayName}'` : 'undefined'},
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Get auto-detected app metadata
|
|
140
|
-
*/
|
|
141
|
-
export function getAutoDetectedAppMetadata(): AppMetadata {
|
|
142
|
-
return { ...APP_METADATA }
|
|
143
|
-
}
|
|
144
|
-
`
|
|
145
|
-
|
|
146
|
-
fs.writeFileSync(outputPath, content, 'utf8')
|
|
147
|
-
console.log(`✅ Generated app-metadata.ts`)
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
function main() {
|
|
151
|
-
const projectRoot = findProjectRoot()
|
|
152
|
-
console.log(`🔍 Looking for app metadata in: ${projectRoot}`)
|
|
153
|
-
|
|
154
|
-
const metadata = extractAppMetadata(projectRoot)
|
|
155
|
-
|
|
156
|
-
// Show what was detected
|
|
157
|
-
console.log('📋 Detected metadata:')
|
|
158
|
-
Object.entries(metadata).forEach(([key, value]) => {
|
|
159
|
-
if (value) {
|
|
160
|
-
console.log(` ${key}: ${value}`)
|
|
161
|
-
}
|
|
162
|
-
})
|
|
163
|
-
|
|
164
|
-
// Generate the TypeScript file
|
|
165
|
-
const outputPath = path.join(__dirname, '../src/utils/app-metadata.ts')
|
|
166
|
-
generateAppMetadataFile(metadata, outputPath)
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
if (require.main === module) {
|
|
170
|
-
main()
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
module.exports = { extractAppMetadata, generateAppMetadataFile }
|