react-native-ai-debugger 1.0.10 → 1.0.12

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 (46) hide show
  1. package/README.md +165 -8
  2. package/build/core/android.js +2 -2
  3. package/build/core/android.js.map +1 -1
  4. package/build/core/bundle.d.ts.map +1 -1
  5. package/build/core/bundle.js +51 -1
  6. package/build/core/bundle.js.map +1 -1
  7. package/build/core/connection.d.ts +2 -2
  8. package/build/core/connection.d.ts.map +1 -1
  9. package/build/core/connection.js +120 -7
  10. package/build/core/connection.js.map +1 -1
  11. package/build/core/connectionState.d.ts +79 -0
  12. package/build/core/connectionState.d.ts.map +1 -0
  13. package/build/core/connectionState.js +202 -0
  14. package/build/core/connectionState.js.map +1 -0
  15. package/build/core/httpServer.d.ts.map +1 -1
  16. package/build/core/httpServer.js +60 -1
  17. package/build/core/httpServer.js.map +1 -1
  18. package/build/core/httpServerProcess.d.ts +25 -0
  19. package/build/core/httpServerProcess.d.ts.map +1 -0
  20. package/build/core/httpServerProcess.js +153 -0
  21. package/build/core/httpServerProcess.js.map +1 -0
  22. package/build/core/index.d.ts +6 -2
  23. package/build/core/index.d.ts.map +1 -1
  24. package/build/core/index.js +8 -2
  25. package/build/core/index.js.map +1 -1
  26. package/build/core/ios.d.ts +10 -0
  27. package/build/core/ios.d.ts.map +1 -1
  28. package/build/core/ios.js +101 -67
  29. package/build/core/ios.js.map +1 -1
  30. package/build/core/ocr.d.ts +70 -0
  31. package/build/core/ocr.d.ts.map +1 -0
  32. package/build/core/ocr.js +322 -0
  33. package/build/core/ocr.js.map +1 -0
  34. package/build/core/state.d.ts +3 -0
  35. package/build/core/state.d.ts.map +1 -1
  36. package/build/core/state.js +17 -0
  37. package/build/core/state.js.map +1 -1
  38. package/build/core/types.d.ts +29 -0
  39. package/build/core/types.d.ts.map +1 -1
  40. package/build/httpServerStandalone.d.ts +7 -0
  41. package/build/httpServerStandalone.d.ts.map +1 -0
  42. package/build/httpServerStandalone.js +31 -0
  43. package/build/httpServerStandalone.js.map +1 -0
  44. package/build/index.js +280 -14
  45. package/build/index.js.map +1 -1
  46. package/package.json +8 -3
@@ -1,6 +1,9 @@
1
1
  import WebSocket from "ws";
2
- import { connectedApps, pendingExecutions, getNextMessageId, logBuffer, networkBuffer } from "./state.js";
2
+ import { connectedApps, pendingExecutions, getNextMessageId, logBuffer, networkBuffer, setActiveSimulatorUdid, clearActiveSimulatorIfSource } from "./state.js";
3
3
  import { mapConsoleType } from "./logs.js";
4
+ import { findSimulatorByName } from "./ios.js";
5
+ import { fetchDevices, selectMainDevice } from "./metro.js";
6
+ import { DEFAULT_RECONNECTION_CONFIG, initConnectionState, updateConnectionState, getConnectionState, recordConnectionGap, closeConnectionGap, saveConnectionMetadata, getConnectionMetadata, saveReconnectionTimer, cancelReconnectionTimer, calculateBackoffDelay } from "./connectionState.js";
4
7
  // Format CDP RemoteObject to readable string
