react-native-ai-debugger 1.1.6 → 1.4.33

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 (168) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +386 -45
  3. package/build/__tests__/helpers/tap-test-helpers.d.ts +36 -0
  4. package/build/__tests__/helpers/tap-test-helpers.d.ts.map +1 -0
  5. package/build/__tests__/helpers/tap-test-helpers.js +130 -0
  6. package/build/__tests__/helpers/tap-test-helpers.js.map +1 -0
  7. package/build/__tests__/integration/connection-health.test.js +12 -6
  8. package/build/__tests__/integration/connection-health.test.js.map +1 -1
  9. package/build/__tests__/integration/execute-in-app.test.js +2 -1
  10. package/build/__tests__/integration/execute-in-app.test.js.map +1 -1
  11. package/build/__tests__/integration/tap-strategies.test.d.ts +2 -0
  12. package/build/__tests__/integration/tap-strategies.test.d.ts.map +1 -0
  13. package/build/__tests__/integration/tap-strategies.test.js +329 -0
  14. package/build/__tests__/integration/tap-strategies.test.js.map +1 -0
  15. package/build/__tests__/integration/tools.test.js +9 -10
  16. package/build/__tests__/integration/tools.test.js.map +1 -1
  17. package/build/__tests__/unit/burst.test.d.ts +2 -0
  18. package/build/__tests__/unit/burst.test.d.ts.map +1 -0
  19. package/build/__tests__/unit/burst.test.js +50 -0
  20. package/build/__tests__/unit/burst.test.js.map +1 -0
  21. package/build/__tests__/unit/connection-health.test.js +26 -16
  22. package/build/__tests__/unit/connection-health.test.js.map +1 -1
  23. package/build/__tests__/unit/fiberMatch.test.d.ts +2 -0
  24. package/build/__tests__/unit/fiberMatch.test.d.ts.map +1 -0
  25. package/build/__tests__/unit/fiberMatch.test.js +114 -0
  26. package/build/__tests__/unit/fiberMatch.test.js.map +1 -0
  27. package/build/__tests__/unit/fingerprint.test.d.ts +2 -0
  28. package/build/__tests__/unit/fingerprint.test.d.ts.map +1 -0
  29. package/build/__tests__/unit/fingerprint.test.js +89 -0
  30. package/build/__tests__/unit/fingerprint.test.js.map +1 -0
  31. package/build/__tests__/unit/imageBuffer.test.d.ts +2 -0
  32. package/build/__tests__/unit/imageBuffer.test.d.ts.map +1 -0
  33. package/build/__tests__/unit/imageBuffer.test.js +128 -0
  34. package/build/__tests__/unit/imageBuffer.test.js.map +1 -0
  35. package/build/__tests__/unit/logs.test.js +9 -0
  36. package/build/__tests__/unit/logs.test.js.map +1 -1
  37. package/build/__tests__/unit/networkInterceptor.test.d.ts +2 -0
  38. package/build/__tests__/unit/networkInterceptor.test.d.ts.map +1 -0
  39. package/build/__tests__/unit/networkInterceptor.test.js +104 -0
  40. package/build/__tests__/unit/networkInterceptor.test.js.map +1 -0
  41. package/build/__tests__/unit/screenshot-diff.test.d.ts +2 -0
  42. package/build/__tests__/unit/screenshot-diff.test.d.ts.map +1 -0
  43. package/build/__tests__/unit/screenshot-diff.test.js +97 -0
  44. package/build/__tests__/unit/screenshot-diff.test.js.map +1 -0
  45. package/build/__tests__/unit/tap.test.js +542 -25
  46. package/build/__tests__/unit/tap.test.js.map +1 -1
  47. package/build/core/android.d.ts.map +1 -1
  48. package/build/core/android.js +104 -113
  49. package/build/core/android.js.map +1 -1
  50. package/build/core/appDetection.d.ts +8 -0
  51. package/build/core/appDetection.d.ts.map +1 -0
  52. package/build/core/appDetection.js +115 -0
  53. package/build/core/appDetection.js.map +1 -0
  54. package/build/core/bundle.d.ts.map +1 -1
  55. package/build/core/bundle.js +15 -23
  56. package/build/core/bundle.js.map +1 -1
  57. package/build/core/config.d.ts +8 -0
  58. package/build/core/config.d.ts.map +1 -0
  59. package/build/core/config.js +27 -0
  60. package/build/core/config.js.map +1 -0
  61. package/build/core/connection.d.ts +47 -3
  62. package/build/core/connection.d.ts.map +1 -1
  63. package/build/core/connection.js +519 -124
  64. package/build/core/connection.js.map +1 -1
  65. package/build/core/executor.d.ts +82 -14
  66. package/build/core/executor.d.ts.map +1 -1
  67. package/build/core/executor.js +1869 -418
  68. package/build/core/executor.js.map +1 -1
  69. package/build/core/feedback.d.ts +18 -0
  70. package/build/core/feedback.d.ts.map +1 -0
  71. package/build/core/feedback.js +73 -0
  72. package/build/core/feedback.js.map +1 -0
  73. package/build/core/fiberMatch.d.ts +25 -0
  74. package/build/core/fiberMatch.d.ts.map +1 -0
  75. package/build/core/fiberMatch.js +35 -0
  76. package/build/core/fiberMatch.js.map +1 -0
  77. package/build/core/fingerprint.d.ts +4 -0
  78. package/build/core/fingerprint.d.ts.map +1 -0
  79. package/build/core/fingerprint.js +47 -0
  80. package/build/core/fingerprint.js.map +1 -0
  81. package/build/core/guides.d.ts.map +1 -1
  82. package/build/core/guides.js +66 -3
  83. package/build/core/guides.js.map +1 -1
  84. package/build/core/imageBuffer.d.ts +37 -0
  85. package/build/core/imageBuffer.d.ts.map +1 -0
  86. package/build/core/imageBuffer.js +58 -0
  87. package/build/core/imageBuffer.js.map +1 -0
  88. package/build/core/index.d.ts +22 -17
  89. package/build/core/index.d.ts.map +1 -1
  90. package/build/core/index.js +23 -19
  91. package/build/core/index.js.map +1 -1
  92. package/build/core/ios.d.ts +36 -7
  93. package/build/core/ios.d.ts.map +1 -1
  94. package/build/core/ios.js +561 -326
  95. package/build/core/ios.js.map +1 -1
  96. package/build/core/license.d.ts +38 -0
  97. package/build/core/license.d.ts.map +1 -0
  98. package/build/core/license.js +243 -0
  99. package/build/core/license.js.map +1 -0
  100. package/build/core/logbox.d.ts +57 -0
  101. package/build/core/logbox.d.ts.map +1 -0
  102. package/build/core/logbox.js +282 -0
  103. package/build/core/logbox.js.map +1 -0
  104. package/build/core/logs.d.ts +1 -0
  105. package/build/core/logs.d.ts.map +1 -1
  106. package/build/core/logs.js +5 -0
  107. package/build/core/logs.js.map +1 -1
  108. package/build/core/metro.d.ts +8 -0
  109. package/build/core/metro.d.ts.map +1 -1
  110. package/build/core/metro.js +28 -0
  111. package/build/core/metro.js.map +1 -1
  112. package/build/core/networkInterceptor.d.ts +29 -2
  113. package/build/core/networkInterceptor.d.ts.map +1 -1
  114. package/build/core/networkInterceptor.js +195 -191
  115. package/build/core/networkInterceptor.js.map +1 -1
  116. package/build/core/ocr.d.ts +8 -3
  117. package/build/core/ocr.d.ts.map +1 -1
  118. package/build/core/ocr.js +116 -15
  119. package/build/core/ocr.js.map +1 -1
  120. package/build/core/posthog.d.ts +5 -0
  121. package/build/core/posthog.d.ts.map +1 -0
  122. package/build/core/posthog.js +46 -0
  123. package/build/core/posthog.js.map +1 -0
  124. package/build/core/sdkBridge.d.ts +67 -0
  125. package/build/core/sdkBridge.d.ts.map +1 -0
  126. package/build/core/sdkBridge.js +148 -0
  127. package/build/core/sdkBridge.js.map +1 -0
  128. package/build/core/state.d.ts +25 -5
  129. package/build/core/state.d.ts.map +1 -1
  130. package/build/core/state.js +79 -10
  131. package/build/core/state.js.map +1 -1
  132. package/build/core/telemetry.d.ts +21 -1
  133. package/build/core/telemetry.d.ts.map +1 -1
  134. package/build/core/telemetry.js +166 -10
  135. package/build/core/telemetry.js.map +1 -1
  136. package/build/core/types.d.ts +11 -0
  137. package/build/core/types.d.ts.map +1 -1
  138. package/build/index.js +1490 -324
  139. package/build/index.js.map +1 -1
  140. package/build/pro/screenshot-diff.d.ts +10 -0
  141. package/build/pro/screenshot-diff.d.ts.map +1 -0
  142. package/build/pro/screenshot-diff.js +38 -0
  143. package/build/pro/screenshot-diff.js.map +1 -0
  144. package/build/pro/tap.d.ts +84 -2
  145. package/build/pro/tap.d.ts.map +1 -1
  146. package/build/pro/tap.js +835 -129
  147. package/build/pro/tap.js.map +1 -1
  148. package/build/tools/accountTools.d.ts +44 -0
  149. package/build/tools/accountTools.d.ts.map +1 -0
  150. package/build/tools/accountTools.js +217 -0
  151. package/build/tools/accountTools.js.map +1 -0
  152. package/package.json +8 -7
  153. package/build/core/httpServer.d.ts +0 -14
  154. package/build/core/httpServer.d.ts.map +0 -1
  155. package/build/core/httpServer.js +0 -2459
  156. package/build/core/httpServer.js.map +0 -1
  157. package/build/core/httpServerProcess.d.ts +0 -25
  158. package/build/core/httpServerProcess.d.ts.map +0 -1
  159. package/build/core/httpServerProcess.js +0 -153
  160. package/build/core/httpServerProcess.js.map +0 -1
  161. package/build/core/tap.d.ts +0 -91
  162. package/build/core/tap.d.ts.map +0 -1
  163. package/build/core/tap.js +0 -542
  164. package/build/core/tap.js.map +0 -1
  165. package/build/httpServerStandalone.d.ts +0 -7
  166. package/build/httpServerStandalone.d.ts.map +0 -1
  167. package/build/httpServerStandalone.js +0 -31
  168. package/build/httpServerStandalone.js.map +0 -1
