@astur-mobile/core 0.5.0-beta.5 → 0.7.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.
package/dist/agent.d.ts CHANGED
@@ -15,6 +15,8 @@ export interface NativeAgentClientOptions {
15
15
  timeout?: number;
16
16
  commandTimeout?: number;
17
17
  handshakeTimeout?: number;
18
+ /** Per-session secret the agent requires, sent as a bearer credential. */
19
+ token?: string;
18
20
  fetchImpl?: typeof fetch;
19
21
  }
20
22
  export declare function connectNativeAgentClient(options: NativeAgentClientOptions): Promise<NativeAgentClient>;
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,wBAAwB,EACxB,0BAA0B,EAE1B,eAAe,EACf,iBAAiB,EACjB,YAAY,EACb,MAAM,wBAAwB,CAAC;AAGhC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,CAAC,SAAS,iBAAiB,EACjC,MAAM,EAAE,CAAC,EACT,MAAM,CAAC,EAAE,wBAAwB,CAAC,CAAC,CAAC,GACnC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAYD,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6B5G;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA4BrE"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,wBAAwB,EACxB,0BAA0B,EAE1B,eAAe,EACf,iBAAiB,EACjB,YAAY,EACb,MAAM,wBAAwB,CAAC;AAGhC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,CAAC,SAAS,iBAAiB,EACjC,MAAM,EAAE,CAAC,EACT,MAAM,CAAC,EAAE,wBAAwB,CAAC,CAAC,CAAC,GACnC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAYD,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6B5G;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA4BrE"}
package/dist/agent.js CHANGED
@@ -58,44 +58,94 @@ function createNativeAgentClient(options) {
58
58
  platform: options.platform,
59
59
  commandTimeout: timeout,
60
60
  command: async (method, params) => {
61
- return sendNativeAgentCommand(fetchImpl, endpoint, timeout, method, params);
61
+ return sendNativeAgentCommand(fetchImpl, endpoint, timeout, options.token, method, params);
62
62
  }
63
63
  };
64
64
  }
