@vforsh/argus-watcher 0.5.0 → 0.5.2

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 (50) 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 +8 -1
  11. package/dist/cdp/keyboard.d.ts.map +1 -1
  12. package/dist/cdp/keyboard.js +56 -14
  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/sources/cdp-source.d.ts +1 -1
  42. package/dist/sources/cdp-source.d.ts.map +1 -1
  43. package/dist/sources/cdp-source.js +31 -0
  44. package/dist/sources/cdp-source.js.map +1 -1
  45. package/dist/sources/types.d.ts +10 -0
  46. package/dist/sources/types.d.ts.map +1 -1
  47. package/dist/startWatcherRuntime.d.ts.map +1 -1
  48. package/dist/startWatcherRuntime.js +13 -0
  49. package/dist/startWatcherRuntime.js.map +1 -1
  50. package/package.json +1 -1
@@ -5,6 +5,12 @@ export declare const ensureParentDir: (filePath: string) => Promise<void>;
5
5
  * - If `outFile` is an absolute path, use it directly (no restriction).
6
6
  * - If `outFile` is relative, resolve it under `artifactsDir`.
7
7
  * - If `outFile` is empty/undefined, use `defaultName` under `artifactsDir`.
8
+ *
9
+ * The watcher is a separate process whose cwd is unrelated to the caller's, so a relative path
10
+ * can only be resolved against something the watcher owns. Callers that want cwd-relative
11
+ * semantics resolve the path on their side first — the CLI does exactly that for
12
+ * `screenshot`/`record`/`trace` (`resolveArtifactOutFile`), so a relative `--out` lands next to
13
+ * the user rather than in this temp directory.
8
14
  */
9
15
  export declare const resolveArtifactPath: (artifactsDir: string, outFile: string | undefined, defaultName: string) => string;
