flow-debugger 1.9.3 → 1.9.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,mCAAmC;AACnC,gEAAgE;;;AAEhE,OAAO;AACP,kDAAgE;AAAvD,0GAAA,WAAW,OAAA;AAAE,4GAAA,aAAa,OAAA;AACnC,gDAA2E;AAAlE,sGAAA,QAAQ,OAAA;AAAE,2GAAA,aAAa,OAAA;AAAE,2GAAA,aAAa,OAAA;AAC/C,8CAAmD;AAA1C,4GAAA,eAAe,OAAA;AACxB,8CAA6C;AAApC,sGAAA,SAAS,OAAA;AAClB,sDAAqD;AAA5C,8GAAA,aAAa,OAAA;AACtB,0CAAyC;AAAhC,kGAAA,OAAO,OAAA;AAChB,4CAAgE;AAAvD,0GAAA,cAAc,OAAA;AAAE,yGAAA,aAAa,OAAA;AAkBtC,sCAA8C;AAArC,uGAAA,cAAc,OAAA;AAEvB,eAAe;AACf,8CAAsE;AAA7D,oGAAA,WAAW,OAAA;AAAE,0GAAA,iBAAiB,OAAA;AACvC,8CAAmD;AAA1C,oGAAA,WAAW,OAAA;AACpB,oDAAmD;AAA1C,oGAAA,QAAQ,OAAA;AACjB,8CAAmD;AAA1C,oGAAA,WAAW,OAAA;AACpB,8CAAsE;AAA7D,oGAAA,WAAW,OAAA;AAAE,0GAAA,iBAAiB,OAAA;AACvC,8CAAmD;AAA1C,oGAAA,WAAW,OAAA;AAEpB,aAAa;AACb,gDAAoD;AAA3C,uGAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,mCAAmC;AACnC,gEAAgE;;;AAEhE,OAAO;AACP,kDAAgE;AAAvD,0GAAA,WAAW,OAAA;AAAE,4GAAA,aAAa,OAAA;AACnC,gDAA2E;AAAlE,sGAAA,QAAQ,OAAA;AAAE,2GAAA,aAAa,OAAA;AAAE,2GAAA,aAAa,OAAA;AAC/C,8CAAmD;AAA1C,4GAAA,eAAe,OAAA;AACxB,8CAA6C;AAApC,sGAAA,SAAS,OAAA;AAClB,sDAAqD;AAA5C,8GAAA,aAAa,OAAA;AACtB,0CAAyC;AAAhC,kGAAA,OAAO,OAAA;AAChB,4CAAgE;AAAvD,0GAAA,cAAc,OAAA;AAAE,yGAAA,aAAa,OAAA;AAkBtC,sCAA8C;AAArC,uGAAA,cAAc,OAAA;AAEvB,eAAe;AACf,8CAAsE;AAA7D,oGAAA,WAAW,OAAA;AAAE,0GAAA,iBAAiB,OAAA;AACvC,8CAAmD;AAA1C,oGAAA,WAAW,OAAA;AACpB,oDAAmD;AAA1C,oGAAA,QAAQ,OAAA;AACjB,8CAAmD;AAA1C,oGAAA,WAAW,OAAA;AACpB,8CAAsE;AAA7D,oGAAA,WAAW,OAAA;AAAE,0GAAA,iBAAiB,OAAA;AACvC,8CAAmD;AAA1C,oGAAA,WAAW,OAAA;AAEpB,aAAa;AACb,gDAAoD;AAA3C,uGAAA,YAAY,OAAA;AAGrB,eAAe;AACf,+CAQwB;AAPpB,gHAAA,gBAAgB,OAAA;AAChB,2GAAA,WAAW,OAAA;AACX,6HAAA,6BAA6B,OAAA;AAC7B,sHAAA,sBAAsB,OAAA;AACtB,sHAAA,sBAAsB,OAAA;AACtB,mHAAA,mBAAmB,OAAA;AACnB,4GAAA,YAAY,OAAA"}
@@ -0,0 +1,308 @@
1
+ "use strict";
2
+ // ─────────────────────────────────────────────────────────────
3
+ // flow-debugger — React Native Integration
4
+ // Provides request tracing and manual step tracking for React Native apps
5
+ // ─────────────────────────────────────────────────────────────
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.useDebugger = exports.DebuggerProvider = void 0;
8
+ exports.initializeReactNativeDebugger = initializeReactNativeDebugger;
9
+ exports.getReactNativeDebugger = getReactNativeDebugger;
10
+ exports.withDebugger = withDebugger;
11
+ exports.createFetchInterceptor = createFetchInterceptor;
12
+ exports.traceAsyncOperation = traceAsyncOperation;
13
+ // Conditional React imports to avoid build errors when React is not available
14
+ let React;
15
+ let useState;
16
+ let useEffect;
17
+ let createContext;
18
+ let useContext;
19
+ let useCallback;
20
+ let AsyncStorage;
21
+ try {
22
+ const reactModule = require('react');
23
+ React = reactModule;
24
+ useState = reactModule.useState;
25
+ useEffect = reactModule.useEffect;
26
+ createContext = reactModule.createContext;
27
+ useContext = reactModule.useContext;
28
+ useCallback = reactModule.useCallback;
29
+ }
30
+ catch (e) {
31
+ // React not available, define stubs
32
+ useState = () => [null, () => { }];
33
+ useEffect = () => { };
34
+ createContext = () => ({ Provider: () => null, Consumer: () => null });
35
+ useContext = () => undefined;
36
+ useCallback = (fn) => fn;
37
+ }
38
+ try {
39
+ AsyncStorage = require('@react-native-async-storage/async-storage');
40
+ }
41
+ catch (e) {
42
+ // AsyncStorage not available, create a mock
43
+ AsyncStorage = {
44
+ getItem: async (_key) => null,
45
+ setItem: async (_key, _value) => { },
46
+ removeItem: async (_key) => { }
47
+ };
48
+ }
49
+ // Global storage for traces
50
+ const traceStorageKey = '@flow_debugger_traces';
51
+ // Generate a unique trace ID
52
+ function generateTraceId() {
53
+ const ts = Date.now().toString(36);
54
+ const rand = Math.random().toString(36).substring(2, 8);
55
+ return `rn_${ts}_${rand}`;
56
+ }
57
+ // Context for the debugger
58
+ const DebuggerContext = createContext(undefined);
59
+ // Main React Native Debugger class
60
+ class ReactNativeDebugger {
61
+ constructor(debuggerUrl = 'http://localhost:3500/__debugger', enabled = true) {
62
+ this.traces = new Map();
63
+ this.debuggerUrl = debuggerUrl;
64
+ this.enabled = enabled;
65
+ this.loadTracesFromStorage();
66
+ }
67
+ async loadTracesFromStorage() {
68
+ try {
69
+ const stored = await AsyncStorage.getItem(traceStorageKey);
70
+ if (stored) {
71
+ const parsed = JSON.parse(stored);
72
+ // Convert to Map
73
+ this.traces = new Map(parsed.map((trace) => [trace.traceId, { ...trace, timestamp: new Date(trace.timestamp) }]));
74
+ }
75
+ }
76
+ catch (error) {
77
+ console.warn('Failed to load traces from storage:', error);
78
+ }
79
+ }
80
+ async saveTracesToStorage() {
81
+ try {
82
+ const tracesArray = Array.from(this.traces.values()).map(trace => ({
83
+ ...trace,
84
+ timestamp: trace.timestamp.toISOString()
85
+ }));
86
+ await AsyncStorage.setItem(traceStorageKey, JSON.stringify(tracesArray));
87
+ }
88
+ catch (error) {
89
+ console.warn('Failed to save traces to storage:', error);
90
+ }
91
+ }
92
+ startTrace(endpoint, method = 'GET') {
93
+ if (!this.enabled)
94
+ return '';
95
+ const traceId = generateTraceId();
96
+ const newTrace = {
97
+ traceId,
98
+ endpoint,
99
+ method,
100
+ steps: [],
101
+ totalDuration: 0,
102
+ timestamp: new Date(),
103
+ platform: 'react-native'
104
+ };
105
+ this.traces.set(traceId, newTrace);
106
+ this.saveTracesToStorage();
107
+ return traceId;
108
+ }
109
+ async step(traceId, name, fn, options = {}) {
110
+ if (!this.enabled)
111
+ return fn();
112
+ const trace = this.traces.get(traceId);
113
+ if (!trace) {
114
+ console.warn(`Trace with ID ${traceId} not found`);
115
+ return fn();
116
+ }
117
+ const startTime = Date.now();
118
+ const stepStartOffset = startTime - trace.timestamp.getTime();
119
+ try {
120
+ const result = await fn();
121
+ // Record successful step
122
+ const endTime = Date.now();
123
+ const step = {
124
+ name,
125
+ service: options.service || 'internal',
126
+ status: 'success',
127
+ startTime: startTime - trace.timestamp.getTime(),
128
+ endTime: endTime - trace.timestamp.getTime(),
129
+ duration: endTime - startTime,
130
+ offset: stepStartOffset,
131
+ metadata: options.metadata
132
+ };
133
+ trace.steps.push(step);
134
+ this.saveTracesToStorage();
135
+ return result;
136
+ }
137
+ catch (error) {
138
+ // Record failed step
139
+ const endTime = Date.now();
140
+ const step = {
141
+ name,
142
+ service: options.service || 'internal',
143
+ status: 'error',
144
+ startTime: startTime - trace.timestamp.getTime(),
145
+ endTime: endTime - trace.timestamp.getTime(),
146
+ duration: endTime - startTime,
147
+ offset: stepStartOffset,
148
+ error: error instanceof Error ? error.message : String(error),
149
+ metadata: options.metadata
150
+ };
151
+ trace.steps.push(step);
152
+ this.saveTracesToStorage();
153
+ throw error;
154
+ }
155
+ }
156
+ addManualStep(traceId, name, duration, options = {}) {
157
+ if (!this.enabled)
158
+ return;
159
+ const trace = this.traces.get(traceId);
160
+ if (!trace) {
161
+ console.warn(`Trace with ID ${traceId} not found`);
162
+ return;
163
+ }
164
+ const currentTime = Date.now();
165
+ const step = {
166
+ name,
167
+ service: options.service || 'internal',
168
+ status: 'success',
169
+ startTime: currentTime - trace.timestamp.getTime(),
170
+ endTime: currentTime - trace.timestamp.getTime() + duration,
171
+ duration,
172
+ offset: currentTime - trace.timestamp.getTime(),
173
+ metadata: options.metadata
174
+ };
175
+ trace.steps.push(step);
176
+ this.saveTracesToStorage();
177
+ }
178
+ async sendTrace(traceId) {
179
+ if (!this.enabled)
180
+ return;
181
+ const trace = this.traces.get(traceId);
182
+ if (!trace) {
183
+ console.warn(`Trace with ID ${traceId} not found`);
184
+ return;
185
+ }
186
+ // Calculate total duration
187
+ trace.totalDuration = trace.steps.reduce((sum, step) => sum + step.duration, 0);
188
+ try {
189
+ // Send trace to the main debugger service
190
+ const response = await fetch(this.debuggerUrl, {
191
+ method: 'POST',
192
+ headers: {
193
+ 'Content-Type': 'application/json',
194
+ },
195
+ body: JSON.stringify(trace),
196
+ });
197
+ if (!response.ok) {
198
+ console.warn(`Failed to send trace to debugger: ${response.status}`);
199
+ }
200
+ else {
201
+ // Remove the trace after successful sending
202
+ this.traces.delete(traceId);
203
+ this.saveTracesToStorage();
204
+ }
205
+ }
206
+ catch (error) {
207
+ console.warn('Failed to send trace to debugger:', error);
208
+ }
209
+ }
210
+ async getTraces() {
211
+ return Array.from(this.traces.values());
212
+ }
213
+ async clearTraces() {
214
+ this.traces.clear();
215
+ await AsyncStorage.removeItem(traceStorageKey);
216
+ }
217
+ }
218
+ // Global instance
219
+ let rnDebugger = null;
220
+ function initializeReactNativeDebugger(debuggerUrl, enabled = true) {
221
+ if (!rnDebugger) {
222
+ rnDebugger = new ReactNativeDebugger(debuggerUrl, enabled);
223
+ }
224
+ return rnDebugger;
225
+ }
226
+ function getReactNativeDebugger() {
227
+ return rnDebugger;
228
+ }
229
+ // React Native Debugger Provider Component
230
+ const DebuggerProvider = ({ children, debuggerUrl, enabled = true }) => {
231
+ const [debuggerInstance] = useState(() => initializeReactNativeDebugger(debuggerUrl, enabled));
232
+ const contextValue = {
233
+ startTrace: useCallback((endpoint, method = 'GET') => {
234
+ return debuggerInstance.startTrace(endpoint, method);
235
+ }, [debuggerInstance]),
236
+ step: useCallback(async (traceId, name, fn, options = {}) => {
237
+ return debuggerInstance.step(traceId, name, fn, options);
238
+ }, [debuggerInstance]),
239
+ addManualStep: useCallback((traceId, name, duration, options = {}) => {
240
+ debuggerInstance.addManualStep(traceId, name, duration, options);
241
+ }, [debuggerInstance]),
242
+ sendTrace: useCallback(async (traceId) => {
243
+ return debuggerInstance.sendTrace(traceId);
244
+ }, [debuggerInstance]),
245
+ getTraces: useCallback(async () => {
246
+ return debuggerInstance.getTraces();
247
+ }, [debuggerInstance])
248
+ };
249
+ return React.createElement(DebuggerContext.Provider, { value: contextValue }, children);
250
+ };
251
+ exports.DebuggerProvider = DebuggerProvider;
252
+ // Hook to use the debugger in components
253
+ const useDebugger = () => {
254
+ const context = useContext(DebuggerContext);
255
+ if (context === undefined) {
256
+ throw new Error('useDebugger must be used within a DebuggerProvider');
257
+ }
258
+ return context;
259
+ };
260
+ exports.useDebugger = useDebugger;
261
+ // Higher-order component for wrapping components with debugger context
262
+ function withDebugger(Component) {
263
+ return function WrappedComponent(props) {
264
+ const debuggerContext = (0, exports.useDebugger)();
265
+ return React.createElement(Component, { ...props, debugger: debuggerContext });
266
+ };
267
+ }
268
+ // Interceptor for fetch requests to automatically trace them
269
+ function createFetchInterceptor(debuggerUrl) {
270
+ const originalFetch = global.fetch;
271
+ return async (url, options) => {
272
+ if (!rnDebugger) {
273
+ rnDebugger = new ReactNativeDebugger(debuggerUrl);
274
+ }
275
+ // Start a trace for this fetch request
276
+ const traceId = rnDebugger.startTrace(url.toString(), options?.method || 'GET');
277
+ try {
278
+ // Execute the fetch request with tracing
279
+ const result = await rnDebugger.step(traceId, `FETCH ${url.toString()}`, () => originalFetch(url, options), { service: 'external' });
280
+ // Send the trace to the debugger service
281
+ await rnDebugger.sendTrace(traceId);
282
+ return result;
283
+ }
284
+ catch (error) {
285
+ // Send the trace even if the request failed
286
+ await rnDebugger.sendTrace(traceId);
287
+ throw error;
288
+ }
289
+ };
290
+ }
291
+ // Utility function to trace async operations manually
292
+ async function traceAsyncOperation(endpoint, operationName, operation, service = 'internal') {
293
+ if (!rnDebugger) {
294
+ // If not initialized, just run the operation without tracing
295
+ return operation();
296
+ }
297
+ const traceId = rnDebugger.startTrace(endpoint);
298
+ try {
299
+ const result = await rnDebugger.step(traceId, operationName, operation, { service });
300
+ await rnDebugger.sendTrace(traceId);
301
+ return result;
302
+ }
303
+ catch (error) {
304
+ await rnDebugger.sendTrace(traceId);
305
+ throw error;
306
+ }
307
+ }
308
+ //# sourceMappingURL=react_native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react_native.js","sourceRoot":"","sources":["../../src/react_native.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,2CAA2C;AAC3C,0EAA0E;AAC1E,gEAAgE;;;AAwRhE,sEAKC;AAED,wDAEC;AAyDD,oCAQC;AAGD,wDA8BC;AAGD,kDAqBC;AArXD,8EAA8E;AAC9E,IAAI,KAAU,CAAC;AACf,IAAI,QAAa,CAAC;AAClB,IAAI,SAAc,CAAC;AACnB,IAAI,aAAkB,CAAC;AACvB,IAAI,UAAe,CAAC;AACpB,IAAI,WAAgB,CAAC;AACrB,IAAI,YAAiB,CAAC;AAEtB,IAAI,CAAC;IACH,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,KAAK,GAAG,WAAW,CAAC;IACpB,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;IAChC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;IAClC,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;IAC1C,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;IACpC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;AACxC,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,oCAAoC;IACpC,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAClC,SAAS,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IACrB,aAAa,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,UAAU,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;IAC7B,WAAW,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC;AAChC,CAAC;AAED,IAAI,CAAC;IACH,YAAY,GAAG,OAAO,CAAC,2CAA2C,CAAC,CAAC;AACtE,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,4CAA4C;IAC5C,YAAY,GAAG;QACb,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI;QACrC,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,MAAc,EAAE,EAAE,GAAE,CAAC;QACnD,UAAU,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE,GAAE,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,4BAA4B;AAC5B,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD,6BAA6B;AAC7B,SAAS,eAAe;IACtB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,OAAO,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,2BAA2B;AAC3B,MAAM,eAAe,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;AAEjD,mCAAmC;AACnC,MAAM,mBAAmB;IAKvB,YAAY,cAAsB,kCAAkC,EAAE,UAAmB,IAAI;QAJrF,WAAM,GAAuB,IAAI,GAAG,EAAE,CAAC;QAK7C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAC3D,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAClC,iBAAiB;gBACjB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC/B,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACjE,GAAG,KAAK;gBACR,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE;aACzC,CAAC,CAAC,CAAC;YACJ,MAAM,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAEM,UAAU,CAAC,QAAgB,EAAE,SAAiB,KAAK;QACxD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAE7B,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAU;YACtB,OAAO;YACP,QAAQ;YACR,MAAM;YACN,KAAK,EAAE,EAAE;YACT,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,QAAQ,EAAE,cAAc;SACzB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,IAAI,CACf,OAAe,EACf,IAAY,EACZ,EAAoB,EACpB,UAAuB,EAAE;QAEzB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,EAAE,CAAC;QAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,iBAAiB,OAAO,YAAY,CAAC,CAAC;YACnD,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,eAAe,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAE9D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;YAE1B,yBAAyB;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAc;gBACtB,IAAI;gBACJ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,UAAU;gBACtC,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;gBAChD,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;gBAC5C,QAAQ,EAAE,OAAO,GAAG,SAAS;gBAC7B,MAAM,EAAE,eAAe;gBACvB,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;YAEF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE3B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAqB;YACrB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAc;gBACtB,IAAI;gBACJ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,UAAU;gBACtC,MAAM,EAAE,OAAO;gBACf,SAAS,EAAE,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;gBAChD,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;gBAC5C,QAAQ,EAAE,OAAO,GAAG,SAAS;gBAC7B,MAAM,EAAE,eAAe;gBACvB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;YAEF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE3B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEM,aAAa,CAClB,OAAe,EACf,IAAY,EACZ,QAAgB,EAChB,UAAuB,EAAE;QAEzB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,iBAAiB,OAAO,YAAY,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAc;YACtB,IAAI;YACJ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,UAAU;YACtC,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;YAClD,OAAO,EAAE,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,QAAQ;YAC3D,QAAQ;YACR,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;YAC/C,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;QAEF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,OAAe;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,iBAAiB,OAAO,YAAY,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,2BAA2B;QAC3B,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEhF,IAAI,CAAC;YACH,0CAA0C;YAC1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC7C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;aAC5B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,qCAAqC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,4CAA4C;gBAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5B,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAEM,KAAK,CAAC,WAAW;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IACjD,CAAC;CACF;AAED,kBAAkB;AAClB,IAAI,UAAU,GAA+B,IAAI,CAAC;AAElD,SAAgB,6BAA6B,CAAC,WAAoB,EAAE,UAAmB,IAAI;IACzF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,IAAI,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,sBAAsB;IACpC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,2CAA2C;AACpC,MAAM,gBAAgB,GAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI,EAI5E,EAAE,EAAE;IACH,MAAM,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,6BAA6B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/F,MAAM,YAAY,GAAwB;QACxC,UAAU,EAAE,WAAW,CAAC,CAAC,QAAgB,EAAE,SAAiB,KAAK,EAAE,EAAE;YACnE,OAAO,gBAAgB,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;QAEtB,IAAI,EAAE,WAAW,CACf,KAAK,EAAE,OAAe,EAAE,IAAY,EAAE,EAAsB,EAAE,UAAuB,EAAE,EAAE,EAAE;YACzF,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC,EACD,CAAC,gBAAgB,CAAC,CACZ;QAER,aAAa,EAAE,WAAW,CAAC,CACzB,OAAe,EACf,IAAY,EACZ,QAAgB,EAChB,UAAuB,EAAE,EACzB,EAAE;YACF,gBAAgB,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnE,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;QAEtB,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;YAC/C,OAAO,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;QAEtB,SAAS,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE;YAChC,OAAO,gBAAgB,CAAC,SAAS,EAAE,CAAC;QACtC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;KACvB,CAAC;IAEF,OAAO,KAAK,CAAC,aAAa,CACxB,eAAe,CAAC,QAAQ,EACxB,EAAE,KAAK,EAAE,YAAY,EAAE,EACvB,QAAQ,CACT,CAAC;AACJ,CAAC,CAAC;AA1CW,QAAA,gBAAgB,oBA0C3B;AAEF,yCAAyC;AAClC,MAAM,WAAW,GAAG,GAAwB,EAAE;IACnD,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AANW,QAAA,WAAW,eAMtB;AAEF,uEAAuE;AACvE,SAAgB,YAAY,CAC1B,SAAc;IAEd,OAAO,SAAS,gBAAgB,CAAC,KAAQ;QACvC,MAAM,eAAe,GAAG,IAAA,mBAAW,GAAE,CAAC;QAEtC,OAAO,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,SAAgB,sBAAsB,CAAC,WAAoB;IACzD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;IAEnC,OAAO,KAAK,EAAE,GAA2B,EAAE,OAAqB,EAAE,EAAE;QAClE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,UAAU,GAAG,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACpD,CAAC;QAED,uCAAuC;QACvC,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC;QAEhF,IAAI,CAAC;YACH,yCAAyC;YACzC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAClC,OAAO,EACP,SAAS,GAAG,CAAC,QAAQ,EAAE,EAAE,EACzB,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,EACjC,EAAE,OAAO,EAAE,UAAU,EAAE,CACxB,CAAC;YAEF,yCAAyC;YACzC,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAEpC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4CAA4C;YAC5C,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,sDAAsD;AAC/C,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,aAAqB,EACrB,SAA2B,EAC3B,UAAkB,UAAU;IAE5B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,6DAA6D;QAC7D,OAAO,SAAS,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACrF,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
package/dist/esm/index.js CHANGED
@@ -19,4 +19,6 @@ export { fetchTracer, removeFetchTracer } from './integrations/fetch';
19
19
  export { axiosTracer } from './integrations/axios';
