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.
- package/README.md +54 -38
- package/build/__tests__/integration/execute-in-app.test.js +2 -1
- package/build/__tests__/integration/execute-in-app.test.js.map +1 -1
- package/build/__tests__/unit/networkInterceptor.test.d.ts +2 -0
- package/build/__tests__/unit/networkInterceptor.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkInterceptor.test.js +104 -0
- package/build/__tests__/unit/networkInterceptor.test.js.map +1 -0
- package/build/core/connection.d.ts.map +1 -1
- package/build/core/connection.js +43 -5
- package/build/core/connection.js.map +1 -1
- package/build/core/guides.d.ts.map +1 -1
- package/build/core/guides.js +21 -2
- package/build/core/guides.js.map +1 -1
- package/build/core/networkInterceptor.d.ts +30 -0
- package/build/core/networkInterceptor.d.ts.map +1 -0
- package/build/core/networkInterceptor.js +207 -0
- package/build/core/networkInterceptor.js.map +1 -0
- package/build/core/ocr.d.ts +2 -3
- package/build/core/ocr.d.ts.map +1 -1
- package/build/core/ocr.js +112 -6
- package/build/core/ocr.js.map +1 -1
- package/build/core/sdkBridge.d.ts +42 -0
- package/build/core/sdkBridge.d.ts.map +1 -0
- package/build/core/sdkBridge.js +68 -0
- package/build/core/sdkBridge.js.map +1 -0
- package/build/core/telemetry.d.ts +1 -1
- package/build/core/telemetry.d.ts.map +1 -1
- package/build/core/telemetry.js +3 -1
- package/build/core/telemetry.js.map +1 -1
- package/build/core/types.d.ts +1 -0
- package/build/core/types.d.ts.map +1 -1
- package/build/index.js +141 -9
- package/build/index.js.map +1 -1
- package/package.json +1 -1
package/build/core/guides.js.map
CHANGED
|
@@ -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
|
|
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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"}
|
package/build/core/ocr.d.ts
CHANGED
|
@@ -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
|
|
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>;
|
package/build/core/ocr.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ocr.d.ts","sourceRoot":"","sources":["../../src/core/ocr.ts"],"names":[],"mappings":"
|
|
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
|
|
134
|
-
*
|
|
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: [],
|
|
291
|
+
lines: [],
|
|
186
292
|
processingTimeMs: Date.now() - startTime,
|
|
187
|
-
engine: "easyocr"
|
|
293
|
+
engine: "easyocr",
|
|
188
294
|
};
|
|
189
295
|
}
|
|
190
296
|
finally {
|
package/build/core/ocr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ocr.js","sourceRoot":"","sources":["../../src/core/ocr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;
|
|
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":"
|
|
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"}
|
package/build/core/telemetry.js
CHANGED
|
@@ -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();
|