@gate-forge/witness 0.11.1 → 0.13.0
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/client/witness-client.d.ts +10 -1
- package/dist/client/witness-client.d.ts.map +1 -1
- package/dist/client/witness-client.js +11 -3
- package/dist/client/witness-client.js.map +1 -1
- package/dist/constants.d.ts +15 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +21 -0
- package/dist/constants.js.map +1 -1
- package/dist/witness/api-settlement.d.ts +86 -0
- package/dist/witness/api-settlement.d.ts.map +1 -0
- package/dist/witness/api-settlement.js +150 -0
- package/dist/witness/api-settlement.js.map +1 -0
- package/dist/witness/browser.d.ts +13 -3
- package/dist/witness/browser.d.ts.map +1 -1
- package/dist/witness/browser.js +168 -2
- package/dist/witness/browser.js.map +1 -1
- package/dist/witness/classifications.d.ts +4 -6
- package/dist/witness/classifications.d.ts.map +1 -1
- package/dist/witness/classifications.js.map +1 -1
- package/dist/witness/page-observation.d.ts +93 -0
- package/dist/witness/page-observation.d.ts.map +1 -0
- package/dist/witness/page-observation.js +117 -0
- package/dist/witness/page-observation.js.map +1 -0
- package/dist/witness/page-observer-registration.d.ts +49 -0
- package/dist/witness/page-observer-registration.d.ts.map +1 -0
- package/dist/witness/page-observer-registration.js +194 -0
- package/dist/witness/page-observer-registration.js.map +1 -0
- package/dist/witness/page-observer.d.ts +18 -0
- package/dist/witness/page-observer.d.ts.map +1 -0
- package/dist/witness/page-observer.js +462 -0
- package/dist/witness/page-observer.js.map +1 -0
- package/dist/witness/server.d.ts.map +1 -1
- package/dist/witness/server.js +188 -1
- package/dist/witness/server.js.map +1 -1
- package/dist/witness/types.d.ts +70 -0
- package/dist/witness/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
import { apiRequestsSettled, gradePageVisit, } from './page-observation.js';
|
|
2
|
+
import { trackPageApiSettlement } from './api-settlement.js';
|
|
3
|
+
import { ENGINE_PAGE_VISIT_ADDRESS_TIMEOUT_MS, ENGINE_PAGE_VISIT_API_SETTLE_TIMEOUT_MS, } from '../constants.js';
|
|
4
|
+
/** The request resource types that carry application data exchanges. */
|
|
5
|
+
const API_RESOURCE_TYPES = { fetch: true, xhr: true };
|
|
6
|
+
/** Same-document navigation check (hash-only changes never close a window). */
|
|
7
|
+
function sameWindowUrl(previous, next) {
|
|
8
|
+
try {
|
|
9
|
+
const before = new URL(previous);
|
|
10
|
+
const after = new URL(next);
|
|
11
|
+
return before.origin === after.origin && before.pathname === after.pathname && before.search === after.search;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** The correlation key of one app data request (method + full URL). */
|
|
18
|
+
function apiExchangeKey(method, url) {
|
|
19
|
+
return `${method} ${url}`;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Counts this window's still-outstanding Playwright requests that the
|
|
23
|
+
* CDP completion session proves done. Per key (method + full URL) the
|
|
24
|
+
* upgrade requires the CDP session to have seen AT LEAST as many
|
|
25
|
+
* requestWillBeSent events as Playwright saw requests (a late attach or
|
|
26
|
+
* a session that never opened saw fewer and upgrades nothing — fail
|
|
27
|
+
* closed, never a false settle) AND at least as many completed
|
|
28
|
+
* exchanges (loadingFinished, or every declared Content-Length byte
|
|
29
|
+
* received) as Playwright requests of that key it has not finished.
|
|
30
|
+
*/
|
|
31
|
+
function cdpSettledCount(window) {
|
|
32
|
+
const outstandingByKey = new Map();
|
|
33
|
+
for (const request of window.outstanding) {
|
|
34
|
+
const key = apiExchangeKey(request.method(), request.url());
|
|
35
|
+
outstandingByKey.set(key, (outstandingByKey.get(key) ?? 0) + 1);
|
|
36
|
+
}
|
|
37
|
+
let settled = 0;
|
|
38
|
+
for (const [key, count] of outstandingByKey) {
|
|
39
|
+
if ((window.cdpSends.get(key) ?? 0) < (window.playwrightOpens.get(key) ?? 0))
|
|
40
|
+
continue;
|
|
41
|
+
const unfinished = (window.playwrightOpens.get(key) ?? 0) - (window.playwrightFinished.get(key) ?? 0);
|
|
42
|
+
if ((window.cdpCompletes.get(key) ?? 0) >= unfinished)
|
|
43
|
+
settled += count;
|
|
44
|
+
}
|
|
45
|
+
return settled;
|
|
46
|
+
}
|
|
47
|
+
/** Attach the witness's independent Playwright/CDP client to an existing browser. */
|
|
48
|
+
export async function observePageBrowser(options) {
|
|
49
|
+
if (!Number.isInteger(options.debuggingPort) || options.debuggingPort < 1 || options.debuggingPort > 65535) {
|
|
50
|
+
throw new RangeError('debuggingPort must be a TCP port number');
|
|
51
|
+
}
|
|
52
|
+
// Dynamic import is REQUIRED here: Playwright is an optional peer that may
|
|
53
|
+
// not be installed at all (TYPE-ONLY contract, see browser.ts) — a static
|
|
54
|
+
// import would crash every witness start without a browser. Load it only
|
|
55
|
+
// when a browser observation is requested.
|
|
56
|
+
const { chromium } = await import('playwright');
|
|
57
|
+
const browser = await chromium.connectOverCDP(`http://127.0.0.1:${options.debuggingPort}`);
|
|
58
|
+
const states = new Map();
|
|
59
|
+
const contextsWatched = new Set();
|
|
60
|
+
let closed = false;
|
|
61
|
+
const isAppOrigin = (url) => {
|
|
62
|
+
try {
|
|
63
|
+
return options.appOrigins.includes(new URL(url).origin);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
/** The app data exchange URL of a network event, or null when irrelevant. */
|
|
70
|
+
const apiExchangeUrl = (raw, resourceType) => {
|
|
71
|
+
try {
|
|
72
|
+
const url = new URL(raw);
|
|
73
|
+
return isAppOrigin(url.href) &&
|
|
74
|
+
(url.pathname.startsWith('/api/') || API_RESOURCE_TYPES[resourceType] === true)
|
|
75
|
+
? url
|
|
76
|
+
: null;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const settle = (state) => {
|
|
83
|
+
if (closed)
|
|
84
|
+
return;
|
|
85
|
+
clearTimeout(state.settleTimer);
|
|
86
|
+
state.settleResolve?.();
|
|
87
|
+
const generation = ++state.generation;
|
|
88
|
+
let resolveSettlement;
|
|
89
|
+
let rejectSettlement;
|
|
90
|
+
const settlement = new Promise((resolve, reject) => {
|
|
91
|
+
resolveSettlement = resolve;
|
|
92
|
+
rejectSettlement = reject;
|
|
93
|
+
});
|
|
94
|
+
void settlement.catch(() => undefined);
|
|
95
|
+
state.settlePromise = settlement;
|
|
96
|
+
state.settleResolve = resolveSettlement;
|
|
97
|
+
state.settleTimer = setTimeout(() => {
|
|
98
|
+
state.settleTimer = undefined;
|
|
99
|
+
void (async () => {
|
|
100
|
+
if (closed || state.generation !== generation || state.page.url() === 'about:blank')
|
|
101
|
+
return;
|
|
102
|
+
const window = state.window;
|
|
103
|
+
// Wait for in-flight app data requests, bounded (fail closed on
|
|
104
|
+
// hang). A request the CDP completion session proves done (unread
|
|
105
|
+
// Content-Length body the browser finished) no longer holds the
|
|
106
|
+
// window — see cdpSettledCount.
|
|
107
|
+
const deadline = Date.now() + ENGINE_PAGE_VISIT_API_SETTLE_TIMEOUT_MS;
|
|
108
|
+
while (window.outstanding.size - cdpSettledCount(window) > 0) {
|
|
109
|
+
if (closed || state.generation !== generation)
|
|
110
|
+
return;
|
|
111
|
+
const remaining = deadline - Date.now();
|
|
112
|
+
if (remaining <= 0)
|
|
113
|
+
break;
|
|
114
|
+
const notified = new Promise((resolve) => { window.settleNotify = resolve; });
|
|
115
|
+
if (window.outstanding.size === 0)
|
|
116
|
+
break;
|
|
117
|
+
let timer;
|
|
118
|
+
try {
|
|
119
|
+
await Promise.race([
|
|
120
|
+
notified,
|
|
121
|
+
new Promise((resolve) => { timer = setTimeout(() => resolve(null), remaining); }),
|
|
122
|
+
]);
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
clearTimeout(timer);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (closed || state.generation !== generation)
|
|
129
|
+
return;
|
|
130
|
+
// Bounded response collections (address lookups) land before grading,
|
|
131
|
+
// so no emission ever grades before its responses were collected.
|
|
132
|
+
while (window.pendingResponses.size > 0) {
|
|
133
|
+
if (closed || state.generation !== generation)
|
|
134
|
+
return;
|
|
135
|
+
await Promise.all([...window.pendingResponses]);
|
|
136
|
+
}
|
|
137
|
+
if (closed || state.generation !== generation)
|
|
138
|
+
return;
|
|
139
|
+
let url = state.page.url();
|
|
140
|
+
let domMarkerHit = false;
|
|
141
|
+
try {
|
|
142
|
+
const text = await state.page.locator('body').innerText({ timeout: 1_000 });
|
|
143
|
+
domMarkerHit = options.errorMarkers.some((marker) => text.includes(marker));
|
|
144
|
+
url = state.page.url();
|
|
145
|
+
// Proof bookkeeping: record the REAL reading so a later salvage
|
|
146
|
+
// carries an actually observed DOM state instead of a guess.
|
|
147
|
+
window.domMarkerHit = domMarkerHit;
|
|
148
|
+
window.domGraded = true;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// A destroyed/closing page has no readable settled DOM; page errors remain in the record.
|
|
152
|
+
}
|
|
153
|
+
if (closed || state.generation !== generation)
|
|
154
|
+
return;
|
|
155
|
+
const visit = {
|
|
156
|
+
url,
|
|
157
|
+
navigations: [...window.navigations],
|
|
158
|
+
exceptions: [...window.exceptions],
|
|
159
|
+
domMarkerHit,
|
|
160
|
+
apiResponses: [...window.apiResponses],
|
|
161
|
+
apiRequestsSettled: apiRequestsSettled({
|
|
162
|
+
outstandingCount: Math.max(0, window.outstanding.size - cdpSettledCount(window)),
|
|
163
|
+
failures: window.failedRequests,
|
|
164
|
+
completions: window.completedRequests,
|
|
165
|
+
}),
|
|
166
|
+
};
|
|
167
|
+
// Evidence is NOT cleared: repeated quiet emissions of the SAME
|
|
168
|
+
// navigation preserve earlier errors and API statuses; only a new
|
|
169
|
+
// navigation boundary opens a fresh window.
|
|
170
|
+
const verdict = gradePageVisit({ pages: options.pages, loginRoutes: options.loginRoutes, visit });
|
|
171
|
+
await options.onVisit(visit, verdict);
|
|
172
|
+
window.emitted = true;
|
|
173
|
+
window.dirty = false;
|
|
174
|
+
})().then(resolveSettlement, rejectSettlement).finally(() => {
|
|
175
|
+
if (state.generation === generation) {
|
|
176
|
+
state.settlePromise = undefined;
|
|
177
|
+
state.settleResolve = undefined;
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}, options.quietMs ?? 300);
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Salvages a window a navigation boundary closed before its quiet
|
|
184
|
+
* emission carried everything: emits the accumulated evidence as-is
|
|
185
|
+
* (requests still outstanding count as unsettled — fail closed). The
|
|
186
|
+
* document is already replaced, so its error markers cannot be re-read;
|
|
187
|
+
* the salvage carries the window's last REAL DOM reading instead.
|
|
188
|
+
*/
|
|
189
|
+
const finalizeWindow = (state, window) => {
|
|
190
|
+
if (!window.dirty)
|
|
191
|
+
return; // every observation of this window was emitted
|
|
192
|
+
// Fail closed: without a settled DOM marker read there is no honest
|
|
193
|
+
// loads proof to mint for this document, so the window is not salvaged
|
|
194
|
+
// at all — a missing record can never satisfy an obligation.
|
|
195
|
+
if (!window.domGraded)
|
|
196
|
+
return;
|
|
197
|
+
const finished = (async () => {
|
|
198
|
+
while (window.pendingResponses.size > 0) {
|
|
199
|
+
await Promise.all([...window.pendingResponses]);
|
|
200
|
+
}
|
|
201
|
+
const visit = {
|
|
202
|
+
url: window.url,
|
|
203
|
+
navigations: [...window.navigations],
|
|
204
|
+
exceptions: [...window.exceptions],
|
|
205
|
+
// The last actually observed DOM state of the replaced document —
|
|
206
|
+
// never a fabricated clean reading.
|
|
207
|
+
domMarkerHit: window.domMarkerHit,
|
|
208
|
+
apiResponses: [...window.apiResponses],
|
|
209
|
+
apiRequestsSettled: apiRequestsSettled({
|
|
210
|
+
outstandingCount: Math.max(0, window.outstanding.size - cdpSettledCount(window)),
|
|
211
|
+
failures: window.failedRequests,
|
|
212
|
+
completions: window.completedRequests,
|
|
213
|
+
}),
|
|
214
|
+
};
|
|
215
|
+
const verdict = gradePageVisit({ pages: options.pages, loginRoutes: options.loginRoutes, visit });
|
|
216
|
+
await options.onVisit(visit, verdict);
|
|
217
|
+
})();
|
|
218
|
+
state.pendingFinalizations.add(finished);
|
|
219
|
+
void finished.then(() => state.pendingFinalizations.delete(finished), () => state.pendingFinalizations.delete(finished));
|
|
220
|
+
};
|
|
221
|
+
const flush = async () => {
|
|
222
|
+
for (;;) {
|
|
223
|
+
const pending = [...states.values()].flatMap((state) => [
|
|
224
|
+
...(state.settlePromise === undefined ? [] : [state.settlePromise]),
|
|
225
|
+
...state.window.pendingResponses,
|
|
226
|
+
...state.pendingFinalizations,
|
|
227
|
+
]);
|
|
228
|
+
if (pending.length === 0)
|
|
229
|
+
return;
|
|
230
|
+
await Promise.all(pending);
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
const watch = (page) => {
|
|
234
|
+
if (states.has(page))
|
|
235
|
+
return;
|
|
236
|
+
const state = {
|
|
237
|
+
page,
|
|
238
|
+
window: {
|
|
239
|
+
url: page.url(),
|
|
240
|
+
navigations: [],
|
|
241
|
+
exceptions: [],
|
|
242
|
+
apiResponses: [],
|
|
243
|
+
outstanding: new Set(),
|
|
244
|
+
settleNotify: undefined,
|
|
245
|
+
failedRequests: [],
|
|
246
|
+
completedRequests: [],
|
|
247
|
+
playwrightOpens: new Map(),
|
|
248
|
+
playwrightFinished: new Map(),
|
|
249
|
+
cdpSends: new Map(),
|
|
250
|
+
cdpCompletes: new Map(),
|
|
251
|
+
pendingResponses: new Set(),
|
|
252
|
+
domMarkerHit: false,
|
|
253
|
+
domGraded: false,
|
|
254
|
+
emitted: false,
|
|
255
|
+
dirty: false,
|
|
256
|
+
},
|
|
257
|
+
settleTimer: undefined,
|
|
258
|
+
settlePromise: undefined,
|
|
259
|
+
settleResolve: undefined,
|
|
260
|
+
requestWindows: new Map(),
|
|
261
|
+
cdp: undefined,
|
|
262
|
+
pendingFinalizations: new Set(),
|
|
263
|
+
generation: 0,
|
|
264
|
+
};
|
|
265
|
+
states.set(page, state);
|
|
266
|
+
// Extra COMPLETION signal only: a per-page CDP session shares the
|
|
267
|
+
// browser's own network events with the Playwright request ledger. The
|
|
268
|
+
// shared settlement rule (loadingFinished, or every declared
|
|
269
|
+
// Content-Length byte received) upgrades an unread body once the
|
|
270
|
+
// browser finished it; correlation is conservative per window and per
|
|
271
|
+
// method+URL (see cdpSettledCount), so a late or failed session can
|
|
272
|
+
// never mint a false settle — it only leaves requests unsettled.
|
|
273
|
+
void trackPageApiSettlement(page, {
|
|
274
|
+
isAppDataExchange: (url, resourceType) => apiExchangeUrl(url.href, resourceType) !== null,
|
|
275
|
+
onExchangeOpen: (exchange) => {
|
|
276
|
+
const window = state.window;
|
|
277
|
+
const key = apiExchangeKey(exchange.method, exchange.url);
|
|
278
|
+
window.cdpSends.set(key, (window.cdpSends.get(key) ?? 0) + 1);
|
|
279
|
+
settle(state);
|
|
280
|
+
},
|
|
281
|
+
onExchangeHeaders: () => settle(state),
|
|
282
|
+
onExchangeSettled: (exchange, settlement) => {
|
|
283
|
+
if (settlement.kind !== 'completed')
|
|
284
|
+
return;
|
|
285
|
+
const window = state.window;
|
|
286
|
+
const key = apiExchangeKey(exchange.method, exchange.url);
|
|
287
|
+
window.cdpCompletes.set(key, (window.cdpCompletes.get(key) ?? 0) + 1);
|
|
288
|
+
if (window.outstanding.size - cdpSettledCount(window) <= 0)
|
|
289
|
+
window.settleNotify?.();
|
|
290
|
+
// Completion lets body-driven JS/DOM/next fetches run; the same
|
|
291
|
+
// quiet window restarts before any emission grades them.
|
|
292
|
+
settle(state);
|
|
293
|
+
},
|
|
294
|
+
onActivity: () => settle(state),
|
|
295
|
+
}).then((tracker) => {
|
|
296
|
+
state.cdp = tracker;
|
|
297
|
+
}).catch(() => undefined);
|
|
298
|
+
page.on('framenavigated', (frame) => {
|
|
299
|
+
if (frame !== page.mainFrame())
|
|
300
|
+
return;
|
|
301
|
+
const url = frame.url();
|
|
302
|
+
const window = state.window;
|
|
303
|
+
if (window.emitted && !sameWindowUrl(window.url, url)) {
|
|
304
|
+
// A genuinely new main-frame navigation after the window has emitted
|
|
305
|
+
// opens a fresh observation window; the old one is finalized so no
|
|
306
|
+
// evidence is lost and requests begun there cannot taint the new page.
|
|
307
|
+
finalizeWindow(state, window);
|
|
308
|
+
state.window = {
|
|
309
|
+
url,
|
|
310
|
+
navigations: [url],
|
|
311
|
+
exceptions: [],
|
|
312
|
+
apiResponses: [],
|
|
313
|
+
outstanding: new Set(),
|
|
314
|
+
settleNotify: undefined,
|
|
315
|
+
failedRequests: [],
|
|
316
|
+
completedRequests: [],
|
|
317
|
+
playwrightOpens: new Map(),
|
|
318
|
+
playwrightFinished: new Map(),
|
|
319
|
+
cdpSends: new Map(),
|
|
320
|
+
cdpCompletes: new Map(),
|
|
321
|
+
pendingResponses: new Set(),
|
|
322
|
+
domMarkerHit: false,
|
|
323
|
+
domGraded: false,
|
|
324
|
+
emitted: false,
|
|
325
|
+
dirty: true,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
// Redirect/history chain inside the (still unsettled) window: keep
|
|
330
|
+
// the whole chain so bounce refusals keep working.
|
|
331
|
+
window.navigations.push(url);
|
|
332
|
+
window.url = url;
|
|
333
|
+
window.dirty = true;
|
|
334
|
+
}
|
|
335
|
+
settle(state);
|
|
336
|
+
});
|
|
337
|
+
page.on('pageerror', (error) => {
|
|
338
|
+
const window = state.window;
|
|
339
|
+
window.exceptions.push(error.message);
|
|
340
|
+
window.dirty = true;
|
|
341
|
+
settle(state);
|
|
342
|
+
});
|
|
343
|
+
page.on('request', (request) => {
|
|
344
|
+
if (apiExchangeUrl(request.url(), request.resourceType()) === null)
|
|
345
|
+
return;
|
|
346
|
+
const window = state.window;
|
|
347
|
+
window.outstanding.add(request);
|
|
348
|
+
state.requestWindows.set(request, window);
|
|
349
|
+
const key = apiExchangeKey(request.method(), request.url());
|
|
350
|
+
window.playwrightOpens.set(key, (window.playwrightOpens.get(key) ?? 0) + 1);
|
|
351
|
+
window.dirty = true;
|
|
352
|
+
settle(state);
|
|
353
|
+
});
|
|
354
|
+
page.on('requestfailed', (request) => {
|
|
355
|
+
// The request belongs to the window that captured it at request start,
|
|
356
|
+
// never to whatever navigation is current when the failure lands.
|
|
357
|
+
const window = state.requestWindows.get(request) ?? state.window;
|
|
358
|
+
if (!window.outstanding.delete(request))
|
|
359
|
+
return;
|
|
360
|
+
state.requestWindows.delete(request);
|
|
361
|
+
// A failed app data request can never produce a verifiable response;
|
|
362
|
+
// whether it leaves the window unsettled is decided at grading time
|
|
363
|
+
// (a client-side cancel superseded by a completed same-URL request
|
|
364
|
+
// may still count as settled).
|
|
365
|
+
window.failedRequests.push({ method: request.method(), url: request.url(), errorText: request.failure()?.errorText ?? '' });
|
|
366
|
+
window.dirty = true;
|
|
367
|
+
if (window.outstanding.size === 0)
|
|
368
|
+
window.settleNotify?.();
|
|
369
|
+
settle(state);
|
|
370
|
+
});
|
|
371
|
+
page.on('requestfinished', (request) => {
|
|
372
|
+
// The request lifecycle ends at body completion (or failure), never at
|
|
373
|
+
// response headers: a 200 whose body later dies must stay unsettled.
|
|
374
|
+
const window = state.requestWindows.get(request);
|
|
375
|
+
if (window === undefined)
|
|
376
|
+
return;
|
|
377
|
+
state.requestWindows.delete(request);
|
|
378
|
+
window.outstanding.delete(request);
|
|
379
|
+
const key = apiExchangeKey(request.method(), request.url());
|
|
380
|
+
window.playwrightFinished.set(key, (window.playwrightFinished.get(key) ?? 0) + 1);
|
|
381
|
+
window.completedRequests.push({ method: request.method(), url: request.url() });
|
|
382
|
+
if (window.outstanding.size === 0)
|
|
383
|
+
window.settleNotify?.();
|
|
384
|
+
// Body completion lets body-driven JS/DOM/next fetches run; the same
|
|
385
|
+
// quiet window restarts before any emission grades them.
|
|
386
|
+
settle(state);
|
|
387
|
+
});
|
|
388
|
+
page.on('response', (response) => {
|
|
389
|
+
const url = response.url();
|
|
390
|
+
if (apiExchangeUrl(url, response.request().resourceType()) === null)
|
|
391
|
+
return;
|
|
392
|
+
// The response belongs to the window that captured its request at
|
|
393
|
+
// request start. Headers only: collect status/address here; the
|
|
394
|
+
// request stays outstanding until requestfinished/requestfailed.
|
|
395
|
+
const window = state.requestWindows.get(response.request()) ?? state.window;
|
|
396
|
+
// Abort any in-flight emission so it cannot grade before this response
|
|
397
|
+
// is collected; the quiet window restarts.
|
|
398
|
+
settle(state);
|
|
399
|
+
const pending = (async () => {
|
|
400
|
+
let remoteAddress = null;
|
|
401
|
+
let timeout;
|
|
402
|
+
try {
|
|
403
|
+
remoteAddress = await Promise.race([
|
|
404
|
+
response.serverAddr().then((address) => address?.ipAddress ?? null),
|
|
405
|
+
new Promise((resolve) => {
|
|
406
|
+
timeout = setTimeout(() => resolve(null), ENGINE_PAGE_VISIT_ADDRESS_TIMEOUT_MS);
|
|
407
|
+
}),
|
|
408
|
+
]);
|
|
409
|
+
}
|
|
410
|
+
catch {
|
|
411
|
+
// Missing address is a refusal, not a reason to lose the observation.
|
|
412
|
+
}
|
|
413
|
+
finally {
|
|
414
|
+
clearTimeout(timeout);
|
|
415
|
+
}
|
|
416
|
+
window.apiResponses.push({
|
|
417
|
+
url,
|
|
418
|
+
status: response.status(),
|
|
419
|
+
remoteAddress,
|
|
420
|
+
proxied: options.isProxiedExchange(url, response.status()),
|
|
421
|
+
});
|
|
422
|
+
window.dirty = true;
|
|
423
|
+
settle(state);
|
|
424
|
+
})();
|
|
425
|
+
window.pendingResponses.add(pending);
|
|
426
|
+
void pending.then(() => window.pendingResponses.delete(pending), () => window.pendingResponses.delete(pending));
|
|
427
|
+
});
|
|
428
|
+
settle(state);
|
|
429
|
+
};
|
|
430
|
+
const discoverPages = () => {
|
|
431
|
+
for (const context of browser.contexts()) {
|
|
432
|
+
if (!contextsWatched.has(context)) {
|
|
433
|
+
contextsWatched.add(context);
|
|
434
|
+
context.on('page', watch);
|
|
435
|
+
}
|
|
436
|
+
for (const page of context.pages())
|
|
437
|
+
watch(page);
|
|
438
|
+
}
|
|
439
|
+
};
|
|
440
|
+
discoverPages();
|
|
441
|
+
const discoveryTimer = setInterval(discoverPages, 100);
|
|
442
|
+
return {
|
|
443
|
+
flush,
|
|
444
|
+
async close() {
|
|
445
|
+
if (closed)
|
|
446
|
+
return;
|
|
447
|
+
clearInterval(discoveryTimer);
|
|
448
|
+
try {
|
|
449
|
+
await flush();
|
|
450
|
+
}
|
|
451
|
+
finally {
|
|
452
|
+
closed = true;
|
|
453
|
+
for (const state of states.values()) {
|
|
454
|
+
clearTimeout(state.settleTimer);
|
|
455
|
+
await state.cdp?.detach();
|
|
456
|
+
}
|
|
457
|
+
await browser.close();
|
|
458
|
+
}
|
|
459
|
+
},
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=page-observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-observer.js","sourceRoot":"","sources":["../../src/witness/page-observer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/witness/server.ts"],"names":[],"mappings":"AA0JA,OAAO,EAWL,UAAU,EASX,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/witness/server.ts"],"names":[],"mappings":"AA0JA,OAAO,EAWL,UAAU,EASX,MAAM,kBAAkB,CAAC;AAsC1B,OAAO,KAAK,EAkDV,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAC;AA4KpB,uDAAuD;AACvD,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AA+0BD;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,CAAC;AA4DtB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA+LlF;AAo/JD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|