@vforsh/argus-client 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +65 -3
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/client/context.d.ts +31 -0
  4. package/dist/client/context.d.ts.map +1 -0
  5. package/dist/client/context.js +20 -0
  6. package/dist/client/context.js.map +1 -0
  7. package/dist/client/createArgusClient.d.ts +12 -2
  8. package/dist/client/createArgusClient.d.ts.map +1 -1
  9. package/dist/client/createArgusClient.js +26 -165
  10. package/dist/client/createArgusClient.js.map +1 -1
  11. package/dist/client/methods/capture.d.ts +12 -0
  12. package/dist/client/methods/capture.d.ts.map +1 -0
  13. package/dist/client/methods/capture.js +66 -0
  14. package/dist/client/methods/capture.js.map +1 -0
  15. package/dist/client/methods/evalMethods.d.ts +9 -0
  16. package/dist/client/methods/evalMethods.d.ts.map +1 -0
  17. package/dist/client/methods/evalMethods.js +119 -0
  18. package/dist/client/methods/evalMethods.js.map +1 -0
  19. package/dist/client/methods/inspect.d.ts +19 -0
  20. package/dist/client/methods/inspect.d.ts.map +1 -0
  21. package/dist/client/methods/inspect.js +102 -0
  22. package/dist/client/methods/inspect.js.map +1 -0
  23. package/dist/client/methods/page.d.ts +9 -0
  24. package/dist/client/methods/page.d.ts.map +1 -0
  25. package/dist/client/methods/page.js +38 -0
  26. package/dist/client/methods/page.js.map +1 -0
  27. package/dist/client/queryParams.d.ts +2 -0
  28. package/dist/client/queryParams.d.ts.map +1 -1
  29. package/dist/client/queryParams.js +68 -103
  30. package/dist/client/queryParams.js.map +1 -1
  31. package/dist/client/watcherHandle.d.ts +9 -0
  32. package/dist/client/watcherHandle.d.ts.map +1 -0
  33. package/dist/client/watcherHandle.js +29 -0
  34. package/dist/client/watcherHandle.js.map +1 -0
  35. package/dist/client/watcherRequest.d.ts +11 -1
  36. package/dist/client/watcherRequest.d.ts.map +1 -1
  37. package/dist/client/watcherRequest.js +21 -15
  38. package/dist/client/watcherRequest.js.map +1 -1
  39. package/dist/eval/ArgusEvalError.d.ts +30 -0
  40. package/dist/eval/ArgusEvalError.d.ts.map +1 -0
  41. package/dist/eval/ArgusEvalError.js +37 -0
  42. package/dist/eval/ArgusEvalError.js.map +1 -0
  43. package/dist/eval/pollEval.d.ts +81 -0
  44. package/dist/eval/pollEval.d.ts.map +1 -0
  45. package/dist/eval/pollEval.js +65 -0
  46. package/dist/eval/pollEval.js.map +1 -0
  47. package/dist/index.d.ts +4 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +2 -0
  50. package/dist/index.js.map +1 -1
  51. package/dist/types.d.ts +164 -73
  52. package/dist/types.d.ts.map +1 -1
  53. package/package.json +2 -2
  54. package/dist/registry/readAndPruneRegistry.d.ts +0 -11
  55. package/dist/registry/readAndPruneRegistry.d.ts.map +0 -1
  56. package/dist/registry/readAndPruneRegistry.js +0 -14
  57. package/dist/registry/readAndPruneRegistry.js.map +0 -1
  58. package/dist/time/parseDurationMs.d.ts +0 -2
  59. package/dist/time/parseDurationMs.d.ts.map +0 -1
  60. package/dist/time/parseDurationMs.js +0 -18
  61. package/dist/time/parseDurationMs.js.map +0 -1
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Transport-agnostic eval polling loop shared by the CLI (`eval --interval`,
3
+ * `eval-until`) and the SDK (`evalUntil`), so loop semantics stay identical.
4
+ *
5
+ * The loop owns only timing and stop conditions. Everything environment-specific —
6
+ * how an eval is performed, retry policy, signal handling, output — is injected by
7
+ * the caller. In particular this module installs no process listeners: cancellation
8
+ * is an `AbortSignal` so it stays safe to use inside a library.
9
+ */
10
+ /**
11
+ * Poll `runEval` until a stop condition matches, the budget runs out, or the signal aborts.
12
+ *
13
+ * Results are reported to `onResult` before stop conditions are checked, so streaming
14
+ * callers print the matching iteration too.
15
+ */
16
+ export const pollEval = async (input) => {
17
+ const startTime = Date.now();
18
+ let iteration = 0;
19
+ while (!input.signal?.aborted) {
20
+ if (input.totalTimeoutMs != null) {
21
+ const elapsedMs = Date.now() - startTime;
22
+ if (elapsedMs >= input.totalTimeoutMs) {
23
+ return { kind: 'timeout', elapsedMs };
24
+ }
25
+ }
26
+ iteration += 1;
27
+ const result = await input.runEval(iteration);
28
+ if (!result.ok) {
29
+ return { kind: 'eval-error', failure: result.failure };
30
+ }
31
+ const context = { response: result.response, iteration, attempt: result.attempt };
32
+ // Streaming callers print the matched iteration too, so emit before checking stop conditions.
33
+ await input.onResult?.(result.response, context);
34
+ const decision = input.shouldStop?.(context);
35
+ if (decision) {
36
+ if (!decision.ok) {
37
+ return { kind: 'condition-error', error: decision.error };
38
+ }
39
+ if (decision.matched) {
40
+ return { kind: 'matched', response: result.response, iteration, attempt: result.attempt };
41
+ }
42
+ }
43
+ if (input.count != null && iteration >= input.count) {
44
+ return { kind: 'exhausted', iterations: iteration };
45
+ }
46
+ await sleep(input.intervalMs, input.signal);
47
+ }
48
+ return { kind: 'interrupted' };
49
+ };
50
+ /** Resolve after `durationMs`, or immediately once `signal` aborts. */
51
+ const sleep = async (durationMs, signal) => {
52
+ if (signal?.aborted) {
53
+ return;
54
+ }
55
+ await new Promise((resolve) => {
56
+ const finish = () => {
57
+ clearTimeout(timer);
58
+ signal?.removeEventListener('abort', finish);
59
+ resolve();
60
+ };
61
+ const timer = setTimeout(finish, durationMs);
62
+ signal?.addEventListener('abort', finish, { once: true });
63
+ });
64
+ };
65
+ //# sourceMappingURL=pollEval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pollEval.js","sourceRoot":"","sources":["../../src/eval/pollEval.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA8CH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAuB,KAAyC,EAAiD,EAAE;IAC/I,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;YACxC,IAAI,SAAS,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA;YACtC,CAAC;QACF,CAAC;QAED,SAAS,IAAI,CAAC,CAAA;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC7C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAA;QACvD,CAAC;QAED,MAAM,OAAO,GAA+B,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAA;QAC7G,8FAA8F;QAC9F,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAEhD,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAA;QAC5C,IAAI,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAClB,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAA;YAC1D,CAAC;YACD,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAA;YAC1F,CAAC;QACF,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACrD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAA;QACpD,CAAC;QAED,MAAM,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAC5C,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;AAC/B,CAAC,CAAA;AAED,uEAAuE;AACvE,MAAM,KAAK,GAAG,KAAK,EAAE,UAAkB,EAAE,MAAoB,EAAiB,EAAE;IAC/E,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACrB,OAAM;IACP,CAAC;IAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,GAAS,EAAE;YACzB,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YAC5C,OAAO,EAAE,CAAA;QACV,CAAC,CAAA;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QAC5C,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;AACH,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,8 @@
1
- export type { ArgusClient, ArgusClientOptions, EvalOptions, EvalResult, ListOptions, ListResult, LogsMode, LogsOptions, LogsResult, LogCursorResult, LogEpochResult, NetOptions, NetResult, ScreenshotOptions, ScreenshotResult, TraceStartOptions, TraceStartResult, TraceStopOptions, TraceStopResult, } from './types.js';
1
+ export type { ArgusClient, ArgusClientOptions, DomClickOptions, DomClickResult, EvalOptions, EvalResult, EvalUntilOptions, EvalUntilResult, EvalValueOptions, ListOptions, ListResult, LogsMode, LogsOptions, LogsResult, LogCursorResult, LogEpochResult, NetClearResult, NetOptions, NetResult, RecordCaptureOptions, RecordOptions, RecordStartResult, RecordStopOptions, RecordStopResult, ReloadOptions, ScreenshotOptions, ScreenshotResult, TraceStartOptions, TraceStartResult, TraceStopOptions, TraceStopResult, VisibilityOptions, VisibilityResult, WatcherClient, } from './types.js';
2
2
  export { createArgusClient } from './client/createArgusClient.js';
