@gate-forge/witness 0.13.1 → 0.13.3

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.
@@ -1,4 +1,4 @@
1
- import { apiRequestsSettled, gradePageVisit, } from './page-observation.js';
1
+ import { apiRequestsSettled, gradePageVisit, unsettledRequestsOf, } from './page-observation.js';
2
2
  import { trackPageApiSettlement } from './api-settlement.js';
3
3
  import { LiveChannelTracker, appHostsOfOrigins, liveChannelSnapshot } from './page-live-channels.js';
4
4
  import { ENGINE_PAGE_VISIT_ADDRESS_TIMEOUT_MS, ENGINE_PAGE_VISIT_API_SETTLE_TIMEOUT_MS, } from '../constants.js';
@@ -38,20 +38,45 @@ function headerValue(headers, wanted) {
38
38
  * received) as Playwright requests of that key it has not finished.
39
39
  */
40
40
  function cdpSettledCount(window) {
41
- const outstandingByKey = new Map();
41
+ const unsettledKeys = unsettledKeysOfWindow(window);
42
+ let settled = 0;
43
+ for (const request of window.outstanding) {
44
+ if (!unsettledKeys.has(apiExchangeKey(request.method(), request.url())))
45
+ settled += 1;
46
+ }
47
+ return settled;
48
+ }
49
+ /**
50
+ * The keys whose CDP correlation has NOT proven every open request
51
+ * finished: the same conservative per-window, per-method+URL rule
52
+ * {@link cdpSettledCount} grades by, kept as the one place that rule
53
+ * lives (the still-open request list for the refusal diagnosis reads it
54
+ * too, so the diagnosis can never disagree with the settle verdict).
55
+ */
56
+ function unsettledKeysOfWindow(window) {
57
+ const byKey = new Map();
42
58
  for (const request of window.outstanding) {
43
59
  const key = apiExchangeKey(request.method(), request.url());
44
- outstandingByKey.set(key, (outstandingByKey.get(key) ?? 0) + 1);
60
+ byKey.set(key, (byKey.get(key) ?? 0) + 1);
45
61
  }
46
- let settled = 0;
47
- for (const [key, count] of outstandingByKey) {
48
- if ((window.cdpSends.get(key) ?? 0) < (window.playwrightOpens.get(key) ?? 0))
62
+ const unsettled = new Set();
63
+ for (const key of byKey.keys()) {
64
+ if ((window.cdpSends.get(key) ?? 0) < (window.playwrightOpens.get(key) ?? 0)) {
65
+ unsettled.add(key);
49
66
  continue;
67
+ }
50
68
  const unfinished = (window.playwrightOpens.get(key) ?? 0) - (window.playwrightFinished.get(key) ?? 0);
51
- if ((window.cdpCompletes.get(key) ?? 0) >= unfinished)
52
- settled += count;
69
+ if ((window.cdpCompletes.get(key) ?? 0) < unfinished)
70
+ unsettled.add(key);
53
71
  }
54
- return settled;
72
+ return unsettled;
73
+ }
74
+ /** The still-open requests of one window (the unsettled keys' requests). */
75
+ function stillOpenRequests(window) {
76
+ const unsettledKeys = unsettledKeysOfWindow(window);
77
+ return [...window.outstanding]
78
+ .filter((request) => unsettledKeys.has(apiExchangeKey(request.method(), request.url())))
79
+ .map((request) => ({ method: request.method(), url: request.url() }));
55
80
  }
56
81
  /** Attach the witness's independent Playwright/CDP client to an existing browser. */
57
82
  export async function observePageBrowser(options) {
@@ -181,6 +206,11 @@ export async function observePageBrowser(options) {
181
206
  failures: window.failedRequests,
182
207
  completions: window.completedRequests,
183
208
  }),
209
+ unsettledRequests: unsettledRequestsOf({
210
+ outstanding: stillOpenRequests(window),
211
+ failures: window.failedRequests,
212
+ completions: window.completedRequests,
213
+ }),
184
214
  liveChannels: liveChannelSnapshot(window.liveChannels),
185
215
  };