10
16
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,IAAI,CAElE,CAAA;AAED,eAAO,MAAM,eAAe,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAGpE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,cAAc,MAAM,EAAE,SAAS,MAAM,GAAG,SAAS,EAAE,aAAa,MAAM,KAAG,MAS5G,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAU,MAAM,MAAM,EAAE,IAAI,MAAM,KAAG,OAAO,CAAC,IAAI,CAY7E,CAAA"}
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,IAAI,CAElE,CAAA;AAED,eAAO,MAAM,eAAe,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAGpE,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAAI,cAAc,MAAM,EAAE,SAAS,MAAM,GAAG,SAAS,EAAE,aAAa,MAAM,KAAG,MAS5G,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAU,MAAM,MAAM,EAAE,IAAI,MAAM,KAAG,OAAO,CAAC,IAAI,CAY7E,CAAA"}
package/dist/artifacts.js CHANGED
@@ -12,6 +12,12 @@ export const ensureParentDir = async (filePath) => {
12
12
  * - If `outFile` is an absolute path, use it directly (no restriction).
13
13
  * - If `outFile` is relative, resolve it under `artifactsDir`.
14
14
  * - If `outFile` is empty/undefined, use `defaultName` under `artifactsDir`.
15
+ *
16
+ * The watcher is a separate process whose cwd is unrelated to the caller's, so a relative path
17
+ * can only be resolved against something the watcher owns. Callers that want cwd-relative
18
+ * semantics resolve the path on their side first — the CLI does exactly that for
19
+ * `screenshot`/`record`/`trace` (`resolveArtifactOutFile`), so a relative `--out` lands next to
20
+ * the user rather than in this temp directory.
15
21
  */
16
22
  export const resolveArtifactPath = (artifactsDir, outFile, defaultName) => {
17
23
  const trimmed = outFile?.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAEjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,GAAW,EAAiB,EAAE;IACtE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AACzC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,QAAgB,EAAiB,EAAE;IACxE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AACzC,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,YAAoB,EAAE,OAA2B,EAAE,WAAmB,EAAU,EAAE;IACrH,MAAM,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAA;IAE/B,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,WAAW,CAAC,CAAA;AACrD,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAY,EAAE,EAAU,EAAiB,EAAE;IACjF,MAAM,eAAe,CAAC,EAAE,CAAC,CAAA;IACzB,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvD,MAAM,KAAK,CAAA;QACZ,CAAC;QAED,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAC3B,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;AACF,CAAC,CAAA"}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAEjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,GAAW,EAAiB,EAAE;IACtE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AACzC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,QAAgB,EAAiB,EAAE;IACxE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AACzC,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,YAAoB,EAAE,OAA2B,EAAE,WAAmB,EAAU,EAAE;IACrH,MAAM,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAA;IAE/B,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,WAAW,CAAC,CAAA;AACrD,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAY,EAAE,EAAU,EAAiB,EAAE;IACjF,MAAM,eAAe,CAAC,EAAE,CAAC,CAAA;IACzB,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvD,MAAM,KAAK,CAAA;QACZ,CAAC;QAED,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAC3B,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;AACF,CAAC,CAAA"}
@@ -0,0 +1,65 @@
1
+ import type { ArgusErrorCode, DialogStatus } from '@vforsh/argus-core';
2
+ import { type CodedError } from '../errors.js';
3
+ import type { CdpSessionHandle } from './connection.js';
4
+ /**
5
+ * How long a health probe may take.
6
+ *
7
+ * Kept short — it runs *after* something already timed out, and the caller is still waiting.
8
+ * Transport checks share the budget so a diagnosis cannot outlast the request it explains.
9
+ */
10
+ export declare const CDP_HEALTH_PROBE_TIMEOUT_MS = 2000;
11
+ /** A layered explanation for a CDP command that ran out of time. */
12
+ export type CdpHealthDiagnosis = {
13
+ /** The layer that swallowed the command, in the same vocabulary the wire envelope uses. */
14
+ code: ArgusErrorCode;
15
+ /** One line: what failed, and what to do about it. */
16
+ message: string;
17
+ };
18
+ /** Transport-level verdict for the connection carrying CDP commands. */
19
+ export type CdpTransportCheck = {
20
+ state: 'ok';
21
+ } | {
22
+ state: 'unreachable';
23
+ detail: string;
24
+ } | {
25
+ state: 'target_gone';
26
+ detail: string;
27
+ };
28
+ /** The per-layer checks {@link diagnoseCdpHealth} runs, supplied by whichever source is attached. */
29
+ export type CdpHealthProbe = {
30
+ /** Watcher id, so hints can name the exact command to run. */
31
+ watcherId?: string;
32
+ isAttached: () => boolean;
33
+ /** Cheap page round-trip: `true` when the renderer answered within the probe budget. */
34
+ probeRenderer: () => Promise<boolean>;
35
+ /** Transport check. Omitted by transports with no out-of-band endpoint to ask. */
36
+ checkTransport?: () => Promise<CdpTransportCheck>;
37
+ /** Modal dialogs block the renderer without breaking anything; report them as their own layer. */
38
+ getBlockingDialog?: () => DialogStatus | null;
39
+ /** Invoked when the transport reports the attached target is gone, to start reattachment. */
40
+ onTargetGone?: () => void;
41
+ };
42
+ /**
43
+ * Work out which layer swallowed a CDP command, from the outside in.
44
+ *
45
+ * A stalled command used to surface as "eval may need more time" no matter what actually broke, so
46
+ * the standard recovery — raise the timeout — reliably bought a slower version of the same failure.
47
+ * Each layer is checked in the order it can fail: no attachment, then the browser, then the target,
48
+ * then a dialog, then the renderer, and only then the expression itself.
49
+ *
50
+ * Every probe is short and failure-tolerant: this runs on an already-failed request, and must not
51
+ * become a second thing that hangs.
52
+ */
53
+ export declare const diagnoseCdpHealth: (probe: CdpHealthProbe) => Promise<CdpHealthDiagnosis>;
54
+ /** Turn a diagnosis into the coded error routes already know how to serialize. */
55
+ export declare const toDiagnosedError: (diagnosis: CdpHealthDiagnosis, original: unknown) => CodedError;
56
+ /**
57
+ * True for the "no answer came back in time" errors both transports raise.
58
+ *
59
+ * Matched on message because that is where the timeout is decided — {@link CdpSessionHandle}'s own
60
+ * pending-request timer and the native-messaging bridge both reject with a plain `Error`.
61
+ */
62
+ export declare const isCdpTimeoutError: (error: unknown) => boolean;
63
+ /** A renderer probe backed by a CDP session: one trivial evaluation, short deadline, never throws. */
64
+ export declare const createSessionRendererProbe: (session: CdpSessionHandle) => () => Promise<boolean>;
65
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/cdp/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,OAAQ,CAAA;AAEhD,oEAAoE;AACpE,MAAM,MAAM,kBAAkB,GAAG;IAChC,2FAA2F;IAC3F,IAAI,EAAE,cAAc,CAAA;IACpB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wEAAwE;AACxE,MAAM,MAAM,iBAAiB,GAAG;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAErI,qGAAqG;AACrG,MAAM,MAAM,cAAc,GAAG;IAC5B,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,OAAO,CAAA;IACzB,wFAAwF;IACxF,aAAa,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACrC,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACjD,kGAAkG;IAClG,iBAAiB,CAAC,EAAE,MAAM,YAAY,GAAG,IAAI,CAAA;IAC7C,6FAA6F;IAC7F,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;CACzB,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,GAAU,OAAO,cAAc,KAAG,OAAO,CAAC,kBAAkB,CAqDzF,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,GAAI,WAAW,kBAAkB,EAAE,UAAU,OAAO,KAAG,UAGnF,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,OAAO,KAAG,OAC2C,CAAA;AAE9F,sGAAsG;AACtG,eAAO,MAAM,0BAA0B,GAAI,SAAS,gBAAgB,WAAe,OAAO,CAAC,OAAO,CAQjG,CAAA"}
@@ -0,0 +1,89 @@
1
+ import { codedError } from '../errors.js';
2
+ /**
3
+ * How long a health probe may take.
4
+ *
5
+ * Kept short — it runs *after* something already timed out, and the caller is still waiting.
6
+ * Transport checks share the budget so a diagnosis cannot outlast the request it explains.
7
+ */
8
+ export const CDP_HEALTH_PROBE_TIMEOUT_MS = 2_000;
9
+ /**
10
+ * Work out which layer swallowed a CDP command, from the outside in.
11
+ *
12
+ * A stalled command used to surface as "eval may need more time" no matter what actually broke, so
13
+ * the standard recovery — raise the timeout — reliably bought a slower version of the same failure.
14
+ * Each layer is checked in the order it can fail: no attachment, then the browser, then the target,
15
+ * then a dialog, then the renderer, and only then the expression itself.
16
+ *
17
+ * Every probe is short and failure-tolerant: this runs on an already-failed request, and must not
18
+ * become a second thing that hangs.
19
+ */
20
+ export const diagnoseCdpHealth = async (probe) => {
21
+ const id = probe.watcherId ?? '<id>';
22
+ if (!probe.isAttached()) {
23
+ return {
24
+ code: 'cdp_not_attached',
25
+ message: `The watcher is not attached to a target. Check \`argus watcher status ${id}\` and \`argus doctor\`.`,
26
+ };
27
+ }
28
+ // A source with no out-of-band endpoint to ask cannot fail these two layers; treat it as healthy
29
+ // transport rather than repeating an optional-call dance at every check below.
30
+ const transport = (await probe.checkTransport?.()) ?? { state: 'ok' };
31
+ if (transport.state === 'unreachable') {
32
+ return {
33
+ code: 'chrome_unreachable',
34
+ message: `Chrome's CDP endpoint did not answer (${transport.detail}). Restart the browser, then \`argus doctor\`.`,
35
+ };
36
+ }
37
+ if (transport.state === 'target_gone') {
38
+ probe.onTargetGone?.();
39
+ return {
40
+ code: 'cdp_target_replaced',
41
+ message: `The attached page target is gone (${transport.detail}) — a navigation replaced it. ` +
42
+ `Argus is reattaching; retry the command, or check \`argus watcher status ${id}\`.`,
43
+ };
44
+ }
45
+ const dialog = probe.getBlockingDialog?.();
46
+ if (dialog) {
47
+ return {
48
+ code: 'dialog_blocking',
49
+ message: `A ${dialog.type} dialog is open and blocking the page. ` +
50
+ `Dismiss it with \`argus dialog accept ${id}\` or \`argus dialog dismiss ${id}\`, then retry.`,
51
+ };
52
+ }
53
+ if (!(await probe.probeRenderer())) {
54
+ return {
55
+ code: 'cdp_renderer_unresponsive',
56
+ message: `The page's renderer did not answer a trivial evaluation within ${CDP_HEALTH_PROBE_TIMEOUT_MS}ms — its main thread is ` +
57
+ `blocked, or a cross-origin navigation stranded it. A longer timeout will not help: reload with \`argus reload ${id}\`, ` +
58
+ 'or restart Chrome.',
59
+ };
60
+ }
61
+ return {
62
+ code: 'cdp_timeout',
63
+ message: 'The watcher, target, and renderer all answered, so the expression itself exceeded its deadline. Pass a longer timeout.',
64
+ };
65
+ };
66
+ /** Turn a diagnosis into the coded error routes already know how to serialize. */
67
+ export const toDiagnosedError = (diagnosis, original) => {
68
+ const detail = original instanceof Error ? original.message : String(original);
69
+ return codedError(diagnosis.code, `${detail}. ${diagnosis.message}`);
70
+ };
71
+ /**
72
+ * True for the "no answer came back in time" errors both transports raise.
73
+ *
74
+ * Matched on message because that is where the timeout is decided — {@link CdpSessionHandle}'s own
75
+ * pending-request timer and the native-messaging bridge both reject with a plain `Error`.
76
+ */
77
+ export const isCdpTimeoutError = (error) => error instanceof Error && /\b(?:CDP|Bridge|Control) request timed out\b/i.test(error.message);
78
+ /** A renderer probe backed by a CDP session: one trivial evaluation, short deadline, never throws. */
79
+ export const createSessionRendererProbe = (session) => async () => {
80
+ try {
81
+ const params = { expression: '1', returnByValue: true, silent: true };
82
+ await session.sendAndWait('Runtime.evaluate', params, { timeoutMs: CDP_HEALTH_PROBE_TIMEOUT_MS });
83
+ return true;
84
+ }
85
+ catch {
86
+ return false;
87
+ }
88
+ };
89
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/cdp/health.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@ type KeyDefinition = {
5
5
  code: string;
6
6
  keyCode: number;
7
7
  text?: string;
8
+ /** `key` value produced when Shift is held (US layout). Absent for keys Shift does not change. */
9
+ shiftKey?: string;
8
10
  };
9
11
  /**
10
12
  * Resolve a key name to its CDP key definition.
@@ -44,7 +46,12 @@ export declare const resolveKeyboardEvent: (options: ResolveKeyboardEventOptions
44
46
  *
45
47
  * 1. If `selector` provided: resolve → error if 0 or >1 match → focus
46
48
  * 2. Resolve key definition
47
- * 3. Dispatch: printable → keyDown+char+keyUp; non-printable → rawKeyDown+keyUp
49
+ * 3. Dispatch: keys that carry text → keyDown(text)+keyUp; the rest → rawKeyDown+keyUp
50
+ *
51
+ * A `keyDown` carrying `text` already produces the character, so no separate `char` event is
52
+ * sent. Sending one used to double every printable key: the page saw one `keydown`, but two
53
+ * `keypress`/`beforeinput`/`input` rounds, and a focused field ended up with "99" for a single
54
+ * `--key 9`. Chrome's own automation clients (Playwright) dispatch the same two events.
48
55
  */
49
56
  export declare const dispatchKeydown: (session: CdpSessionHandle, options: DispatchKeydownOptions) => Promise<DispatchKeydownResult>;
50
57
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/cdp/keyboard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAOvD,KAAK,aAAa,GAAG;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAkED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,KAAG,aAAa,GAAG,SAElE,CAAA;AAED,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,aAAa,GAAG,SAEpE,CAAA;AAiBD;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,MAoB/C,CAAA;AAMD,MAAM,MAAM,sBAAsB,GAAG;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,eAAe,CAAA;CACtB,CAAA;AAED,KAAK,2BAA2B,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,GAAI,SAAS,2BAA2B,KAAG,eAqC3E,CAAA;AA0BD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAU,SAAS,gBAAgB,EAAE,SAAS,sBAAsB,KAAG,OAAO,CAAC,qBAAqB,CA4C/H,CAAA"}
1
+ {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/cdp/keyboard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAOvD,KAAK,aAAa,GAAG;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kGAAkG;IAClG,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAgGD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,KAAG,aAAa,GAAG,SAElE,CAAA;AAED,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,aAAa,GAAG,SAEpE,CAAA;AAiBD;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,MAoB/C,CAAA;AAMD,MAAM,MAAM,sBAAsB,GAAG;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,eAAe,CAAA;CACtB,CAAA;AAED,KAAK,2BAA2B,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,GAAI,SAAS,2BAA2B,KAAG,eAqC3E,CAAA;AA8BD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,GAAU,SAAS,gBAAgB,EAAE,SAAS,sBAAsB,KAAG,OAAO,CAAC,qBAAqB,CAmD/H,CAAA"}
@@ -7,6 +7,12 @@ const buildKeyMaps = () => {
7
7
  byKey.set(lookup.toLowerCase(), def);
8
8
  byCode.set(def.code.toLowerCase(), def);
9
9
  };
10
+ // Lets `--key ~` resolve to the same physical key as `--key \`` without overriding its code lookup.
11
+ const putShiftAlias = (def) => {
12
+ if (def.shiftKey) {
13
+ byKey.set(def.shiftKey.toLowerCase(), def);
14
+ }
15
+ };
10
16
  // Letters a-z
11
17
  for (let i = 0; i < 26; i++) {
12
18
  const lower = String.fromCharCode(97 + i);
@@ -16,11 +22,33 @@ const buildKeyMaps = () => {
16
22
  put(lower, { key: lower, code, keyCode, text: lower });
17
23
  }
18
24
  // Digits 0-9
25
+ const DIGIT_SHIFT_KEYS = ')!@#$%^&*(';
19
26
  for (let i = 0; i < 10; i++) {
20
27
  const digit = String(i);
21
28
  const code = `Digit${digit}`;
22
29
  const keyCode = 48 + i;
23
- put(digit, { key: digit, code, keyCode, text: digit });
30
+ const def = { key: digit, code, keyCode, text: digit, shiftKey: DIGIT_SHIFT_KEYS[i] };
31
+ put(digit, def);
32
+ putShiftAlias(def);
33
+ }
34
+ // Punctuation (US layout): standard KeyboardEvent.code values with their legacy keyCodes
35
+ const PUNCTUATION = [
36
+ ['Backquote', '`', '~', 192],
37
+ ['Minus', '-', '_', 189],
38
+ ['Equal', '=', '+', 187],
39
+ ['BracketLeft', '[', '{', 219],
40
+ ['BracketRight', ']', '}', 221],
41
+ ['Backslash', '\\', '|', 220],
42
+ ['Semicolon', ';', ':', 186],
43
+ ['Quote', "'", '"', 222],
44
+ ['Comma', ',', '<', 188],
45
+ ['Period', '.', '>', 190],
46
+ ['Slash', '/', '?', 191],
47
+ ];
48
+ for (const [code, key, shiftKey, keyCode] of PUNCTUATION) {
49
+ const def = { key, code, keyCode, text: key, shiftKey };
50
+ put(key, def);
51
+ putShiftAlias(def);
24
52
  }
25
53
  // Special keys
26
54
  put('Enter', { key: 'Enter', code: 'Enter', keyCode: 13, text: '\r' });
@@ -118,7 +146,7 @@ export const resolveKeyboardEvent = (options) => {
118
146
  const text = resolveEventText(key, baseDef);
119
147
  const event = {
120
148
  key,
121
- code: codeInput ?? baseDef.code,
149
+ code: codeDef?.code ?? codeInput ?? baseDef.code,
122
150
  keyCode: baseDef.keyCode,
123
151
  modifiers,
124
152
  altKey: (modifiers & MODIFIER_BITS.alt) !== 0,
@@ -140,6 +168,10 @@ const resolveEventKey = (keyInput, def, modifiers) => {
140
168
  if (isSingleLetter(semanticKey)) {
141
169
  return isShift(modifiers) ? semanticKey.toUpperCase() : semanticKey.toLowerCase();
142
170
  }
171
+ // Only shift the unshifted form: an explicit `--key ~` already names the shifted character.
172
+ if (isShift(modifiers) && def.shiftKey && semanticKey === def.key) {
173
+ return def.shiftKey;
174
+ }
143
175
  return semanticKey;
144
176
  };
145
177
  const resolveEventText = (key, def) => {
@@ -155,7 +187,12 @@ const isShift = (modifiers) => (modifiers & MODIFIER_BITS.shift) !== 0;
155
187
  *
156
188
  * 1. If `selector` provided: resolve → error if 0 or >1 match → focus
157
189
  * 2. Resolve key definition
158
- * 3. Dispatch: printable → keyDown+char+keyUp; non-printable → rawKeyDown+keyUp
190
+ * 3. Dispatch: keys that carry text → keyDown(text)+keyUp; the rest → rawKeyDown+keyUp
191
+ *
192
+ * A `keyDown` carrying `text` already produces the character, so no separate `char` event is
193
+ * sent. Sending one used to double every printable key: the page saw one `keydown`, but two
194
+ * `keypress`/`beforeinput`/`input` rounds, and a focused field ended up with "99" for a single
195
+ * `--key 9`. Chrome's own automation clients (Playwright) dispatch the same two events.
159
196
  */
160
197
  export const dispatchKeydown = async (session, options) => {
161
198
  const { selector } = options;
@@ -174,24 +211,29 @@ export const dispatchKeydown = async (session, options) => {
174
211
  await session.sendAndWait('DOM.focus', { nodeId });
175
212
  focused = true;
176
213
  }
177
- const isPrintable = event.text != null && event.text !== '\r';
214
+ // `rawKeyDown` is Chrome's "this key produces no character" type: it suppresses `keypress` and
215
+ // every default text action. Enter carries text (`\r`) but was excluded from this split, so
216
+ // `--key Enter` reached the page as a bare keydown/keyup pair — no newline in a textarea, no
217
+ // form submission. The split is simply whether the key produces text, as Playwright decides it.
218
+ const carriesText = event.text != null;
178
219
  // 3. Dispatch key events
220
+ //
221
+ // `nativeVirtualKeyCode` is deliberately absent: it means the *platform's* key code — a Carbon
222
+ // keycode on macOS, an X11 keysym on Linux — and Argus only knows the Windows one, so the value
223
+ // was always wrong off Windows. Chrome 152 headless turns that into a hang, repeating the key
224
+ // thousands of times a second until the renderer stops answering CDP. `windowsVirtualKeyCode`
225
+ // alone is what reaches the page as `KeyboardEvent.keyCode`, and it is all Playwright sends.
179
226
  const baseParams = {
180
227
  code: event.code,
181
228
  key: event.key,
182
229
  windowsVirtualKeyCode: event.keyCode,
183
- nativeVirtualKeyCode: event.keyCode,
184
230
  modifiers: event.modifiers,
185
231
  };
186
- if (isPrintable) {
187
- await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'keyDown', text: event.text });
188
- await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'char', text: event.text });
189
- await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'keyUp' });
190
- }
191
- else {
192
- await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'rawKeyDown', text: event.text });
193
- await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'keyUp' });
194
- }
232
+ const keyDownParams = carriesText
233
+ ? { ...baseParams, type: 'keyDown', text: event.text, unmodifiedText: event.text }
234
+ : { ...baseParams, type: 'rawKeyDown' };
235
+ await session.sendAndWait('Input.dispatchKeyEvent', keyDownParams);
236
+ await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'keyUp' });
195
237
  return { key: event.key, code: event.code, modifiers: event.modifiers, focused, event };