3
+ export { ArgusEvalError } from './eval/ArgusEvalError.js';
4
+ export { pollEval } from './eval/pollEval.js';
5
+ export type { EvalPollAttempt, EvalPollContext, EvalPollInput, EvalPollOutcome, EvalPollStopDecision } from './eval/pollEval.js';
3
6
  export type { LogEpoch } from '@vforsh/argus-core';
4
7
  export type { NetworkRequestDetail } from '@vforsh/argus-core';
5
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,cAAc,EACd,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,GACb,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAChI,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA"}
package/dist/index.js CHANGED
@@ -1,2 +1,4 @@
1
1
  export { createArgusClient } from './client/createArgusClient.js';
2
+ export { ArgusEvalError } from './eval/ArgusEvalError.js';
3
+ export { pollEval } from './eval/pollEval.js';
2
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { LogEvent, LogEpoch, LogLevel, NetworkRequestDetail, NetworkRequestSummary, ScreenshotClipRegion, StatusResponse, WatcherRecord } from '@vforsh/argus-core';
1
+ import type { DomClickRequest, DomClickResponse, EvalRequest, EvalResponse, LogEvent, LogEpoch, LogLevel, NetClearResponse, NetQuery, NetResponse, NetworkRequestDetail, RecordRequest, RecordStartRequest, RecordStartResponse, RecordStopRequest, RecordStopResponse, ReloadRequest, ResponseData, ScreenshotRequest, ScreenshotResponse, StatusResponse, TraceStartRequest, TraceStartResponse, TraceStopRequest, TraceStopResponse, VisibilityRequest, VisibilityResponse, WatcherRecord } from '@vforsh/argus-core';
2
2
  /** Options for configuring the Argus client. */
