@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,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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"}
@@ -0,0 +1,34 @@
1
+ import type { NetworkCapabilities, NetworkRedactionOptions, NetworkRequestFilter, NetworkRequestRecord } from '@astur-mobile/protocol';
2
+ /**
3
+ * Network observation for Flutter Android, backed by the Dart VM service's
4
+ * `dart:io` HTTP profiler — the same source Flutter DevTools' Network view uses.
5
+ *
6
+ * Coverage is exactly `dart:io`'s HttpClient: that includes `package:http` and
7
+ * Dio's IO path, because both are built on it. It does NOT include a WebView's
8
+ * own requests, native SDKs, platform channels, or any client that opens its
9
+ * own sockets. Callers should read {@link capabilities} rather than assume.
10
+ *
11
+ * Read-only by design. Interception needs an in-app adapter that can hold a
12
+ * request open, which the profiler cannot do — it reports what already
13
+ * happened.
14
+ */
15
+ export declare const DEFAULT_REDACTED_HEADERS: string[];
16
+ /** 64 KiB. Enough for a JSON payload, small enough that a long run cannot blow up. */
17
+ export declare const DEFAULT_MAX_BODY_BYTES: number;
18
+ export declare const FLUTTER_NETWORK_CAPABILITIES: NetworkCapabilities;
19
+ /** Case-insensitive header redaction, applied before a record is ever returned. */
20
+ export declare function redactHeaders(headers: Record<string, unknown> | undefined, redact: string[]): Record<string, string>;
21
+ /** Keeps a body only when it is within budget, and says why when it is not. */
22
+ export declare function applyBodyLimit(body: string | undefined, maxBytes: number): Pick<NetworkRequestRecord, 'responseBody' | 'bodyOmittedReason'>;
23
+ /**
24
+ * Maps the VM profiler's payload onto {@link NetworkRequestRecord}.
25
+ *
26
+ * Every field is read defensively: the Dart SDK owns this shape and has moved
27
+ * fields between versions, so a missing key must degrade one record rather than
28
+ * throw and lose the whole batch.
29
+ */
30
+ export declare function toNetworkRecords(profile: unknown, options: Required<NetworkRedactionOptions>): NetworkRequestRecord[];
31
+ /** Applies a {@link NetworkRequestFilter} to already-collected records. */
32
+ export declare function filterRecords(records: NetworkRequestRecord[], filter: NetworkRequestFilter | undefined): NetworkRequestRecord[];
33
+ export declare function resolveRedactionOptions(options: NetworkRedactionOptions | undefined): Required<NetworkRedactionOptions>;
34
+ //# sourceMappingURL=network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/flutter/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,wBAAwB,UAAyD,CAAC;AAE/F,sFAAsF;AACtF,eAAO,MAAM,sBAAsB,QAAY,CAAC;AAEhD,eAAO,MAAM,4BAA4B,EAAE,mBAO1C,CAAC;AAEF,mFAAmF;AACnF,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,MAAM,EAAE,MAAM,EAAE,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,QAAQ,EAAE,MAAM,GACf,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,mBAAmB,CAAC,CAQlE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,QAAQ,CAAC,uBAAuB,CAAC,GACzC,oBAAoB,EAAE,CA4CxB;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,EAAE,EAC/B,MAAM,EAAE,oBAAoB,GAAG,SAAS,GACvC,oBAAoB,EAAE,CAmBxB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,uBAAuB,GAAG,SAAS,GAC3C,QAAQ,CAAC,uBAAuB,CAAC,CAKnC"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Network observation for Flutter Android, backed by the Dart VM service's
3
+ * `dart:io` HTTP profiler — the same source Flutter DevTools' Network view uses.
4
+ *
5
+ * Coverage is exactly `dart:io`'s HttpClient: that includes `package:http` and
6
+ * Dio's IO path, because both are built on it. It does NOT include a WebView's
7
+ * own requests, native SDKs, platform channels, or any client that opens its
8
+ * own sockets. Callers should read {@link capabilities} rather than assume.
9
+ *
10
+ * Read-only by design. Interception needs an in-app adapter that can hold a
11
+ * request open, which the profiler cannot do — it reports what already
12
+ * happened.
13
+ */
14
+ export const DEFAULT_REDACTED_HEADERS = ['authorization', 'cookie', 'set-cookie', 'x-api-key'];
15
+ /** 64 KiB. Enough for a JSON payload, small enough that a long run cannot blow up. */
16
+ export const DEFAULT_MAX_BODY_BYTES = 64 * 1024;
17
+ export const FLUTTER_NETWORK_CAPABILITIES = {
18
+ observe: true,
19
+ intercept: false,
20
+ transports: ['http'],
21
+ responseBodies: true,
22
+ coverage: "dart:io HttpClient traffic (package:http and Dio included); excludes WebView, native SDK, and platform-channel requests",
23
+ adapterRequired: true
24
+ };
25
+ /** Case-insensitive header redaction, applied before a record is ever returned. */
26
+ export function redactHeaders(headers, redact) {
27
+ const lowered = new Set(redact.map((name) => name.toLowerCase()));
28
+ const out = {};
29
+ for (const [key, value] of Object.entries(headers ?? {})) {
30
+ out[key] = lowered.has(key.toLowerCase())
31
+ ? '<redacted>'
32
+ : Array.isArray(value) ? value.join(', ') : String(value);
33
+ }
34
+ return out;
35
+ }
36
+ /** Keeps a body only when it is within budget, and says why when it is not. */
37
+ export function applyBodyLimit(body, maxBytes) {
38
+ if (body === undefined) {
39
+ return { bodyOmittedReason: 'not-captured' };
40
+ }
41
+ if (Buffer.byteLength(body, 'utf8') > maxBytes) {
42
+ return { bodyOmittedReason: 'too-large' };
43
+ }
44
+ return { responseBody: body };
45
+ }
46
+ /**
47
+ * Maps the VM profiler's payload onto {@link NetworkRequestRecord}.
48
+ *
49
+ * Every field is read defensively: the Dart SDK owns this shape and has moved
50
+ * fields between versions, so a missing key must degrade one record rather than
51
+ * throw and lose the whole batch.
52
+ */
53
+ export function toNetworkRecords(profile, options) {
54
+ const requests = profile?.requests;
55
+ if (!Array.isArray(requests)) {
56
+ return [];
57
+ }
58
+ return requests.flatMap((entry) => {
59
+ // Guard the entry itself, not just its fields: a null/non-object row would
60
+ // otherwise throw and take every other record in the batch with it.
61
+ if (typeof entry !== 'object' || entry === null) {
62
+ return [];
63
+ }
64
+ const row = entry;
65
+ const id = row.id === undefined ? undefined : String(row.id);
66
+ const uri = typeof row.uri === 'string' ? row.uri : undefined;
67
+ if (!id || !uri) {
68
+ return [];
69
+ }
70
+ const request = (row.request ?? {});
71
+ const response = (row.response ?? {});
72
+ const startedMicros = Number(row.startTime ?? 0);
73
+ const endMicros = Number(row.endTime ?? 0);
74
+ const errorText = typeof request.error === 'string'
75
+ ? request.error
76
+ : typeof row.error === 'string' ? row.error : undefined;
77
+ return [{
78
+ id,
79
+ transport: 'http',
80
+ method: typeof row.method === 'string' ? row.method.toUpperCase() : 'GET',
81
+ url: uri,
82
+ requestHeaders: redactHeaders(request.headers, options.redactHeaders),
83
+ ...(response.headers
84
+ ? { responseHeaders: redactHeaders(response.headers, options.redactHeaders) }
85
+ : {}),
86
+ ...(response.statusCode === undefined ? {} : { status: Number(response.statusCode) }),
87
+ // The VM reports microseconds since epoch; the public contract is ms.
88
+ startedAt: Math.round(startedMicros / 1000),
89
+ ...(endMicros > startedMicros ? { durationMs: Math.round((endMicros - startedMicros) / 1000) } : {}),
90
+ ...(errorText ? { error: errorText } : {})
91
+ }];
92
+ });
93
+ }
94
+ /** Applies a {@link NetworkRequestFilter} to already-collected records. */
95
+ export function filterRecords(records, filter) {
96
+ if (!filter) {
97
+ return records;
98
+ }
99
+ return records.filter((record) => {
100
+ if (filter.method && record.method.toUpperCase() !== filter.method.toUpperCase()) {
101
+ return false;
102
+ }
103
+ if (filter.transport && record.transport !== filter.transport) {
104
+ return false;
105
+ }
106
+ if (filter.url instanceof RegExp) {
107
+ return filter.url.test(record.url);
108
+ }
109
+ if (typeof filter.url === 'string') {
110
+ return record.url.includes(filter.url);
111
+ }
112
+ return true;
113
+ });
114
+ }
115
+ export function resolveRedactionOptions(options) {
116
+ return {
117
+ redactHeaders: options?.redactHeaders ?? DEFAULT_REDACTED_HEADERS,
118
+ maxBodyBytes: options?.maxBodyBytes ?? DEFAULT_MAX_BODY_BYTES
119
+ };
120
+ }
121
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/flutter/network.ts"],"names":[],"mappings":"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"}