react-native-ai-devtools 1.1.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.
Files changed (147) hide show
  1. package/LICENSE +32 -0
  2. package/README.md +1250 -0
  3. package/build/__tests__/helpers/fake-cdp-server.d.ts +56 -0
  4. package/build/__tests__/helpers/fake-cdp-server.d.ts.map +1 -0
  5. package/build/__tests__/helpers/fake-cdp-server.js +108 -0
  6. package/build/__tests__/helpers/fake-cdp-server.js.map +1 -0
  7. package/build/__tests__/integration/connection-health.test.d.ts +2 -0
  8. package/build/__tests__/integration/connection-health.test.d.ts.map +1 -0
  9. package/build/__tests__/integration/connection-health.test.js +151 -0
  10. package/build/__tests__/integration/connection-health.test.js.map +1 -0
  11. package/build/__tests__/integration/execute-in-app.test.d.ts +2 -0
  12. package/build/__tests__/integration/execute-in-app.test.d.ts.map +1 -0
  13. package/build/__tests__/integration/execute-in-app.test.js +115 -0
  14. package/build/__tests__/integration/execute-in-app.test.js.map +1 -0
  15. package/build/__tests__/integration/tools.test.d.ts +2 -0
  16. package/build/__tests__/integration/tools.test.d.ts.map +1 -0
  17. package/build/__tests__/integration/tools.test.js +228 -0
  18. package/build/__tests__/integration/tools.test.js.map +1 -0
  19. package/build/__tests__/setup.d.ts +2 -0
  20. package/build/__tests__/setup.d.ts.map +1 -0
  21. package/build/__tests__/setup.js +11 -0
  22. package/build/__tests__/setup.js.map +1 -0
  23. package/build/__tests__/unit/bundle.test.d.ts +2 -0
  24. package/build/__tests__/unit/bundle.test.d.ts.map +1 -0
  25. package/build/__tests__/unit/bundle.test.js +53 -0
  26. package/build/__tests__/unit/bundle.test.js.map +1 -0
  27. package/build/__tests__/unit/connection-health.test.d.ts +2 -0
  28. package/build/__tests__/unit/connection-health.test.d.ts.map +1 -0
  29. package/build/__tests__/unit/connection-health.test.js +28 -0
  30. package/build/__tests__/unit/connection-health.test.js.map +1 -0
  31. package/build/__tests__/unit/executor.test.d.ts +2 -0
  32. package/build/__tests__/unit/executor.test.d.ts.map +1 -0
  33. package/build/__tests__/unit/executor.test.js +79 -0
  34. package/build/__tests__/unit/executor.test.js.map +1 -0
  35. package/build/__tests__/unit/logs.test.d.ts +2 -0
  36. package/build/__tests__/unit/logs.test.d.ts.map +1 -0
  37. package/build/__tests__/unit/logs.test.js +81 -0
  38. package/build/__tests__/unit/logs.test.js.map +1 -0
  39. package/build/__tests__/unit/metro.test.d.ts +2 -0
  40. package/build/__tests__/unit/metro.test.d.ts.map +1 -0
  41. package/build/__tests__/unit/metro.test.js +61 -0
  42. package/build/__tests__/unit/metro.test.js.map +1 -0
  43. package/build/__tests__/unit/network.test.d.ts +2 -0
  44. package/build/__tests__/unit/network.test.d.ts.map +1 -0
  45. package/build/__tests__/unit/network.test.js +102 -0
  46. package/build/__tests__/unit/network.test.js.map +1 -0
  47. package/build/__tests__/unit/tap.test.d.ts +2 -0
  48. package/build/__tests__/unit/tap.test.d.ts.map +1 -0
  49. package/build/__tests__/unit/tap.test.js +157 -0
  50. package/build/__tests__/unit/tap.test.js.map +1 -0
  51. package/build/core/android.d.ts +265 -0
  52. package/build/core/android.d.ts.map +1 -0
  53. package/build/core/android.js +1413 -0
  54. package/build/core/android.js.map +1 -0
  55. package/build/core/bundle.d.ts +49 -0
  56. package/build/core/bundle.d.ts.map +1 -0
  57. package/build/core/bundle.js +368 -0
  58. package/build/core/bundle.js.map +1 -0
  59. package/build/core/connection.d.ts +43 -0
  60. package/build/core/connection.d.ts.map +1 -0
  61. package/build/core/connection.js +963 -0
  62. package/build/core/connection.js.map +1 -0
  63. package/build/core/connectionState.d.ts +108 -0
  64. package/build/core/connectionState.d.ts.map +1 -0
  65. package/build/core/connectionState.js +284 -0
  66. package/build/core/connectionState.js.map +1 -0
  67. package/build/core/errorScreenParser.d.ts +30 -0
  68. package/build/core/errorScreenParser.d.ts.map +1 -0
  69. package/build/core/errorScreenParser.js +198 -0
  70. package/build/core/errorScreenParser.js.map +1 -0
  71. package/build/core/executor.d.ts +113 -0
  72. package/build/core/executor.d.ts.map +1 -0
  73. package/build/core/executor.js +1877 -0
  74. package/build/core/executor.js.map +1 -0
  75. package/build/core/format.d.ts +8 -0
  76. package/build/core/format.d.ts.map +1 -0
  77. package/build/core/format.js +34 -0
  78. package/build/core/format.js.map +1 -0
  79. package/build/core/guides.d.ts +14 -0
  80. package/build/core/guides.d.ts.map +1 -0
  81. package/build/core/guides.js +261 -0
  82. package/build/core/guides.js.map +1 -0
  83. package/build/core/httpServer.d.ts +14 -0
  84. package/build/core/httpServer.d.ts.map +1 -0
  85. package/build/core/httpServer.js +2459 -0
  86. package/build/core/httpServer.js.map +1 -0
  87. package/build/core/httpServerProcess.d.ts +25 -0
  88. package/build/core/httpServerProcess.d.ts.map +1 -0
  89. package/build/core/httpServerProcess.js +153 -0
  90. package/build/core/httpServerProcess.js.map +1 -0
  91. package/build/core/index.d.ts +25 -0
  92. package/build/core/index.d.ts.map +1 -0
  93. package/build/core/index.js +53 -0
  94. package/build/core/index.js.map +1 -0
  95. package/build/core/ios.d.ts +214 -0
  96. package/build/core/ios.d.ts.map +1 -0
  97. package/build/core/ios.js +1232 -0
  98. package/build/core/ios.js.map +1 -0
  99. package/build/core/logs.d.ts +43 -0
  100. package/build/core/logs.d.ts.map +1 -0
  101. package/build/core/logs.js +144 -0
  102. package/build/core/logs.js.map +1 -0
  103. package/build/core/metro.d.ts +23 -0
  104. package/build/core/metro.d.ts.map +1 -0
  105. package/build/core/metro.js +96 -0
  106. package/build/core/metro.js.map +1 -0
  107. package/build/core/network.d.ts +43 -0
  108. package/build/core/network.d.ts.map +1 -0
  109. package/build/core/network.js +217 -0
  110. package/build/core/network.js.map +1 -0
  111. package/build/core/networkInterceptor.d.ts +3 -0
  112. package/build/core/networkInterceptor.d.ts.map +1 -0
  113. package/build/core/networkInterceptor.js +203 -0
  114. package/build/core/networkInterceptor.js.map +1 -0
  115. package/build/core/ocr.d.ts +69 -0
  116. package/build/core/ocr.d.ts.map +1 -0
  117. package/build/core/ocr.js +212 -0
  118. package/build/core/ocr.js.map +1 -0
  119. package/build/core/state.d.ts +17 -0
  120. package/build/core/state.d.ts.map +1 -0
  121. package/build/core/state.js +50 -0
  122. package/build/core/state.js.map +1 -0
  123. package/build/core/tap.d.ts +91 -0
  124. package/build/core/tap.d.ts.map +1 -0
  125. package/build/core/tap.js +542 -0
  126. package/build/core/tap.js.map +1 -0
  127. package/build/core/telemetry.d.ts +4 -0
  128. package/build/core/telemetry.d.ts.map +1 -0
  129. package/build/core/telemetry.js +289 -0
  130. package/build/core/telemetry.js.map +1 -0
  131. package/build/core/types.d.ts +134 -0
  132. package/build/core/types.d.ts.map +1 -0
  133. package/build/core/types.js +2 -0
  134. package/build/core/types.js.map +1 -0
  135. package/build/httpServerStandalone.d.ts +7 -0
  136. package/build/httpServerStandalone.d.ts.map +1 -0
  137. package/build/httpServerStandalone.js +31 -0
  138. package/build/httpServerStandalone.js.map +1 -0
  139. package/build/index.d.ts +3 -0
  140. package/build/index.d.ts.map +1 -0
  141. package/build/index.js +3012 -0
  142. package/build/index.js.map +1 -0
  143. package/build/pro/tap.d.ts +91 -0
  144. package/build/pro/tap.d.ts.map +1 -0
  145. package/build/pro/tap.js +542 -0
  146. package/build/pro/tap.js.map +1 -0
  147. package/package.json +63 -0