3
3
  export type ArgusClientOptions = {
4
4
  /** Override registry path instead of using `ARGUS_REGISTRY_PATH` / default. */
@@ -23,6 +23,13 @@ export type ListResult = {
23
23
  status?: StatusResponse;
24
24
  /** Error message when unreachable. */
25
25
  error?: string;
26
+ /**
27
+ * Set when the watcher answered but speaks an incompatible protocol version.
28
+ *
29
+ * The watcher is still reachable and `status` is still populated, but commands issued
30
+ * against it may fail in ways this SDK cannot interpret.
31
+ */
32
+ protocolMismatch?: string;
26
33
  };
27
34
  /** Controls how log event args are returned. */
28
35
  export type LogsMode = 'preview' | 'full';
@@ -62,92 +69,116 @@ export type LogEpochResult = {
62
69
  epoch: LogEpoch;
63
70
  };
64
71
  /** Options for fetching network request summaries. */
65
- export type NetOptions = {
66
- after?: number;
67
- limit?: number;
72
+ export type NetOptions = Omit<NetQuery, 'sinceTs' | 'timeoutMs'> & {
68
73
  /**
69
74
  * Filter by time window.
70
75
  * - If string: parsed like CLI (e.g. "10m", "2h")
71
76
  * - If number: treated as durationMs
77
+ *
78
+ * Sugar over the wire's absolute `sinceTs`.
72
79
  */
73
80
  since?: string | number;
74
- /** Substring match over redacted URLs. */
75
- grep?: string;
76
- /** Ignore requests by host name (exact host or subdomain match). */
77
- ignoreHost?: string[];
78
- /** Ignore requests whose URL contains one of these substrings. */
79
- ignorePattern?: string[];
80
81
  };
81
82
  /** Network request summary results with pagination cursor. */
82
- export type NetResult = {
83
- requests: NetworkRequestSummary[];
84
- nextAfter: number;
85
- };
86
- /** Options for evaluating a JS expression in the connected page. */
87
- export type EvalOptions = {
88
- /** JS expression to execute. */
89
- expression: string;
90
- /** String-only values exposed to the expression as `args`. */
91
- args?: Record<string, string>;
92
- /** Await promises before returning. Defaults to true. */
93
- awaitPromise?: boolean;
94
- /**
95
- * Enable Chrome's REPL mode for console-style evaluation.
96
- * Defaults to true and allows native top-level `await`.
97
- */
98
- replMode?: boolean;
99
- /** Command timeout in milliseconds. */
100
- timeoutMs?: number;
101
- /** Return by value when possible. Defaults to true. */
102
- returnByValue?: boolean;
103
- /** Install the temporary host bridge expected by bundled Argus scenario code. */
104
- scenario?: boolean;
105
- };
83
+ export type NetResult = ResponseData<NetResponse>;
84
+ /**
85
+ * Options for evaluating a JS expression in the connected page.
86
+ *
87
+ * This *is* the POST /eval body it is sent verbatim — so it aliases the protocol
88
+ * request type rather than restating it.
89
+ */
90
+ export type EvalOptions = EvalRequest;
106
91
  /** Result of a remote evaluation. */
107
- export type EvalResult = {
108
- result: unknown;
109
- type: string | null;
110
- exception: {
111
- text: string;
112
- details?: unknown;
113
- } | null;
114
- };
92
+ export type EvalResult = ResponseData<EvalResponse>;
115
93
  /** Options for starting a Chrome trace. */
116
- export type TraceStartOptions = {
117
- outFile?: string;
118
- categories?: string;
119
- options?: string;
120
- };
94
+ export type TraceStartOptions = TraceStartRequest;
121
95
  /** Trace start result metadata. */
122
- export type TraceStartResult = {
123
- traceId: string;
124
- sessionName: string;
125
- outFile: string;
126
- };
96
+ export type TraceStartResult = ResponseData<TraceStartResponse>;
127
97
  /** Options for stopping an active trace. */
128
- export type TraceStopOptions = {
129
- traceId?: string;
130
- outFile?: string;
131
- };
98
+ export type TraceStopOptions = TraceStopRequest;
132
99
  /** Trace stop result metadata. */
133
- export type TraceStopResult = {
134
- sessionName: string;
135
- outFile: string;
136
- eventCount: number;
137
- durationMs: number;
138
- };
100
+ export type TraceStopResult = ResponseData<TraceStopResponse>;
139
101
  /** Options for capturing a screenshot. */
140
- export type ScreenshotOptions = {
141
- outFile?: string;
142
- selector?: string;
143
- /** Viewport-relative crop rectangle in CSS pixels. Mutually exclusive with `selector`. */
144
- clip?: ScreenshotClipRegion;
145
- format?: 'png';
146
- };
102
+ export type ScreenshotOptions = ScreenshotRequest;
147
103
  /** Screenshot result metadata. */
148
- export type ScreenshotResult = {
149
- outFile: string;
150
- clipped: boolean;
104
+ export type ScreenshotResult = ResponseData<ScreenshotResponse>;
105
+ /** Options for clicking in the connected page. Mirrors CLI `argus click` semantics. */
106
+ export type DomClickOptions = DomClickRequest;
107
+ /** Result of a click, reporting selector matches separately from actual clicks. */
108
+ export type DomClickResult = ResponseData<DomClickResponse>;
109
+ /** Result of clearing the watcher's buffered network log. */
110
+ export type NetClearResult = ResponseData<NetClearResponse>;
111
+ /** Options for the page visibility lock. */
112
+ export type VisibilityOptions = VisibilityRequest;
113
+ /**
114
+ * Visibility lock result. The desired lock is sticky across detach/reattach:
115
+ * the watcher remembers it and re-applies on the next attach when `attached` is false.
116
+ */
117
+ export type VisibilityResult = ResponseData<VisibilityResponse>;
118
+ /** Options for reloading the connected page. */
119
+ export type ReloadOptions = ReloadRequest;
120
+ /** Shared options for video recording requests. */
121
+ export type RecordOptions = RecordStartRequest;
122
+ /** Options for a fixed-duration one-shot recording. */
123
+ export type RecordCaptureOptions = RecordRequest;
124
+ /** Metadata returned when a recording starts. */
125
+ export type RecordStartResult = ResponseData<RecordStartResponse>;
126
+ /** Metadata returned when a recording is finalized. */
127
+ export type RecordStopResult = ResponseData<RecordStopResponse>;
128
+ /** Options for stopping an active recording. */
129
+ export type RecordStopOptions = RecordStopRequest;
130
+ /**
131
+ * Options for {@link ArgusClient.evalValue}.
132
+ *
133
+ * Omits `returnByValue` (always true) and adds {@link EvalValueOptions.jsonValue}.
134
+ */
135
+ export type EvalValueOptions = Omit<EvalOptions, 'expression' | 'returnByValue' | 'jsonValue'> & {
136
+ /**
137
+ * Have the page serialize the result, so the JSON string — not a structured object —
138
+ * crosses the transport. Defaults to true.
139
+ *
140
+ * This exists because transports disagree about raw `returnByValue` results: the
141
+ * extension relay (Chrome's `chrome.debugger` serialization) returns object keys
142
+ * sorted alphabetically at every nesting level, while a direct CDP watcher preserves
143
+ * insertion order. Values are identical either way, but structural comparisons of the
144
+ * same page state produce different bytes per transport — which silently breaks
145
+ * snapshot assertions in verification runners. Serializing in the page normalizes both
146
+ * to insertion order, and makes `Date` round-trip as an ISO string (via `toJSON`)
147
+ * instead of `{}`.
148
+ *
149
+ * Evaluation semantics are unaffected: statement lists, top-level `await`, REPL-mode
150
+ * redeclaration, and promise unwrapping behave the same either way.
151
+ *
152
+ * Set to false for the raw transport-native value — one less serialization round-trip
153
+ * for large payloads you never compare structurally, at the cost of transport-dependent
154
+ * key order.
155
+ */
156
+ jsonValue?: boolean;
157
+ };
158
+ /** Options for {@link ArgusClient.evalUntil}. */
159
+ export type EvalUntilOptions = EvalValueOptions & {
160
+ /** Delay between polls in milliseconds. Defaults to 250. */
161
+ intervalMs?: number;
162
+ /** Give up after this much wall-clock time. Defaults to 30000. */
163
+ totalTimeoutMs?: number;
164
+ /** Give up after this many polls. Unlimited when omitted. */
165
+ count?: number;
166
+ /**
167
+ * Stop condition evaluated against each poll's value.
168
+ * Defaults to a truthiness check on the returned value.
169
+ */
170
+ predicate?: (value: unknown, iteration: number) => boolean;
171
+ /** Abort the poll loop early. The returned promise rejects when aborted. */
172
+ signal?: AbortSignal;
173
+ };
174
+ /** Result of a successful {@link ArgusClient.evalUntil} poll. */
175
+ export type EvalUntilResult = {
176
+ /** The value that satisfied the predicate. */
177
+ value: unknown;
178
+ /** 1-based poll iteration that matched. */
179
+ iteration: number;
180
+ /** Wall-clock milliseconds spent polling. */
181
+ elapsedMs: number;
151
182
  };
152
183
  /** Argus client API. */
153
184
  export type ArgusClient = {
@@ -163,13 +194,73 @@ export type ArgusClient = {
163
194
  net: (watcherId: string, options?: NetOptions) => Promise<NetResult>;
164
195
  /** Fetch the detailed record for one buffered network request. */
165
196
  netRequest: (watcherId: string, request: number | string) => Promise<NetworkRequestDetail>;
166
- /** Evaluate a JS expression in the connected page. */
197
+ /** Clear the watcher's buffered network log. */
198
+ netClear: (watcherId: string) => Promise<NetClearResult>;
199
+ /**
200
+ * Evaluate a JS expression in the connected page and return the raw envelope.
201
+ * Page-side exceptions are reported in `exception`, not thrown.
202
+ */
167
203
  eval: (watcherId: string, options: EvalOptions) => Promise<EvalResult>;
204
+ /**
205
+ * Evaluate a JS expression and return its value directly.
206
+ *
207
+ * Unlike {@link ArgusClient.eval}, a page-side exception rejects with an `Error`
208
+ * carrying `exception.text` as its message. Results are normalized across transports
209
+ * by default — see {@link EvalValueOptions.jsonValue}.
210
+ *
211
+ * @throws {Error} When the expression throws in the page.
212
+ */
213
+ evalValue: <T = unknown>(watcherId: string, expression: string, options?: EvalValueOptions) => Promise<T>;
214
+ /**
215
+ * Poll an expression until it satisfies a predicate (truthy by default).
216
+ *
217
+ * @throws {Error} On page-side exceptions, total-timeout expiry, poll-count
218
+ * exhaustion, or abort via {@link EvalUntilOptions.signal}.
219
+ */
220
+ evalUntil: (watcherId: string, expression: string, options?: EvalUntilOptions) => Promise<EvalUntilResult>;
221
+ /** Click in the connected page by selector, element ref, or viewport coordinates. */
222
+ domClick: (watcherId: string, options: DomClickOptions) => Promise<DomClickResult>;
223
+ /** Lock the page shown+focused, or release the lock. */
224
+ visibility: (watcherId: string, options: VisibilityOptions) => Promise<VisibilityResult>;
225
+ /** Reload the connected page. Page-scoped even when the active target is an iframe. */
226
+ reload: (watcherId: string, options?: ReloadOptions) => Promise<void>;
168
227
  /** Start Chrome tracing and write to disk on the watcher. */
169
228
  traceStart: (watcherId: string, options?: TraceStartOptions) => Promise<TraceStartResult>;
170
229
  /** Stop an active Chrome trace and finalize the file. */
171
230
  traceStop: (watcherId: string, options?: TraceStopOptions) => Promise<TraceStopResult>;
172
231
  /** Capture a screenshot and write to disk on the watcher. */
173
232
  screenshot: (watcherId: string, options?: ScreenshotOptions) => Promise<ScreenshotResult>;
233
+ /** Capture a fixed-duration silent video and write it to disk on the watcher. */
234
+ record: (watcherId: string, options: RecordCaptureOptions) => Promise<RecordStopResult>;
235
+ /** Begin an open-ended silent video recording. Finalize with `recordStop`. */
236
+ recordStart: (watcherId: string, options?: RecordOptions) => Promise<RecordStartResult>;
237
+ /** Stop the active recording and finalize the file. */
238
+ recordStop: (watcherId: string, options?: RecordStopOptions) => Promise<RecordStopResult>;
239
+ /** Bind every watcher-scoped method to `watcherId`, removing id-threading at call sites. */
240
+ watcher: (watcherId: string) => WatcherClient;
241
+ };
242
+ /**
243
+ * Watcher-scoped subset of {@link ArgusClient}: everything that takes a watcher id first.
244
+ * `evalValue` is excluded because a mapped type erases its generic type parameter;
245
+ * {@link WatcherClient} redeclares it explicitly.
246
+ */
247
+ type WatcherScopedApi = Omit<ArgusClient, 'list' | 'watcher' | 'evalValue'>;
248
+ /**
249
+ * The same API as {@link ArgusClient} with `watcherId` pre-bound.
250
+ *
251
+ * @example
252
+ * const page = client.watcher('playground')
253
+ * const count = await page.evalValue<number>('document.querySelectorAll("li").length')
254
+ */
255
+ export type WatcherClient = {
256
+ [K in keyof WatcherScopedApi]: WatcherScopedApi[K] extends (watcherId: string, ...rest: infer A) => infer R ? (...args: A) => R : never;
257
+ } & {
258
+ /**
259
+ * Evaluate a JS expression and return its value directly.
260
+ *
261
+ * @throws {Error} When the expression throws in the page.
262
+ */
263
+ evalValue: <T = unknown>(expression: string, options?: EvalValueOptions) => Promise<T>;
174
264
  };
265
+ export {};
175
266
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vforsh/argus-client",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/vforsh/argus.git",
@@ -22,7 +22,7 @@
22
22
  "access": "public"
23
23
  },
24
24
  "dependencies": {
25
- "@vforsh/argus-core": "^0.2.0"
25
+ "@vforsh/argus-core": "^0.4.0"
26
26
  },
27
27
  "scripts": {
28
28
  "clean": "node ../../scripts/clean-dist.mjs",
@@ -1,11 +0,0 @@
1
- import type { RegistryV1 } from '@vforsh/argus-core';
2
- type RegistryOptions = {
3
- registryPath?: string;
4
- ttlMs?: number;
5
- };
6
- /** Read + prune stale entries atomically (locked read-modify-write). */
7
- export declare const readAndPruneRegistry: (options?: RegistryOptions) => Promise<RegistryV1>;
8
- /** Remove a watcher entry atomically (locked read-modify-write). */
9
- export declare const removeWatcherAndPersist: (id: string, registryPath?: string) => Promise<RegistryV1>;
10
- export {};
11
- //# sourceMappingURL=readAndPruneRegistry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"readAndPruneRegistry.d.ts","sourceRoot":"","sources":["../../src/registry/readAndPruneRegistry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD,KAAK,eAAe,GAAG;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,GAAU,UAAS,eAAoB,KAAG,OAAO,CAAC,UAAU,CAM5F,CAAA;AAED,oEAAoE;AACpE,eAAO,MAAM,uBAAuB,GAAU,IAAI,MAAM,EAAE,eAAe,MAAM,KAAG,OAAO,CAAC,UAAU,CAEnG,CAAA"}
@@ -1,14 +0,0 @@
1
- import { DEFAULT_TTL_MS, pruneStaleWatchers, removeWatcherEntry, updateRegistry } from '@vforsh/argus-core';
2
- /** Read + prune stale entries atomically (locked read-modify-write). */
3
- export const readAndPruneRegistry = async (options = {}) => {
4
- const ttlMs = options.ttlMs ?? DEFAULT_TTL_MS;
5
- return updateRegistry((registry) => {
6
- const { registry: pruned } = pruneStaleWatchers(registry, Date.now(), ttlMs);
7
- return pruned;
8
- }, options.registryPath);
9
- };
10
- /** Remove a watcher entry atomically (locked read-modify-write). */
11
- export const removeWatcherAndPersist = async (id, registryPath) => {
12
- return updateRegistry((registry) => removeWatcherEntry(registry, id), registryPath);
13
- };
14
- //# sourceMappingURL=readAndPruneRegistry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"readAndPruneRegistry.js","sourceRoot":"","sources":["../../src/registry/readAndPruneRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAQ3G,wEAAwE;AACxE,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,UAA2B,EAAE,EAAuB,EAAE;IAChG,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,cAAc,CAAA;IAC7C,OAAO,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE;QAClC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAA;QAC5E,OAAO,MAAM,CAAA;IACd,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,oEAAoE;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAAE,EAAU,EAAE,YAAqB,EAAuB,EAAE;IACvG,OAAO,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,YAAY,CAAC,CAAA;AACpF,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export declare const parseDurationMs: (value: string) => number | null;
2
- //# sourceMappingURL=parseDurationMs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseDurationMs.d.ts","sourceRoot":"","sources":["../../src/time/parseDurationMs.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,IAoBxD,CAAA"}
@@ -1,18 +0,0 @@
1
- export const parseDurationMs = (value) => {
2
- const trimmed = value.trim();
3
- if (!trimmed) {
4
- return null;
5
- }
6
- const match = trimmed.match(/^([0-9]+(?:\.[0-9]+)?)(ms|s|m|h|d)?$/);
7
- if (!match) {
8
- return null;
9
- }
10
- const amount = Number(match[1]);
11
- if (!Number.isFinite(amount)) {
12
- return null;
13
- }
14
- const unit = match[2] ?? 's';
15
- const multiplier = unit === 'ms' ? 1 : unit === 's' ? 1_000 : unit === 'm' ? 60_000 : unit === 'h' ? 3_600_000 : 86_400_000;
16
- return amount * multiplier;
17
- };
18
- //# sourceMappingURL=parseDurationMs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseDurationMs.js","sourceRoot":"","sources":["../../src/time/parseDurationMs.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAa,EAAiB,EAAE;IAC/D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACnE,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAA;IAC5B,MAAM,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IAE3H,OAAO,MAAM,GAAG,UAAU,CAAA;AAC3B,CAAC,CAAA"}