@astur-mobile/core 0.5.0-beta.4 → 0.6.0-beta

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,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
@@ -1,7 +1,17 @@
1
- import type { Coordinates, DeviceFileEntry, DeviceInfo, DeviceOrientation, DoctorCheck, DragGesture, DoubleTapOptions, ElementDragOptions, ElementDragTarget, ElementDoubleTapOptions, ElementFillOptions, ElementLongPressOptions, ElementSelector, ElementTapOptions, ElementWaitOptions, LaunchOptions, LongPressOptions, KeyboardState, MobileContextInfo, NetworkCapabilities, NetworkRedactionOptions, NetworkRequestFilter, NetworkRequestRecord, MobileElementSnapshot, MobileRole, NormalizedCapabilities, PlatformName, InspectorSession, LocatorSuggestion, RecordingStopOptions, RoleSelectorOptions, ScreenshotOptions, SwipeGesture, TapOptions, UiTreeSubscribeOptions, UiTreeUpdate, AsturConfig, AppResetOptions, AppUnderTest, Bounds, WebViewEndpoint, WebViewSelector } from '@astur-mobile/protocol';
1
+ import type { BrowserCapabilities, Coordinates, DeviceFileEntry, DeviceInfo, DeviceOrientation, DoctorCheck, DragGesture, DoubleTapOptions, ElementDragOptions, ElementDragTarget, ElementDoubleTapOptions, ElementFillOptions, ElementLongPressOptions, ElementSelector, ElementTapOptions, ElementWaitOptions, LaunchOptions, LongPressOptions, KeyboardState, MobileContextInfo, NetworkCapabilities, NetworkRedactionOptions, NetworkRequestFilter, NetworkRequestRecord, MobileElementSnapshot, MobileRole, NormalizedCapabilities, PlatformName, InspectorSession, LocatorSuggestion, RecordingStopOptions, RoleSelectorOptions, ScreenshotOptions, SwipeGesture, TapOptions, UiTreeSubscribeOptions, UiTreeUpdate, AsturConfig, AppResetOptions, AppUnderTest, Bounds, WebViewEndpoint, WebViewSelector } from '@astur-mobile/protocol';
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[]>;
@@ -52,7 +62,31 @@ export interface PlatformSession {
52
62
  startRecording?(): Promise<void>;
53
63
  stopRecording?(options?: RecordingStopOptions): Promise<Buffer | undefined>;
54
64
  screenshot(): Promise<Buffer>;
65
+ /**
66
+ * Hands a URL to the OS. Deliberately not browser-specific — a deep link into
67
+ * the app under test goes through here too, which is why it stays `void` and
68
+ * does not try to find a page afterwards.
69
+ */
55
70
  openWeb(url: string): Promise<void>;
71
+ /**
72
+ * Launches the configured browser at a URL, rather than letting the OS pick a
73
+ * handler. Drivers that cannot target a browser omit this, and
74
+ * {@link AsturDevice.browser} reports it as unsupported.
75
+ */
76
+ openBrowser?(url: string): Promise<void>;
77
+ /** What this session can do with a browser, detected at runtime. */
78
+ getBrowserCapabilities?(): Promise<BrowserCapabilities>;
79
+ /**
80
+ * Opens a **new** browser tab and returns its target id.
81
+ *
82
+ * Optional because tab lifecycle is not universal: Chrome exposes it over the
83
+ * debugging socket, WebKit's remote inspector does not. A driver that omits
84
+ * these falls back to reusing one tab, which is weaker isolation but the only
85
+ * thing the platform allows.
86
+ */
87
+ openBrowserTab?(url: string): Promise<string | undefined>;
88
+ /** Closes a browser tab by target id. */
89
+ closeBrowserTab?(id: string): Promise<void>;
56
90
  pushFile?(localPath: string, remotePath: string): Promise<void>;
57
91
  pullFile?(remotePath: string): Promise<Buffer>;
58
92
  saveFile?(remotePath: string, localPath: string): Promise<void>;
@@ -151,6 +185,62 @@ export declare class AsturDevice {
151
185
  */
152
186
  clear: () => Promise<void>;
153
187
  };
188
+ /**
189
+ * The page currently open in the browser, if one has been opened.
190
+ *
191
+ * Held so navigation can dispose it before re-resolving, and so a suite that
192
+ * forgets to close is still cleaned up when the session ends.
193
+ */
194
+ private browserPage?;
195
+ /** Target id of the tab this session opened, when it opened one itself. */
196
+ private browserTabId?;
197
+ /**
198
+ * Drives a **browser** rather than the app under test — for testing a mobile
199
+ * web page on the same real device or emulator the native suite runs on.
200
+ *
201
+ * Everything below the page is the existing WebView machinery: once a tab is
202
+ * inspectable, the same injected-JS bridge drives it. What this adds is the
203
+ * target and navigation, which an in-app WebView never needed.
204
+ *
205
+ * Ask {@link browser.capabilities} before using it, the same way
206
+ * {@link network.capabilities} is asked, so a spec stays portable.
207
+ */
208
+ readonly browser: {
209
+ /** What this session can do with a browser. Never throws. */
210
+ capabilities: () => Promise<BrowserCapabilities>;
211
+ /**
212
+ * Launches the browser at `url` and returns a context on the page.
213
+ *
214
+ * The returned context is the handle to use until the next navigation —
215
+ * each navigation re-resolves the page and returns a fresh one.
216
+ */
217
+ open: (url: string, options?: {
218
+ timeout?: number;
219
+ }) => Promise<WebContext>;
220
+ /** Navigates the open page and returns it, now showing `url`. */
221
+ navigate: (url: string, options?: {
222
+ timeout?: number;
223
+ }) => Promise<WebContext>;
224
+ reload: (options?: {
225
+ timeout?: number;
226
+ }) => Promise<WebContext>;
227
+ back: (options?: {
228
+ timeout?: number;
229
+ }) => Promise<WebContext>;
230
+ forward: (options?: {
231
+ timeout?: number;
232
+ }) => Promise<WebContext>;
233
+ /** The open page's current URL. */
234
+ url: () => Promise<string>;
235
+ /**
236
+ * Closes the page, and its tab where the platform allows it. The browser
237
+ * itself is left running — starting it again per test costs seconds.
238
+ *
239
+ * The Astur fixture calls this after every test, so tabs cannot accumulate
240
+ * and no test inherits the previous one's page.
241
+ */
242
+ close: () => Promise<void>;
243
+ };
154
244
  readonly keyboard: {
155
245
  isVisible: () => Promise<boolean>;
156
246
  dismiss: () => Promise<void>;
@@ -226,7 +316,9 @@ export declare class AsturDevice {
226
316
  isLocked(): Promise<boolean>;
227
317
  swipe(gesture: SwipeGesture): Promise<void>;
228
318
  drag(gesture: DragGesture): Promise<void>;
229
- screenshot(options?: ScreenshotOptions): Promise<Buffer>;
319
+ screenshot(options?: AsturScreenshotOptions): Promise<Buffer>;
320
+ /** Identifies the device a baseline belongs to. See {@link screenshotKey}. */
321
+ screenshotKey(): Promise<string>;
230
322
  startRecording(): Promise<void>;
231
323
  stopRecording(options?: RecordingStopOptions): Promise<Buffer | undefined>;
232
324
  tree(): Promise<MobileElementSnapshot>;
@@ -241,6 +333,33 @@ export declare class AsturDevice {
241
333
  * frameworks (Flutter, React Native) on each platform that exposes the transport.
242
334
  */
243
335
  webContext(selector?: WebViewSelector): Promise<WebContext>;
336
+ /**
337
+ * Re-resolves the page after a history navigation.
338
+ *
339
+ * No URL to match on here — where `back()` lands is exactly what the test is
340
+ * asking about — so this takes whichever page the browser now shows.
341
+ */
342
+ /**
343
+ * Runs a history navigation on the attached tab and waits for it to settle.
344
+ *
345
+ * Deliberately stays on the same target rather than re-resolving. A browser
346
+ * keeps every tab a suite has opened, several on the same URL, so "find the
347
+ * page again" is ambiguous in a way it never is for an app's single WebView —
348
+ * and picking wrong silently drives a frozen background tab. Chromium keeps
349
+ * one target across a same-tab navigation; if the transport does die, the
350
+ * re-resolve below is the fallback rather than the norm.
351
+ */
352
+ private renavigate;
353
+ /**
354
+ * Brings the attached tab to `url`, navigating only if it is not already
355
+ * there — so an intent that happened to land correctly costs nothing.
356
+ */
357
+ private ensureAt;
358
+ /** Attaches to an already-open page, or resolves undefined. Never throws. */
359
+ private tryResolveBrowserPage;
360
+ private resolveBrowserPage;
361
+ private requireBrowserPage;
362
+ private closeBrowserPage;
244
363
  close(): Promise<void>;
245
364
  }
246
365
  export declare class AsturRuntime {
@@ -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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"}