65
- async function sendNativeAgentCommand(fetchImpl, endpoint, timeout, method, params) {
65
+ async function sendNativeAgentCommand(fetchImpl, endpoint, timeout, token, method, params) {
66
66
  const id = randomUUID();
67
67
  const envelope = {
68
68
  id,
69
69
  protocolVersion: '1.0',
70
70
  command: method,
71
71
  deadlineMs: Date.now() + timeout,
72
+ budgetMs: timeout,
72
73
  payload: params,
73
74
  method,
74
75
  params
75
76
  };
77
+ // One deadline covers the whole exchange: sending, the headers, and reading
78
+ // the body. Clearing the timer once headers arrived used to leave the body
79
+ // read unbounded, so a response trickling in after the timeout still counted.
76
80
  const controller = new AbortController();
77
- const timer = setTimeout(() => controller.abort(), timeout);
81
+ let timer;
82
+ const deadline = new Promise((_resolve, reject) => {
83
+ timer = setTimeout(() => {
84
+ reject(new AsturError('AGENT_COMMAND_TIMEOUT', `Native agent command ${method} got no complete response within ${timeout} ms.`, { endpoint, method, timeout }));
85
+ controller.abort();
86
+ }, timeout);
87
+ });
88
+ // The deadline is always raced; this only keeps a rejection that lands
89
+ // between two races from being reported as unhandled.
90
+ deadline.catch(() => undefined);
91
+ let payload;
92
+ try {
93
+ payload = await Promise.race([
94
+ exchangeNativeAgentCommand(fetchImpl, endpoint, token, method, envelope, controller.signal, deadline),
95
+ deadline
96
+ ]);
97
+ }
98
+ finally {
99
+ clearTimeout(timer);
100
+ }
101
+ if (!payload || payload.id !== id) {
102
+ throw new AsturError('AGENT_RESPONSE_MISMATCH', `Native agent command ${method} returned a mismatched command id.`, {
103
+ endpoint,
104
+ method,
105
+ expectedId: id,
106
+ receivedId: payload?.id
107
+ });
108
+ }
109
+ if (!payload.ok) {
110
+ throw new AsturError(payload.error?.code ?? 'AGENT_COMMAND_FAILED', payload.error?.message ?? `Native agent command ${method} failed.`, {
111
+ endpoint,
112
+ method,
113
+ executed: payload.executed,
114
+ error: payload.error,
115
+ diagnostics: payload.diagnostics,
116
+ timing: payload.timing
117
+ });
118
+ }
119
+ return (payload.result ?? payload.data);
120
+ }
121
+ async function exchangeNativeAgentCommand(fetchImpl, endpoint, token, method, envelope, signal, deadline) {
78
122
  let response;
79
123
  try {
80
124
  response = await fetchImpl(endpoint, {
81
125
  method: 'POST',
82
126
  headers: {
83
- 'content-type': 'application/json'
127
+ 'content-type': 'application/json',
128
+ ...(token ? { authorization: `Bearer ${token}` } : {})
84
129
  },
85
130
  body: JSON.stringify(envelope),
86
- signal: controller.signal
131
+ signal
87
132
  });
88
133
  }
89
134
  catch (error) {
135
+ if (signal.aborted) {
136
+ return deadline;
137
+ }
90
138
  throw new AsturError('AGENT_TRANSPORT_FAILED', `Native agent command ${method} failed to reach ${endpoint}.`, {
91
139
  endpoint,
92
140
  method,
93
- timeout,
94
141
  cause: stringifyUnknownError(error)
95
142
  });
96
143
  }
97
- finally {
98
- clearTimeout(timer);
144
+ if (response.status >= 400 && response.status < 500) {
145
+ const refusal = await readRefusal(response);
146
+ if (refusal) {
147
+ throw refusal;
148
+ }
99
149
  }
100
150
  if (!response.ok) {
101
151
  throw new AsturError('AGENT_TRANSPORT_FAILED', `Native agent command ${method} failed with HTTP ${response.status}.`, {
@@ -105,35 +155,51 @@ async function sendNativeAgentCommand(fetchImpl, endpoint, timeout, method, para
105
155
  statusText: response.statusText
106
156
  });
107
157
  }
108
- let payload;
158
+ let body;
109
159
  try {
110
- payload = await response.json();
160
+ body = await response.text();
111
161
  }
112
162
  catch (error) {
113
- throw new AsturError('AGENT_RESPONSE_INVALID', `Native agent command ${method} returned invalid JSON.`, {
163
+ if (signal.aborted) {
164
+ return deadline;
165
+ }
166
+ throw new AsturError('AGENT_TRANSPORT_FAILED', `Native agent command ${method} lost its response from ${endpoint}.`, {
114
167
  endpoint,
115
168
  method,
116
169
  cause: stringifyUnknownError(error)
117
170
  });
118
171
  }
119
- if (!payload || payload.id !== id) {
120
- throw new AsturError('AGENT_RESPONSE_MISMATCH', `Native agent command ${method} returned a mismatched command id.`, {
121
- endpoint,
122
- method,
123
- expectedId: id,
124
- receivedId: payload?.id
125
- });
172
+ try {
173
+ return JSON.parse(body);
126
174
  }
127
- if (!payload.ok) {
128
- throw new AsturError(payload.error?.code ?? 'AGENT_COMMAND_FAILED', payload.error?.message ?? `Native agent command ${method} failed.`, {
175
+ catch (error) {
176
+ throw new AsturError('AGENT_RESPONSE_INVALID', `Native agent command ${method} returned invalid JSON.`, {
129
177
  endpoint,
130
178
  method,
131
- error: payload.error,
132
- diagnostics: payload.diagnostics,
133
- timing: payload.timing
179
+ cause: stringifyUnknownError(error)
134
180
  });
135
181
  }
136
- return (payload.result ?? payload.data);
182
+ }
183
+ /**
184
+ * A 4xx that carries the agent's own error envelope is the agent refusing the
185
+ * request before running it (bad token, malformed body), so it is reported
186
+ * under the agent's code instead of as a transport failure of unknown outcome.
187
+ * A 5xx never is: the command may have been partway through.
188
+ */
189
+ async function readRefusal(response) {
190
+ try {
191
+ const body = JSON.parse(await response.text());
192
+ if (body?.ok === false && body.executed === false && body.error?.code) {
193
+ return new AsturError(body.error.code, body.error.message, {
194
+ status: response.status,
195
+ executed: false
196
+ });
197
+ }
198
+ }
199
+ catch {
200
+ // Not an agent envelope; fall through to the generic transport failure.
201
+ }
202
+ return undefined;
137
203
  }
138
204
  function getGlobalFetch() {
139
205
  return globalThis.fetch;
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import type { BrowserCapabilities, BrowserEngine, PlatformName, WebViewSelector } from '@astur-mobile/protocol';
2
+ import { WebContext, type WebEvaluator } from './webBridge.js';
3
+ /**
4
+ * Driving a browser as the target of a session, rather than an installed app.
5
+ *
6
+ * The DOM half of this is already solved: once a page is inspectable, the same
7
+ * injected-JS bridge that drives an in-app WebView drives a browser tab
8
+ * unchanged. What a browser adds is the target — launching it, finding the page
9
+ * it opened, and expressing navigation, which an in-app WebView never needed.
10
+ *
11
+ * Navigation deliberately re-resolves the page rather than reusing the open
12
+ * transport. Chromium keeps one target across a same-tab navigation and WebKit
13
+ * does not always, so holding the old handle works on Android and intermittently
14
+ * fails on iOS — which is the worst of both. Re-resolving costs a round trip and
15
+ * behaves the same everywhere.
16
+ */
17
+ /** The stock browser for a platform, when the config does not name one. */
18
+ export declare function defaultBrowserEngine(platform: PlatformName): BrowserEngine;
19
+ /** The package/bundle id Astur launches for an engine, absent an override. */
20
+ export declare function defaultBrowserId(engine: BrowserEngine): string;
21
+ export declare function browserUnsupported(platform: PlatformName, reason: string): BrowserCapabilities;
22
+ /** How long to keep looking for the page a freshly launched browser opened. */
23
+ export declare const DEFAULT_PAGE_TIMEOUT_MS = 20000;
24
+ /**
25
+ * How long to look for an already-open tab before launching the browser.
26
+ *
27
+ * Short on purpose: when the browser is not running this is dead time on every
28
+ * `open()`, and when it is running a tab answers almost immediately.
29
+ */
30
+ export declare const REUSE_PROBE_MS = 2500;
31
+ export interface BrowserPageOptions {
32
+ /** Where the page should end up. Used to pick the right tab, not to navigate. */
33
+ url?: string;
34
+ timeoutMs?: number;
35
+ }
36
+ type EvaluatorFactory = (selector?: WebViewSelector) => Promise<WebEvaluator>;
37
+ /**
38
+ * Waits for an inspectable page and returns a context on it.
39
+ *
40
+ * A browser takes a moment to publish its debugging target after launch, and on
41
+ * a cold start rather longer than an already-running app's WebView — so this
42
+ * polls rather than asking once. The URL narrows *which tab*, and is matched on
43
+ * origin + path so a redirect, an added query string, or a trailing slash does
44
+ * not lose the page we just opened.
45
+ */
46
+ export declare function connectBrowserPage(createEvaluator: EvaluatorFactory, options?: BrowserPageOptions): Promise<WebContext>;
47
+ export declare function pageMatcher(url: string): RegExp;
48
+ /**
49
+ * Runs a navigation and waits for the page to settle.
50
+ *
51
+ * The evaluate is expected to fail sometimes and that is not an error: the
52
+ * expression tears down the very JS context that would return its result, so a
53
+ * transport reporting "context destroyed" means the navigation started, not
54
+ * that it failed.
55
+ */
56
+ export declare function runNavigation(page: WebContext, expression: string): Promise<void>;
57
+ /** Polls until the document has finished loading, or the budget runs out. */
58
+ export declare function waitForLoad(page: WebContext, timeoutMs: number): Promise<void>;
59
+ /**
60
+ * A session configured to drive a browser and nothing else.
61
+ *
62
+ * The distinction matters because such a session has no app to install and no
63
+ * native tree worth bootstrapping an agent for. A config that sets *both* is a
64
+ * suite doing each in turn, and keeps the full native setup.
65
+ */
66
+ export declare function isBrowserOnlySession(capabilities: {
67
+ app?: unknown;
68
+ browser?: unknown;
69
+ }): boolean;
70
+ /** The attached page's current URL, or undefined when the transport is gone. */
71
+ export declare function currentUrl(page: WebContext): Promise<string | undefined>;
72
+ export interface SettleOptions {
73
+ /** Token planted before navigating; its absence proves the document changed. */
74
+ token?: string;
75
+ /** Wait until the URL matches this. */
76
+ expectUrl?: string;
77
+ }
78
+ /**
79
+ * Plants a token on the current document.
80
+ *
81
+ * Comparing URLs cannot tell a finished reload from one that has not started —
82
+ * the URL is identical either way, so a settle keyed on it returns immediately
83
+ * and hands back the *old* page. A token lives on `window`, so it disappears
84
+ * exactly when the document is replaced, which is the thing being waited for.
85
+ */
86
+ export declare function markNavigation(page: WebContext): Promise<string>;
87
+ /**
88
+ * Waits for a navigation on the *same* tab to finish.
89
+ *
90
+ * Returns false rather than throwing when the page never settles, so the caller
91
+ * can fall back to re-resolving instead of failing the test outright — WebKit
92
+ * does sometimes replace the inspector page across a navigation, where Chromium
93
+ * keeps it.
94
+ */
95
+ export declare function settlePage(page: WebContext, timeoutMs: number, options?: SettleOptions): Promise<boolean>;
96
+ export {};
97
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIhH,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE/D;;;;;;;;;;;;;GAaG;AAEH,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,aAAa,CAE1E;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE9D;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAK9F;AAED,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,cAAc,OAAQ,CAAC;AAEpC,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,gBAAgB,GAAG,CAAC,QAAQ,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAE9E;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,eAAe,EAAE,gBAAgB,EACjC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,UAAU,CAAC,CAoCrB;AAkCD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAU/C;AAoBD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvF;AAED,6EAA6E;AAC7E,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUpF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAEhG;AAED,gFAAgF;AAChF,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG9E;AAED,MAAM,WAAW,aAAa;IAC5B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAItE;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,OAAO,CAAC,CAgClB"}
@@ -0,0 +1,233 @@
1
+ import { AsturError } from './errors.js';
2
+ import { delay } from './wait.js';
3
+ import { WebContext } from './webBridge.js';
4
+ /**
5
+ * Driving a browser as the target of a session, rather than an installed app.
6
+ *
7
+ * The DOM half of this is already solved: once a page is inspectable, the same
8
+ * injected-JS bridge that drives an in-app WebView drives a browser tab
9
+ * unchanged. What a browser adds is the target — launching it, finding the page
10
+ * it opened, and expressing navigation, which an in-app WebView never needed.
11
+ *
12
+ * Navigation deliberately re-resolves the page rather than reusing the open
13
+ * transport. Chromium keeps one target across a same-tab navigation and WebKit
14
+ * does not always, so holding the old handle works on Android and intermittently
15
+ * fails on iOS — which is the worst of both. Re-resolving costs a round trip and
16
+ * behaves the same everywhere.
17
+ */
18
+ /** The stock browser for a platform, when the config does not name one. */
19
+ export function defaultBrowserEngine(platform) {
20
+ return platform === 'ios' ? 'safari' : 'chrome';
21
+ }
22
+ /** The package/bundle id Astur launches for an engine, absent an override. */
23
+ export function defaultBrowserId(engine) {
24
+ return engine === 'safari' ? 'com.apple.mobilesafari' : 'com.android.chrome';
25
+ }
26
+ export function browserUnsupported(platform, reason) {
27
+ return {
28
+ supported: false,
29
+ coverage: `${platform} cannot drive a browser in this session: ${reason}`
30
+ };
31
+ }
32
+ /** How long to keep looking for the page a freshly launched browser opened. */
33
+ export const DEFAULT_PAGE_TIMEOUT_MS = 20_000;
34
+ /**
35
+ * How long to look for an already-open tab before launching the browser.
36
+ *
37
+ * Short on purpose: when the browser is not running this is dead time on every
38
+ * `open()`, and when it is running a tab answers almost immediately.
39
+ */
40
+ export const REUSE_PROBE_MS = 2_500;
41
+ /**
42
+ * Waits for an inspectable page and returns a context on it.
43
+ *
44
+ * A browser takes a moment to publish its debugging target after launch, and on
45
+ * a cold start rather longer than an already-running app's WebView — so this
46
+ * polls rather than asking once. The URL narrows *which tab*, and is matched on
47
+ * origin + path so a redirect, an added query string, or a trailing slash does
48
+ * not lose the page we just opened.
49
+ */
50
+ export async function connectBrowserPage(createEvaluator, options = {}) {
51
+ const deadline = Date.now() + (options.timeoutMs ?? DEFAULT_PAGE_TIMEOUT_MS);
52
+ const selector = options.url
53
+ ? { url: pageMatcher(options.url), newest: true, target: 'browser' }
54
+ : { newest: true, target: 'browser' };
55
+ // Hold out for the addressed tab for the whole budget. Falling back to "any
56
+ // inspectable page" early looks harmless and is not: a browser keeps previous
57
+ // tabs open, so the fallback fires on the first tick — before the tab we just
58
+ // navigated is ready — and silently attaches to a stale page. The test then
59
+ // fails on a missing element rather than on the wrong page, which is a much
60
+ // worse thing to debug.
61
+ while (Date.now() < deadline) {
62
+ const attached = await tryAttach(createEvaluator, selector);
63
+ if (attached) {
64
+ return attached;
65
+ }
66
+ await delay(400);
67
+ }
68
+ // Only now, and only once: a redirect can legitimately land on a URL the
69
+ // matcher cannot predict, and the browser under test is still the right one.
70
+ if (selector) {
71
+ const attached = await tryAttach(createEvaluator, { newest: true, target: 'browser' });
72
+ if (attached) {
73
+ return attached;
74
+ }
75
+ }
76
+ throw new AsturError('BROWSER_PAGE_NOT_FOUND', `No inspectable browser page appeared${options.url ? ` for ${options.url}` : ''} within `
77
+ + `${options.timeoutMs ?? DEFAULT_PAGE_TIMEOUT_MS}ms. `
78
+ + 'Check that remote debugging is reachable: on Android the device needs USB debugging on, '
79
+ + 'and on a real iOS device Settings > Safari > Advanced > Web Inspector must be enabled.');
80
+ }
81
+ /**
82
+ * Matches a page by origin and path, ignoring query and fragment.
83
+ *
84
+ * Anything stricter loses the page to a redirect or an appended tracking
85
+ * parameter; anything looser matches an unrelated tab.
86
+ */
87
+ /**
88
+ * One attempt at an inspectable, *usable* page.
89
+ *
90
+ * Connecting is not the same as being usable: mid-navigation a browser hands
91
+ * out a target whose document is being torn down, and every locator against it
92
+ * reports "no element matched" — which reads like a broken selector rather than
93
+ * a page that was not ready. Probing the document separates the two.
94
+ */
95
+ async function tryAttach(createEvaluator, selector) {
96
+ let context;
97
+ try {
98
+ context = new WebContext(await createEvaluator(selector));
99
+ if (await context.evaluate('document.readyState').catch(() => undefined)) {
100
+ return context;
101
+ }
102
+ }
103
+ catch {
104
+ // Fall through: the caller keeps polling until its deadline.
105
+ }
106
+ await context?.close().catch(() => undefined);
107
+ return undefined;
108
+ }
109
+ export function pageMatcher(url) {
110
+ const parsed = tryParseHttpUrl(url);
111
+ if (!parsed) {
112
+ // Not an absolute http(s) URL — a bare `host:port`, or a fragment of one.
113
+ // Match it as a substring rather than anchoring on an origin we do not have.
114
+ return new RegExp(escapeRegExp(url));
115
+ }
116
+ const path = parsed.pathname.replace(/\/$/, '');
117
+ return new RegExp(`^${escapeRegExp(parsed.origin)}${escapeRegExp(path)}/?(?:[?#].*)?$`);
118
+ }
119
+ /**
120
+ * `new URL()` accepts far more than a web address — `localhost:4319` parses as
121
+ * scheme `localhost:` with a null origin, which would build a matcher that can
122
+ * never match. Only an http(s) URL gives an origin worth anchoring on.
123
+ */
124
+ function tryParseHttpUrl(url) {
125
+ try {
126
+ const parsed = new URL(url);
127
+ return parsed.protocol === 'http:' || parsed.protocol === 'https:' ? parsed : undefined;
128
+ }
129
+ catch {
130
+ return undefined;
131
+ }
132
+ }
133
+ function escapeRegExp(value) {
134
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
135
+ }
136
+ /**
137
+ * Runs a navigation and waits for the page to settle.
138
+ *
139
+ * The evaluate is expected to fail sometimes and that is not an error: the
140
+ * expression tears down the very JS context that would return its result, so a
141
+ * transport reporting "context destroyed" means the navigation started, not
142
+ * that it failed.
143
+ */
144
+ export async function runNavigation(page, expression) {
145
+ await page.evaluate(expression).catch(() => undefined);
146
+ }
147
+ /** Polls until the document has finished loading, or the budget runs out. */
148
+ export async function waitForLoad(page, timeoutMs) {
149
+ const deadline = Date.now() + timeoutMs;
150
+ while (Date.now() < deadline) {
151
+ const state = await page.evaluate('document.readyState').catch(() => undefined);
152
+ if (state === 'complete') {
153
+ return;
154
+ }
155
+ await delay(150);
156
+ }
157
+ }
158
+ /**
159
+ * A session configured to drive a browser and nothing else.
160
+ *
161
+ * The distinction matters because such a session has no app to install and no
162
+ * native tree worth bootstrapping an agent for. A config that sets *both* is a
163
+ * suite doing each in turn, and keeps the full native setup.
164
+ */
165
+ export function isBrowserOnlySession(capabilities) {
166
+ return Boolean(capabilities.browser) && !capabilities.app;
167
+ }
168
+ /** The attached page's current URL, or undefined when the transport is gone. */
169
+ export async function currentUrl(page) {
170
+ const href = await page.evaluate('location.href').catch(() => undefined);
171
+ return typeof href === 'string' ? href : undefined;
172
+ }
173
+ /**
174
+ * Plants a token on the current document.
175
+ *
176
+ * Comparing URLs cannot tell a finished reload from one that has not started —
177
+ * the URL is identical either way, so a settle keyed on it returns immediately
178
+ * and hands back the *old* page. A token lives on `window`, so it disappears
179
+ * exactly when the document is replaced, which is the thing being waited for.
180
+ */
181
+ export async function markNavigation(page) {
182
+ const token = `astur-nav-${Date.now()}-${Math.random().toString(36).slice(2)}`;
183
+ await page.evaluate(`window.__asturNavToken = ${JSON.stringify(token)}`).catch(() => undefined);
184
+ return token;
185
+ }
186
+ /**
187
+ * Waits for a navigation on the *same* tab to finish.
188
+ *
189
+ * Returns false rather than throwing when the page never settles, so the caller
190
+ * can fall back to re-resolving instead of failing the test outright — WebKit
191
+ * does sometimes replace the inspector page across a navigation, where Chromium
192
+ * keeps it.
193
+ */
194
+ export async function settlePage(page, timeoutMs, options = {}) {
195
+ const deadline = Date.now() + timeoutMs;
196
+ const expected = options.expectUrl ? pageMatcher(options.expectUrl) : undefined;
197
+ let unreachable = 0;
198
+ while (Date.now() < deadline) {
199
+ const href = await currentUrl(page);
200
+ if (href === undefined) {
201
+ // WebKit replaces the inspector page across a navigation where Chromium
202
+ // keeps it, so on iOS this transport is simply gone. Waiting out the full
203
+ // budget on a dead socket turns a fast reconnect into a 20-second stall,
204
+ // so give up early and let the caller re-resolve.
205
+ if (++unreachable >= TRANSPORT_LOST_POLLS) {
206
+ return false;
207
+ }
208
+ }
209
+ else {
210
+ unreachable = 0;
211
+ const stillOldDocument = options.token !== undefined
212
+ && await page.evaluate('window.__asturNavToken').catch(() => undefined) === options.token;
213
+ if (!stillOldDocument
214
+ && (!expected || expected.test(href))
215
+ && await page.evaluate('document.readyState').catch(() => undefined) === 'complete') {
216
+ return true;
217
+ }
218
+ }
219
+ await delay(200);
220
+ }
221
+ return false;
222
+ }
223
+ /**
224
+ * Consecutive failed probes (~3s) before a transport counts as gone.
225
+ *
226
+ * Tuned between two real behaviours rather than picked round: Chromium drops the
227
+ * JS context only while a document is swapping, for well under a second, and
228
+ * bailing on that blip sends a healthy navigation down the re-resolve path where
229
+ * it can attach to a stale tab. WebKit's loss is permanent, so anything past a
230
+ * few seconds is not coming back.
231
+ */
232
+ const TRANSPORT_LOST_POLLS = 15;
233
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,WAAW,EAGX,sBAAsB,EAGvB,MAAM,wBAAwB,CAAC;AAGhC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,sBAAsB,CAiBjF;AAED,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,sBAAsB,GACnC,OAAO,CAAC,sBAAsB,CAAC,CAmBjC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,WAAW,EAGX,sBAAsB,EAGvB,MAAM,wBAAwB,CAAC;AAGhC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,sBAAsB,CAkBjF;AAED,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,sBAAsB,GACnC,OAAO,CAAC,sBAAsB,CAAC,CAmBjC"}
package/dist/config.js CHANGED
@@ -12,6 +12,7 @@ export function normalizeCapabilities(config) {
12
12
  platform: config.platform,
13
13
  device: config.device ?? {},
14
14
  app: normalizeApp(config.app),
15
+ ...(config.browser ? { browser: config.browser } : {}),
15
16
  timeout: config.timeout ?? 10_000,
16
17
  artifactsDir: config.artifactsDir ?? 'test-results/astur',
17
18
  artifacts: config.artifacts ?? {},
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from '@astur-mobile/protocol';
2
2
  export * from './agent.js';
3
+ export * from './browser.js';
3
4
  export * from './cdpWebEvaluator.js';
4
5
  export * from './config.js';
5
6
  export * from './errors.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from '@astur-mobile/protocol';
2
2
  export * from './agent.js';
3
+ export * from './browser.js';
3
4
  export * from './cdpWebEvaluator.js';
4
5
  export * from './config.js';
5
6
  export * from './errors.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}