react-native-ai-devtools 1.1.9 → 1.2.1

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 (34) hide show
  1. package/README.md +54 -38
  2. package/build/__tests__/integration/execute-in-app.test.js +2 -1
  3. package/build/__tests__/integration/execute-in-app.test.js.map +1 -1
  4. package/build/__tests__/unit/networkInterceptor.test.d.ts +2 -0
  5. package/build/__tests__/unit/networkInterceptor.test.d.ts.map +1 -0
  6. package/build/__tests__/unit/networkInterceptor.test.js +104 -0
  7. package/build/__tests__/unit/networkInterceptor.test.js.map +1 -0
  8. package/build/core/connection.d.ts.map +1 -1
  9. package/build/core/connection.js +43 -5
  10. package/build/core/connection.js.map +1 -1
  11. package/build/core/guides.d.ts.map +1 -1
  12. package/build/core/guides.js +21 -2
  13. package/build/core/guides.js.map +1 -1
  14. package/build/core/networkInterceptor.d.ts +30 -0
  15. package/build/core/networkInterceptor.d.ts.map +1 -0
  16. package/build/core/networkInterceptor.js +207 -0
  17. package/build/core/networkInterceptor.js.map +1 -0
  18. package/build/core/ocr.d.ts +2 -3
  19. package/build/core/ocr.d.ts.map +1 -1
  20. package/build/core/ocr.js +112 -6
  21. package/build/core/ocr.js.map +1 -1
  22. package/build/core/sdkBridge.d.ts +42 -0
  23. package/build/core/sdkBridge.d.ts.map +1 -0
  24. package/build/core/sdkBridge.js +68 -0
  25. package/build/core/sdkBridge.js.map +1 -0
  26. package/build/core/telemetry.d.ts +1 -1
  27. package/build/core/telemetry.d.ts.map +1 -1
  28. package/build/core/telemetry.js +3 -1
  29. package/build/core/telemetry.js.map +1 -1
  30. package/build/core/types.d.ts +1 -0
  31. package/build/core/types.d.ts.map +1 -1
  32. package/build/index.js +141 -9
  33. package/build/index.js.map +1 -1
  34. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"guides.js","sourceRoot":"","sources":["../../src/core/guides.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,MAAM,GAAY;IACpB;QACI,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,yDAAyD;QAClE,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;+CAuB8B;KAC1C;IACD;QACI,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,mFAAmF;QAC5F,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;iGAoBgF;KAC5F;IACD;QACI,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,kBAAkB;QACzB,OAAO,EAAE,0EAA0E;QACnF,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;4DA0B2C;KACvD;IACD;QACI,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,wDAAwD;QACjE,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAmCwB;KACpC;IACD;QACI,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,8DAA8D;QACvE,OAAO,EAAE;;;;;;;;;;;;;;;;;;2DAkB0C;KACtD;IACD;QACI,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,oEAAoE;QAC7E,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;2DAoB0C;KACtD;IACD;QACI,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE,0EAA0E;QACnF,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;kEAsBiD;KAC7D;IACD;QACI,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,oEAAoE;QAC7E,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;6DAwB4C;KACxD;CACJ,CAAC;AAEF,MAAM,UAAU,gBAAgB;IAC5B,MAAM,KAAK,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IAChF,KAAK,CAAC,IAAI,CACN,+IAA+I,CAClJ,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,KAAK,CAAC,OAAO,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAC9B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"guides.js","sourceRoot":"","sources":["../../src/core/guides.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,MAAM,GAAY;IACpB;QACI,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,yDAAyD;QAClE,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;+CAuB8B;KAC1C;IACD;QACI,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,mFAAmF;QAC5F,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;iGAoBgF;KAC5F;IACD;QACI,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,kBAAkB;QACzB,OAAO,EAAE,0EAA0E;QACnF,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;4DA0B2C;KACvD;IACD;QACI,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,wDAAwD;QACjE,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAmCwB;KACpC;IACD;QACI,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,8DAA8D;QACvE,OAAO,EAAE;;;;;;;;;;;;;;;;;;2DAkB0C;KACtD;IACD;QACI,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,oEAAoE;QAC7E,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0FAuCyE;KACrF;IACD;QACI,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE,0EAA0E;QACnF,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;kEAsBiD;KAC7D;IACD;QACI,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,oEAAoE;QAC7E,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;6DAwB4C;KACxD;CACJ,CAAC;AAEF,MAAM,UAAU,gBAAgB;IAC5B,MAAM,KAAK,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IAChF,KAAK,CAAC,IAAI,CACN,+IAA+I,CAClJ,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,KAAK,CAAC,OAAO,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAC9B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import WebSocket from "ws";
2
+ import { NetworkBuffer } from "./network.js";
3
+ /**
4
+ * Returns a JS IIFE string that patches XMLHttpRequest and fetch
5
+ * to capture network requests in React Native Bridgeless targets
6
+ * where CDP Network.enable is unsupported.
7
+ */
8
+ export declare function getInterceptorScript(): string;
9
+ /**
10
+ * Injects the network interceptor script into the app via Runtime.evaluate.
11
+ * Fire-and-forget — does not wait for a response.
12
+ */
13
+ export declare function injectNetworkInterceptor(ws: WebSocket): void;
14
+ /**
15
+ * Sends Network.enable CDP command. Returns the message ID used.
16
+ */
17
+ export declare function sendNetworkEnable(ws: WebSocket): number;
18
+ /**
19
+ * Checks if console event args contain a __RN_NET__: prefixed message.
20
+ * Returns the JSON string after the prefix, or null.
21
+ */
22
+ export declare function isInterceptorEvent(args: Array<{
23
+ type?: string;
24
+ value?: unknown;
25
+ }>): string | null;
26
+ /**
27
+ * Parses an intercepted network event JSON string and routes it to the buffer.
28
+ */
29
+ export declare function applyInterceptedEvent(jsonStr: string, networkBuffer: NetworkBuffer): void;
30
+ //# sourceMappingURL=networkInterceptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networkInterceptor.d.ts","sourceRoot":"","sources":["../../src/core/networkInterceptor.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CA+F7C;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAU5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,CAQvD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,KAAK,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAChD,MAAM,GAAG,IAAI,CAWf;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,aAAa,GAC7B,IAAI,CA6DN"}
@@ -0,0 +1,207 @@
1
+ import { getNextMessageId } from "./state.js";
2
+ /**
3
+ * Returns a JS IIFE string that patches XMLHttpRequest and fetch
4
+ * to capture network requests in React Native Bridgeless targets
5
+ * where CDP Network.enable is unsupported.
6
+ */
7
+ export function getInterceptorScript() {
8
+ // Two-phase injection to capture both early and late requests:
9
+ // Phase 1 (sync): Set __RN_NET_INJECTED__ flag and define helper functions.
10
+ // Install defineProperty setter trap on fetch — may or may not work on Hermes.
11
+ // Phase 2 (setTimeout 0): After RN modules finish initializing, wrap fetch.
12
+ // This is the reliable path that always works.
13
+ return `(function() { try {
14
+ if (globalThis.__RN_NET_INJECTED__) return;
15
+ globalThis.__RN_NET_INJECTED__ = true;
16
+
17
+ var _counter = 0;
18
+ var _prefix = 'js-' + Math.random().toString(36).substring(2, 6) + '-';
19
+
20
+ function _genId() {
21
+ return _prefix + (++_counter);
22
+ }
23
+
24
+ function _report(evt) {
25
+ try {
26
+ console.debug('__RN_NET__:' + JSON.stringify(evt));
27
+ } catch(e) {}
28
+ }
29
+
30
+ function _wrapFetch(origFetch) {
31
+ if (typeof origFetch !== 'function') return origFetch;
32
+ if (origFetch.__rn_net_wrapped__) return origFetch;
33
+
34
+ var wrapped = function(input, init) {
35
+ var id = _genId();
36
+ var method = (init && init.method) ? init.method : 'GET';
37
+ var url = '';
38
+ if (typeof input === 'string') {
39
+ url = input;
40
+ } else if (input && typeof input === 'object' && input.url) {
41
+ url = String(input.url);
42
+ } else {
43
+ url = String(input);
44
+ }
45
+ var startTime = Date.now();
46
+
47
+ _report({type: 'request', id: id, method: method, url: url, timestamp: startTime});
48
+
49
+ try {
50
+ return origFetch.apply(globalThis, arguments).then(
51
+ function(response) {
52
+ try {
53
+ var duration = Date.now() - startTime;
54
+ _report({type: 'response', id: id, status: response.status, statusText: response.statusText || '', duration: duration});
55
+ } catch(e) {}
56
+ return response;
57
+ },
58
+ function(err) {
59
+ try {
60
+ var duration = Date.now() - startTime;
61
+ _report({type: 'error', id: id, error: (err && err.message) ? err.message : 'Fetch failed', duration: duration});
62
+ } catch(e) {}
63
+ throw err;
64
+ }
65
+ );
66
+ } catch(e) {
67
+ try {
68
+ var duration = Date.now() - startTime;
69
+ _report({type: 'error', id: id, error: (e && e.message) ? e.message : 'Fetch failed', duration: duration});
70
+ } catch(e2) {}
71
+ throw e;
72
+ }
73
+ };
74
+ wrapped.__rn_net_wrapped__ = true;
75
+ return wrapped;
76
+ }
77
+
78
+ // Phase 1: try to trap fetch assignment via defineProperty (best-effort)
79
+ try {
80
+ if (typeof globalThis.fetch === 'function') {
81
+ globalThis.fetch = _wrapFetch(globalThis.fetch);
82
+ }
83
+ var _storedFetch = globalThis.fetch;
84
+ Object.defineProperty(globalThis, 'fetch', {
85
+ configurable: true,
86
+ enumerable: true,
87
+ get: function() { return _storedFetch; },
88
+ set: function(v) { _storedFetch = _wrapFetch(v); }
89
+ });
90
+ } catch(e) {}
91
+
92
+ // Phase 2: wrap fetch after module init completes (reliable fallback)
93
+ setTimeout(function() {
94
+ try {
95
+ if (typeof globalThis.fetch === 'function' && !globalThis.fetch.__rn_net_wrapped__) {
96
+ globalThis.fetch = _wrapFetch(globalThis.fetch);
97
+ }
98
+ } catch(e) {}
99
+ }, 0);
100
+
101
+ } catch(e) {} })();`;
102
+ }
103
+ /**
104
+ * Injects the network interceptor script into the app via Runtime.evaluate.
105
+ * Fire-and-forget — does not wait for a response.
106
+ */
107
+ export function injectNetworkInterceptor(ws) {
108
+ const message = JSON.stringify({
109
+ id: getNextMessageId(),
110
+ method: "Runtime.evaluate",
111
+ params: {
112
+ expression: getInterceptorScript(),
113
+ silent: true,
114
+ },
115
+ });
116
+ ws.send(message);
117
+ }
118
+ /**
119
+ * Sends Network.enable CDP command. Returns the message ID used.
120
+ */
121
+ export function sendNetworkEnable(ws) {
122
+ const id = getNextMessageId();
123
+ const message = JSON.stringify({
124
+ id,
125
+ method: "Network.enable",
126
+ });
127
+ ws.send(message);
128
+ return id;
129
+ }
130
+ /**
131
+ * Checks if console event args contain a __RN_NET__: prefixed message.
132
+ * Returns the JSON string after the prefix, or null.
133
+ */
134
+ export function isInterceptorEvent(args) {
135
+ if (!args || args.length === 0)
136
+ return null;
137
+ const first = args[0];
138
+ if (first.type !== "string" || typeof first.value !== "string")
139
+ return null;
140
+ const prefix = "__RN_NET__:";
141
+ const val = first.value;
142
+ if (!val.startsWith(prefix))
143
+ return null;
144
+ return val.slice(prefix.length);
145
+ }
146
+ /**
147
+ * Parses an intercepted network event JSON string and routes it to the buffer.
148
+ */
149
+ export function applyInterceptedEvent(jsonStr, networkBuffer) {
150
+ let event;
151
+ try {
152
+ event = JSON.parse(jsonStr);
153
+ }
154
+ catch {
155
+ return; // Invalid JSON — silently ignore
156
+ }
157
+ if (!event || typeof event !== "object" || !event.type || !event.id) {
158
+ return;
159
+ }
160
+ const id = String(event.id);
161
+ const type = event.type;
162
+ if (type === "request") {
163
+ const request = {
164
+ requestId: id,
165
+ timestamp: event.timestamp
166
+ ? new Date(event.timestamp)
167
+ : new Date(),
168
+ method: String(event.method || "GET"),
169
+ url: String(event.url || ""),
170
+ headers: {},
171
+ completed: false,
172
+ };
173
+ networkBuffer.set(id, request);
174
+ }
175
+ else if (type === "response") {
176
+ const existing = networkBuffer.get(id);
177
+ if (!existing)
178
+ return; // No matching request — silently ignore
179
+ const duration = typeof event.duration === "number" ? event.duration : undefined;
180
+ existing.status = typeof event.status === "number" ? event.status : undefined;
181
+ existing.statusText =
182
+ typeof event.statusText === "string" ? event.statusText : undefined;
183
+ existing.completed = true;
184
+ existing.timing = {
185
+ ...existing.timing,
186
+ responseTime: Date.now(),
187
+ duration,
188
+ };
189
+ networkBuffer.set(id, existing);
190
+ }
191
+ else if (type === "error") {
192
+ const existing = networkBuffer.get(id);
193
+ if (!existing)
194
+ return; // No matching request — silently ignore
195
+ const duration = typeof event.duration === "number" ? event.duration : undefined;
196
+ existing.error =
197
+ typeof event.error === "string" ? event.error : "Unknown error";
198
+ existing.completed = true;
199
+ existing.timing = {
200
+ ...existing.timing,
201
+ responseTime: Date.now(),
202
+ duration,
203
+ };
204
+ networkBuffer.set(id, existing);
205
+ }
206
+ }
207
+ //# sourceMappingURL=networkInterceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networkInterceptor.js","sourceRoot":"","sources":["../../src/core/networkInterceptor.ts"],"names":[],"mappings":"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"}
@@ -51,7 +51,7 @@ export interface OCRResult {
51
51
  words: OCRWord[];
52
52
  lines: OCRLine[];
53
53
  processingTimeMs: number;
54
- engine: "easyocr";
54
+ engine: "easyocr" | "cloud";
55
55
  }
56
56
  /**
57
57
  * Infer iOS device pixel ratio from screenshot dimensions
@@ -61,8 +61,7 @@ export interface OCRResult {
61
61
  */
62
62
  export declare function inferIOSDevicePixelRatio(width: number, height: number): number;
63
63
  /**
64
- * Run OCR using EasyOCR
65
- * Requires Python 3.6+ on the system; easyocr is provided by node-easyocr's bundled venv.
64
+ * Run OCR tries cloud (Google Vision) first, falls back to local EasyOCR.
66
65
  */
67
66
  export declare function recognizeText(imageBuffer: Buffer, options?: OCROptions): Promise<OCRResult>;
68
67
  export declare function terminateOCRWorker(): Promise<void>;
@@ -1 +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"}
1
+ {"version":3,"file":"ocr.d.ts","sourceRoot":"","sources":["../../src/core/ocr.ts"],"names":[],"mappings":"AAiBA,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,GAAG,OAAO,CAAC;CAC/B;AA6GD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAsB9E;AAwID;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CASjG;AAkFD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAUxD"}
package/build/core/ocr.js CHANGED
@@ -5,6 +5,13 @@ import { existsSync } from "fs";
5
5
  import { randomUUID } from "crypto";
6
6
  import { createRequire } from "module";
7
7
  import { spawn } from "child_process";
8
+ import { getInstallationId } from "./telemetry.js";
9
+ // ============================================================================
10
+ // Cloud OCR Configuration
11
+ // ============================================================================
12
+ const OCR_ENDPOINT = "https://rn-debugger-ocr.500griven.workers.dev";
13
+ const OCR_API_KEY = "4adf74c1f1afa5c4dc5eddcfc17787aea3b21b4a518bad27df152515d71f3d54";
14
+ const OCR_TIMEOUT_MS = 5_000;
8
15
  // EasyOCR instance
9
16
  let easyOCRInstance = null;
10
17
  let easyOCRInitPromise = null;
@@ -130,10 +137,109 @@ function toTapCoord(ocrCoord, scaleFactor, platform, devicePixelRatio = 3) {
130
137
  return platform === "ios" ? Math.round(pixelCoord / devicePixelRatio) : Math.round(pixelCoord);
131
138
  }
132
139
  /**
133
- * Run OCR using EasyOCR
134
- * Requires Python 3.6+ on the system; easyocr is provided by node-easyocr's bundled venv.
140
+ * Run OCR via Cloudflare Worker → Google Cloud Vision.
141
+ * Returns null on failure (caller should fall back to local EasyOCR).
142
+ */
143
+ async function recognizeTextCloud(imageBuffer, options) {
144
+ const scaleFactor = options?.scaleFactor ?? 1;
145
+ const platform = options?.platform ?? "ios";
146
+ const devicePixelRatio = options?.devicePixelRatio ?? 3;
147
+ const startTime = Date.now();
148
+ const body = new Uint8Array(imageBuffer);
149
+ const fetchOptions = {
150
+ method: "POST",
151
+ headers: {
152
+ "X-API-Key": OCR_API_KEY,
153
+ "X-Installation-Id": getInstallationId(),
154
+ "Content-Type": "image/png",
155
+ },
156
+ body,
157
+ };
158
+ let response;
159
+ try {
160
+ const controller = new AbortController();
161
+ const timeout = setTimeout(() => controller.abort(), OCR_TIMEOUT_MS);
162
+ response = await fetch(`${OCR_ENDPOINT}/ocr`, {
163
+ ...fetchOptions,
164
+ signal: controller.signal,
165
+ });
166
+ clearTimeout(timeout);
167
+ }
168
+ catch {
169
+ return null; // Network error or timeout — fall back to local
170
+ }
171
+ // On 502, retry once after 500ms
172
+ if (response.status === 502) {
173
+ await new Promise((resolve) => setTimeout(resolve, 500));
174
+ try {
175
+ const controller = new AbortController();
176
+ const timeout = setTimeout(() => controller.abort(), OCR_TIMEOUT_MS);
177
+ response = await fetch(`${OCR_ENDPOINT}/ocr`, {
178
+ ...fetchOptions,
179
+ signal: controller.signal,
180
+ });
181
+ clearTimeout(timeout);
182
+ }
183
+ catch {
184
+ return null;
185
+ }
186
+ }
187
+ // Any non-200 → fall back to local
188
+ if (!response.ok) {
189
+ return null;
190
+ }
191
+ let data;
192
+ try {
193
+ data = (await response.json());
194
+ }
195
+ catch {
196
+ return null;
197
+ }
198
+ if (!data.success) {
199
+ return null;
200
+ }
201
+ // Map cloud response to OCRResult, computing center and tapCenter client-side
202
+ const words = data.words.map((w) => {
203
+ const centerX = Math.round((w.bbox.x0 + w.bbox.x1) / 2);
204
+ const centerY = Math.round((w.bbox.y0 + w.bbox.y1) / 2);
205
+ return {
206
+ text: w.text,
207
+ confidence: w.confidence,
208
+ bbox: w.bbox,
209
+ center: { x: centerX, y: centerY },
210
+ tapCenter: {
211
+ x: toTapCoord(centerX, scaleFactor, platform, devicePixelRatio),
212
+ y: toTapCoord(centerY, scaleFactor, platform, devicePixelRatio),
213
+ },
214
+ };
215
+ });
216
+ return {
217
+ success: true,
218
+ fullText: data.fullText,
219
+ confidence: data.confidence,
220
+ words,
221
+ lines: [],
222
+ processingTimeMs: Date.now() - startTime,
223
+ engine: "cloud",
224
+ };
225
+ }
226
+ /**
227
+ * Run OCR — tries cloud (Google Vision) first, falls back to local EasyOCR.
135
228
  */
136
229
  export async function recognizeText(imageBuffer, options) {
230
+ // Try cloud OCR first
231
+ const cloudResult = await recognizeTextCloud(imageBuffer, options);
232
+ if (cloudResult) {
233
+ return cloudResult;
234
+ }
235
+ // Fall back to local EasyOCR
236
+ return recognizeTextLocal(imageBuffer, options);
237
+ }
238
+ /**
239
+ * Run OCR using local EasyOCR (fallback).
240
+ * Requires Python 3.6+ on the system; easyocr is provided by node-easyocr's bundled venv.
241
+ */
242
+ async function recognizeTextLocal(imageBuffer, options) {
137
243
  const scaleFactor = options?.scaleFactor ?? 1;
138
244
  const platform = options?.platform ?? "ios";
139
245
  const devicePixelRatio = options?.devicePixelRatio ?? 3;
@@ -170,8 +276,8 @@ export async function recognizeText(imageBuffer, options) {
170
276
  center: { x: centerX, y: centerY },
171
277
  tapCenter: {
172
278
  x: toTapCoord(centerX, scaleFactor, platform, devicePixelRatio),
173
- y: toTapCoord(centerY, scaleFactor, platform, devicePixelRatio)
174
- }
279
+ y: toTapCoord(centerY, scaleFactor, platform, devicePixelRatio),
280
+ },
175
281
  });
