@gate-forge/witness 0.12.0 → 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.
Files changed (37) hide show
  1. package/dist/client/witness-client.d.ts +10 -1
  2. package/dist/client/witness-client.d.ts.map +1 -1
  3. package/dist/client/witness-client.js +11 -3
  4. package/dist/client/witness-client.js.map +1 -1
  5. package/dist/constants.d.ts +15 -0
  6. package/dist/constants.d.ts.map +1 -1
  7. package/dist/constants.js +21 -0
  8. package/dist/constants.js.map +1 -1
  9. package/dist/witness/api-settlement.d.ts +86 -0
  10. package/dist/witness/api-settlement.d.ts.map +1 -0
  11. package/dist/witness/api-settlement.js +150 -0
  12. package/dist/witness/api-settlement.js.map +1 -0
  13. package/dist/witness/browser.d.ts +13 -3
  14. package/dist/witness/browser.d.ts.map +1 -1
  15. package/dist/witness/browser.js +168 -2
  16. package/dist/witness/browser.js.map +1 -1
  17. package/dist/witness/classifications.d.ts +4 -6
  18. package/dist/witness/classifications.d.ts.map +1 -1
  19. package/dist/witness/classifications.js.map +1 -1
  20. package/dist/witness/page-observation.d.ts +93 -0
  21. package/dist/witness/page-observation.d.ts.map +1 -0
  22. package/dist/witness/page-observation.js +117 -0
  23. package/dist/witness/page-observation.js.map +1 -0
  24. package/dist/witness/page-observer-registration.d.ts +49 -0
  25. package/dist/witness/page-observer-registration.d.ts.map +1 -0
  26. package/dist/witness/page-observer-registration.js +194 -0
  27. package/dist/witness/page-observer-registration.js.map +1 -0
  28. package/dist/witness/page-observer.d.ts +18 -0
  29. package/dist/witness/page-observer.d.ts.map +1 -0
  30. package/dist/witness/page-observer.js +462 -0
  31. package/dist/witness/page-observer.js.map +1 -0
  32. package/dist/witness/server.d.ts.map +1 -1
  33. package/dist/witness/server.js +188 -1
  34. package/dist/witness/server.js.map +1 -1
  35. package/dist/witness/types.d.ts +70 -0
  36. package/dist/witness/types.d.ts.map +1 -1
  37. 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;AAqC1B,OAAO,KAAK,EA8CV,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAC;AA4KpB,uDAAuD;AACvD,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAuzBD;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,CAAC;AA4DtB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA4LlF;AAi0JD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,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"}