@vforsh/argus-watcher 0.5.1 → 0.5.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.
Files changed (58) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/artifacts.d.ts +6 -0
  3. package/dist/artifacts.d.ts.map +1 -1
  4. package/dist/artifacts.js +6 -0
  5. package/dist/artifacts.js.map +1 -1
  6. package/dist/cdp/health.d.ts +65 -0
  7. package/dist/cdp/health.d.ts.map +1 -0
  8. package/dist/cdp/health.js +89 -0
  9. package/dist/cdp/health.js.map +1 -0
  10. package/dist/cdp/keyboard.d.ts +6 -1
  11. package/dist/cdp/keyboard.d.ts.map +1 -1
  12. package/dist/cdp/keyboard.js +22 -12
  13. package/dist/cdp/keyboard.js.map +1 -1
  14. package/dist/cdp/pageFocus.d.ts +26 -0
  15. package/dist/cdp/pageFocus.d.ts.map +1 -0
  16. package/dist/cdp/pageFocus.js +54 -0
  17. package/dist/cdp/pageFocus.js.map +1 -0
  18. package/dist/cdp/watcher.d.ts +7 -0
  19. package/dist/cdp/watcher.d.ts.map +1 -1
  20. package/dist/cdp/watcher.js +7 -0
  21. package/dist/cdp/watcher.js.map +1 -1
  22. package/dist/cdp/watcherTargets.d.ts +8 -0
  23. package/dist/cdp/watcherTargets.d.ts.map +1 -1
  24. package/dist/cdp/watcherTargets.js +12 -3
  25. package/dist/cdp/watcherTargets.js.map +1 -1
  26. package/dist/http/httpUtils.d.ts +13 -0
  27. package/dist/http/httpUtils.d.ts.map +1 -1
  28. package/dist/http/httpUtils.js +24 -0
  29. package/dist/http/httpUtils.js.map +1 -1
  30. package/dist/http/routes/defineRoute.js +2 -2
  31. package/dist/http/routes/defineRoute.js.map +1 -1
  32. package/dist/http/routes/postDomKeydown.d.ts.map +1 -1
  33. package/dist/http/routes/postDomKeydown.js +5 -0
  34. package/dist/http/routes/postDomKeydown.js.map +1 -1
  35. package/dist/http/routes/postEval.d.ts.map +1 -1
  36. package/dist/http/routes/postEval.js +9 -1
  37. package/dist/http/routes/postEval.js.map +1 -1
  38. package/dist/http/server.d.ts +8 -0
  39. package/dist/http/server.d.ts.map +1 -1
  40. package/dist/http/server.js.map +1 -1
  41. package/dist/sourcemaps/scriptFetcher.d.ts +27 -0
  42. package/dist/sourcemaps/scriptFetcher.d.ts.map +1 -0
  43. package/dist/sourcemaps/scriptFetcher.js +69 -0
  44. package/dist/sourcemaps/scriptFetcher.js.map +1 -0
  45. package/dist/sourcemaps/sourcemapResolver.d.ts +4 -1
  46. package/dist/sourcemaps/sourcemapResolver.d.ts.map +1 -1
  47. package/dist/sourcemaps/sourcemapResolver.js +5 -14
  48. package/dist/sourcemaps/sourcemapResolver.js.map +1 -1
  49. package/dist/sources/cdp-source.d.ts +1 -1
  50. package/dist/sources/cdp-source.d.ts.map +1 -1
  51. package/dist/sources/cdp-source.js +31 -0
  52. package/dist/sources/cdp-source.js.map +1 -1
  53. package/dist/sources/types.d.ts +10 -0
  54. package/dist/sources/types.d.ts.map +1 -1
  55. package/dist/startWatcherRuntime.d.ts.map +1 -1
  56. package/dist/startWatcherRuntime.js +13 -0
  57. package/dist/startWatcherRuntime.js.map +1 -1
  58. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
1
  import { getErrorCode } from '../errors.js';
2
+ import { isCdpTimeoutError, toDiagnosedError } from '../cdp/health.js';
2
3
  import http from 'node:http';
3
4
  import { formatError } from '@vforsh/argus-core';