176
282
  textParts.push(result.text.trim());
177
283
  totalConfidence += result.confidence;
@@ -182,9 +288,9 @@ export async function recognizeText(imageBuffer, options) {
182
288
  fullText: textParts.join(" "),
183
289
  confidence: results.length > 0 ? (totalConfidence / results.length) * 100 : 0,
184
290
  words,
185
- lines: [], // EasyOCR returns words/phrases, not lines
291
+ lines: [],
186
292
  processingTimeMs: Date.now() - startTime,
187
- engine: "easyocr"
293
+ engine: "easyocr",
188
294
  };
189
295
  }
190
296
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"ocr.js","sourceRoot":"","sources":["../../src/core/ocr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ocr.js","sourceRoot":"","sources":["../../src/core/ocr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Check if the SDK is installed in the connected app.
3
+ */
4
+ export declare function isSDKInstalled(): Promise<boolean>;
5
+ /**
6
+ * Read network requests from the SDK's in-app buffer.
7
+ */
8
+ export declare function readSDKNetworkRequests(options?: {
9
+ count?: number;
10
+ method?: string;
11
+ urlPattern?: string;
12
+ status?: number;
13
+ }): Promise<{
14
+ success: boolean;
15
+ data?: any;
16
+ error?: string;
17
+ }>;
18
+ /**
19
+ * Read a single network request by ID from the SDK (includes full body).
20
+ */
21
+ export declare function readSDKNetworkRequest(id: string): Promise<{
22
+ success: boolean;
23
+ data?: any;
24
+ error?: string;
25
+ }>;
26
+ /**
27
+ * Read network stats from the SDK.
28
+ */
29
+ export declare function readSDKNetworkStats(): Promise<{
30
+ success: boolean;
31
+ data?: any;
32
+ error?: string;
33
+ }>;
34
+ /**
35
+ * Clear the SDK's network buffer.
36
+ */
37
+ export declare function clearSDKNetwork(): Promise<{
38
+ success: boolean;
39
+ count?: number;
40
+ error?: string;
41
+ }>;
42
+ //# sourceMappingURL=sdkBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdkBridge.d.ts","sourceRoot":"","sources":["../../src/core/sdkBridge.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAQvD;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,GAAE;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAcjE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAajH;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAarG;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CASrG"}
@@ -0,0 +1,68 @@
1
+ import { executeInApp } from "./executor.js";
2
+ import { connectedApps } from "./state.js";
3
+ /**
4
+ * Check if the SDK is installed in the connected app.
5
+ */
6
+ export async function isSDKInstalled() {
7
+ if (connectedApps.size === 0)
8
+ return false;
9
+ const result = await executeInApp('typeof globalThis.__RN_AI_DEVTOOLS__?.getNetworkRequests === "function"', false, { timeoutMs: 3000 });
10
+ return result.success && result.result === "true";
11
+ }
12
+ /**
13
+ * Read network requests from the SDK's in-app buffer.
14
+ */
15
+ export async function readSDKNetworkRequests(options = {}) {
16
+ const optionsJson = JSON.stringify(options);
17
+ const result = await executeInApp(`JSON.stringify(globalThis.__RN_AI_DEVTOOLS__.getNetworkRequests(${optionsJson}))`, false, { timeoutMs: 5000 });
18
+ if (!result.success)
19
+ return { success: false, error: result.error };
20
+ try {
21
+ const data = JSON.parse(result.result);
22
+ return { success: true, data };
23
+ }
24
+ catch {
25
+ return { success: false, error: "Failed to parse SDK response" };
26
+ }
27
+ }
28
+ /**
29
+ * Read a single network request by ID from the SDK (includes full body).
30
+ */
31
+ export async function readSDKNetworkRequest(id) {
32
+ const result = await executeInApp(`JSON.stringify(globalThis.__RN_AI_DEVTOOLS__.getNetworkRequest(${JSON.stringify(id)}))`, false, { timeoutMs: 5000 });
33
+ if (!result.success)
34
+ return { success: false, error: result.error };
35
+ try {
36
+ const data = JSON.parse(result.result);
37
+ return { success: true, data };
38
+ }
39
+ catch {
40
+ return { success: false, error: "Failed to parse SDK response" };
41
+ }
42
+ }
43
+ /**
44
+ * Read network stats from the SDK.
45
+ */
46
+ export async function readSDKNetworkStats() {
47
+ const result = await executeInApp("JSON.stringify(globalThis.__RN_AI_DEVTOOLS__.getNetworkStats())", false, { timeoutMs: 5000 });
48
+ if (!result.success)
49
+ return { success: false, error: result.error };
50
+ try {
51
+ const data = JSON.parse(result.result);
52
+ return { success: true, data };
53
+ }
54
+ catch {
55
+ return { success: false, error: "Failed to parse SDK response" };
56
+ }
57
+ }
58
+ /**
59
+ * Clear the SDK's network buffer.
60
+ */
61
+ export async function clearSDKNetwork() {
62
+ const result = await executeInApp("globalThis.__RN_AI_DEVTOOLS__.clearNetwork()", false, { timeoutMs: 3000 });
63
+ if (!result.success)
64
+ return { success: false, error: result.error };
65
+ const count = parseInt(result.result || "0", 10);
66
+ return { success: true, count: isNaN(count) ? 0 : count };
67
+ }
68
+ //# sourceMappingURL=sdkBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdkBridge.js","sourceRoot":"","sources":["../../src/core/sdkBridge.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export declare function getInstallationId(): string;
2
2
  export declare function initTelemetry(): void;
3
3
  export declare function isTelemetryEnabled(): boolean;
4
- export declare function trackToolInvocation(toolName: string, success: boolean, durationMs: number, errorMessage?: string, errorContext?: string, inputTokens?: number, outputTokens?: number, targetPlatform?: string): void;
4
+ export declare function trackToolInvocation(toolName: string, success: boolean, durationMs: number, errorMessage?: string, errorContext?: string, inputTokens?: number, outputTokens?: number, targetPlatform?: string, emptyResult?: boolean): void;
5
5
  //# sourceMappingURL=telemetry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/core/telemetry.ts"],"names":[],"mappings":"AA8KA,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAWD,wBAAgB,aAAa,IAAI,IAAI,CA+CpC;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAwBD,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,MAAM,GACxB,IAAI,CA8BN"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/core/telemetry.ts"],"names":[],"mappings":"AA+KA,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAWD,wBAAgB,aAAa,IAAI,IAAI,CA+CpC;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAwBD,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,OAAO,GACtB,IAAI,CA+BN"}
@@ -197,7 +197,7 @@ function trackEvent(name, properties) {
197
197
  flush();
198
198
  }
199
199
  }
200
- export function trackToolInvocation(toolName, success, durationMs, errorMessage, errorContext, inputTokens, outputTokens, targetPlatform) {
200
+ export function trackToolInvocation(toolName, success, durationMs, errorMessage, errorContext, inputTokens, outputTokens, targetPlatform, emptyResult) {
201
201
  if (!telemetryEnabled)
202
202
  return;
203
203
  const event = {
@@ -222,6 +222,8 @@ export function trackToolInvocation(toolName, success, durationMs, errorMessage,
222
222
  event.outputTokens = outputTokens;
223
223
  if (targetPlatform)
224
224
  event.targetPlatform = targetPlatform;
225
+ if (emptyResult !== undefined)
226
+ event.emptyResult = emptyResult;
225
227
  eventQueue.push(event);
226
228
  if (eventQueue.length >= BATCH_SIZE) {
227
229
  flush();