react-native-ai-debugger 1.0.11 → 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 (40) 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 +104 -5
  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 +4 -0
  23. package/build/core/index.d.ts.map +1 -1
  24. package/build/core/index.js +6 -0
  25. package/build/core/index.js.map +1 -1
  26. package/build/core/ios.js +2 -2
  27. package/build/core/ios.js.map +1 -1
  28. package/build/core/ocr.d.ts +70 -0
  29. package/build/core/ocr.d.ts.map +1 -0
  30. package/build/core/ocr.js +322 -0
  31. package/build/core/ocr.js.map +1 -0
  32. package/build/core/types.d.ts +29 -0
  33. package/build/core/types.d.ts.map +1 -1
  34. package/build/httpServerStandalone.d.ts +7 -0
  35. package/build/httpServerStandalone.d.ts.map +1 -0
  36. package/build/httpServerStandalone.js +31 -0
  37. package/build/httpServerStandalone.js.map +1 -0
  38. package/build/index.js +273 -12
  39. package/build/index.js.map +1 -1
  40. package/package.json +8 -3
@@ -2,6 +2,8 @@ import WebSocket from "ws";
2
2
  import { connectedApps, pendingExecutions, getNextMessageId, logBuffer, networkBuffer, setActiveSimulatorUdid, clearActiveSimulatorIfSource } from "./state.js";
3
3
  import { mapConsoleType } from "./logs.js";
4
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";
5
7
  // Format CDP RemoteObject to readable string
6
8
  export function formatRemoteObject(result) {
7
9
  if (result.type === "undefined") {
@@ -161,18 +163,40 @@ export function handleCDPMessage(message, _device) {
161
163
  }
162
164
  }
163
165
  // Connect to a device via CDP WebSocket
164
- export async function connectToDevice(device, port) {
166
+ export async function connectToDevice(device, port, options = {}) {
167
+ const { isReconnection = false, reconnectionConfig = DEFAULT_RECONNECTION_CONFIG } = options;
165
168
  return new Promise((resolve, reject) => {
166
169
  const appKey = `${port}-${device.id}`;
167
170
  if (connectedApps.has(appKey)) {
168
171
  resolve(`Already connected to ${device.title}`);
169
172
  return;
170
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
+ });
171
182
  try {
172
183
  const ws = new WebSocket(device.webSocketDebuggerUrl);
173
184
  ws.on("open", async () => {
174
185
  connectedApps.set(appKey, { ws, deviceInfo: device, port });
175
- 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
+ }
176
200
  // Enable Runtime domain to receive console messages
177
201
  ws.send(JSON.stringify({
178
202
  id: getNextMessageId(),
@@ -212,27 +236,102 @@ export async function connectToDevice(device, port) {
212
236
  connectedApps.delete(appKey);
213
237
  // Clear active simulator UDID if this connection set it
214
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
+ });
215
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
+ }
216
250
  });
217
251
  ws.on("error", (error) => {
218
252
  connectedApps.delete(appKey);
219
253
  // Clear active simulator UDID if this connection set it
220
254
  clearActiveSimulatorIfSource(appKey);
221
- reject(`Failed to connect to ${device.title}: ${error.message}`);
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
+ }
222
262
  });
223
263
  // Timeout after 5 seconds
224
264
  setTimeout(() => {
225
265
  if (ws.readyState !== WebSocket.OPEN) {
226
266
  ws.terminate();
227
- reject(`Connection to ${device.title} timed out`);
267
+ if (!isReconnection) {
268
+ reject(`Connection to ${device.title} timed out`);
269
+ }
228
270
  }
229
271
  }, 5000);
230
272
  }
231
273
  catch (error) {
232
- reject(`Failed to create WebSocket connection: ${error}`);
274
+ if (!isReconnection) {
275
+ reject(`Failed to create WebSocket connection: ${error}`);
276
+ }
233
277
  }
234
278
  });
235
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
+ }
236
335
  // Get list of connected apps
237
336
  export function getConnectedApps() {
238
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));