196
238
  };
197
239
  //# sourceMappingURL=keyboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/cdp/keyboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/cdp/keyboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { CdpSessionHandle } from './connection.js';
2
+ import type { VisibilityController } from '../visibility/VisibilityController.js';
3
+ /** Result of making a page accept synthetic keyboard input. */
4
+ export type PageInputActivation = {
5
+ /** Whether we had to activate the page (focus emulation) to get there. */
6
+ activated: boolean;
7
+ };
8
+ /**
9
+ * Make sure the attached page will actually receive `Input.dispatchKeyEvent`.
10
+ *
11
+ * Chrome routes keyboard input to the *focused* widget. A hidden page — headless, a background
12
+ * tab, a covered window — has none, so the renderer drops the event and CDP still acks the
13
+ * command: the caller sees success for a key the page never saw. `document.hasFocus()` is the
14
+ * cheapest honest signal for that state.
15
+ *
16
+ * When the page is not focused this locks it into the same shown+focused state `argus page show`
17
+ * produces, through the same controller, so the change is visible in `page hide`/reattach rather
18
+ * than being invisible session state. When even that fails (a transport with no `Emulation`
19
+ * domain, for instance) it throws rather than dispatching into a void.
20
+ *
21
+ * @param pageSession Top-level page session — focus is a page-level concept, never iframe-scoped.
22
+ * @param visibility Controller owning the sticky show lock.
23
+ * @throws {CodedError} `target_not_focused` when the page cannot be activated.
24
+ */
25
+ export declare const ensurePageInputFocus: (pageSession: CdpSessionHandle, visibility: VisibilityController) => Promise<PageInputActivation>;
26
+ //# sourceMappingURL=pageFocus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageFocus.d.ts","sourceRoot":"","sources":["../../src/cdp/pageFocus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAMjF,+DAA+D;AAC/D,MAAM,MAAM,mBAAmB,GAAG;IACjC,0EAA0E;IAC1E,SAAS,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,GAAU,aAAa,gBAAgB,EAAE,YAAY,oBAAoB,KAAG,OAAO,CAAC,mBAAmB,CAqBvI,CAAA"}
@@ -0,0 +1,54 @@
1
+ import { formatError } from '@vforsh/argus-core';
2
+ import { codedError } from '../errors.js';
3
+ import { tryEvaluateInPage } from './pageState.js';
4
+ /** How long the focus probe may take before we give up and treat focus as unknown. */
5
+ const FOCUS_PROBE_TIMEOUT_MS = 3_000;
6
+ /**
7
+ * Make sure the attached page will actually receive `Input.dispatchKeyEvent`.
8
+ *
9
+ * Chrome routes keyboard input to the *focused* widget. A hidden page — headless, a background
10
+ * tab, a covered window — has none, so the renderer drops the event and CDP still acks the
11
+ * command: the caller sees success for a key the page never saw. `document.hasFocus()` is the
12
+ * cheapest honest signal for that state.
13
+ *
14
+ * When the page is not focused this locks it into the same shown+focused state `argus page show`
15
+ * produces, through the same controller, so the change is visible in `page hide`/reattach rather
16
+ * than being invisible session state. When even that fails (a transport with no `Emulation`
17
+ * domain, for instance) it throws rather than dispatching into a void.
18
+ *
19
+ * @param pageSession Top-level page session — focus is a page-level concept, never iframe-scoped.
20
+ * @param visibility Controller owning the sticky show lock.
21
+ * @throws {CodedError} `target_not_focused` when the page cannot be activated.
22
+ */
23
+ export const ensurePageInputFocus = async (pageSession, visibility) => {
24
+ if (!pageSession.isAttached()) {
25
+ // Dispatch itself will fail with the attachment error; don't mask it with a focus error.
26
+ return { activated: false };
27
+ }
28
+ if (await hasPageFocus(pageSession)) {
29
+ return { activated: false };
30
+ }
31
+ try {
32
+ await visibility.setLock(pageSession, 'shown');
33
+ }
34
+ catch (error) {
35
+ throw notFocusedError(`activating it failed: ${formatError(error)}`);
36
+ }
37
+ if (!(await hasPageFocus(pageSession))) {
38
+ throw notFocusedError('activating it did not give it focus');
39
+ }
40
+ return { activated: true };
41
+ };
42
+ /**
43
+ * Read `document.hasFocus()` from the page.
44
+ *
45
+ * An unreadable page (navigating, no `Runtime` yet) counts as focused: a probe that cannot answer
46
+ * must not turn a working dispatch into a failure.
47
+ */
48
+ const hasPageFocus = async (pageSession) => {
49
+ const focused = await tryEvaluateInPage(pageSession, 'document.hasFocus()', { timeoutMs: FOCUS_PROBE_TIMEOUT_MS });
50
+ return focused !== false;
51
+ };
52
+ const notFocusedError = (reason) => codedError('target_not_focused', `The page is not focused, so Chrome would drop the keyboard event — ${reason}. ` +
53
+ 'Run `argus page show <id>` and retry, or start the watcher against a visible page.');
54
+ //# sourceMappingURL=pageFocus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageFocus.js","sourceRoot":"","sources":["../../src/cdp/pageFocus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAA;AAG1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElD,sFAAsF;AACtF,MAAM,sBAAsB,GAAG,KAAK,CAAA;AAQpC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,WAA6B,EAAE,UAAgC,EAAgC,EAAE;IAC3I,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC;QAC/B,yFAAyF;QACzF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED,IAAI,MAAM,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,eAAe,CAAC,yBAAyB,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACrE,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,eAAe,CAAC,qCAAqC,CAAC,CAAA;IAC7D,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;AAC3B,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,YAAY,GAAG,KAAK,EAAE,WAA6B,EAAoB,EAAE;IAC9E,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAU,WAAW,EAAE,qBAAqB,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC,CAAA;IAC3H,OAAO,OAAO,KAAK,KAAK,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,MAAc,EAAc,EAAE,CACtD,UAAU,CACT,oBAAoB,EACpB,sEAAsE,MAAM,IAAI;IAC/E,oFAAoF,CACrF,CAAA"}
@@ -39,6 +39,13 @@ export type CdpWatcherHandle = {
39
39
  session: CdpSessionHandle;
40
40
  stop: () => Promise<void>;
41
41
  getTarget: () => CdpTarget | null;
42
+ /**
43
+ * Drop the current socket so the connect loop re-selects a target.
44
+ *
45
+ * The only way back from a target Chrome has replaced under us: the loop already reconnects on
46
+ * socket close, and `findTarget` re-runs the match, so closing is the whole reattachment.
47
+ */
48
+ reconnect: () => void;
42
49
  };
