@astur-mobile/core 0.5.0-beta.3 → 0.5.0-beta.5

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.
@@ -0,0 +1,140 @@
1
+ import type { NetworkCapabilities, NetworkRedactionOptions, NetworkRequestRecord } from '@astur-mobile/protocol';
2
+ /**
3
+ * Network observation for React Native, backed by the CDP `Network` domain that
4
+ * RN's own DevTools ("Fusebox") uses. The reporter lives in `ReactCommon` — the
5
+ * shared C++ layer — so one client covers Android and iOS identically.
6
+ *
7
+ * Astur is a plain CDP client here. It does not stand in for Metro: the app
8
+ * dials out to the dev server, the dev server proxies debugger sessions, and
9
+ * Astur connects to that proxy the same way React Native DevTools does.
10
+ *
11
+ * ## What is covered
12
+ *
13
+ * Whatever goes through RN's `XMLHttpRequest` — which is RN's own `fetch`
14
+ * polyfill, `axios`, and most HTTP libraries in the ecosystem, because they all
15
+ * bottom out there. Clients that bypass it are invisible, and the important
16
+ * case in practice is **Expo's native `fetch`** (`expo/fetch`, installed as the
17
+ * global `fetch` from SDK 52): it is implemented in native code and never
18
+ * touches RN's networking module, so it emits no CDP events at all. This was
19
+ * measured, not assumed — see `coverage` on {@link REACT_NATIVE_NETWORK_CAPABILITIES}.
20
+ *
21
+ * ## Why a dev build is required
22
+ *
23
+ * The reporter is behind a compile-time `REACT_NATIVE_DEBUGGER_ENABLED` flag; in
24
+ * a release build the code is not present and `isDebuggingEnabled()` returns
25
+ * false. There is nothing to attach to, exactly as with Flutter's release AOT
26
+ * builds. This cannot be worked around from outside the app.
27
+ */
28
+ /** Metro's default port, and the default the app itself dials out to. */
29
+ export declare const DEFAULT_METRO_URL = "http://127.0.0.1:8081";
30
+ export declare const REACT_NATIVE_NETWORK_CAPABILITIES: NetworkCapabilities;
31
+ interface InspectorTarget {
32
+ webSocketDebuggerUrl?: string;
33
+ appId?: string;
34
+ title?: string;
35
+ }
36
+ /**
37
+ * Lists debuggable targets on a Metro dev server, newest last.
38
+ *
39
+ * Returns `[]` rather than throwing when the server is absent — "no dev server"
40
+ * is the normal case for a release build and must read as unsupported, not as
41
+ * a failure.
42
+ */
43
+ export declare function listInspectorTargets(devServerUrl: string, timeoutMs?: number): Promise<InspectorTarget[]>;
44
+ /**
45
+ * Picks the target belonging to `appId`. Metro keys targets by application id,
46
+ * which is the package name on Android and the bundle id on iOS — the same
47
+ * value Astur already knows as the app under test.
48
+ *
49
+ * When `appId` is known the match is required, never best-effort. A dev server
50
+ * left running for a different project would otherwise hand a native or Flutter
51
+ * session someone else's app, and it would report that app's traffic as its
52
+ * own — a wrong answer is worse here than "unsupported". Only a session that
53
+ * cannot name its app falls back to the newest target.
54
+ */
55
+ export declare function selectInspectorTarget(targets: InspectorTarget[], appId?: string): InspectorTarget | undefined;
56
+ /**
57
+ * A CDP client that keeps a live `Network` subscription against a React Native
58
+ * app and buffers what it sees.
59
+ *
60
+ * Reconnects on its own. Every JS reload replaces the inspector page and closes
61
+ * the debugger socket with `CONNECTION_LOST`; a test that relaunches the app
62
+ * between specs would otherwise observe traffic once and silently nothing after
63
+ * — the same failure mode the Flutter backend hit with per-isolate state.
64
+ */
65
+ export declare class ReactNativeNetworkObserver {
66
+ private readonly devServerUrl;
67
+ private readonly appId?;
68
+ private socket?;
69
+ private nextId;
70
+ private readonly pending;
71
+ private readonly exchanges;
72
+ private closed;
73
+ private reconnectTimer?;
74
+ /**
75
+ * Whether a debuggable target was ever found.
76
+ *
77
+ * Reconnecting is only correct for a session that had one: a release build
78
+ * has none and never will, and retrying there would poll the dev server
79
+ * forever for a session that can never observe anything.
80
+ */
81
+ private everAttached;
82
+ constructor(devServerUrl: string, appId?: string | undefined);
83
+ /**
84
+ * Connects and subscribes. Resolves `false` when there is no debuggable
85
+ * target — a release build, or Metro not running — so the caller can report
86
+ * `observe: false` with a reason instead of throwing.
87
+ */
88
+ attach(): Promise<boolean>;
89
+ private open;
90
+ /**
91
+ * Waits until the subscription is live again, up to `timeoutMs`.
92
+ *
93
+ * Relaunching the app tears the inspector page down and stands a new one up,
94
+ * and in between the dev server lists no target at all. A fire-and-forget
95
+ * reconnect loses that race and then observes nothing for the rest of the
96
+ * test, so callers that can afford to wait — `clear()` and the capabilities
97
+ * probe — wait, and thereby guarantee that traffic caused after they return
98
+ * is seen.
99
+ *
100
+ * The default budget is generous because a debug build fetches its bundle
101
+ * from Metro on every cold start and can take tens of seconds to register its
102
+ * inspector page. A short window silently expires before the app is back.
103
+ */
104
+ ensureLive(timeoutMs?: number): Promise<boolean>;
105
+ private ensureAttached;
106
+ /**
107
+ * Re-attaches after a reload. Buffered records are deliberately kept: they
108
+ * describe traffic the test already caused, and dropping them would make
109
+ * observation depend on whether the app happened to reload mid-test.
110
+ */
111
+ /**
112
+ * Keeps trying to re-attach until it succeeds or the session ends.
113
+ *
114
+ * Deliberately unbounded rather than a single retry with a deadline. A debug
115
+ * build reloads its bundle from Metro on every relaunch and can be gone for
116
+ * tens of seconds; a bounded window expires first, and the observer then sits
117
+ * detached for the rest of the run while every later read returns nothing.
118
+ * One localhost request per second while detached is the cheaper mistake.
119
+ */
120
+ private scheduleReconnect;
121
+ private send;
122
+ private request;
123
+ private onMessage;
124
+ private consume;
125
+ private captureBody;
126
+ /** Everything observed so far, oldest first, redacted per `options`. */
127
+ records(options?: NetworkRedactionOptions): NetworkRequestRecord[];
128
+ /**
129
+ * Drops the buffer and re-enables the domain.
130
+ *
131
+ * Re-enabling matters for the same reason it does on Flutter: a reload
132
+ * replaces the runtime and takes the subscription with it. Enabling here —
133
+ * which the fixture calls between tests — is what keeps observation working
134
+ * past the first spec.
135
+ */
136
+ clear(): Promise<void>;
137
+ dispose(): void;
138
+ }
139
+ export {};
140
+ //# sourceMappingURL=network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/reactNative/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAIhC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,0BAA0B,CAAC;AAEzD,eAAO,MAAM,iCAAiC,EAAE,mBAS/C,CAAC;AAEF,UAAU,eAAe;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAyBD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,SAAS,SAAQ,GAChB,OAAO,CAAC,eAAe,EAAE,CAAC,CAa5B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,eAAe,EAAE,EAC1B,KAAK,CAAC,EAAE,MAAM,GACb,eAAe,GAAG,SAAS,CAS7B;AAED;;;;;;;;GAQG;AACH,qBAAa,0BAA0B;IAiBnC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAjBzB,OAAO,CAAC,MAAM,CAAC,CAAY;IAC3B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoD;IAC5E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IACzD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAC,CAAgC;IACvD;;;;;;OAMG;IACH,OAAO,CAAC,YAAY,CAAS;gBAGV,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,YAAA;IAGjC;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;YAQlB,IAAI;IAsClB;;;;;;;;;;;;;OAaG;IACG,UAAU,CAAC,SAAS,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;YAIxC,cAAc;IAqB5B;;;;OAIG;IACH;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,SAAS;IAmBjB,OAAO,CAAC,OAAO;YAuDD,WAAW;IAWzB,wEAAwE;IACxE,OAAO,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,oBAAoB,EAAE;IA4BlE;;;;;;;OAOG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,OAAO,IAAI,IAAI;CAchB"}
@@ -0,0 +1,382 @@
1
+ import { applyBodyLimit, redactHeaders, resolveRedactionOptions } from '../flutter/network.js';
2
+ /**
3
+ * Network observation for React Native, backed by the CDP `Network` domain that
4
+ * RN's own DevTools ("Fusebox") uses. The reporter lives in `ReactCommon` — the
5
+ * shared C++ layer — so one client covers Android and iOS identically.
6
+ *
7
+ * Astur is a plain CDP client here. It does not stand in for Metro: the app
8
+ * dials out to the dev server, the dev server proxies debugger sessions, and
9
+ * Astur connects to that proxy the same way React Native DevTools does.
10
+ *
11
+ * ## What is covered
12
+ *
13
+ * Whatever goes through RN's `XMLHttpRequest` — which is RN's own `fetch`
14
+ * polyfill, `axios`, and most HTTP libraries in the ecosystem, because they all
15
+ * bottom out there. Clients that bypass it are invisible, and the important
16
+ * case in practice is **Expo's native `fetch`** (`expo/fetch`, installed as the
17
+ * global `fetch` from SDK 52): it is implemented in native code and never
18
+ * touches RN's networking module, so it emits no CDP events at all. This was
19
+ * measured, not assumed — see `coverage` on {@link REACT_NATIVE_NETWORK_CAPABILITIES}.
20
+ *
21
+ * ## Why a dev build is required
22
+ *
23
+ * The reporter is behind a compile-time `REACT_NATIVE_DEBUGGER_ENABLED` flag; in
24
+ * a release build the code is not present and `isDebuggingEnabled()` returns
25
+ * false. There is nothing to attach to, exactly as with Flutter's release AOT
26
+ * builds. This cannot be worked around from outside the app.
27
+ */
28
+ /** Metro's default port, and the default the app itself dials out to. */
29
+ export const DEFAULT_METRO_URL = 'http://127.0.0.1:8081';
30
+ export const REACT_NATIVE_NETWORK_CAPABILITIES = {
31
+ observe: true,
32
+ intercept: false,
33
+ transports: ['http'],
34
+ responseBodies: true,
35
+ coverage: "React Native XMLHttpRequest traffic (RN's fetch polyfill and axios included) via the CDP Network domain; "
36
+ + "excludes Expo's native fetch, WebView, and native SDK requests, and needs a debug build attached to Metro",
37
+ adapterRequired: true
38
+ };
39
+ /**
40
+ * Lists debuggable targets on a Metro dev server, newest last.
41
+ *
42
+ * Returns `[]` rather than throwing when the server is absent — "no dev server"
43
+ * is the normal case for a release build and must read as unsupported, not as
44
+ * a failure.
45
+ */
46
+ export async function listInspectorTargets(devServerUrl, timeoutMs = 2_000) {
47
+ try {
48
+ const response = await fetch(new URL('/json/list', devServerUrl), {
49
+ signal: AbortSignal.timeout(timeoutMs)
50
+ });
51
+ if (!response.ok) {
52
+ return [];
53
+ }
54
+ const targets = await response.json();
55
+ return Array.isArray(targets) ? targets : [];
56
+ }
57
+ catch {
58
+ return [];
59
+ }
60
+ }
61
+ /**
62
+ * Picks the target belonging to `appId`. Metro keys targets by application id,
63
+ * which is the package name on Android and the bundle id on iOS — the same
64
+ * value Astur already knows as the app under test.
65
+ *
66
+ * When `appId` is known the match is required, never best-effort. A dev server
67
+ * left running for a different project would otherwise hand a native or Flutter
68
+ * session someone else's app, and it would report that app's traffic as its
69
+ * own — a wrong answer is worse here than "unsupported". Only a session that
70
+ * cannot name its app falls back to the newest target.
71
+ */
72
+ export function selectInspectorTarget(targets, appId) {
73
+ const connectable = targets.filter((target) => Boolean(target.webSocketDebuggerUrl));
74
+ if (connectable.length === 0) {
75
+ return undefined;
76
+ }
77
+ if (appId) {
78
+ return connectable.filter((target) => target.appId === appId).at(-1);
79
+ }
80
+ return connectable.at(-1);
81
+ }
82
+ /**
83
+ * A CDP client that keeps a live `Network` subscription against a React Native
84
+ * app and buffers what it sees.
85
+ *
86
+ * Reconnects on its own. Every JS reload replaces the inspector page and closes
87
+ * the debugger socket with `CONNECTION_LOST`; a test that relaunches the app
88
+ * between specs would otherwise observe traffic once and silently nothing after
89
+ * — the same failure mode the Flutter backend hit with per-isolate state.
90
+ */
91
+ export class ReactNativeNetworkObserver {
92
+ devServerUrl;
93
+ appId;
94
+ socket;
95
+ nextId = 1;
96
+ pending = new Map();
97
+ exchanges = new Map();
98
+ closed = false;
99
+ reconnectTimer;
100
+ /**
101
+ * Whether a debuggable target was ever found.
102
+ *
103
+ * Reconnecting is only correct for a session that had one: a release build
104
+ * has none and never will, and retrying there would poll the dev server
105
+ * forever for a session that can never observe anything.
106
+ */
107
+ everAttached = false;
108
+ constructor(devServerUrl, appId) {
109
+ this.devServerUrl = devServerUrl;
110
+ this.appId = appId;
111
+ }
112
+ /**
113
+ * Connects and subscribes. Resolves `false` when there is no debuggable
114
+ * target — a release build, or Metro not running — so the caller can report
115
+ * `observe: false` with a reason instead of throwing.
116
+ */
117
+ async attach() {
118
+ const target = selectInspectorTarget(await listInspectorTargets(this.devServerUrl), this.appId);
119
+ if (!target?.webSocketDebuggerUrl) {
120
+ return false;
121
+ }
122
+ return this.open(target.webSocketDebuggerUrl);
123
+ }
124
+ async open(url) {
125
+ const connected = await new Promise((resolve) => {
126
+ let socket;
127
+ try {
128
+ // The Origin header is mandatory and must equal the dev server's own
129
+ // base URL. React Native's proxy rejects a missing Origin with 401, and
130
+ // Expo's dev server terminates any socket whose Origin host differs
131
+ // from its own — so "no header" and "close enough" both fail, in two
132
+ // different ways, several layers apart.
133
+ socket = new WebSocket(url, {
134
+ headers: { Origin: new URL(this.devServerUrl).origin }
135
+ });
136
+ }
137
+ catch {
138
+ resolve(false);
139
+ return;
140
+ }
141
+ const settle = (value) => { resolve(value); };
142
+ socket.addEventListener('open', () => settle(true), { once: true });
143
+ socket.addEventListener('error', () => settle(false), { once: true });
144
+ socket.addEventListener('message', (event) => this.onMessage(event));
145
+ socket.addEventListener('close', () => {
146
+ if (this.socket === socket) {
147
+ this.socket = undefined;
148
+ this.scheduleReconnect();
149
+ }
150
+ settle(false);
151
+ });
152
+ this.socket = socket;
153
+ });
154
+ if (connected) {
155
+ this.everAttached = true;
156
+ this.send('Network.enable');
157
+ }
158
+ return connected;
159
+ }
160
+ /**
161
+ * Waits until the subscription is live again, up to `timeoutMs`.
162
+ *
163
+ * Relaunching the app tears the inspector page down and stands a new one up,
164
+ * and in between the dev server lists no target at all. A fire-and-forget
165
+ * reconnect loses that race and then observes nothing for the rest of the
166
+ * test, so callers that can afford to wait — `clear()` and the capabilities
167
+ * probe — wait, and thereby guarantee that traffic caused after they return
168
+ * is seen.
169
+ *
170
+ * The default budget is generous because a debug build fetches its bundle
171
+ * from Metro on every cold start and can take tens of seconds to register its
172
+ * inspector page. A short window silently expires before the app is back.
173
+ */
174
+ async ensureLive(timeoutMs = 45_000) {
175
+ return this.ensureAttached(timeoutMs);
176
+ }
177
+ async ensureAttached(timeoutMs = 45_000) {
178
+ if (this.socket?.readyState === 1) {
179
+ return true;
180
+ }
181
+ if (this.closed || !this.everAttached) {
182
+ return false;
183
+ }
184
+ const deadline = Date.now() + timeoutMs;
185
+ while (Date.now() < deadline && !this.closed) {
186
+ if (await this.attach().catch(() => false)) {
187
+ return true;
188
+ }
189
+ await new Promise((resolve) => {
190
+ const timer = setTimeout(resolve, 250);
191
+ timer.unref?.();
192
+ });
193
+ }
194
+ return false;
195
+ }
196
+ /**
197
+ * Re-attaches after a reload. Buffered records are deliberately kept: they
198
+ * describe traffic the test already caused, and dropping them would make
199
+ * observation depend on whether the app happened to reload mid-test.
200
+ */
201
+ /**
202
+ * Keeps trying to re-attach until it succeeds or the session ends.
203
+ *
204
+ * Deliberately unbounded rather than a single retry with a deadline. A debug
205
+ * build reloads its bundle from Metro on every relaunch and can be gone for
206
+ * tens of seconds; a bounded window expires first, and the observer then sits
207
+ * detached for the rest of the run while every later read returns nothing.
208
+ * One localhost request per second while detached is the cheaper mistake.
209
+ */
210
+ scheduleReconnect() {
211
+ if (this.closed || this.reconnectTimer || !this.everAttached) {
212
+ return;
213
+ }
214
+ this.reconnectTimer = setTimeout(() => {
215
+ this.reconnectTimer = undefined;
216
+ if (this.closed || this.socket) {
217
+ return;
218
+ }
219
+ void this.attach()
220
+ .catch(() => false)
221
+ .then((attached) => {
222
+ if (!attached) {
223
+ this.scheduleReconnect();
224
+ }
225
+ });
226
+ }, 1_000);
227
+ this.reconnectTimer.unref?.();
228
+ }
229
+ send(method, params = {}) {
230
+ const id = this.nextId++;
231
+ try {
232
+ this.socket?.send(JSON.stringify({ id, method, params }));
233
+ }
234
+ catch {
235
+ // A send on a socket that just closed is not an error worth surfacing —
236
+ // the reconnect path will re-enable the domain.
237
+ }
238
+ return id;
239
+ }
240
+ request(method, params = {}) {
241
+ return new Promise((resolve) => {
242
+ const id = this.send(method, params);
243
+ const timer = setTimeout(() => { this.pending.delete(id); resolve({}); }, 5_000);
244
+ timer.unref?.();
245
+ this.pending.set(id, (message) => { clearTimeout(timer); resolve(message); });
246
+ });
247
+ }
248
+ onMessage(event) {
249
+ let message;
250
+ try {
251
+ message = JSON.parse(String(event.data));
252
+ }
253
+ catch {
254
+ return;
255
+ }
256
+ if (message.id !== undefined) {
257
+ this.pending.get(message.id)?.(message);
258
+ this.pending.delete(message.id);
259
+ return;
260
+ }
261
+ if (!message.method?.startsWith('Network.')) {
262
+ return;
263
+ }
264
+ this.consume(message.method, message.params ?? {});
265
+ }
266
+ consume(method, params) {
267
+ const id = typeof params.requestId === 'string' ? params.requestId : undefined;
268
+ if (!id) {
269
+ return;
270
+ }
271
+ if (method === 'Network.requestWillBeSent') {
272
+ const request = (params.request ?? {});
273
+ this.exchanges.set(id, {
274
+ id,
275
+ method: typeof request.method === 'string' ? request.method.toUpperCase() : 'GET',
276
+ url: typeof request.url === 'string' ? request.url : '',
277
+ requestHeaders: (request.headers ?? {})
278
+ });
279
+ return;
280
+ }
281
+ const exchange = this.exchanges.get(id);
282
+ if (!exchange) {
283
+ return;
284
+ }
285
+ if (method === 'Network.requestWillBeSentExtraInfo') {
286
+ // The only start time RN reports. `requestWillBeSent` carries no
287
+ // timestamp at all, so without this event a record has no `startedAt`.
288
+ const timing = (params.connectTiming ?? {});
289
+ const requestTime = Number(timing.requestTime);
290
+ if (Number.isFinite(requestTime)) {
291
+ exchange.startedAtSeconds = requestTime;
292
+ }
293
+ return;
294
+ }
295
+ if (method === 'Network.responseReceived') {
296
+ const response = (params.response ?? {});
297
+ exchange.status = Number(response.status);
298
+ exchange.responseHeaders = (response.headers ?? {});
299
+ return;
300
+ }
301
+ if (method === 'Network.loadingFinished') {
302
+ exchange.endedAtSeconds = Number(params.timestamp);
303
+ // Bodies must be pulled now, while the request is still retained. After a
304
+ // reload the requestId is gone and the body with it, so deferring this to
305
+ // read time would return nothing for exactly the traffic a test cares about.
306
+ void this.captureBody(exchange);
307
+ return;
308
+ }
309
+ if (method === 'Network.loadingFailed') {
310
+ exchange.endedAtSeconds = Number(params.timestamp);
311
+ exchange.error = typeof params.errorText === 'string' ? params.errorText : 'Request failed';
312
+ }
313
+ }
314
+ async captureBody(exchange) {
315
+ const message = await this.request('Network.getResponseBody', { requestId: exchange.id });
316
+ const body = message.result?.body;
317
+ if (typeof body !== 'string') {
318
+ return;
319
+ }
320
+ exchange.body = message.result?.base64Encoded === true
321
+ ? Buffer.from(body, 'base64').toString('utf8')
322
+ : body;
323
+ }
324
+ /** Everything observed so far, oldest first, redacted per `options`. */
325
+ records(options) {
326
+ const resolved = resolveRedactionOptions(options);
327
+ return [...this.exchanges.values()].map((exchange) => ({
328
+ id: exchange.id,
329
+ transport: 'http',
330
+ method: exchange.method,
331
+ url: exchange.url,
332
+ requestHeaders: redactHeaders(exchange.requestHeaders, resolved.redactHeaders),
333
+ ...(exchange.responseHeaders
334
+ ? { responseHeaders: redactHeaders(exchange.responseHeaders, resolved.redactHeaders) }
335
+ : {}),
336
+ ...(exchange.status === undefined || Number.isNaN(exchange.status)
337
+ ? {}
338
+ : { status: exchange.status }),
339
+ // CDP reports epoch seconds as a float; the public contract is epoch ms.
340
+ startedAt: Math.round((exchange.startedAtSeconds ?? 0) * 1000),
341
+ ...(exchange.startedAtSeconds !== undefined
342
+ && exchange.endedAtSeconds !== undefined
343
+ && exchange.endedAtSeconds >= exchange.startedAtSeconds
344
+ ? { durationMs: Math.round((exchange.endedAtSeconds - exchange.startedAtSeconds) * 1000) }
345
+ : {}),
346
+ ...(exchange.status === undefined
347
+ ? {}
348
+ : applyBodyLimit(exchange.body, resolved.maxBodyBytes)),
349
+ ...(exchange.error ? { error: exchange.error } : {})
350
+ }));
351
+ }
352
+ /**
353
+ * Drops the buffer and re-enables the domain.
354
+ *
355
+ * Re-enabling matters for the same reason it does on Flutter: a reload
356
+ * replaces the runtime and takes the subscription with it. Enabling here —
357
+ * which the fixture calls between tests — is what keeps observation working
358
+ * past the first spec.
359
+ */
360
+ async clear() {
361
+ this.exchanges.clear();
362
+ if (await this.ensureAttached()) {
363
+ this.send('Network.enable');
364
+ }
365
+ }
366
+ dispose() {
367
+ this.closed = true;
368
+ if (this.reconnectTimer) {
369
+ clearTimeout(this.reconnectTimer);
370
+ this.reconnectTimer = undefined;
371
+ }
372
+ try {
373
+ this.socket?.close();
374
+ }
375
+ catch {
376
+ // Already gone; nothing to release.
377
+ }
378
+ this.socket = undefined;
379
+ this.exchanges.clear();
380
+ }
381
+ }
382
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/reactNative/network.ts"],"names":[],"mappings":"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"}
package/dist/session.d.ts CHANGED
@@ -2,6 +2,16 @@ import type { Coordinates, DeviceFileEntry, DeviceInfo, DeviceOrientation, Docto
2
2
  import { type RuntimeInspectorSessionOptions } from './inspector.js';
3
3
  import { MobileLocator } from './locator.js';
4
4
  import { WebContext, type WebEvaluator } from './webBridge.js';
5
+ export interface AsturScreenshotOptions extends ScreenshotOptions {
6
+ /**
7
+ * Regions to paint over before the image is returned, for content that is
8
+ * legitimately different every run — a clock, a live counter, an avatar.
9
+ *
10
+ * A locator that matches nothing is skipped rather than throwing: masking an
11
+ * element that only appears sometimes is a normal reason to mask it.
12
+ */
13
+ mask?: MobileLocator[];
14
+ }
5
15
  export interface PlatformDriver {
6
16
  readonly platform: PlatformName;
7
17
  doctor(): Promise<DoctorCheck[]>;
@@ -60,6 +70,12 @@ export interface PlatformSession {
60
70
  listFiles?(remotePath: string): Promise<DeviceFileEntry[]>;
61
71
  getKeyboardState?(): Promise<KeyboardState>;
62
72
  dismissKeyboard?(): Promise<void>;
73
+ /**
74
+ * Types into whatever currently holds keyboard focus, with no element to
75
+ * target. See {@link AsturDevice.keyboard.type} for when that is the only
76
+ * option.
77
+ */
78
+ typeText?(text: string): Promise<void>;
63
79
  /**
64
80
  * What this session can see of the app's network traffic. A driver that
65
81
  * cannot observe anything omits these entirely, and {@link AsturDevice.network}
@@ -149,6 +165,28 @@ export declare class AsturDevice {
149
165
  isVisible: () => Promise<boolean>;
150
166
  dismiss: () => Promise<void>;
151
167
  hide: () => Promise<void>;
168
+ /**
169
+ * Types into whatever currently holds keyboard focus.
170
+ *
171
+ * Prefer `locator.fill()` — it resolves the field, clears it, and verifies
172
+ * the value landed. Reach for this only when there is no element to target:
173
+ * a custom control whose real input never reaches the accessibility tree.
174
+ * A multi-box OTP field is the usual case — the boxes are plain views and
175
+ * the `UITextField`/`TextInput` behind them is hidden, so `getByType` finds
176
+ * nothing to fill.
177
+ *
178
+ * Focus the control first (a tap on the box normally does it), then:
179
+ *
180
+ * ```ts
181
+ * await device.getByTestId('otp-input').tap();
182
+ * await device.keyboard.type('123456');
183
+ * ```
184
+ *
185
+ * Because it targets focus rather than an element, nothing verifies where
186
+ * the characters landed — that is the trade for reaching a control the tree
187
+ * cannot describe.
188
+ */
189
+ type: (text: string) => Promise<void>;
152
190
  show: (target?: MobileLocator | ElementSelector) => Promise<void>;
153
191
  };
154
192
  readonly files: {
@@ -198,7 +236,9 @@ export declare class AsturDevice {
198
236
  isLocked(): Promise<boolean>;
199
237
  swipe(gesture: SwipeGesture): Promise<void>;
200
238
  drag(gesture: DragGesture): Promise<void>;
201
- screenshot(options?: ScreenshotOptions): Promise<Buffer>;
239
+ screenshot(options?: AsturScreenshotOptions): Promise<Buffer>;
240
+ /** Identifies the device a baseline belongs to. See {@link screenshotKey}. */
241
+ screenshotKey(): Promise<string>;
202
242
  startRecording(): Promise<void>;
203
243
  stopRecording(options?: RecordingStopOptions): Promise<Buffer | undefined>;
204
244
  tree(): Promise<MobileElementSnapshot>;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}