186
216
  // Evidence is NOT cleared: repeated quiet emissions of the SAME
@@ -230,6 +260,11 @@ export async function observePageBrowser(options) {
230
260
  failures: window.failedRequests,
231
261
  completions: window.completedRequests,
232
262
  }),
263
+ unsettledRequests: unsettledRequestsOf({
264
+ outstanding: stillOpenRequests(window),
265
+ failures: window.failedRequests,
266
+ completions: window.completedRequests,
267
+ }),
233
268
  liveChannels: liveChannelSnapshot(window.liveChannels),
234
269
  };
235
270
  const verdict = gradePageVisit({ pages: options.pages, loginRoutes: options.loginRoutes, visit });
@@ -472,6 +507,7 @@ export async function observePageBrowser(options) {
472
507
  clearTimeout(timeout);
473
508
  }
474
509
  window.apiResponses.push({
510
+ method: response.request().method(),
475
511
  url,
476
512
  status: response.status(),
477
513
  remoteAddress,
@@ -1 +1 @@
1
- {"version":3,"file":"page-observer.js","sourceRoot":"","sources":["../../src/witness/page-observer.ts"],"names":[],"mappings":"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"}
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;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;AAkgKD,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,EAmDV,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAC;AA4KpB,uDAAuD;AACvD,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAg5BD;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,CAAC;AA4DtB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAqMlF;AAggKD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -496,22 +496,35 @@ function parseCollectionRows(collectionSnapshot, contentType, overBound, totalBy
496
496
  }
497
497
  return { ...declared, ids, error: null };
498
498
  }
499
+ /** Bounded bind attempts for one proxy port (a later address can hit EADDRINUSE). */
500
+ const PROXY_BIND_ATTEMPTS = 5;
501
+ /** Closes every listener of one proxy (a sealed channel is gone). */
502
+ async function closeProxyListeners(servers) {
503
+ await Promise.all(servers.map((server) => new Promise((resolveClose) => {
504
+ server.close(() => resolveClose());
505
+ })));
506
+ }
499
507
  /**
500
- * Starts one loopback reverse-proxy server forwarding to the run's
508
+ * Starts one loopback reverse proxy forwarding to the run's
501
509
  * attested proxy target. `sessionId` names the session the port belongs
502
510
  * to (null = the shared unattributed proxy): every exchange completing
503
511
  * on this port is recorded as an engine observation stamped with that
504
512
  * session id and the witness-monotonic completion tick.
505
513
  *
514
+ * The proxy listens on EVERY loopback address the app hostname
515
+ * resolved to, all on ONE port: a browser tries every resolved
516
+ * address, but a Node-only client (Playwright's APIRequestContext)
517
+ * connects to the single address its resolver picks.
518
+ *
506
519
  * Args:
507
520
  * state: running witness state.
508
521
  * sessionId: owning session id, or null for the shared proxy.
509
522
  *
510
523
  * Returns:
511
- * Promise<Server>: the listening server (OS-assigned loopback port).
524
+ * Promise<ObservedProxy>: every listener plus the shared port.
512
525
  *
513
526
  * Throws:
514
- * Error: when the server fails to bind.
527
+ * Error: when the proxy fails to bind.
515
528
  */
516
529
  async function startObservedProxy(state, sessionId, chaosSession) {
517
530
  const proxyTargetUrl = new URL(state.options.proxyTarget);
@@ -554,7 +567,10 @@ async function startObservedProxy(state, sessionId, chaosSession) {
554
567
  return null;
555
568
  return collectionRoutes.get(`${method} ${path}`) ?? null;
556
569
  };
557
- const server = createServer((req, res) => {
570
+ // One request handler shared by EVERY listener of this
571
+ // proxy: each loopback address gets its own Server
572
+ // object, all serving the same exchanges.
573
+ const proxyHandler = (req, res) => {
558
574
  const chunks = [];
559
575
  req.on('data', (chunk) => chunks.push(chunk));
560
576
  req.on('end', () => {
@@ -732,21 +748,60 @@ async function startObservedProxy(state, sessionId, chaosSession) {
732
748
  forward.write(body);
733
749
  forward.end();
734
750
  });
735
- });
736
- await new Promise((resolveListen, rejectListen) => {
737
- server.once('error', rejectListen);
738
- server.listen(0, state.proxyBindHost, () => resolveListen());
739
- });
740
- server.removeAllListeners('error');
741
- return server;
742
- }
743
- /** The base URL of a started observation-proxy server. */
744
- function proxyUrlOf(state, server) {
745
- const address = server.address();
746
- if (address === null || typeof address === 'string') {
747
- throw new WitnessStartupError('observation proxy failed to bind an OS-assigned port');
751
+ };
752
+ // ONE port for every loopback address the app hostname
753
+ // resolves to: the first listener asks the OS for a free
754
+ // port and the rest share it. A browser tries every
755
+ // resolved address, but a Node-only client (Playwright's
756
+ // APIRequestContext) connects to the single address its
757
+ // resolver picks, so every loopback address must answer
758
+ // on the same port. A later address can collide with
759
+ // another process that grabbed the port in the gap: close
760
+ // every listener and retry on a fresh port (bounded),
761
+ // then fail with the bind error.
762
+ for (let attempt = 1; attempt <= PROXY_BIND_ATTEMPTS; attempt += 1) {
763
+ const servers = [];
764
+ let port = 0;
765
+ try {
766
+ for (const bindHost of state.proxyBindHosts) {
767
+ const server = createServer(proxyHandler);
768
+ await new Promise((resolveListen, rejectListen) => {
769
+ server.once('error', rejectListen);
770
+ server.listen(port, bindHost, () => resolveListen());
771
+ });
772
+ server.removeAllListeners('error');
773
+ if (port === 0) {
774
+ const address = server.address();
775
+ if (address === null || typeof address === 'string') {
776
+ throw new WitnessStartupError('observation proxy failed to bind an OS-assigned port');
777
+ }
778
+ port = address.port;
779
+ }
780
+ servers.push(server);
781
+ }
782
+ return { servers, port };
783
+ }
784
+ catch (error) {
785
+ await closeProxyListeners(servers);
786
+ if (attempt === PROXY_BIND_ATTEMPTS ||
787
+ error?.code !== 'EADDRINUSE') {
788
+ throw new WitnessStartupError(`observation proxy failed to bind '${state.proxyHost}': ${error instanceof Error ? error.message : String(error)}`);
789
+ }
790
+ // EADDRINUSE on a later address: another process took
791
+ // the port between assignment and this bind. Retry on
792
+ // a fresh OS-assigned port.
793
+ }
748
794
  }
749
- return `http://${formatHost(state.proxyHost)}:${address.port}`;
795
+ // Unreachable: every attempt returns or throws above.
796
+ throw new WitnessStartupError(`observation proxy failed to bind '${state.proxyHost}'`);
797
+ }
798
+ /**
799
+ * The base URL of a started observation proxy: the HOSTNAME
800
+ * (never an IP, so Host headers stay exactly as the suite
801
+ * addresses them) plus the one port every listener shares.
802
+ */
803
+ function proxyUrlOf(state, proxy) {
804
+ return `http://${formatHost(state.proxyHost)}:${proxy.port}`;
750
805
  }
751
806
  /**
752
807
  * Starts the DEDICATED session proxy port (plan Phase 1) and stores it
@@ -764,19 +819,17 @@ async function startSessionProxy(state, session) {
764
819
  session.proxyUrl = null;
765
820
  return;
766
821
  }
767
- const server = await startObservedProxy(state, session.sessionId, session.testId);
768
- session.proxyServer = server;
769
- session.proxyUrl = proxyUrlOf(state, server);
822
+ const proxy = await startObservedProxy(state, session.sessionId, session.testId);
823
+ session.proxyServer = proxy;
824
+ session.proxyUrl = proxyUrlOf(state, proxy);
770
825
  }
771
- /** Closes one session's dedicated proxy port (sealed = channel gone). */
826
+ /** Closes one session's dedicated proxy listeners (sealed = channel gone). */
772
827
  async function stopSessionProxy(session) {
773
- const server = session.proxyServer;
828
+ const proxy = session.proxyServer;
774
829
  session.proxyServer = null;
775
- if (server === null)
830
+ if (proxy === null)
776
831
  return;
777
- await new Promise((resolveClose) => {
778
- server.close(() => resolveClose());
779
- });
832
+ await closeProxyListeners(proxy.servers);
780
833
  }
781
834
  /** Detaches the independent browser observer when its test session ends. */
782
835
  async function stopPageObserver(state, sessionId) {
@@ -917,19 +970,25 @@ export async function startWitness(options) {
917
970
  }
918
971
  }
919
972
  // Keep the browser-facing logical hostname and the control host separate.
920
- // Resolve the proxy bind address once, and never bind a non-loopback result.
973
+ // Resolve the proxy bind addresses once, and never bind a non-loopback result.
921
974
  const proxyHostname = options.proxyTarget ? new URL(options.proxyTarget).hostname : null;
922
975
  const proxyHost = proxyHostname === null
923
976
  ? options.host ?? LOOPBACK_HOSTNAME
924
977
  : proxyHostname.replace(/^\[|\]$/g, '');
925
- let proxyBindHost = proxyHost;
978
+ let proxyBindHosts = proxyHostname === null ? [proxyHost] : [];
926
979
  if (proxyHostname !== null) {
927
980
  await assertLoopback(options.proxyTarget, 'observation proxy target');
928
- const resolved = await lookup(proxyHost);
929
- if (!isLoopbackAddress(resolved.address)) {
981
+ // The app hostname can resolve to SEVERAL loopback addresses
982
+ // (`localhost` commonly answers ::1 and the IPv4 loopback): a
983
+ // browser tries every one, but a Node-only client connects to
984
+ // the single address its resolver picks. Fail closed on any
985
+ // non-loopback answer, and serve every loopback address.
986
+ const resolved = await lookup(proxyHost, { all: true });
987
+ const addresses = resolved.map((record) => record.address);
988
+ if (addresses.length === 0 || !addresses.every(isLoopbackAddress)) {
930
989
  throw new AttestationError(`observation proxy hostname '${proxyHost}' resolved to a non-loopback bind address`);
931
990
  }
932
- proxyBindHost = resolved.address;
991
+ proxyBindHosts = [...new Set(addresses)];
933
992
  }
934
993
  const state = {
935
994
  options: {
@@ -945,7 +1004,7 @@ export async function startWitness(options) {
945
1004
  },
946
1005
  adapters,
947
1006
  proxyHost,
948
- proxyBindHost,
1007
+ proxyBindHosts,
949
1008
  classifications,
950
1009
  ledger: new Map(),
951
1010
  preObservations: new Map(),
@@ -5292,9 +5351,7 @@ async function stopWitness(state) {
5292
5351
  if (state.proxyServer !== null) {
5293
5352
  const proxy = state.proxyServer;
5294
5353
  state.proxyServer = null;
5295
- await new Promise((resolveClose) => {
5296
- proxy.close(() => resolveClose());
5297
- });
5354
+ await closeProxyListeners(proxy.servers);
5298
5355
  }
5299
5356
  for (const session of state.sessions.values()) {
5300
5357
  await stopSessionProxy(session);