4
5
  export const respondJson = (res, body, status = 200) => {
@@ -37,6 +38,29 @@ export const respondPayloadTooLarge = (res) => {
37
38
  export const respondError = (res, error) => {
38
39
  respondApiError(res, 500, getErrorCode(error), formatError(error));
39
40
  };
41
+ /**
42
+ * Send a failure, upgrading a bare CDP timeout into a layered diagnosis first.
43
+ *
44
+ * "Timed out" is the least informative thing Argus can say: the same message covers a dead browser,
45
+ * a target a navigation replaced, a blocked main thread, and an expression that genuinely needed
46
+ * longer — and only the last one is fixed by raising the timeout. Every route funnels its failures
47
+ * through here so the answer is the same wherever the stall surfaced.
48
+ *
49
+ * The diagnosis is best-effort: if it throws or the probes are unavailable, the original error is
50
+ * reported unchanged rather than replaced by a second failure.
51
+ */
52
+ export const respondCdpError = async (res, error, diagnose) => {
53
+ if (!diagnose || !isCdpTimeoutError(error)) {
54
+ respondError(res, error);
55
+ return;
56
+ }
57
+ try {
58
+ respondError(res, toDiagnosedError(await diagnose(), error));
59
+ }
60
+ catch {
61
+ respondError(res, error);
62
+ }
63
+ };
40
64
  /**
41
65
  * Read and parse a JSON request body.
42
66
  *
@@ -1 +1 @@
1
- {"version":3,"file":"httpUtils.js","sourceRoot":"","sources":["../../src/http/httpUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"httpUtils.js","sourceRoot":"","sources":["../../src/http/httpUtils.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { formatProtocolValidationIssues } from '@vforsh/argus-core';
2
- import { readJsonBody, respondError, respondInvalidBody, respondJson } from '../httpUtils.js';
2
+ import { readJsonBody, respondCdpError, respondInvalidBody, respondJson } from '../httpUtils.js';
3
3
  import { emitRequest } from './types.js';
4
4
  /** Build a JSON route with common body parsing, schema validation, event emission, and error handling. */
5
5
  export const defineJsonRoute = (input) => ({
@@ -32,7 +32,7 @@ export const defineJsonRoute = (input) => ({
32
32
  if (input.handleError?.(res, error)) {
33
33
  return;
34
34
  }
35
- respondError(res, error);
35
+ await respondCdpError(res, error, ctx.diagnoseCdp);
36
36
  }
37
37
  },
38
38
  });
@@ -1 +1 @@
1
- {"version":3,"file":"defineRoute.js","sourceRoot":"","sources":["../../../src/http/routes/defineRoute.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAoCxC,0GAA0G;AAC1G,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,KAAuC,EACd,EAAE,CAAC,CAAC;IAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;IACpB,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,aAAa,EAAE,KAAK,CAAC,aAAa;IAClC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACrC,IAAI,IAAI,GAAG,SAAkB,CAAA;QAC7B,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YAC5C,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBACrB,OAAM;YACP,CAAC;YAED,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBAChB,OAAO,kBAAkB,CAAC,GAAG,EAAE,8BAA8B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;YAC9E,CAAC;YACD,IAAI,GAAG,MAAM,CAAC,KAAK,CAAA;QACpB,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;QACtC,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;YACjE,IAAI,QAAQ,EAAE,CAAC;gBACd,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;YAC3B,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAM;YACP,CAAC;YACD,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACzB,CAAC;IACF,CAAC;CACD,CAAC,CAAA"}
1
+ {"version":3,"file":"defineRoute.js","sourceRoot":"","sources":["../../../src/http/routes/defineRoute.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAoCxC,0GAA0G;AAC1G,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,KAAuC,EACd,EAAE,CAAC,CAAC;IAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;IACpB,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,aAAa,EAAE,KAAK,CAAC,aAAa;IAClC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACrC,IAAI,IAAI,GAAG,SAAkB,CAAA;QAC7B,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YAC5C,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBACrB,OAAM;YACP,CAAC;YAED,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBAChB,OAAO,kBAAkB,CAAC,GAAG,EAAE,8BAA8B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;YAC9E,CAAC;YACD,IAAI,GAAG,MAAM,CAAC,KAAK,CAAA;QACpB,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;QACtC,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;YACjE,IAAI,QAAQ,EAAE,CAAC;gBACd,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;YAC3B,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAM;YACP,CAAC;YACD,MAAM,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;QACnD,CAAC;IACF,CAAC;CACD,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"postDomKeydown.d.ts","sourceRoot":"","sources":["../../../src/http/routes/postDomKeydown.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,KAAK,mDAqBhB,CAAA"}
1
+ {"version":3,"file":"postDomKeydown.d.ts","sourceRoot":"","sources":["../../../src/http/routes/postDomKeydown.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,KAAK,mDA0BhB,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { domKeydownRequestSchema } from '@vforsh/argus-core';
2
2
  import { dispatchKeydown, parseModifiers } from '../../cdp/keyboard.js';
3
+ import { ensurePageInputFocus } from '../../cdp/pageFocus.js';
3
4
  import { defineJsonRoute } from './defineRoute.js';
4
5
  export const route = defineJsonRoute({
5
6
  method: 'POST',
@@ -7,6 +8,9 @@ export const route = defineJsonRoute({
7
8
  bodySchema: domKeydownRequestSchema,
8
9
  endpoint: 'dom/keydown',
9
10
  handle: async ({ ctx, body: payload }) => {
11
+ // Chrome drops keyboard input aimed at an unfocused page and still acks the CDP command,
12
+ // so prove the page can receive it before reporting a dispatch.
13
+ const activation = await ensurePageInputFocus(ctx.pageCdpSession, ctx.visibilityController);
10
14
  const result = await dispatchKeydown(ctx.cdpSession, {
11
15
  key: payload.key,
12
16
  code: payload.code,
@@ -19,6 +23,7 @@ export const route = defineJsonRoute({
19
23
  code: result.code,
20
24
  modifiers: result.modifiers,
21
25
  focused: result.focused,
26
+ activated: activation.activated,
22
27
  event: result.event,
23
28
  };
24
29
  },
@@ -1 +1 @@
1
- {"version":3,"file":"postDomKeydown.js","sourceRoot":"","sources":["../../../src/http/routes/postDomKeydown.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAAwC;IAC3E,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,cAAc;IACpB,UAAU,EAAE,uBAAuB;IACnC,QAAQ,EAAE,aAAa;IACvB,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE;YACpD,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC;SAC5C,CAAC,CAAA;QACF,OAAO;YACN,EAAE,EAAE,IAAI;YACR,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;SACnB,CAAA;IACF,CAAC;CACD,CAAC,CAAA"}
1
+ {"version":3,"file":"postDomKeydown.js","sourceRoot":"","sources":["../../../src/http/routes/postDomKeydown.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAAwC;IAC3E,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,cAAc;IACpB,UAAU,EAAE,uBAAuB;IACnC,QAAQ,EAAE,aAAa;IACvB,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACxC,yFAAyF;QACzF,gEAAgE;QAChE,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAA;QAE3F,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE;YACpD,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC;SAC5C,CAAC,CAAA;QACF,OAAO;YACN,EAAE,EAAE,IAAI;YACR,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;SACnB,CAAA;IACF,CAAC;CACD,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"postEval.d.ts","sourceRoot":"","sources":["../../../src/http/routes/postEval.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,KAAK,mDAoBhB,CAAA"}
1
+ {"version":3,"file":"postEval.d.ts","sourceRoot":"","sources":["../../../src/http/routes/postEval.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,KAAK,mDAoBhB,CAAA"}
@@ -2,6 +2,14 @@ import { evalRequestSchema } from '@vforsh/argus-core';
2
2
  import { evaluateExpression } from '../../cdp/eval.js';
3
3
  import { defineJsonRoute } from './defineRoute.js';
4
4
  import { normalizeBoolean, normalizeTimeout } from '../httpUtils.js';
5
+ /**
6
+ * Deadline applied when the caller names none.
7
+ *
8
+ * Without it a wedged renderer leaves `Runtime.evaluate` pending forever and the failure surfaces
9
+ * on the *client's* clock, where nothing knows why — the watcher can diagnose the stall only if it
10
+ * is the one that gives up. Generous on purpose: it is a backstop, not a policy.
11
+ */
12
+ const DEFAULT_EVAL_CDP_TIMEOUT_MS = 30_000;
5
13
  export const route = defineJsonRoute({
6
14
  method: 'POST',
7
15
  path: '/eval',
@@ -14,7 +22,7 @@ export const route = defineJsonRoute({
14
22
  replMode: normalizeBoolean(payload.replMode, true),
15
23
  returnByValue: normalizeBoolean(payload.returnByValue, true),
16
24
  jsonValue: normalizeBoolean(payload.jsonValue, false),
17
- timeoutMs: normalizeTimeout(payload.timeoutMs),
25
+ timeoutMs: normalizeTimeout(payload.timeoutMs) ?? DEFAULT_EVAL_CDP_TIMEOUT_MS,
18
26
  scenario: normalizeBoolean(payload.scenario, false),
19
27
  scenarioServices: {
20
28
  buffer: ctx.buffer,
@@ -1 +1 @@
1
- {"version":3,"file":"postEval.js","sourceRoot":"","sources":["../../../src/http/routes/postEval.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEpE,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAA4B;IAC/D,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,iBAAiB;IAC7B,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAClC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC;QACrC,YAAY,EAAE,gBAAgB,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;QAC1D,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;QAClD,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;QAC5D,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;QACrD,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC;QAC9C,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;QACnD,gBAAgB,EAAE;YACjB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,aAAa,EAAE,GAAG,CAAC,aAAa;SAChC;KACD,CAAC;CACH,CAAC,CAAA;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAyB,EAAsC,EAAE;IAC3F,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrE,OAAO,SAAS,CAAA;IACjB,CAAC;IAED,MAAM,UAAU,GAA2B,EAAE,CAAA;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACxB,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;AACnE,CAAC,CAAA"}
1
+ {"version":3,"file":"postEval.js","sourceRoot":"","sources":["../../../src/http/routes/postEval.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEpE;;;;;;GAMG;AACH,MAAM,2BAA2B,GAAG,MAAM,CAAA;AAE1C,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAA4B;IAC/D,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,iBAAiB;IAC7B,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAClC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC;QACrC,YAAY,EAAE,gBAAgB,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;QAC1D,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;QAClD,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;QAC5D,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;QACrD,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,2BAA2B;QAC7E,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;QACnD,gBAAgB,EAAE;YACjB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,aAAa,EAAE,GAAG,CAAC,aAAa;SAChC;KACD,CAAC;CACH,CAAC,CAAA;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAyB,EAAsC,EAAE;IAC3F,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrE,OAAO,SAAS,CAAA;IACjB,CAAC;IAED,MAAM,UAAU,GAA2B,EAAE,CAAA;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACxB,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;AACnE,CAAC,CAAA"}
@@ -3,6 +3,7 @@ import type { LogBuffer } from '../buffer/LogBuffer.js';
3
3
  import type { NetBuffer } from '../buffer/NetBuffer.js';
4
4
  import type { RealtimeNetBuffer } from '../buffer/RealtimeNetBuffer.js';
5
5
  import type { CdpSessionHandle } from '../cdp/connection.js';
6
+ import type { CdpHealthDiagnosis } from '../cdp/health.js';
6
7
  import type { ElementRefRegistry } from '../cdp/elementRefs.js';
7
8
  import type { RuntimeEditor } from '../cdp/editor.js';
8
9
  import type { TraceRecorder } from '../cdp/tracing.js';
@@ -60,6 +61,13 @@ export type HttpServerOptions = {
60
61
  getNetFilterContext?: () => NetFilterContext | null;
61
62
  /** Optional browser-cookie reader when the source can access cookies outside the page's request scope. */
62
63
  readBrowserCookies?: (query: CdpSourceCookieQuery) => Promise<AuthStateCookie[]>;
64
+ /**
65
+ * Explain which layer swallowed a CDP command that timed out.
66
+ *
67
+ * Routes call it only on the failure path, so every endpoint reports a stalled browser the same
68
+ * way instead of each one guessing that the caller's expression was merely slow.
69
+ */
70
+ diagnoseCdp?: () => Promise<CdpHealthDiagnosis>;
63
71
  /** Optional callback invoked when logs or tail are requested. */
64
72
  onRequest?: (event: HttpRequestEventMetadata) => void;
65
73
  /** Optional callback invoked when a shutdown request is received. */
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAkB5B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AA0DtC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,OAA0B,EAA6B,EAAE;IAC9F,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QACjF,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;IAChC,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAA;IAEjF,OAAO;QACN,IAAI;QACJ,KAAK,EAAE,GAAG,EAAE,CACX,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACtB,IAAI,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CAAC,CAAA;oBACb,OAAM;gBACP,CAAC;gBACD,OAAO,EAAE,CAAA;YACV,CAAC,CAAC,CAAA;QACH,CAAC,CAAC;KACH,CAAA;AACF,CAAC,CAAA"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAmB5B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAiEtC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,OAA0B,EAA6B,EAAE;IAC9F,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QACjF,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;IAChC,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAA;IAEjF,OAAO;QACN,IAAI;QACJ,KAAK,EAAE,GAAG,EAAE,CACX,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACtB,IAAI,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CAAC,CAAA;oBACb,OAAM;gBACP,CAAC;gBACD,OAAO,EAAE,CAAA;YACV,CAAC,CAAC,CAAA;QACH,CAAC,CAAC;KACH,CAAA;AACF,CAAC,CAAA"}
@@ -0,0 +1,27 @@
1
+ /** A script body, plus whether the server answered with only the tail that was asked for. */
2
+ export type ScriptText = {
3
+ text: string;
4
+ partial: boolean;
5
+ };
6
+ /**
7
+ * Fetch a script body. `tailBytes` asks for only the last N bytes; `null` asks for the whole file.
8
+ * Resolves to `null` when the script cannot be read at all.
9
+ */
10
+ export type ScriptFetcher = (scriptUrl: string, tailBytes: number | null) => Promise<ScriptText | null>;
11
+ /**
12
+ * Build a script fetcher that survives servers which reject suffix `Range` requests.
13
+ *
14
+ * The annotation lives on a bundle's last line, so a tail request is normally all we need. Servers
15
+ * that ignore `Range` answer 200 with the whole body, which is fine. Servers built on
16
+ * `range-parser` (Express, `serve-static`, `send` — the Cocos Creator preview server among them)
17
+ * are not: for a file smaller than the requested tail they compute a negative start offset and
18
+ * answer 416/500 instead of clamping to the whole representation as RFC 7233 asks. Every script
19
+ * under `tailBytes` would otherwise resolve to `null` — sourcemaps silently off, one error in the
20
+ * dev server's log per attempt, forever.
21
+ *
22
+ * So a failed ranged request is retried whole, and an origin caught doing this is remembered: the
23
+ * remaining scripts from it are fetched unranged, costing that server exactly one logged error per
24
+ * watcher instead of one per script per negative-cache expiry.
25
+ */
26
+ export declare const createScriptFetcher: () => ScriptFetcher;
27
+ //# sourceMappingURL=scriptFetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scriptFetcher.d.ts","sourceRoot":"","sources":["../../src/sourcemaps/scriptFetcher.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAA;AAE3D;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;AAEvG;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,QAAO,aAiCtC,CAAA"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Build a script fetcher that survives servers which reject suffix `Range` requests.
3
+ *
4
+ * The annotation lives on a bundle's last line, so a tail request is normally all we need. Servers
5
+ * that ignore `Range` answer 200 with the whole body, which is fine. Servers built on
6
+ * `range-parser` (Express, `serve-static`, `send` — the Cocos Creator preview server among them)
7
+ * are not: for a file smaller than the requested tail they compute a negative start offset and
8
+ * answer 416/500 instead of clamping to the whole representation as RFC 7233 asks. Every script
9
+ * under `tailBytes` would otherwise resolve to `null` — sourcemaps silently off, one error in the
10
+ * dev server's log per attempt, forever.
11
+ *
12
+ * So a failed ranged request is retried whole, and an origin caught doing this is remembered: the
13
+ * remaining scripts from it are fetched unranged, costing that server exactly one logged error per
14
+ * watcher instead of one per script per negative-cache expiry.
15
+ */
16
+ export const createScriptFetcher = () => {
17
+ const rangeHostileOrigins = new Set();
18
+ return async (scriptUrl, tailBytes) => {
19
+ const origin = originOf(scriptUrl);
20
+ const ranged = tailBytes !== null && tailBytes > 0 && !rangeHostileOrigins.has(origin);
21
+ const response = await fetch(scriptUrl, ranged ? { headers: { Range: `bytes=-${tailBytes}` } } : undefined);
22
+ if (response.ok) {
23
+ return readBody(response);
24
+ }
25
+ if (!ranged || !looksLikeRangeRejection(response.status)) {
26
+ return null;
27
+ }
28
+ await discardBody(response);
29
+ const whole = await fetch(scriptUrl);
30
+ if (!whole.ok) {
31
+ // The script is unreadable either way, so the `Range` header is not what broke it.
32
+ await discardBody(whole);
33
+ return null;
34
+ }
35
+ // Ranged failed where unranged succeeds: the header is the problem, whatever status was used
36
+ // to report it (`send` surfaces the rejection as a 500 on some versions, not the RFC's 416).
37
+ // The `has` re-check is for concurrent loads that all failed before any of them got here.
38
+ if (!rangeHostileOrigins.has(origin)) {
39
+ rangeHostileOrigins.add(origin);
40
+ console.warn(`[Sourcemaps] ${origin} rejected a suffix Range request (HTTP ${response.status}); refetching scripts whole.`);
41
+ }
42
+ return readBody(whole);
43
+ };
44
+ };
45
+ /**
46
+ * Could a `Range` header have caused this status? 416 says so outright, and a server that throws
47
+ * while parsing the range reports it as a 5xx. A 404 or a 403 is about the script, not the header,
48
+ * so retrying it whole would just double the traffic for every script that is genuinely missing.
49
+ */
50
+ const looksLikeRangeRejection = (status) => status === 416 || status >= 500;
51
+ const originOf = (scriptUrl) => {
52
+ try {
53
+ return new URL(scriptUrl).origin;
54
+ }
55
+ catch {
56
+ return scriptUrl;
57
+ }
58
+ };
59
+ const readBody = async (response) => ({ text: await response.text(), partial: response.status === 206 });
60
+ /** Release the connection an unread error body would otherwise hold open. */
61
+ const discardBody = async (response) => {
62
+ try {
63
+ await response.body?.cancel();
64
+ }
65
+ catch {
66
+ // Already consumed or closed; nothing to release.
67
+ }
68
+ };
69
+ //# sourceMappingURL=scriptFetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scriptFetcher.js","sourceRoot":"","sources":["../../src/sourcemaps/scriptFetcher.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAkB,EAAE;IACtD,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAA;IAE7C,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;QAClC,MAAM,MAAM,GAAG,SAAS,KAAK,IAAI,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACtF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC3G,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC1B,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAA;QACZ,CAAC;QAED,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAA;QAC3B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAA;QACpC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACf,mFAAmF;YACnF,MAAM,WAAW,CAAC,KAAK,CAAC,CAAA;YACxB,OAAO,IAAI,CAAA;QACZ,CAAC;QAED,6FAA6F;QAC7F,6FAA6F;QAC7F,0FAA0F;QAC1F,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAC/B,OAAO,CAAC,IAAI,CAAC,gBAAgB,MAAM,0CAA0C,QAAQ,CAAC,MAAM,8BAA8B,CAAC,CAAA;QAC5H,CAAC;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC,CAAA;AACF,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,IAAI,GAAG,CAAA;AAE5F,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAU,EAAE;IAC9C,IAAI,CAAC;QACJ,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAA;IACjB,CAAC;AACF,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAkB,EAAuB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAA;AAEvI,6EAA6E;AAC7E,MAAM,WAAW,GAAG,KAAK,EAAE,QAAkB,EAAiB,EAAE;IAC/D,IAAI,CAAC;QACJ,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAA;IAC9B,CAAC;IAAC,MAAM,CAAC;QACR,kDAAkD;IACnD,CAAC;AACF,CAAC,CAAA"}
@@ -17,7 +17,10 @@ export type SourcemapResolverOptions = {
17
17
  maxEntries?: number;
18
18
  /** How long a "no usable map" answer is trusted before being retried. Default 30s. */
19
19
  negativeTtlMs?: number;
20
- /** Bytes requested from the end of a script when hunting for the annotation. Default 64 KiB. */
20
+ /**
21
+ * Bytes requested from the end of a script when hunting for the annotation. Default 64 KiB.
22
+ * A server that rejects the resulting suffix `Range` is retried whole — see `createScriptFetcher`.
23
+ */
21
24
  tailBytes?: number;
22
25
  };
23
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sourcemapResolver.d.ts","sourceRoot":"","sources":["../../src/sourcemaps/sourcemapResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsC,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAExH;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,2FAA2F;IAC3F,OAAO,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC1E,4FAA4F;IAC5F,KAAK,EAAE,MAAM,IAAI,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACtC,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAYD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAS,wBAA6B,KAAG,iBAyFhF,CAAA"}
1
+ {"version":3,"file":"sourcemapResolver.d.ts","sourceRoot":"","sources":["../../src/sourcemaps/sourcemapResolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsC,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAExH;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,2FAA2F;IAC3F,OAAO,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC1E,4FAA4F;IAC5F,KAAK,EAAE,MAAM,IAAI,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACtC,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAYD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAS,wBAA6B,KAAG,iBA4FhF,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { TraceMap } from '@jridgewell/trace-mapping';
2
2
  import { readSourcemapReference } from './sourceMappingUrl.js';
3
+ import { createScriptFetcher } from './scriptFetcher.js';
3
4
  import { resolveSourcemappedLocationWithMap } from './resolveLocation.js';
4
5
  const DEFAULT_MAX_ENTRIES = 128;
5
6
  const DEFAULT_NEGATIVE_TTL_MS = 30_000;
@@ -14,6 +15,8 @@ export const createSourcemapResolver = (options = {}) => {
14
15
  const maxEntries = options.maxEntries ?? DEFAULT_MAX_ENTRIES;
15
16
  const negativeTtlMs = options.negativeTtlMs ?? DEFAULT_NEGATIVE_TTL_MS;
16
17
  const tailBytes = options.tailBytes ?? DEFAULT_TAIL_BYTES;
18
+ /** Owned per resolver so a range-hostile origin is learned once and remembered across scripts. */
19
+ const fetchScript = createScriptFetcher();
17
20
  const cache = new Map();
18
21
  const pending = new Map();
19
22
  /** Bumped by `clear()`; in-flight loads started before the bump don't get to populate the cache. */
@@ -57,7 +60,7 @@ export const createSourcemapResolver = (options = {}) => {
57
60
  return inFlight;
58
61
  }
59
62
  const startedAt = generation;
60
- const promise = loadTraceMap(scriptUrl, tailBytes)
63
+ const promise = loadTraceMap(scriptUrl, tailBytes, fetchScript)
61
64
  .catch(() => null)
62
65
  .then((traceMap) => {
63
66
  if (startedAt === generation) {
@@ -87,7 +90,7 @@ export const createSourcemapResolver = (options = {}) => {
87
90
  };
88
91
  return { resolve, clear };
89
92
  };
90
- const loadTraceMap = async (scriptUrl, tailBytes) => {
93
+ const loadTraceMap = async (scriptUrl, tailBytes, fetchScript) => {
91
94
  const tail = await fetchScript(scriptUrl, tailBytes);
92
95
  if (!tail) {
93
96
  return null;
@@ -111,18 +114,6 @@ const loadTraceMap = async (scriptUrl, tailBytes) => {
111
114
  // Base against the map URL, not the script: `sources` are relative to wherever the map lives.
112
115
  return new TraceMap(rawMap, reference.url);
113
116
  };
114
- /**
115
- * Fetch a script, asking for only its tail when possible — the annotation is on the last line and
116
- * bundles are large. Servers that ignore `Range` answer 200 with the whole body, which is fine.
117
- */
118
- const fetchScript = async (scriptUrl, tailBytes) => {
119
- const init = tailBytes ? { headers: { Range: `bytes=-${tailBytes}` } } : undefined;
120
- const response = await fetch(scriptUrl, init);
121
- if (!response.ok) {
122
- return null;
123
- }
124
- return { text: await response.text(), partial: response.status === 206 };
125
- };
126
117
  /** Fetch and parse a sourcemap. A server answering 200-with-JavaScript fails the parse and yields null. */
127
118
  const fetchSourcemap = async (mapUrl) => {
128
119
  const response = await fetch(mapUrl);
@@ -1 +1 @@
1
- {"version":3,"file":"sourcemapResolver.js","sourceRoot":"","sources":["../../src/sourcemaps/sourcemapResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sourcemapResolver.js","sourceRoot":"","sources":["../../src/sourcemaps/sourcemapResolver.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * CDP source for direct Chrome DevTools Protocol connection via WebSocket.
3
3
  * Wraps the existing CDP watcher with the unified source interface.
4
4
  */
5
- import type { WatcherMatch, WatcherChrome } from '@vforsh/argus-core';
5
+ import { type WatcherMatch, type WatcherChrome } from '@vforsh/argus-core';
6
6
  import { type CdpSessionController } from '../cdp/connection.js';
7
7
  import type { CdpSourceHandle, CdpSourceBaseOptions } from './types.js';
8
8
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"cdp-source.d.ts","sourceRoot":"","sources":["../../src/sources/cdp-source.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGrE,OAAO,EAA0B,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAExF,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEvE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GAAG;IACrD,oDAAoD;IACpD,MAAM,EAAE,aAAa,CAAA;IACrB,wDAAwD;IACxD,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,sFAAsF;IACtF,aAAa,CAAC,EAAE,oBAAoB,CAAA;CACpC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,gBAAgB,KAAG,eAwD3D,CAAA"}
1
+ {"version":3,"file":"cdp-source.d.ts","sourceRoot":"","sources":["../../src/sources/cdp-source.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAe,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGvF,OAAO,EAA0B,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAIxF,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEvE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GAAG;IACrD,oDAAoD;IACpD,MAAM,EAAE,aAAa,CAAA;IACrB,wDAAwD;IACxD,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,sFAAsF;IACtF,aAAa,CAAC,EAAE,oBAAoB,CAAA;CACpC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,gBAAgB,KAAG,eA4D3D,CAAA"}
@@ -2,9 +2,12 @@
2
2
  * CDP source for direct Chrome DevTools Protocol connection via WebSocket.
3
3
  * Wraps the existing CDP watcher with the unified source interface.
4
4
  */
5
+ import { formatError } from '@vforsh/argus-core';
5
6
  import { startCdpWatcher } from '../cdp/watcher.js';
6
7
  import { createCdpBrowserCookieReader } from '../cdp/browserCookies.js';
7
8
  import { createCdpSessionHandle } from '../cdp/connection.js';
9
+ import { CDP_HEALTH_PROBE_TIMEOUT_MS } from '../cdp/health.js';
10
+ import { fetchCdpTargets } from '../cdp/watcherTargets.js';
8
11
  /**
9
12
  * Create a CDP source that connects to Chrome via WebSocket.
10
13
  * Returns a handle that can be used to control the source and access CDP session.
@@ -55,9 +58,37 @@ export const createCdpSource = (options) => {
55
58
  pageUrl: target?.url ?? null,
56
59
  };
57
60
  },
61
+ healthChecks: {
62
+ checkTransport: () => checkCdpTransport(chrome, watcher),
63
+ onTargetGone: watcher.reconnect,
64
+ },
58
65
  stop: watcher.stop,
59
66
  // CDP mode doesn't support listTargets/attachTarget/detachTarget
60
67
  // (auto-attaches based on match criteria)
61
68
  };
62
69
  };
70
+ /**
71
+ * Ask Chrome directly whether the browser and our target are still there.
72
+ *
73
+ * The WebSocket is a poor witness here: a renderer stranded by a cross-origin navigation leaves the
74
+ * socket open and simply stops answering, so the only way to tell "browser gone" from "target
75
+ * replaced" from "renderer wedged" is to read the target list out of band.
76
+ */
77
+ const checkCdpTransport = async (chrome, watcher) => {
78
+ let targets;
79
+ try {
80
+ targets = await fetchCdpTargets(chrome, CDP_HEALTH_PROBE_TIMEOUT_MS);
81
+ }
82
+ catch (error) {
83
+ return { state: 'unreachable', detail: `${chrome.host}:${chrome.port}: ${formatError(error)}` };
84
+ }
85
+ const target = watcher.getTarget();
86
+ if (!target) {
87
+ return { state: 'target_gone', detail: 'the watcher holds no target' };
88
+ }
89
+ if (!targets.some((candidate) => candidate.id === target.id)) {
90
+ return { state: 'target_gone', detail: `Chrome no longer lists target ${target.id} (${target.url})` };
91
+ }
92
+ return { state: 'ok' };
93
+ };
63
94
  //# sourceMappingURL=cdp-source.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cdp-source.js","sourceRoot":"","sources":["../../src/sources/cdp-source.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAA0B,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAAE,sBAAsB,EAA6B,MAAM,sBAAsB,CAAA;AAgBxF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAyB,EAAmB,EAAE;IAC7E,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAAA;IAErG,wCAAwC;IACxC,MAAM,UAAU,GAAG,aAAa,IAAI,sBAAsB,EAAE,CAAA;IAE5D,mEAAmE;IACnE,MAAM,gBAAgB,GAAyB,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IAEhG,sCAAsC;IACtC,MAAM,cAAc,GAAsB;QACzC,MAAM;QACN,KAAK;QACL,aAAa,EAAE,UAAU;QACzB,aAAa,EAAE,gBAAgB;QAC/B,gBAAgB;QAChB,UAAU;QACV,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACxB,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACpB,MAAM,CAAC,QAAS,CAAC,OAAO,EAAE;gBACzB,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aACzB,CAAC;YACJ,CAAC,CAAC,SAAS;QACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ;KACzB,CAAA;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,cAAc,CAAC,CAAA;IAE/C,OAAO;QACN,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,WAAW,EAAE,OAAO,CAAC,OAAO;QAC5B,kBAAkB,EAAE,4BAA4B,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC;QAC/F,mBAAmB,EAAE,GAAG,EAAE;YACzB,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAA;YAClC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAA;YAClD,OAAO;gBACN,UAAU,EAAE,KAAK;gBACjB,eAAe,EAAE,OAAO,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;gBACnE,UAAU,EAAE,IAAI;gBAChB,iBAAiB,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI;gBACtC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI;aAC5B,CAAA;QACF,CAAC;QACD,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,iEAAiE;QACjE,0CAA0C;KAC1C,CAAA;AACF,CAAC,CAAA"}
1
+ {"version":3,"file":"cdp-source.js","sourceRoot":"","sources":["../../src/sources/cdp-source.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import type { SourcemapResolver } from '../sourcemaps/sourcemapResolver.js';
6
6
  */
7
7
  import type { AuthStateCookie, ExtensionDiagnosticsResponse, ExtensionTabActionResponse, LogEvent } from '@vforsh/argus-core';
8
8
  import type { CdpSessionHandle } from '../cdp/connection.js';
9
+ import type { CdpHealthProbe } from '../cdp/health.js';
9
10
  import type { NetFilterContext } from '../net/filtering.js';
10
11
  export type ExtensionTabListFilter = {
11
12
  url?: string;
@@ -101,6 +102,15 @@ export type CdpSourceHandle = {
101
102
  readBrowserCookies?: (query: CdpSourceCookieQuery) => Promise<AuthStateCookie[]>;
102
103
  /** Best-effort target metadata used to resolve network filter scope in HTTP routes. */
103
104
  getNetFilterContext?: () => NetFilterContext | null;
105
+ /**
106
+ * Transport-specific layers of the stalled-command diagnosis.
107
+ *
108
+ * The session-level layers (attached? renderer answering?) are the same for every source and are
109
+ * composed by the runtime; a source only contributes what it alone can answer — whether its
110
+ * browser endpoint still responds, and how to get back onto a replaced target. Omit it and the
111
+ * diagnosis simply skips those layers.
112
+ */
113
+ healthChecks?: Pick<CdpHealthProbe, 'checkTransport' | 'onTargetGone'>;
104
114
  /** Resolve the child CDP session that owns a given frame (extension mode only). */
105
115
  getFrameSessionId?: (frameId: string) => string | null;
106
116
  /** Stop the source and clean up resources. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sources/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sources/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"startWatcherRuntime.d.ts","sourceRoot":"","sources":["../src/startWatcherRuntime.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAOpE;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAU,SAAS,mBAAmB,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,aAAa,CA0PhH,CAAA"}
1
+ {"version":3,"file":"startWatcherRuntime.d.ts","sourceRoot":"","sources":["../src/startWatcherRuntime.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAOpE;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAU,SAAS,mBAAmB,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,aAAa,CAwQhH,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { startHttpServer } from './http/server.js';
2
2
  import { announceWatcher, removeWatcher, startRegistryHeartbeat } from './registry/registry.js';
3
3
  import { ElementRefRegistry } from './cdp/elementRefs.js';
4
+ import { createSessionRendererProbe, diagnoseCdpHealth } from './cdp/health.js';
4
5
  import { DialogTracker } from './dialogs/DialogTracker.js';
5
6
  import { createInjectOnAttach } from './runtime/watcherInject.js';
6
7
  import { createIndicatorBinding } from './runtime/watcherIndicator.js';
@@ -145,6 +146,17 @@ export const createWatcherHandle = async (options, watcherId) => {
145
146
  };
146
147
  },
147
148
  });
149
+ /**
150
+ * Compose the transport-specific health checks with the ones every session has, so a stalled
151
+ * command is explained by layer instead of always reading as a slow expression.
152
+ */
153
+ const diagnoseCdp = () => diagnoseCdpHealth({
154
+ watcherId,
155
+ isAttached: () => sourceHandle.session.isAttached(),
156
+ probeRenderer: createSessionRendererProbe(sourceHandle.session),
157
+ getBlockingDialog: () => dialogTracker.getActive(),
158
+ ...sourceHandle.healthChecks,
159
+ });
148
160
  const dialogSession = getPageSession();
149
161
  dialogSession.onEvent('Page.javascriptDialogOpening', (params) => {
150
162
  const dialog = parseDialogStatus(params);
@@ -177,6 +189,7 @@ export const createWatcherHandle = async (options, watcherId) => {
177
189
  throttleController,
178
190
  visibilityController,
179
191
  netMockController,
192
+ diagnoseCdp,
180
193
  getNetFilterContext: sourceHandle.getNetFilterContext,
181
194
  readBrowserCookies: sourceHandle.readBrowserCookies,
182
195
  sourceHandle: sourceMode === 'extension' ? sourceHandle : undefined,