@@ -1,203 +1,207 @@
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) {}
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);
18
22
  }
19
23
 
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) {}
24
+ function _report(evt) {
25
+ try {
26
+ console.debug('__RN_NET__:' + JSON.stringify(evt));
27
+ } catch(e) {}
28
+ }
69
29
 
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
- });
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});
79
48
 
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
- };
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;
91
76
  }
92
77
 
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);
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,
109
172
  };
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);
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,
116
188
  };
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);
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,
197
203
  };
204
+ networkBuffer.set(id, existing);
198
205
  }
199
-
200
- return 'installed';
201
- })()`;
202
206
  }
203
207
  //# sourceMappingURL=networkInterceptor.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"networkInterceptor.js","sourceRoot":"","sources":["../../src/core/networkInterceptor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IAChC,+DAA+D;IAC/D,4EAA4E;IAC5E,iFAAiF;IACjF,4EAA4E;IAC5E,iDAAiD;IACjD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAwFW,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,EAAa;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,EAAE,EAAE,gBAAgB,EAAE;QACtB,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE;YACJ,UAAU,EAAE,oBAAoB,EAAE;YAClC,MAAM,EAAE,IAAI;SACf;KACJ,CAAC,CAAC;IACH,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAa;IAC3C,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,EAAE;QACF,MAAM,EAAE,gBAAgB;KAC3B,CAAC,CAAC;IACH,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,OAAO,EAAE,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAC9B,IAA+C;IAE/C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE5E,MAAM,MAAM,GAAG,aAAa,CAAC;IAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;IACxB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACjC,OAAe,EACf,aAA4B;IAE5B,IAAI,KAA8B,CAAC;IACnC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,CAAC,iCAAiC;IAC7C,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAClE,OAAO;IACX,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAExB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,OAAO,GAAmB;YAC5B,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,KAAK,CAAC,SAAS;gBACtB,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAmB,CAAC;gBACrC,CAAC,CAAC,IAAI,IAAI,EAAE;YAChB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;YACrC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC;YAC5B,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,KAAK;SACnB,CAAC;QACF,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,wCAAwC;QAE/D,MAAM,QAAQ,GACV,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpE,QAAQ,CAAC,MAAM,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,QAAQ,CAAC,UAAU;YACf,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,QAAQ,CAAC,MAAM,GAAG;YACd,GAAG,QAAQ,CAAC,MAAM;YAClB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;YACxB,QAAQ;SACX,CAAC;QACF,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,wCAAwC;QAE/D,MAAM,QAAQ,GACV,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpE,QAAQ,CAAC,KAAK;YACV,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC;QACpE,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,QAAQ,CAAC,MAAM,GAAG;YACd,GAAG,QAAQ,CAAC,MAAM;YAClB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;YACxB,QAAQ;SACX,CAAC;QACF,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;AACL,CAAC"}
@@ -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,13 @@ 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
+ * Convert OCR bounding box coordinate to screenshot-image-pixel space.
65
+ * OCR runs on the downscaled image, so coordinates are already in image-pixel space.
66
+ * We return them as-is — tap() handles un-downscaling and platform conversion.
67
+ */
68
+ export declare function toTapCoord(ocrCoord: number, _scaleFactor: number): number;
69
+ /**
70
+ * Run OCR — tries cloud (Google Vision) first, falls back to local EasyOCR.
66
71
  */
67
72
  export declare function recognizeText(imageBuffer: Buffer, options?: OCROptions): Promise<OCRResult>;
68
73
  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;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzE;AAuHD;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CASjG;AAgFD,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;
@@ -121,22 +128,116 @@ export function inferIOSDevicePixelRatio(width, height) {
121
128
  return 2;
122
129
  }
123
130
  /**
124
- * Convert OCR coordinates to tap-ready coordinates
125
- * iOS: (ocrCoord * scaleFactor) / devicePixelRatio (points)
126
- * Android: ocrCoord * scaleFactor (pixels)
131
+ * Convert OCR bounding box coordinate to screenshot-image-pixel space.
132
+ * OCR runs on the downscaled image, so coordinates are already in image-pixel space.
133
+ * We return them as-is — tap() handles un-downscaling and platform conversion.
127
134
  */
128
- function toTapCoord(ocrCoord, scaleFactor, platform, devicePixelRatio = 3) {
129
- const pixelCoord = ocrCoord * scaleFactor;
130
- return platform === "ios" ? Math.round(pixelCoord / devicePixelRatio) : Math.round(pixelCoord);
135
+ export function toTapCoord(ocrCoord, _scaleFactor) {
136
+ return Math.round(ocrCoord);
131
137
  }
132
138
  /**
133
- * Run OCR using EasyOCR
134
- * Requires Python 3.6+ on the system; easyocr is provided by node-easyocr's bundled venv.
139
+ * Run OCR via Cloudflare Worker → Google Cloud Vision.
140
+ * Returns null on failure (caller should fall back to local EasyOCR).
141
+ */
142
+ async function recognizeTextCloud(imageBuffer, options) {
143
+ const scaleFactor = options?.scaleFactor ?? 1;
144
+ const startTime = Date.now();
145
+ const body = new Uint8Array(imageBuffer);
146
+ const fetchOptions = {
147
+ method: "POST",
148
+ headers: {
149
+ "X-API-Key": OCR_API_KEY,
150
+ "X-Installation-Id": getInstallationId(),
151
+ "Content-Type": "image/png",
152
+ },
153
+ body,
154
+ };
155
+ let response;
156
+ try {
157
+ const controller = new AbortController();
158
+ const timeout = setTimeout(() => controller.abort(), OCR_TIMEOUT_MS);
159
+ response = await fetch(`${OCR_ENDPOINT}/ocr`, {
160
+ ...fetchOptions,
161
+ signal: controller.signal,
162
+ });
163
+ clearTimeout(timeout);
164
+ }
165
+ catch {
166
+ return null; // Network error or timeout — fall back to local
167
+ }
168
+ // On 502, retry once after 500ms
169
+ if (response.status === 502) {
170
+ await new Promise((resolve) => setTimeout(resolve, 500));
171
+ try {
172
+ const controller = new AbortController();
173
+ const timeout = setTimeout(() => controller.abort(), OCR_TIMEOUT_MS);
174
+ response = await fetch(`${OCR_ENDPOINT}/ocr`, {
175
+ ...fetchOptions,
176
+ signal: controller.signal,
177
+ });
178
+ clearTimeout(timeout);
179
+ }
180
+ catch {
181
+ return null;
182
+ }
183
+ }
184
+ // Any non-200 → fall back to local
185
+ if (!response.ok) {
186
+ return null;
187
+ }
188
+ let data;
189
+ try {
190
+ data = (await response.json());
191
+ }
192
+ catch {
193
+ return null;
194
+ }
195
+ if (!data.success) {
196
+ return null;
197
+ }
198
+ // Map cloud response to OCRResult, computing center and tapCenter client-side
199
+ const words = data.words.map((w) => {
200
+ const centerX = Math.round((w.bbox.x0 + w.bbox.x1) / 2);
201
+ const centerY = Math.round((w.bbox.y0 + w.bbox.y1) / 2);
202
+ return {
203
+ text: w.text,
204
+ confidence: w.confidence,
205
+ bbox: w.bbox,
206
+ center: { x: centerX, y: centerY },
207
+ tapCenter: {
208
+ x: toTapCoord(centerX, scaleFactor),
209
+ y: toTapCoord(centerY, scaleFactor),
210
+ },
211
+ };
212
+ });
213
+ return {
214
+ success: true,
215
+ fullText: data.fullText,
216
+ confidence: data.confidence,
217
+ words,
218
+ lines: [],
219
+ processingTimeMs: Date.now() - startTime,
220
+ engine: "cloud",
221
+ };
222
+ }
223
+ /**
224
+ * Run OCR — tries cloud (Google Vision) first, falls back to local EasyOCR.
135
225
  */
136
226
  export async function recognizeText(imageBuffer, options) {
227
+ // Try cloud OCR first
228
+ const cloudResult = await recognizeTextCloud(imageBuffer, options);
229
+ if (cloudResult) {
230
+ return cloudResult;
231
+ }
232
+ // Fall back to local EasyOCR
233
+ return recognizeTextLocal(imageBuffer, options);
234
+ }
235
+ /**
236
+ * Run OCR using local EasyOCR (fallback).
237
+ * Requires Python 3.6+ on the system; easyocr is provided by node-easyocr's bundled venv.
238
+ */
239
+ async function recognizeTextLocal(imageBuffer, options) {
137
240
  const scaleFactor = options?.scaleFactor ?? 1;
138
- const platform = options?.platform ?? "ios";
139
- const devicePixelRatio = options?.devicePixelRatio ?? 3;
140
241
  const startTime = Date.now();
141
242
  let ocr;
142
243
  try {
@@ -169,9 +270,9 @@ export async function recognizeText(imageBuffer, options) {
169
270
  bbox: { x0, y0, x1, y1 },
170
271
  center: { x: centerX, y: centerY },
171
272
  tapCenter: {
172
- x: toTapCoord(centerX, scaleFactor, platform, devicePixelRatio),
173
- y: toTapCoord(centerY, scaleFactor, platform, devicePixelRatio)
174
- }
273
+ x: toTapCoord(centerX, scaleFactor),
274
+ y: toTapCoord(centerY, scaleFactor),
275
+ },
175
276
  });
176
277
  textParts.push(result.text.trim());
177
278
  totalConfidence += result.confidence;
@@ -182,9 +283,9 @@ export async function recognizeText(imageBuffer, options) {
182
283
  fullText: textParts.join(" "),
183
284
  confidence: results.length > 0 ? (totalConfidence / results.length) * 100 : 0,
184
285
  words,
185
- lines: [], // EasyOCR returns words/phrases, not lines
286
+ lines: [],
186
287
  processingTimeMs: Date.now() - startTime,
187
- engine: "easyocr"
288
+ engine: "easyocr",
188
289
  };
189
290
  }
190
291
  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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"}