43
50
  /** Start CDP polling + websocket subscriptions for console/exception events. */
44
51
  export declare const startCdpWatcher: (options: CdpWatcherOptions) => CdpWatcherHandle;
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/cdp/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAG/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EAAiB,KAAK,YAAY,EAAoC,MAAM,oBAAoB,CAAA;AACvG,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAG3E,qCAAqC;AACrC,MAAM,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE;QACP,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;QACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KACvB,GAAG,IAAI,CAAA;IACR,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB,CAAA;AAED,yCAAyC;AACzC,MAAM,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,IAAI,CAAA;IAC5C,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAA;IACrC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,CAAA;IACxE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;IACzC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACjF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,aAAa,CAAC,EAAE,oBAAoB,CAAA;IACpC,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IACpC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,UAAU,EAAE,iBAAiB,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,OAAO,EAAE,gBAAgB,CAAA;IACzB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACzB,SAAS,EAAE,MAAM,SAAS,GAAG,IAAI,CAAA;CACjC,CAAA;AAED,gFAAgF;AAChF,eAAO,MAAM,eAAe,GAAI,SAAS,iBAAiB,KAAG,gBA6H5D,CAAA"}
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/cdp/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAG/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EAAiB,KAAK,YAAY,EAAoC,MAAM,oBAAoB,CAAA;AACvG,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAG3E,qCAAqC;AACrC,MAAM,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE;QACP,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;QACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KACvB,GAAG,IAAI,CAAA;IACR,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB,CAAA;AAED,yCAAyC;AACzC,MAAM,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,IAAI,CAAA;IAC5C,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAA;IACrC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,CAAA;IACxE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;IACzC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACjF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,aAAa,CAAC,EAAE,oBAAoB,CAAA;IACpC,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IACpC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,UAAU,EAAE,iBAAiB,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,OAAO,EAAE,gBAAgB,CAAA;IACzB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACzB,SAAS,EAAE,MAAM,SAAS,GAAG,IAAI,CAAA;IACjC;;;;;OAKG;IACH,SAAS,EAAE,MAAM,IAAI,CAAA;CACrB,CAAA;AAED,gFAAgF;AAChF,eAAO,MAAM,eAAe,GAAI,SAAS,iBAAiB,KAAG,gBAqI5D,CAAA"}
@@ -15,6 +15,12 @@ export const startCdpWatcher = (options) => {
15
15
  socket.close();
16
16
  }