20
20
  // Middleware
21
21
  export { flowDebugger } from './middleware/express';
22
+ // React Native
23
+ export { DebuggerProvider, useDebugger, initializeReactNativeDebugger, getReactNativeDebugger, createFetchInterceptor, traceAsyncOperation, withDebugger } from './react_native';
22
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,mCAAmC;AACnC,gEAAgE;AAEhE,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAkBhE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,aAAa;AACb,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,mCAAmC;AACnC,gEAAgE;AAEhE,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAkBhE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,aAAa;AACb,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,eAAe;AACf,OAAO,EACH,gBAAgB,EAChB,WAAW,EACX,6BAA6B,EAC7B,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACf,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,298 @@
1
+ // ─────────────────────────────────────────────────────────────
2
+ // flow-debugger — React Native Integration
3
+ // Provides request tracing and manual step tracking for React Native apps
4
+ // ─────────────────────────────────────────────────────────────
5
+ // Conditional React imports to avoid build errors when React is not available
6
+ let React;
7
+ let useState;
8
+ let useEffect;
9
+ let createContext;
10
+ let useContext;
11
+ let useCallback;
12
+ let AsyncStorage;
13
+ try {
14
+ const reactModule = require('react');
15
+ React = reactModule;
16
+ useState = reactModule.useState;
17
+ useEffect = reactModule.useEffect;
18
+ createContext = reactModule.createContext;
19
+ useContext = reactModule.useContext;
20
+ useCallback = reactModule.useCallback;
21
+ }
22
+ catch (e) {
23
+ // React not available, define stubs
24
+ useState = () => [null, () => { }];
25
+ useEffect = () => { };
26
+ createContext = () => ({ Provider: () => null, Consumer: () => null });
27
+ useContext = () => undefined;
28
+ useCallback = (fn) => fn;
29
+ }
30
+ try {
31
+ AsyncStorage = require('@react-native-async-storage/async-storage');
32
+ }
33
+ catch (e) {
34
+ // AsyncStorage not available, create a mock
35
+ AsyncStorage = {
36
+ getItem: async (_key) => null,
37
+ setItem: async (_key, _value) => { },
38
+ removeItem: async (_key) => { }
39
+ };
40
+ }
41
+ // Global storage for traces
42
+ const traceStorageKey = '@flow_debugger_traces';
43
+ // Generate a unique trace ID
44
+ function generateTraceId() {
45
+ const ts = Date.now().toString(36);
46
+ const rand = Math.random().toString(36).substring(2, 8);
47
+ return `rn_${ts}_${rand}`;
48
+ }
49
+ // Context for the debugger
50
+ const DebuggerContext = createContext(undefined);
51
+ // Main React Native Debugger class
52
+ class ReactNativeDebugger {
53
+ constructor(debuggerUrl = 'http://localhost:3500/__debugger', enabled = true) {
54
+ this.traces = new Map();
55
+ this.debuggerUrl = debuggerUrl;
56
+ this.enabled = enabled;
57
+ this.loadTracesFromStorage();
58
+ }
59
+ async loadTracesFromStorage() {
60
+ try {
61
+ const stored = await AsyncStorage.getItem(traceStorageKey);
62
+ if (stored) {
63
+ const parsed = JSON.parse(stored);
64
+ // Convert to Map
65
+ this.traces = new Map(parsed.map((trace) => [trace.traceId, { ...trace, timestamp: new Date(trace.timestamp) }]));
66
+ }
67
+ }
68
+ catch (error) {
69
+ console.warn('Failed to load traces from storage:', error);
70
+ }
71
+ }
72
+ async saveTracesToStorage() {
73
+ try {
74
+ const tracesArray = Array.from(this.traces.values()).map(trace => ({
75
+ ...trace,
76
+ timestamp: trace.timestamp.toISOString()
77
+ }));
78
+ await AsyncStorage.setItem(traceStorageKey, JSON.stringify(tracesArray));
79
+ }
80
+ catch (error) {
81
+ console.warn('Failed to save traces to storage:', error);
82
+ }
83
+ }
84
+ startTrace(endpoint, method = 'GET') {
85
+ if (!this.enabled)
86
+ return '';
87
+ const traceId = generateTraceId();
88
+ const newTrace = {
89
+ traceId,
90
+ endpoint,
91
+ method,
92
+ steps: [],
93
+ totalDuration: 0,
94
+ timestamp: new Date(),
95
+ platform: 'react-native'
96
+ };
97
+ this.traces.set(traceId, newTrace);
98
+ this.saveTracesToStorage();
99
+ return traceId;
100
+ }
101
+ async step(traceId, name, fn, options = {}) {
102
+ if (!this.enabled)
103
+ return fn();
104
+ const trace = this.traces.get(traceId);
105
+ if (!trace) {
106
+ console.warn(`Trace with ID ${traceId} not found`);
107
+ return fn();
108
+ }
109
+ const startTime = Date.now();
110
+ const stepStartOffset = startTime - trace.timestamp.getTime();
111
+ try {
112
+ const result = await fn();
113
+ // Record successful step
114
+ const endTime = Date.now();
115
+ const step = {
116
+ name,
117
+ service: options.service || 'internal',
118
+ status: 'success',
119
+ startTime: startTime - trace.timestamp.getTime(),
120
+ endTime: endTime - trace.timestamp.getTime(),
121
+ duration: endTime - startTime,
122
+ offset: stepStartOffset,
123
+ metadata: options.metadata
124
+ };
125
+ trace.steps.push(step);
126
+ this.saveTracesToStorage();
127
+ return result;
128
+ }
129
+ catch (error) {
130
+ // Record failed step
131
+ const endTime = Date.now();
132
+ const step = {
133
+ name,
134
+ service: options.service || 'internal',
135
+ status: 'error',
136
+ startTime: startTime - trace.timestamp.getTime(),
137
+ endTime: endTime - trace.timestamp.getTime(),
138
+ duration: endTime - startTime,
139
+ offset: stepStartOffset,
140
+ error: error instanceof Error ? error.message : String(error),
141
+ metadata: options.metadata
142
+ };
143
+ trace.steps.push(step);
144
+ this.saveTracesToStorage();
145
+ throw error;
146
+ }
147
+ }
148
+ addManualStep(traceId, name, duration, options = {}) {
149
+ if (!this.enabled)
150
+ return;
151
+ const trace = this.traces.get(traceId);
152
+ if (!trace) {
153
+ console.warn(`Trace with ID ${traceId} not found`);
154
+ return;
155
+ }
156
+ const currentTime = Date.now();
157
+ const step = {
158
+ name,
159
+ service: options.service || 'internal',
160
+ status: 'success',
161
+ startTime: currentTime - trace.timestamp.getTime(),
162
+ endTime: currentTime - trace.timestamp.getTime() + duration,
163
+ duration,
164
+ offset: currentTime - trace.timestamp.getTime(),
165
+ metadata: options.metadata
166
+ };
167
+ trace.steps.push(step);
168
+ this.saveTracesToStorage();
169
+ }
170
+ async sendTrace(traceId) {
171
+ if (!this.enabled)
172
+ return;
173
+ const trace = this.traces.get(traceId);
174
+ if (!trace) {
175
+ console.warn(`Trace with ID ${traceId} not found`);
176
+ return;
177
+ }
178
+ // Calculate total duration
179
+ trace.totalDuration = trace.steps.reduce((sum, step) => sum + step.duration, 0);
180
+ try {
181
+ // Send trace to the main debugger service
182
+ const response = await fetch(this.debuggerUrl, {
183
+ method: 'POST',
184
+ headers: {
185
+ 'Content-Type': 'application/json',
186
+ },
187
+ body: JSON.stringify(trace),
188
+ });
189
+ if (!response.ok) {
190
+ console.warn(`Failed to send trace to debugger: ${response.status}`);
191
+ }
192
+ else {
193
+ // Remove the trace after successful sending
194
+ this.traces.delete(traceId);
195
+ this.saveTracesToStorage();
196
+ }
197
+ }
198
+ catch (error) {
199
+ console.warn('Failed to send trace to debugger:', error);
200
+ }
201
+ }
202
+ async getTraces() {
203
+ return Array.from(this.traces.values());
204
+ }
205
+ async clearTraces() {
206
+ this.traces.clear();
207
+ await AsyncStorage.removeItem(traceStorageKey);
208
+ }
209
+ }
210
+ // Global instance
211
+ let rnDebugger = null;
212
+ export function initializeReactNativeDebugger(debuggerUrl, enabled = true) {
213
+ if (!rnDebugger) {
214
+ rnDebugger = new ReactNativeDebugger(debuggerUrl, enabled);
215
+ }
216
+ return rnDebugger;
217
+ }
218
+ export function getReactNativeDebugger() {
219
+ return rnDebugger;
220
+ }
221
+ // React Native Debugger Provider Component
222
+ export const DebuggerProvider = ({ children, debuggerUrl, enabled = true }) => {
223
+ const [debuggerInstance] = useState(() => initializeReactNativeDebugger(debuggerUrl, enabled));
224
+ const contextValue = {
225
+ startTrace: useCallback((endpoint, method = 'GET') => {
226
+ return debuggerInstance.startTrace(endpoint, method);
227
+ }, [debuggerInstance]),
228
+ step: useCallback(async (traceId, name, fn, options = {}) => {
229
+ return debuggerInstance.step(traceId, name, fn, options);
230
+ }, [debuggerInstance]),
231
+ addManualStep: useCallback((traceId, name, duration, options = {}) => {
232
+ debuggerInstance.addManualStep(traceId, name, duration, options);
233
+ }, [debuggerInstance]),
234
+ sendTrace: useCallback(async (traceId) => {
235
+ return debuggerInstance.sendTrace(traceId);
236
+ }, [debuggerInstance]),
237
+ getTraces: useCallback(async () => {
238
+ return debuggerInstance.getTraces();
239
+ }, [debuggerInstance])
240
+ };
241
+ return React.createElement(DebuggerContext.Provider, { value: contextValue }, children);
242
+ };
243
+ // Hook to use the debugger in components
244
+ export const useDebugger = () => {
245
+ const context = useContext(DebuggerContext);
246
+ if (context === undefined) {
247
+ throw new Error('useDebugger must be used within a DebuggerProvider');
248
+ }
249
+ return context;
250
+ };
251
+ // Higher-order component for wrapping components with debugger context
252
+ export function withDebugger(Component) {
253
+ return function WrappedComponent(props) {
254
+ const debuggerContext = useDebugger();
255
+ return React.createElement(Component, { ...props, debugger: debuggerContext });
256
+ };
257
+ }
258
+ // Interceptor for fetch requests to automatically trace them
259
+ export function createFetchInterceptor(debuggerUrl) {
260
+ const originalFetch = global.fetch;
261
+ return async (url, options) => {
262
+ if (!rnDebugger) {
263
+ rnDebugger = new ReactNativeDebugger(debuggerUrl);
264
+ }
265
+ // Start a trace for this fetch request
266
+ const traceId = rnDebugger.startTrace(url.toString(), options?.method || 'GET');
267
+ try {
268
+ // Execute the fetch request with tracing
269
+ const result = await rnDebugger.step(traceId, `FETCH ${url.toString()}`, () => originalFetch(url, options), { service: 'external' });
270
+ // Send the trace to the debugger service
271
+ await rnDebugger.sendTrace(traceId);
272
+ return result;
273
+ }
274
+ catch (error) {
275
+ // Send the trace even if the request failed
276
+ await rnDebugger.sendTrace(traceId);
277
+ throw error;
278
+ }
279
+ };
280
+ }
281
+ // Utility function to trace async operations manually
282
+ export async function traceAsyncOperation(endpoint, operationName, operation, service = 'internal') {
283
+ if (!rnDebugger) {
284
+ // If not initialized, just run the operation without tracing
285
+ return operation();
286
+ }
287
+ const traceId = rnDebugger.startTrace(endpoint);
288
+ try {
289
+ const result = await rnDebugger.step(traceId, operationName, operation, { service });
290
+ await rnDebugger.sendTrace(traceId);
291
+ return result;
292
+ }
293
+ catch (error) {
294
+ await rnDebugger.sendTrace(traceId);
295
+ throw error;
296
+ }
297
+ }
298
+ //# sourceMappingURL=react_native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react_native.js","sourceRoot":"","sources":["../../src/react_native.ts"],"names":[],"mappings":"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"}