@@ -0,0 +1,217 @@
1
+ // Circular buffer for storing network requests
2
+ export class NetworkBuffer {
3
+ requests = new Map();
4
+ order = [];
5
+ maxSize;
6
+ constructor(maxSize = 500) {
7
+ this.maxSize = maxSize;
8
+ }
9
+ // Add or update a request
10
+ set(requestId, request) {
11
+ if (!this.requests.has(requestId)) {
12
+ this.order.push(requestId);
13
+ if (this.order.length > this.maxSize) {
14
+ const oldestId = this.order.shift();
15
+ if (oldestId) {
16
+ this.requests.delete(oldestId);
17
+ }
18
+ }
19
+ }
20
+ this.requests.set(requestId, request);
21
+ }
22
+ // Get a request by ID
23
+ get(requestId) {
24
+ return this.requests.get(requestId);
25
+ }
26
+ // Get all requests (optionally filtered)
27
+ getAll(options = {}) {
28
+ const { count, method, urlPattern, status, completedOnly } = options;
29
+ let results = Array.from(this.requests.values());
30
+ // Sort by timestamp
31
+ results.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
32
+ if (method && method.trim()) {
33
+ results = results.filter((r) => r.method.toUpperCase() === method.toUpperCase());
34
+ }
35
+ if (urlPattern && urlPattern.trim()) {
36
+ const pattern = urlPattern.toLowerCase();
37
+ results = results.filter((r) => r.url.toLowerCase().includes(pattern));
38
+ }
39
+ if (status != null && typeof status === "number") {
40
+ results = results.filter((r) => r.status === status);
41
+ }
42
+ if (completedOnly === true) {
43
+ results = results.filter((r) => r.completed);
44
+ }
45
+ if (count != null && count > 0) {
46
+ results = results.slice(-count);
47
+ }
48
+ return results;
49
+ }
50
+ // Search requests by URL
51
+ search(urlPattern, maxResults = 50) {
52
+ const pattern = urlPattern.toLowerCase();
53
+ const results = Array.from(this.requests.values())
54
+ .filter((r) => r.url.toLowerCase().includes(pattern))
55
+ .sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
56
+ if (maxResults > 0) {
57
+ return results.slice(-maxResults);
58
+ }
59
+ return results;
60
+ }
61
+ clear() {
62
+ const count = this.requests.size;
63
+ this.requests.clear();
64
+ this.order = [];
65
+ return count;
66
+ }
67
+ get size() {
68
+ return this.requests.size;
69
+ }
70
+ }
71
+ // Format a single request for display
72
+ export function formatRequest(request) {
73
+ const time = request.timestamp.toLocaleTimeString();
74
+ const status = request.status ?? "pending";
75
+ const duration = request.timing?.duration ? `${request.timing.duration}ms` : "-";
76
+ let line = `[${request.requestId}] ${time} ${request.method} ${status} ${duration} ${request.url}`;
77
+ if (request.error) {
78
+ line += ` [ERROR: ${request.error}]`;
79
+ }
80
+ return line;
81
+ }
82
+ // Format requests for text output
83
+ export function formatRequests(requests) {
84
+ if (requests.length === 0) {
85
+ return "No network requests captured yet.";
86
+ }
87
+ return requests.map(formatRequest).join("\n");
88
+ }
89
+ // Format request details (full info)
90
+ export function formatRequestDetails(request, options = {}) {
91
+ const { maxBodyLength = 500, verbose = false } = options;
92
+ const lines = [];
93
+ lines.push(`=== ${request.method} ${request.url} ===`);
94
+ lines.push(`Request ID: ${request.requestId}`);
95
+ lines.push(`Time: ${request.timestamp.toISOString()}`);
96
+ lines.push(`Status: ${request.status ?? "pending"} ${request.statusText ?? ""}`);
97
+ if (request.timing?.duration) {
98
+ lines.push(`Duration: ${request.timing.duration}ms`);
99
+ }
100
+ if (request.mimeType) {
101
+ lines.push(`Content-Type: ${request.mimeType}`);
102
+ }
103
+ if (request.contentLength !== undefined) {
104
+ lines.push(`Content-Length: ${request.contentLength}`);
105
+ }
106
+ if (request.error) {
107
+ lines.push(`Error: ${request.error}`);
108
+ }
109
+ // Request headers
110
+ if (Object.keys(request.headers).length > 0) {
111
+ lines.push("\n--- Request Headers ---");
112
+ for (const [key, value] of Object.entries(request.headers)) {
113
+ lines.push(`${key}: ${value}`);
114
+ }
115
+ }
116
+ // Post data (with optional truncation)
117
+ if (request.postData) {
118
+ lines.push("\n--- Request Body ---");
119
+ let body = request.postData;
120
+ if (!verbose && maxBodyLength > 0 && body.length > maxBodyLength) {
121
+ body = body.slice(0, maxBodyLength) + `... [truncated: ${request.postData.length} chars]`;
122
+ }
123
+ lines.push(body);
124
+ }
125
+ // Response headers
126
+ if (request.responseHeaders && Object.keys(request.responseHeaders).length > 0) {
127
+ lines.push("\n--- Response Headers ---");
128
+ for (const [key, value] of Object.entries(request.responseHeaders)) {
129
+ lines.push(`${key}: ${value}`);
130
+ }
131
+ }
132
+ return lines.join("\n");
133
+ }
134
+ // Get network requests with formatting
135
+ export function getNetworkRequests(networkBuffer, options = {}) {
136
+ const { maxRequests = 50, method, urlPattern, status } = options;
137
+ const requests = networkBuffer.getAll({
138
+ count: maxRequests,
139
+ method,
140
+ urlPattern,
141
+ status,
142
+ completedOnly: false
143
+ });
144
+ return {
145
+ requests,
146
+ count: requests.length,
147
+ formatted: formatRequests(requests)
148
+ };
149
+ }
150
+ // Search network requests with formatting
151
+ export function searchNetworkRequests(networkBuffer, urlPattern, maxResults = 50) {
152
+ const requests = networkBuffer.search(urlPattern, maxResults);
153
+ return {
154
+ requests,
155
+ count: requests.length,
156
+ formatted: formatRequests(requests)
157
+ };
158
+ }
159
+ // Get network stats
160
+ export function getNetworkStats(networkBuffer) {
161
+ const requests = networkBuffer.getAll({});
162
+ if (requests.length === 0) {
163
+ return "No network requests captured yet.";
164
+ }
165
+ const byMethod = {};
166
+ const byStatus = {};
167
+ const byDomain = {};
168
+ let totalDuration = 0;
169
+ let completedCount = 0;
170
+ let errorCount = 0;
171
+ for (const req of requests) {
172
+ // Count by method
173
+ byMethod[req.method] = (byMethod[req.method] || 0) + 1;
174
+ // Count by status
175
+ if (req.status !== undefined) {
176
+ const statusGroup = `${Math.floor(req.status / 100)}xx`;
177
+ byStatus[statusGroup] = (byStatus[statusGroup] || 0) + 1;
178
+ }
179
+ // Count by domain
180
+ try {
181
+ const url = new URL(req.url);
182
+ byDomain[url.hostname] = (byDomain[url.hostname] || 0) + 1;
183
+ }
184
+ catch {
185
+ // Invalid URL, skip domain counting
186
+ }
187
+ // Duration stats
188
+ if (req.timing?.duration) {
189
+ totalDuration += req.timing.duration;
190
+ completedCount++;
191
+ }
192
+ if (req.error) {
193
+ errorCount++;
194
+ }
195
+ }
196
+ const lines = [];
197
+ lines.push(`Total requests: ${requests.length}`);
198
+ lines.push(`Completed: ${completedCount}`);
199
+ lines.push(`Errors: ${errorCount}`);
200
+ if (completedCount > 0) {
201
+ lines.push(`Avg duration: ${Math.round(totalDuration / completedCount)}ms`);
202
+ }
203
+ lines.push("\nBy Method:");
204
+ for (const [method, count] of Object.entries(byMethod).sort((a, b) => b[1] - a[1])) {
205
+ lines.push(` ${method}: ${count}`);
206
+ }
207
+ lines.push("\nBy Status:");
208
+ for (const [status, count] of Object.entries(byStatus).sort()) {
209
+ lines.push(` ${status}: ${count}`);
210
+ }
211
+ lines.push("\nBy Domain:");
212
+ for (const [domain, count] of Object.entries(byDomain).sort((a, b) => b[1] - a[1]).slice(0, 10)) {
213
+ lines.push(` ${domain}: ${count}`);
214
+ }
215
+ return lines.join("\n");
216
+ }
217
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/core/network.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const NETWORK_INTERCEPT_PREFIX = "__RN_NET__";
2
+ export declare function getNetworkInterceptorScript(): string;
3
+ //# sourceMappingURL=networkInterceptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networkInterceptor.d.ts","sourceRoot":"","sources":["../../src/core/networkInterceptor.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,wBAAwB,eAAe,CAAC;AAErD,wBAAgB,2BAA2B,IAAI,MAAM,CAoMpD"}
@@ -0,0 +1,203 @@
1
+ // JS-level network interception snippet injected into the React Native app.
2
+ // Hermes doesn't support CDP Network domain, so we monkey-patch fetch and XMLHttpRequest
3
+ // and report events via console.debug with a special prefix that gets intercepted
4
+ // by handleCDPMessage before reaching the log buffer.
5
+ export const NETWORK_INTERCEPT_PREFIX = "__RN_NET__";
6
+ export function getNetworkInterceptorScript() {
7
+ return `(function() {
8
+ if (globalThis.__RN_NET_INSTALLED__) return 'already_installed';
9
+ globalThis.__RN_NET_INSTALLED__ = true;
10
+
11
+ var counter = 0;
12
+ function nextId() { return 'net_' + (++counter) + '_' + Date.now(); }
13
+
14
+ function report(data) {
15
+ try {
16
+ console.debug('${NETWORK_INTERCEPT_PREFIX}', JSON.stringify(data));
17
+ } catch(e) {}
18
+ }
19
+
20
+ // --- Patch fetch ---
21
+ var originalFetch = globalThis.fetch;
22
+ if (originalFetch) {
23
+ globalThis.fetch = function(input, init) {
24
+ var reqId = nextId();
25
+ var url = typeof input === 'string' ? input : (input && input.url ? input.url : String(input));
26
+ var method = (init && init.method) ? init.method.toUpperCase() : 'GET';
27
+ var headers = {};
28
+ var postData;
29
+
30
+ try {
31
+ if (init && init.headers) {
32
+ if (typeof init.headers.forEach === 'function') {
33
+ init.headers.forEach(function(v, k) { headers[k] = v; });
34
+ } else if (typeof init.headers === 'object') {
35
+ var h = init.headers;
36
+ for (var k in h) {
37
+ if (Object.prototype.hasOwnProperty.call(h, k)) {
38
+ headers[k] = h[k];
39
+ }
40
+ }
41
+ }
42
+ }
43
+ if (init && init.body) {
44
+ postData = typeof init.body === 'string' ? init.body : undefined;
45
+ if (!postData) {
46
+ try { postData = JSON.stringify(init.body); } catch(e) {}
47
+ }
48
+ }
49
+ } catch(e) {}
50
+
51
+ var startTime = Date.now();
52
+ report({
53
+ type: 'request',
54
+ requestId: reqId,
55
+ method: method,
56
+ url: url,
57
+ headers: headers,
58
+ postData: postData,
59
+ timestamp: startTime
60
+ });
61
+
62
+ return originalFetch.apply(globalThis, arguments).then(function(response) {
63
+ var respHeaders = {};
64
+ try {
65
+ if (response.headers && typeof response.headers.forEach === 'function') {
66
+ response.headers.forEach(function(v, k) { respHeaders[k] = v; });
67
+ }
68
+ } catch(e) {}
69
+
70
+ report({
71
+ type: 'response',
72
+ requestId: reqId,
73
+ status: response.status,
74
+ statusText: response.statusText,
75
+ headers: respHeaders,
76
+ mimeType: respHeaders['content-type'] || '',
77
+ duration: Date.now() - startTime
78
+ });
79
+
80
+ return response;
81
+ }, function(error) {
82
+ report({
83
+ type: 'error',
84
+ requestId: reqId,
85
+ error: error ? error.message || String(error) : 'Network error',
86
+ duration: Date.now() - startTime
87
+ });
88
+ throw error;
89
+ });
90
+ };
91
+ }
92
+
93
+ // --- Patch XMLHttpRequest ---
94
+ var XHR = globalThis.XMLHttpRequest;
95
+ if (XHR) {
96
+ var origOpen = XHR.prototype.open;
97
+ var origSend = XHR.prototype.send;
98
+ var origSetHeader = XHR.prototype.setRequestHeader;
99
+
100
+ XHR.prototype.open = function(method, url) {
101
+ this.__rn_net__ = {
102
+ reqId: nextId(),
103
+ method: (method || 'GET').toUpperCase(),
104
+ url: String(url),
105
+ headers: {},
106
+ startTime: null
107
+ };
108
+ return origOpen.apply(this, arguments);
109
+ };
110
+
111
+ XHR.prototype.setRequestHeader = function(key, value) {
112
+ if (this.__rn_net__) {
113
+ this.__rn_net__.headers[key] = value;
114
+ }
115
+ return origSetHeader.apply(this, arguments);
116
+ };
117
+
118
+ XHR.prototype.send = function(body) {
119
+ var info = this.__rn_net__;
120
+ if (info) {
121
+ info.startTime = Date.now();
122
+ var postData;
123
+ if (body) {
124
+ postData = typeof body === 'string' ? body : undefined;
125
+ if (!postData) {
126
+ try { postData = JSON.stringify(body); } catch(e) {}
127
+ }
128
+ }
129
+ report({
130
+ type: 'request',
131
+ requestId: info.reqId,
132
+ method: info.method,
133
+ url: info.url,
134
+ headers: info.headers,
135
+ postData: postData,
136
+ timestamp: info.startTime
137
+ });
138
+
139
+ var xhr = this;
140
+ var onDone = function() {
141
+ var respHeaders = {};
142
+ try {
143
+ var raw = xhr.getAllResponseHeaders() || '';
144
+ raw.split('\\r\\n').forEach(function(line) {
145
+ var idx = line.indexOf(':');
146
+ if (idx > 0) {
147
+ respHeaders[line.slice(0, idx).trim().toLowerCase()] = line.slice(idx + 1).trim();
148
+ }
149
+ });
150
+ } catch(e) {}
151
+
152
+ if (xhr.status > 0) {
153
+ report({
154
+ type: 'response',
155
+ requestId: info.reqId,
156
+ status: xhr.status,
157
+ statusText: xhr.statusText,
158
+ headers: respHeaders,
159
+ mimeType: respHeaders['content-type'] || '',
160
+ contentLength: xhr.response ? xhr.response.length : undefined,
161
+ duration: Date.now() - info.startTime
162
+ });
163
+ } else {
164
+ report({
165
+ type: 'error',
166
+ requestId: info.reqId,
167
+ error: 'Request failed (status 0)',
168
+ duration: Date.now() - info.startTime
169
+ });
170
+ }
171
+ };
172
+
173
+ var onError = function() {
174
+ report({
175
+ type: 'error',
176
+ requestId: info.reqId,
177
+ error: 'XHR error',
178
+ duration: Date.now() - info.startTime
179
+ });
180
+ };
181
+
182
+ var onAbort = function() {
183
+ report({
184
+ type: 'error',
185
+ requestId: info.reqId,
186
+ error: 'Canceled',
187
+ canceled: true,
188
+ duration: Date.now() - info.startTime
189
+ });
190
+ };
191
+
192
+ xhr.addEventListener('load', onDone);
193
+ xhr.addEventListener('error', onError);
194
+ xhr.addEventListener('abort', onAbort);
195
+ }
196
+ return origSend.apply(this, arguments);
197
+ };
198
+ }
199
+
200
+ return 'installed';
201
+ })()`;
202
+ }
203
+ //# sourceMappingURL=networkInterceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networkInterceptor.js","sourceRoot":"","sources":["../../src/core/networkInterceptor.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,yFAAyF;AACzF,kFAAkF;AAClF,sDAAsD;AAEtD,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAC;AAErD,MAAM,UAAU,2BAA2B;IACvC,OAAO;;;;;;;;;6BASkB,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyLhD,CAAC;AACN,CAAC"}
@@ -0,0 +1,69 @@
1
+ export interface OCRWord {
2
+ text: string;
3
+ confidence: number;
4
+ bbox: {
5
+ x0: number;
6
+ y0: number;
7
+ x1: number;
8
+ y1: number;
9
+ };
10
+ center: {
11
+ x: number;
12
+ y: number;
13
+ };
14
+ /** Tap-ready coordinates (adjusted for scale and device pixel ratio) */
15
+ tapCenter: {
16
+ x: number;
17
+ y: number;
18
+ };
19
+ }
20
+ export interface OCROptions {
21
+ /** Scale factor from image resizing (default: 1) */
22
+ scaleFactor?: number;
23
+ /** Platform for coordinate conversion: ios uses points, android uses raw pixels */
24
+ platform?: "ios" | "android";
25
+ /** Device pixel ratio for iOS coordinate conversion (default: 3 for @3x devices, use 2 for older/iPad) */
26
+ devicePixelRatio?: number;
27
+ }
28
+ export interface OCRLine {
29
+ text: string;
30
+ confidence: number;
31
+ bbox: {
32
+ x0: number;
33
+ y0: number;
34
+ x1: number;
35
+ y1: number;
36
+ };
37
+ center: {
38
+ x: number;
39
+ y: number;
40
+ };
41
+ /** Tap-ready coordinates (adjusted for scale and device pixel ratio) */
42
+ tapCenter: {
43
+ x: number;
44
+ y: number;
45
+ };
46
+ }
47
+ export interface OCRResult {
48
+ success: boolean;
49
+ fullText: string;
50
+ confidence: number;
51
+ words: OCRWord[];
52
+ lines: OCRLine[];
53
+ processingTimeMs: number;
54
+ engine: "easyocr";
55
+ }
56
+ /**
57
+ * Infer iOS device pixel ratio from screenshot dimensions
58
+ * @3x devices: Most modern iPhones (width >= 1080)
59
+ * @2x devices: Older iPhones, iPads (width 640-1080 or width >= 1500 for iPads)
60
+ * @1x devices: Very old (rare)
61
+ */
62
+ export declare function inferIOSDevicePixelRatio(width: number, height: number): number;
63
+ /**
64
+ * Run OCR using EasyOCR
65
+ * Requires Python 3.6+ on the system; easyocr is provided by node-easyocr's bundled venv.
66
+ */
67
+ export declare function recognizeText(imageBuffer: Buffer, options?: OCROptions): Promise<OCRResult>;
68
+ export declare function terminateOCRWorker(): Promise<void>;
69
+ //# sourceMappingURL=ocr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ocr.d.ts","sourceRoot":"","sources":["../../src/core/ocr.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE;QACJ,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;IACF,wEAAwE;IACxE,SAAS,EAAE;QACP,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;CACL;AAED,MAAM,WAAW,UAAU;IACvB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAC7B,0GAA0G;IAC1G,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE;QACJ,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;IACF,wEAAwE;IACxE,SAAS,EAAE;QACP,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;CACL;AAED,MAAM,WAAW,SAAS;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,SAAS,CAAC;CACrB;AA6GD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAsB9E;AAiBD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CA0EjG;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAUxD"}