17
17
  };
18
+ const reconnect = () => {
19
+ if (stopped) {
20
+ return;
21
+ }
22
+ socket?.close();
23
+ };
18
24
  void runLoop();
19
25
  session.onEvent('Runtime.consoleAPICalled', (params) => {
20
26
  if (!currentTarget) {
@@ -47,6 +53,7 @@ export const startCdpWatcher = (options) => {
47
53
  });
48
54
  return {
49
55
  stop,
56
+ reconnect,
50
57
  session,
51
58
  getTarget: () => (currentTarget ? { ...currentTarget } : null),
52
59
  };
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/cdp/watcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/cdp/watcher.ts"],"names":[],"mappings":"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"}
@@ -15,4 +15,12 @@ export type CdpTarget = {
15
15
  parentId: string | null;
16
16
  };
17
17
  export declare const findTarget: (chrome: WatcherChrome, match?: WatcherMatch) => Promise<CdpTarget>;
18
+ /**
19
+ * List Chrome's debuggable targets.
20
+ *
21
+ * @param chrome DevTools endpoint to query.
22
+ * @param timeoutMs Abort budget for the request. Health probes pass a shorter one.
23
+ * @throws {Error} When the endpoint is unreachable, times out, or answers with a non-2xx status.
24
+ */
25
+ export declare const fetchCdpTargets: (chrome: WatcherChrome, timeoutMs?: number) => Promise<CdpTarget[]>;
18
26
  //# sourceMappingURL=watcherTargets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"watcherTargets.d.ts","sourceRoot":"","sources":["../../src/cdp/watcherTargets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAErE,yDAAyD;AACzD,MAAM,MAAM,SAAS,GAAG;IACvB,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAA;IAEV,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAA;IAEb,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAA;IAEX,oFAAoF;IACpF,oBAAoB,EAAE,MAAM,CAAA;IAE5B,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IAEZ,kGAAkG;IAClG,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,UAAU,GAAU,QAAQ,aAAa,EAAE,QAAQ,YAAY,KAAG,OAAO,CAAC,SAAS,CA6B/F,CAAA"}
1
+ {"version":3,"file":"watcherTargets.d.ts","sourceRoot":"","sources":["../../src/cdp/watcherTargets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAErE,yDAAyD;AACzD,MAAM,MAAM,SAAS,GAAG;IACvB,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAA;IAEV,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAA;IAEb,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAA;IAEX,oFAAoF;IACpF,oBAAoB,EAAE,MAAM,CAAA;IAE5B,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IAEZ,kGAAkG;IAClG,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,UAAU,GAAU,QAAQ,aAAa,EAAE,QAAQ,YAAY,KAAG,OAAO,CAAC,SAAS,CA6B/F,CAAA;AAoDD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAU,QAAQ,aAAa,EAAE,kBAAkC,KAAG,OAAO,CAAC,SAAS,EAAE,CAqBpH,CAAA"}
@@ -1,5 +1,5 @@
1
1
  export const findTarget = async (chrome, match) => {
2
- const targets = await fetchTargets(chrome);
2
+ const targets = await fetchCdpTargets(chrome);
3
3
  if (targets.length === 0) {
4
4
  throw new Error('No CDP targets available');
5
5
  }
@@ -56,8 +56,17 @@ const matchesTarget = (target, match, targetById, urlRegex, titleRegex) => {
56
56
  }
57
57
  return true;
58
58
  };
59
- const fetchTargets = async (chrome) => {
60
- const response = await fetch(`http://${chrome.host}:${chrome.port}/json`);
59
+ /** Default budget for the `/json` round-trip, so a wedged browser cannot stall the connect loop. */
60
+ const TARGET_LIST_TIMEOUT_MS = 5_000;
61
+ /**
62
+ * List Chrome's debuggable targets.
63
+ *
64
+ * @param chrome DevTools endpoint to query.
65
+ * @param timeoutMs Abort budget for the request. Health probes pass a shorter one.
66
+ * @throws {Error} When the endpoint is unreachable, times out, or answers with a non-2xx status.
67
+ */
68
+ export const fetchCdpTargets = async (chrome, timeoutMs = TARGET_LIST_TIMEOUT_MS) => {
69
+ const response = await fetch(`http://${chrome.host}:${chrome.port}/json`, { signal: AbortSignal.timeout(timeoutMs) });
61
70
  if (!response.ok) {
62
71
  throw new Error(`Failed to fetch CDP targets (status ${response.status})`);
63
72
  }