5
8
  export function formatRemoteObject(result) {
6
9
  if (result.type === "undefined") {
@@ -160,18 +163,40 @@ export function handleCDPMessage(message, _device) {
160
163
  }
161
164
  }
162
165
  // Connect to a device via CDP WebSocket
163
- export async function connectToDevice(device, port) {
166
+ export async function connectToDevice(device, port, options = {}) {
167
+ const { isReconnection = false, reconnectionConfig = DEFAULT_RECONNECTION_CONFIG } = options;
164
168
  return new Promise((resolve, reject) => {
165
169
  const appKey = `${port}-${device.id}`;
166
170
  if (connectedApps.has(appKey)) {
167
171
  resolve(`Already connected to ${device.title}`);
168
172
  return;
169
173
  }
174
+ // Cancel any pending reconnection timer for this appKey
175
+ cancelReconnectionTimer(appKey);
176
+ // Save connection metadata for potential reconnection
177
+ saveConnectionMetadata(appKey, {
178
+ port,
179
+ deviceInfo: device,
180
+ webSocketUrl: device.webSocketDebuggerUrl
181
+ });
170
182
  try {
171
183
  const ws = new WebSocket(device.webSocketDebuggerUrl);
172
- ws.on("open", () => {
184
+ ws.on("open", async () => {
173
185
  connectedApps.set(appKey, { ws, deviceInfo: device, port });
174
- console.error(`[rn-ai-debugger] Connected to ${device.title}`);
186
+ // Initialize or update connection state
187
+ if (isReconnection) {
188
+ closeConnectionGap(appKey);
189
+ updateConnectionState(appKey, {
190
+ status: "connected",
191
+ lastConnectedTime: new Date(),
192
+ reconnectionAttempts: 0
193
+ });
194
+ console.error(`[rn-ai-debugger] Reconnected to ${device.title}`);
195
+ }
196
+ else {
197
+ initConnectionState(appKey);
198
+ console.error(`[rn-ai-debugger] Connected to ${device.title}`);
199
+ }
175
200
  // Enable Runtime domain to receive console messages
176
201
  ws.send(JSON.stringify({
177
202
  id: getNextMessageId(),
@@ -187,6 +212,15 @@ export async function connectToDevice(device, port) {
187
212
  id: getNextMessageId(),
188
213
  method: "Network.enable"
189
214
  }));
215
+ // Try to resolve iOS simulator UDID from device name
216
+ // This enables automatic device scoping for iOS tools
217
+ if (device.deviceName) {
218
+ const simulatorUdid = await findSimulatorByName(device.deviceName);
219
+ if (simulatorUdid) {
220
+ setActiveSimulatorUdid(simulatorUdid, appKey);
221
+ console.error(`[rn-ai-debugger] Linked to iOS simulator: ${simulatorUdid}`);
222
+ }
223
+ }
190
224
  resolve(`Connected to ${device.title} (${device.deviceName})`);
191
225
  });
192
226
  ws.on("message", (data) => {
@@ -200,25 +234,104 @@ export async function connectToDevice(device, port) {
200
234
  });
201
235
  ws.on("close", () => {
202
236
  connectedApps.delete(appKey);
237
+ // Clear active simulator UDID if this connection set it
238
+ clearActiveSimulatorIfSource(appKey);
239
+ // Record the gap and trigger reconnection
240
+ recordConnectionGap(appKey, "Connection closed");
241
+ updateConnectionState(appKey, {
242
+ status: "disconnected",
243
+ lastDisconnectTime: new Date()
244
+ });
203
245
  console.error(`[rn-ai-debugger] Disconnected from ${device.title}`);
246
+ // Schedule auto-reconnection if enabled
247
+ if (reconnectionConfig.enabled) {
248
+ scheduleReconnection(appKey, reconnectionConfig);
249
+ }
204
250
  });
205
251
  ws.on("error", (error) => {
206
252
  connectedApps.delete(appKey);
207
- reject(`Failed to connect to ${device.title}: ${error.message}`);
253
+ // Clear active simulator UDID if this connection set it
254
+ clearActiveSimulatorIfSource(appKey);
255
+ // Only reject if this is initial connection, not reconnection attempt
256
+ if (!isReconnection) {
257
+ reject(`Failed to connect to ${device.title}: ${error.message}`);
258
+ }
259
+ else {
260
+ console.error(`[rn-ai-debugger] Reconnection error: ${error.message}`);
261
+ }
208
262
  });
209
263
  // Timeout after 5 seconds
210
264
  setTimeout(() => {
211
265
  if (ws.readyState !== WebSocket.OPEN) {
212
266
  ws.terminate();
213
- reject(`Connection to ${device.title} timed out`);
267
+ if (!isReconnection) {
268
+ reject(`Connection to ${device.title} timed out`);
269
+ }
214
270
  }
215
271
  }, 5000);
216
272
  }
217
273
  catch (error) {
218
- reject(`Failed to create WebSocket connection: ${error}`);
274
+ if (!isReconnection) {
275
+ reject(`Failed to create WebSocket connection: ${error}`);
276
+ }
219
277
  }
220
278
  });
221
279
  }
280
+ /**
281
+ * Schedule a reconnection attempt with exponential backoff
282
+ */
283
+ function scheduleReconnection(appKey, config = DEFAULT_RECONNECTION_CONFIG) {
284
+ const state = getConnectionState(appKey);
285
+ if (!state)
286
+ return;
287
+ const attempts = state.reconnectionAttempts;
288
+ if (attempts >= config.maxAttempts) {
289
+ console.error(`[rn-ai-debugger] Max reconnection attempts (${config.maxAttempts}) reached for ${appKey}`);
290
+ updateConnectionState(appKey, { status: "disconnected" });
291
+ return;
292
+ }
293
+ const delay = calculateBackoffDelay(attempts, config);
294
+ console.error(`[rn-ai-debugger] Scheduling reconnection attempt ${attempts + 1}/${config.maxAttempts} in ${delay}ms`);
295
+ updateConnectionState(appKey, {
296
+ status: "reconnecting",
297
+ reconnectionAttempts: attempts + 1
298
+ });
299
+ const timer = setTimeout(() => {
300
+ attemptReconnection(appKey, config);
301
+ }, delay);
302
+ saveReconnectionTimer(appKey, timer);
303
+ }
304
+ /**
305
+ * Attempt to reconnect to a previously connected device
306
+ */
307
+ async function attemptReconnection(appKey, config = DEFAULT_RECONNECTION_CONFIG) {
308
+ const metadata = getConnectionMetadata(appKey);
309
+ if (!metadata) {
310
+ console.error(`[rn-ai-debugger] No metadata for reconnection: ${appKey}`);
311
+ return false;
312
+ }
313
+ try {
314
+ // Re-fetch devices to get fresh WebSocket URL (may have changed)
315
+ const devices = await fetchDevices(metadata.port);
316
+ // Try to find the same device first, otherwise select main device
317
+ const device = devices.find(d => d.id === metadata.deviceInfo.id)
318
+ || selectMainDevice(devices);
319
+ if (!device) {
320
+ console.error(`[rn-ai-debugger] Device no longer available for ${appKey}`);
321
+ // Schedule next attempt
322
+ scheduleReconnection(appKey, config);
323
+ return false;
324
+ }
325
+ await connectToDevice(device, metadata.port, { isReconnection: true, reconnectionConfig: config });
326
+ return true;
327
+ }
328
+ catch (error) {
329
+ console.error(`[rn-ai-debugger] Reconnection failed: ${error}`);
330
+ // Schedule next attempt
331
+ scheduleReconnection(appKey, config);
332
+ return false;
333
+ }
334
+ }
222
335
  // Get list of connected apps
223
336
  export function getConnectedApps() {
224
337
  return Array.from(connectedApps.entries()).map(([key, app]) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/core/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/core/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { ConnectionState, ConnectionGap, ConnectionMetadata, ReconnectionConfig } from "./types.js";
2
+ export declare const DEFAULT_RECONNECTION_CONFIG: ReconnectionConfig;
3
+ /**
4
+ * Initialize connection state for a new connection
5
+ */
6
+ export declare function initConnectionState(appKey: string): ConnectionState;
7
+ /**
8
+ * Update connection state with partial updates
9
+ */
10
+ export declare function updateConnectionState(appKey: string, updates: Partial<ConnectionState>): void;
11
+ /**
12
+ * Get connection state for an appKey
13
+ */
14
+ export declare function getConnectionState(appKey: string): ConnectionState | null;
15
+ /**
16
+ * Get all connection states
17
+ */
18
+ export declare function getAllConnectionStates(): Map<string, ConnectionState>;
19
+ /**
20
+ * Record the start of a connection gap
21
+ */
22
+ export declare function recordConnectionGap(appKey: string, reason: string): void;
23
+ /**
24
+ * Close the most recent connection gap when reconnected
25
+ */
26
+ export declare function closeConnectionGap(appKey: string): void;
27
+ /**
28
+ * Get recent connection gaps across all connections within a time window
29
+ */
30
+ export declare function getRecentGaps(maxAgeMs: number): ConnectionGap[];
31
+ /**
32
+ * Check if there was a recent disconnect for a specific connection
33
+ */
34
+ export declare function hasRecentDisconnect(appKey: string, withinMs: number): boolean;
35
+ /**
36
+ * Save connection metadata for potential reconnection
37
+ */
38
+ export declare function saveConnectionMetadata(appKey: string, metadata: ConnectionMetadata): void;
39
+ /**
40
+ * Get connection metadata for reconnection
41
+ */
42
+ export declare function getConnectionMetadata(appKey: string): ConnectionMetadata | null;
43
+ /**
44
+ * Clear connection metadata (when giving up on reconnection)
45
+ */
46
+ export declare function clearConnectionMetadata(appKey: string): void;
47
+ /**
48
+ * Get all connection metadata
49
+ */
50
+ export declare function getAllConnectionMetadata(): Map<string, ConnectionMetadata>;
51
+ /**
52
+ * Save a reconnection timer
53
+ */
54
+ export declare function saveReconnectionTimer(appKey: string, timer: NodeJS.Timeout): void;
55
+ /**
56
+ * Get and clear reconnection timer
57
+ */
58
+ export declare function getAndClearReconnectionTimer(appKey: string): NodeJS.Timeout | null;
59
+ /**
60
+ * Cancel a reconnection timer if one exists
61
+ */
62
+ export declare function cancelReconnectionTimer(appKey: string): void;
63
+ /**
64
+ * Cancel all reconnection timers
65
+ */
66
+ export declare function cancelAllReconnectionTimers(): void;
67
+ /**
68
+ * Clear all connection state (for cleanup)
69
+ */
70
+ export declare function clearAllConnectionState(): void;
71
+ /**
72
+ * Calculate backoff delay for reconnection attempts
73
+ */
74
+ export declare function calculateBackoffDelay(attempt: number, config?: ReconnectionConfig): number;
75
+ /**
76
+ * Format duration in human-readable format
77
+ */
78
+ export declare function formatDuration(ms: number): string;
79
+ //# sourceMappingURL=connectionState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionState.d.ts","sourceRoot":"","sources":["../../src/core/connectionState.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EACrB,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,2BAA2B,EAAE,kBAMzC,CAAC;AAWF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAUnE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAClC,IAAI,CAKN;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAEzE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAErE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAgBxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAWvD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAgB/D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAS7E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,kBAAkB,GAC7B,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,MAAM,GACf,kBAAkB,GAAG,IAAI,CAE3B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAE1E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,CAAC,OAAO,GACtB,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CACxC,MAAM,EAAE,MAAM,GACf,MAAM,CAAC,OAAO,GAAG,IAAI,CAOvB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAM5D;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAKlD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,kBAAgD,GACzD,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD"}
@@ -0,0 +1,202 @@
1
+ // Default reconnection configuration
2
+ export const DEFAULT_RECONNECTION_CONFIG = {
3
+ enabled: true,
4
+ maxAttempts: 8, // ~30 seconds total with backoff
5
+ initialDelayMs: 0, // Immediate first retry
6
+ maxDelayMs: 8000, // Cap at 8 seconds
7
+ backoffMultiplier: 2, // Double each time: 0, 500, 1000, 2000, 4000, 8000
8
+ };
9
+ // Store connection metadata for reconnection attempts
10
+ const connectionMetadata = new Map();
11
+ // Store connection state (separate from the actual connection)
12
+ const connectionStates = new Map();
13
+ // Active reconnection timers
14
+ const reconnectionTimers = new Map();
15
+ /**
16
+ * Initialize connection state for a new connection
17
+ */
18
+ export function initConnectionState(appKey) {
19
+ const state = {
20
+ status: "connected",
21
+ lastConnectedTime: new Date(),
22
+ lastDisconnectTime: null,
23
+ reconnectionAttempts: 0,
24
+ connectionGaps: [],
25
+ };
26
+ connectionStates.set(appKey, state);
27
+ return state;
28
+ }
29
+ /**
30
+ * Update connection state with partial updates
31
+ */
32
+ export function updateConnectionState(appKey, updates) {
33
+ const current = connectionStates.get(appKey);
34
+ if (current) {
35
+ connectionStates.set(appKey, { ...current, ...updates });
36
+ }
37
+ }
38
+ /**
39
+ * Get connection state for an appKey
40
+ */
41
+ export function getConnectionState(appKey) {
42
+ return connectionStates.get(appKey) || null;
43
+ }
44
+ /**
45
+ * Get all connection states
46
+ */
47
+ export function getAllConnectionStates() {
48
+ return new Map(connectionStates);
49
+ }
50
+ /**
51
+ * Record the start of a connection gap
52
+ */
53
+ export function recordConnectionGap(appKey, reason) {
54
+ const state = connectionStates.get(appKey);
55
+ if (state) {
56
+ const gap = {
57
+ disconnectedAt: new Date(),
58
+ reconnectedAt: null,
59
+ durationMs: null,
60
+ reason,
61
+ };
62
+ state.connectionGaps.push(gap);
63
+ // Keep only last 10 gaps to prevent memory bloat
64
+ if (state.connectionGaps.length > 10) {
65
+ state.connectionGaps.shift();
66
+ }
67
+ connectionStates.set(appKey, state);
68
+ }
69
+ }
70
+ /**
71
+ * Close the most recent connection gap when reconnected
72
+ */
73
+ export function closeConnectionGap(appKey) {
74
+ const state = connectionStates.get(appKey);
75
+ if (state && state.connectionGaps.length > 0) {
76
+ const lastGap = state.connectionGaps[state.connectionGaps.length - 1];
77
+ if (!lastGap.reconnectedAt) {
78
+ lastGap.reconnectedAt = new Date();
79
+ lastGap.durationMs =
80
+ lastGap.reconnectedAt.getTime() - lastGap.disconnectedAt.getTime();
81
+ }
82
+ connectionStates.set(appKey, state);
83
+ }
84
+ }
85
+ /**
86
+ * Get recent connection gaps across all connections within a time window
87
+ */
88
+ export function getRecentGaps(maxAgeMs) {
89
+ const now = Date.now();
90
+ const gaps = [];
91
+ for (const state of connectionStates.values()) {
92
+ for (const gap of state.connectionGaps) {
93
+ const gapAge = now - gap.disconnectedAt.getTime();
94
+ if (gapAge <= maxAgeMs) {
95
+ gaps.push(gap);
96
+ }
97
+ }
98
+ }
99
+ return gaps.sort((a, b) => a.disconnectedAt.getTime() - b.disconnectedAt.getTime());
100
+ }
101
+ /**
102
+ * Check if there was a recent disconnect for a specific connection
103
+ */
104
+ export function hasRecentDisconnect(appKey, withinMs) {
105
+ const state = connectionStates.get(appKey);
106
+ if (!state || state.connectionGaps.length === 0) {
107
+ return false;
108
+ }
109
+ const lastGap = state.connectionGaps[state.connectionGaps.length - 1];
110
+ const gapAge = Date.now() - lastGap.disconnectedAt.getTime();
111
+ return gapAge <= withinMs;
112
+ }
113
+ /**
114
+ * Save connection metadata for potential reconnection
115
+ */
116
+ export function saveConnectionMetadata(appKey, metadata) {
117
+ connectionMetadata.set(appKey, metadata);
118
+ }
119
+ /**
120
+ * Get connection metadata for reconnection
121
+ */
122
+ export function getConnectionMetadata(appKey) {
123
+ return connectionMetadata.get(appKey) || null;
124
+ }
125
+ /**
126
+ * Clear connection metadata (when giving up on reconnection)
127
+ */
128
+ export function clearConnectionMetadata(appKey) {
129
+ connectionMetadata.delete(appKey);
130
+ }
131
+ /**
132
+ * Get all connection metadata
133
+ */
134
+ export function getAllConnectionMetadata() {
135
+ return new Map(connectionMetadata);
136
+ }
137
+ /**
138
+ * Save a reconnection timer
139
+ */
140
+ export function saveReconnectionTimer(appKey, timer) {
141
+ reconnectionTimers.set(appKey, timer);
142
+ }
143
+ /**
144
+ * Get and clear reconnection timer
145
+ */
146
+ export function getAndClearReconnectionTimer(appKey) {
147
+ const timer = reconnectionTimers.get(appKey);
148
+ if (timer) {
149
+ reconnectionTimers.delete(appKey);
150
+ return timer;
151
+ }
152
+ return null;
153
+ }
154
+ /**
155
+ * Cancel a reconnection timer if one exists
156
+ */
157
+ export function cancelReconnectionTimer(appKey) {
158
+ const timer = reconnectionTimers.get(appKey);
159
+ if (timer) {
160
+ clearTimeout(timer);
161
+ reconnectionTimers.delete(appKey);
162
+ }
163
+ }
164
+ /**
165
+ * Cancel all reconnection timers
166
+ */
167
+ export function cancelAllReconnectionTimers() {
168
+ for (const [appKey, timer] of reconnectionTimers.entries()) {
169
+ clearTimeout(timer);
170
+ reconnectionTimers.delete(appKey);
171
+ }
172
+ }
173
+ /**
174
+ * Clear all connection state (for cleanup)
175
+ */
176
+ export function clearAllConnectionState() {
177
+ cancelAllReconnectionTimers();
178
+ connectionMetadata.clear();
179
+ connectionStates.clear();
180
+ }
181
+ /**
182
+ * Calculate backoff delay for reconnection attempts
183
+ */
184
+ export function calculateBackoffDelay(attempt, config = DEFAULT_RECONNECTION_CONFIG) {
185
+ if (attempt === 0)
186
+ return config.initialDelayMs;
187
+ const delay = 500 * Math.pow(config.backoffMultiplier, attempt - 1);
188
+ return Math.min(delay, config.maxDelayMs);
189
+ }
190
+ /**
191
+ * Format duration in human-readable format
192
+ */
193
+ export function formatDuration(ms) {
194
+ if (ms < 1000)
195
+ return `${ms}ms`;
196
+ if (ms < 60000)
197
+ return `${Math.round(ms / 1000)}s`;
198
+ const minutes = Math.floor(ms / 60000);
199
+ const seconds = Math.round((ms % 60000) / 1000);
200
+ return seconds > 0 ? `${minutes}m ${seconds}s` : `${minutes}m`;
201
+ }
202
+ //# sourceMappingURL=connectionState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionState.js","sourceRoot":"","sources":["../../src/core/connectionState.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"httpServer.d.ts","sourceRoot":"","sources":["../../src/core/httpServer.ts"],"names":[],"mappings":"AA8BA,UAAU,kBAAkB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAElD;AAgxCD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBnG"}
1
+ {"version":3,"file":"httpServer.d.ts","sourceRoot":"","sources":["../../src/core/httpServer.ts"],"names":[],"mappings":"AA+BA,UAAU,kBAAkB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAElD;AA40CD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBnG"}
@@ -2,6 +2,7 @@ import { createServer } from "http";
2
2
  import { logBuffer, networkBuffer, bundleErrorBuffer, connectedApps } from "./state.js";
3
3
  import { listAndroidDevices, androidScreenshot, androidGetScreenSize, androidTap } from "./android.js";
4
4
  import { listIOSSimulators, iosScreenshot, iosTap } from "./ios.js";
5
+ import { recognizeText, inferIOSDevicePixelRatio } from "./ocr.js";
5
6
  const DEFAULT_HTTP_PORT = 3456;
6
7
  const MAX_PORT_ATTEMPTS = 20;
7
8
  // Store the active port for querying via MCP tool
@@ -1231,6 +1232,63 @@ function createRequestHandler() {
1231
1232
  tapVerifierMarkers = [];
1232
1233
  res.end(JSON.stringify({ success: true, message: 'All markers cleared' }));
1233
1234
  }
1235
+ else if (url === "/api/ocr") {
1236
+ // OCR endpoint - takes screenshot and runs OCR
1237
+ const platform = params.get('platform') || 'ios';
1238
+ const deviceId = params.get('deviceId') || undefined;
1239
+ const engine = params.get('engine') || 'auto';
1240
+ console.log(`[OCR] Request: platform=${platform}, engine=${engine}, deviceId=${deviceId || 'auto'}`);
1241
+ try {
1242
+ // Take screenshot
1243
+ let screenshotResult;
1244
+ if (platform === 'android') {
1245
+ screenshotResult = await androidScreenshot(deviceId);
1246
+ }
1247
+ else {
1248
+ screenshotResult = await iosScreenshot(undefined, deviceId);
1249
+ }
1250
+ if (!screenshotResult.success || !screenshotResult.data) {
1251
+ console.log(`[OCR] Screenshot failed: ${screenshotResult.error || 'No image data'}`);
1252
+ res.end(JSON.stringify({
1253
+ success: false,
1254
+ error: `Screenshot failed: ${screenshotResult.error || 'No image data'}`
1255
+ }));
1256
+ return;
1257
+ }
1258
+ // Infer device pixel ratio from screenshot dimensions (iOS only)
1259
+ const devicePixelRatio = platform === 'ios' && screenshotResult.originalWidth && screenshotResult.originalHeight
1260
+ ? inferIOSDevicePixelRatio(screenshotResult.originalWidth, screenshotResult.originalHeight)
1261
+ : 1; // Android uses raw pixels
1262
+ console.log(`[OCR] Screenshot captured, size=${screenshotResult.data.length} bytes, scaleFactor=${screenshotResult.scaleFactor}, devicePixelRatio=${devicePixelRatio}`);
1263
+ // Run OCR with scale factor, platform, device pixel ratio, and engine selection
1264
+ const scaleFactor = screenshotResult.scaleFactor || 1;
1265
+ const ocrResult = await recognizeText(screenshotResult.data, {
1266
+ scaleFactor,
1267
+ platform: platform,
1268
+ engine: engine,
1269
+ devicePixelRatio
1270
+ });
1271
+ console.log(`[OCR] Complete: engine=${ocrResult.engine}, words=${ocrResult.words.length}, time=${ocrResult.processingTimeMs}ms`);
1272
+ res.end(JSON.stringify({
1273
+ success: ocrResult.success,
1274
+ platform,
1275
+ engine: ocrResult.engine || "unknown",
1276
+ processingTimeMs: ocrResult.processingTimeMs,
1277
+ fullText: ocrResult.fullText,
1278
+ confidence: ocrResult.confidence,
1279
+ wordsCount: ocrResult.words.length,
1280
+ linesCount: ocrResult.lines.length,
1281
+ words: ocrResult.words,
1282
+ lines: ocrResult.lines,
1283
+ imageScaleFactor: scaleFactor,
1284
+ devicePixelRatio
1285
+ }, null, 2));
1286
+ }
1287
+ catch (err) {
1288
+ console.log(`[OCR] Error: ${err}`);
1289
+ res.end(JSON.stringify({ success: false, error: String(err) }));
1290
+ }
1291
+ }
1234
1292
  else if (url === "/api" || url === "/api/") {
1235
1293
  const endpoints = {
1236
1294
  message: "React Native AI Debugger - Debug HTTP Server",
@@ -1253,7 +1311,8 @@ function createRequestHandler() {
1253
1311
  "/api/tap-verifier/execute": "Execute tap at coordinates (POST: platform, x, y, deviceId)",
1254
1312
  "/api/tap-verifier/mark": "Add a marker to visualize agent-calculated coordinates (POST: x, y, label?, color?)",
1255
1313
  "/api/tap-verifier/markers": "Get all agent-added markers (GET)",
1256
- "/api/tap-verifier/clear-markers": "Clear all agent-added markers (POST)"
1314
+ "/api/tap-verifier/clear-markers": "Clear all agent-added markers (POST)",
1315
+ "/api/ocr": "Take screenshot and run OCR to extract text with coordinates (query: platform=ios|android, engine=auto|easyocr|tesseract, deviceId?)"
1257
1316
  }
1258
1317
  };
1259
1318
  res.end(JSON.stringify(endpoints, null, 2));