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.
- package/README.md +165 -8
- package/build/core/android.js +2 -2
- package/build/core/android.js.map +1 -1
- package/build/core/bundle.d.ts.map +1 -1
- package/build/core/bundle.js +51 -1
- package/build/core/bundle.js.map +1 -1
- package/build/core/connection.d.ts +2 -2
- package/build/core/connection.d.ts.map +1 -1
- package/build/core/connection.js +120 -7
- package/build/core/connection.js.map +1 -1
- package/build/core/connectionState.d.ts +79 -0
- package/build/core/connectionState.d.ts.map +1 -0
- package/build/core/connectionState.js +202 -0
- package/build/core/connectionState.js.map +1 -0
- package/build/core/httpServer.d.ts.map +1 -1
- package/build/core/httpServer.js +60 -1
- package/build/core/httpServer.js.map +1 -1
- package/build/core/httpServerProcess.d.ts +25 -0
- package/build/core/httpServerProcess.d.ts.map +1 -0
- package/build/core/httpServerProcess.js +153 -0
- package/build/core/httpServerProcess.js.map +1 -0
- package/build/core/index.d.ts +6 -2
- package/build/core/index.d.ts.map +1 -1
- package/build/core/index.js +8 -2
- package/build/core/index.js.map +1 -1
- package/build/core/ios.d.ts +10 -0
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +101 -67
- package/build/core/ios.js.map +1 -1
- package/build/core/ocr.d.ts +70 -0
- package/build/core/ocr.d.ts.map +1 -0
- package/build/core/ocr.js +322 -0
- package/build/core/ocr.js.map +1 -0
- package/build/core/state.d.ts +3 -0
- package/build/core/state.d.ts.map +1 -1
- package/build/core/state.js +17 -0
- package/build/core/state.js.map +1 -1
- package/build/core/types.d.ts +29 -0
- package/build/core/types.d.ts.map +1 -1
- package/build/httpServerStandalone.d.ts +7 -0
- package/build/httpServerStandalone.d.ts.map +1 -0
- package/build/httpServerStandalone.js +31 -0
- package/build/httpServerStandalone.js.map +1 -0
- package/build/index.js +280 -14
- package/build/index.js.map +1 -1
- package/package.json +8 -3
package/build/core/connection.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
267
|
+
if (!isReconnection) {
|
|
268
|
+
reject(`Connection to ${device.title} timed out`);
|
|
269
|
+
}
|
|
214
270
|
}
|
|
215
271
|
}, 5000);
|
|
216
272
|
}
|
|
217
273
|
catch (error) {
|
|
218
|
-
|
|
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":"
|
|
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"}
|
package/build/core/httpServer.js
CHANGED
|
@@ -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));
|