@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 @@
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/client/methods/page.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,gEAAgE;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAkB,EAAE,EAAE,CAAC,CAAC;IACzD,QAAQ,EAAE,KAAK,EAAE,SAAiB,EAAE,OAAwB,EAA2B,EAAE;QACxF,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC,IAAI,IAAI,CAAA;QACxG,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;QAClE,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,cAAc,CAAmB,GAAG,EAAE,SAAS,EAAE;YACvE,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,GAAG,CAAC,gBAAgB;YAC/B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,OAAO;SACb,CAAC,CAAA;QAEF,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAA;IACxD,CAAC;IAED,UAAU,EAAE,KAAK,EAAE,SAAiB,EAAE,OAA0B,EAA6B,EAAE;QAC9F,IAAI,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,OAAO,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACnD,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,cAAc,CAAqB,GAAG,EAAE,SAAS,EAAE;YACzE,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE,GAAG,CAAC,gBAAgB;YAC/B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,OAAO;SACb,CAAC,CAAA;QAEF,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAA;IACtD,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,SAAiB,EAAE,UAAyB,EAAE,EAAiB,EAAE;QAC/E,MAAM,cAAc,CAAiB,GAAG,EAAE,SAAS,EAAE;YACpD,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,GAAG,CAAC,gBAAgB;YAC/B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK,EAAE;SACnD,CAAC,CAAA;IACH,CAAC;CACD,CAAC,CAAA"}
@@ -1,4 +1,6 @@
1
1
  import type { LogsOptions, NetOptions } from '../types.js';
2
+ /** Build the query string for the log listing and tail routes. */
2
3
  export declare const buildLogsParams: (options: LogsOptions) => URLSearchParams;
4
+ /** Build the query string for the network listing and tail routes. */
3
5
  export declare const buildNetParams: (options: NetOptions) => URLSearchParams;
4
6
  //# sourceMappingURL=queryParams.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryParams.d.ts","sourceRoot":"","sources":["../../src/client/queryParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAG1D,eAAO,MAAM,eAAe,GAAI,SAAS,WAAW,KAAG,eA+CtD,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,SAAS,UAAU,KAAG,eA0BpD,CAAA"}
1
+ {"version":3,"file":"queryParams.d.ts","sourceRoot":"","sources":["../../src/client/queryParams.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE1D,kEAAkE;AAClE,eAAO,MAAM,eAAe,GAAI,SAAS,WAAW,KAAG,eAiBtD,CAAA;AAED,sEAAsE;AACtE,eAAO,MAAM,cAAc,GAAI,SAAS,UAAU,KAAG,eA0BpD,CAAA"}
@@ -1,142 +1,107 @@
1
- import { parseDurationMs } from '../time/parseDurationMs.js';
1
+ import { NET_PARTIES, NET_SCOPES, normalizeMatchPatterns, parseDurationMs, toSearchParams } from '@vforsh/argus-core';
2
+ /** Build the query string for the log listing and tail routes. */
2
3
  export const buildLogsParams = (options) => {
3
- const params = new URLSearchParams();
4
- const after = normalizeQueryValue(options.after);
5
- if (after != null) {
6
- params.set('after', after);
7
- }
8
- if (after != null && options.sinceEpoch != null) {
4
+ if (options.after != null && options.sinceEpoch != null) {
9
5
  throw new Error('Use either after or sinceEpoch, not both');
10
6
  }
11
- const sinceEpoch = normalizeQueryValue(options.sinceEpoch);
12
- if (sinceEpoch) {
13
- params.set('sinceEpoch', sinceEpoch);
14
- }
15
- const limit = normalizeNonNegativeNumber('limit', options.limit);
16
- if (limit != null) {
17
- params.set('limit', String(limit));
18
- }
19
- const levels = normalizeLevels(options.levels);
20
- if (levels) {
21
- params.set('levels', levels);
22
- }
23
- const match = normalizeMatch(options.match);
24
- if (match) {
25
- for (const pattern of match) {
26
- params.append('match', pattern);
27
- }
28
- }
29
- const matchCase = normalizeMatchCase(options.matchCase);
30
- if (matchCase) {
31
- params.set('matchCase', matchCase);
32
- }
33
- const source = normalizeQueryValue(options.source);
34
- if (source) {
35
- params.set('source', source);
36
- }
37
- const sinceTs = resolveSinceTs(options.since);
38
- if (sinceTs != null) {
39
- params.set('sinceTs', String(sinceTs));
40
- }
41
- return params;
7
+ const query = {
8
+ after: options.after,
9
+ sinceEpoch: options.sinceEpoch,
10
+ limit: requireNonNegative('limit', options.limit),
11
+ levels: normalizeLevels(options.levels),
12
+ match: requireMatchPatterns(options.match),
13
+ matchCase: requireMatchCase(options.matchCase),
14
+ source: options.source,
15
+ sinceTs: resolveSinceTs(options.since),
16
+ };
17
+ return toSearchParams(query);
42
18
  };
19
+ /** Build the query string for the network listing and tail routes. */
43
20
  export const buildNetParams = (options) => {
44
- const params = new URLSearchParams();
45
- const after = normalizeNonNegativeNumber('after', options.after);
46
- if (after != null) {
47
- params.set('after', String(after));
48
- }
49
- const limit = normalizeNonNegativeNumber('limit', options.limit);
50
- if (limit != null) {
51
- params.set('limit', String(limit));
52
- }
53
- const sinceTs = resolveSinceTs(options.since);
54
- if (sinceTs != null) {
55
- params.set('sinceTs', String(sinceTs));
56
- }
57
- const grep = normalizeQueryValue(options.grep);
58
- if (grep) {
59
- params.set('grep', grep);
60
- }
61
- appendRepeatedQueryValues(params, 'ignoreHost', options.ignoreHost);
62
- appendRepeatedQueryValues(params, 'ignorePattern', options.ignorePattern);
63
- return params;
21
+ if (options.scope != null && options.frame != null) {
22
+ throw new Error('Cannot combine scope and frame filters. Use one or the other.');
23
+ }
24
+ const query = {
25
+ after: requireNonNegative('after', options.after),
26
+ limit: requireNonNegative('limit', options.limit),
27
+ sinceTs: resolveSinceTs(options.since),
28
+ grep: options.grep,
29
+ host: requireNonEmptyValues('host', options.host),
30
+ method: requireNonEmptyValues('method', options.method),
31
+ status: requireNonEmptyValues('status', options.status),
32
+ resourceType: requireNonEmptyValues('resourceType', options.resourceType),
33
+ mime: requireNonEmptyValues('mime', options.mime),
34
+ scope: requireChoice('scope', options.scope, NET_SCOPES),
35
+ frame: options.frame,
36
+ party: requireChoice('party', options.party, NET_PARTIES),
37
+ failedOnly: options.failedOnly,
38
+ minDurationMs: requireNonNegative('minDurationMs', options.minDurationMs),
39
+ minTransferBytes: requireNonNegative('minTransferBytes', options.minTransferBytes),
40
+ ignoreHost: requireNonEmptyValues('ignoreHost', options.ignoreHost),
41
+ ignorePattern: requireNonEmptyValues('ignorePattern', options.ignorePattern),
42
+ };
43
+ return toSearchParams(query);
64
44
  };
65
45
  const normalizeLevels = (levels) => {
66
46
  if (levels == null) {
67
47
  return undefined;
68
48
  }
69
- if (Array.isArray(levels)) {
70
- const normalized = levels.map((level) => level.trim()).filter(Boolean);
71
- if (normalized.length === 0) {
72
- return undefined;
73
- }
74
- return normalized.join(',');
49
+ if (!Array.isArray(levels)) {
50
+ return levels;
75
51
  }
76
- const trimmed = levels.trim();
77
- return trimmed ? trimmed : undefined;
52
+ const normalized = levels.map((level) => level.trim()).filter(Boolean);
53
+ return normalized.length > 0 ? normalized.join(',') : undefined;
78
54
  };
79
- const normalizeMatch = (match) => {
55
+ const requireMatchPatterns = (match) => {
80
56
  if (match == null) {
81
57
  return undefined;
82
58
  }
83
- const values = Array.isArray(match) ? match : [match];
84
- const normalized = values.map((value) => value.trim());
85
- if (normalized.some((value) => value.length === 0)) {
86
- throw new Error('Invalid match value: empty pattern.');
59
+ const result = normalizeMatchPatterns(Array.isArray(match) ? match : [match]);
60
+ if (result.error) {
61
+ throw new Error(result.error);
87
62
  }
88
- return normalized;
89
- };
90
- const normalizeMatchCase = (matchCase) => {
91
- if (matchCase == null) {
92
- return undefined;
93
- }
94
- if (matchCase !== 'sensitive' && matchCase !== 'insensitive') {
95
- throw new Error(`Invalid matchCase value: ${matchCase}`);
96
- }
97
- return matchCase;
63
+ return result.patterns;
98
64
  };
65
+ const requireMatchCase = (matchCase) => requireChoice('matchCase', matchCase, ['sensitive', 'insensitive']);
99
66
  const resolveSinceTs = (value) => {
100
67
  if (value == null) {
101
68
  return undefined;
102
69
  }
103
- const durationMs = typeof value === 'number' ? normalizeNonNegativeNumber('since', value) : parseDurationOrThrow(value);
104
- if (durationMs == null) {
105
- return undefined;
70
+ const durationMs = typeof value === 'number' ? requireNonNegative('since', value) : parseDurationOrThrow(value);
71
+ return durationMs == null ? undefined : Date.now() - durationMs;
72
+ };
73
+ const parseDurationOrThrow = (value) => {
74
+ const duration = parseDurationMs(value);
75
+ if (duration == null) {
76
+ throw new Error(`Invalid since value: ${value}`);
106
77
  }
107
- return Date.now() - durationMs;
78
+ return duration;
108
79
  };
109
- const normalizeQueryValue = (value) => {
80
+ const requireNonNegative = (label, value) => {
110
81
  if (value == null) {
111
82
  return undefined;
112
83
  }
113
- const trimmed = value.trim();
114
- return trimmed ? trimmed : undefined;
84
+ if (!Number.isFinite(value) || value < 0) {
85
+ throw new Error(`Invalid ${label} value: ${value}`);
86
+ }
87
+ return value;
115
88
  };
116
- const appendRepeatedQueryValues = (params, key, values) => {
89
+ const requireNonEmptyValues = (label, values) => {
117
90
  if (!values || values.length === 0) {
118
- return;
91
+ return undefined;
119
92
  }
120
93
  for (const value of values) {
121
- const normalized = normalizeQueryValue(value);
122
- if (!normalized) {
123
- throw new Error(`Invalid ${key} value: ${value}`);
94
+ if (!value.trim()) {
95
+ throw new Error(`Invalid ${label} value: ${value}`);
124
96
  }
125
- params.append(key, normalized);
126
97
  }
98
+ return values;
127
99
  };
128
- const parseDurationOrThrow = (value) => {
129
- const duration = parseDurationMs(value);
130
- if (duration == null) {
131
- throw new Error(`Invalid since value: ${value}`);
132
- }
133
- return duration;
134
- };
135
- const normalizeNonNegativeNumber = (label, value) => {
100
+ const requireChoice = (label, value, allowed) => {
136
101
  if (value == null) {
137
102
  return undefined;
138
103
  }
139
- if (!Number.isFinite(value) || value < 0) {
104
+ if (!allowed.includes(value)) {
140
105
  throw new Error(`Invalid ${label} value: ${value}`);
141
106
  }
142
107
  return value;
@@ -1 +1 @@
1
- {"version":3,"file":"queryParams.js","sourceRoot":"","sources":["../../src/client/queryParams.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryParams.js","sourceRoot":"","sources":["../../src/client/queryParams.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ArgusClient, WatcherClient } from '../types.js';
2
+ /**
3
+ * Build a {@link WatcherClient}: the same API with `watcherId` pre-bound.
4
+ *
5
+ * `evalValue` is bound by hand rather than through {@link bind} so its generic
6
+ * type parameter survives.
7
+ */
8
+ export declare const createWatcherClient: (client: ArgusClient, watcherId: string) => WatcherClient;
9
+ //# sourceMappingURL=watcherHandle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcherHandle.d.ts","sourceRoot":"","sources":["../../src/client/watcherHandle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAoB,aAAa,EAAE,MAAM,aAAa,CAAA;AAQ/E;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,WAAW,EAAE,WAAW,MAAM,KAAG,aAmB3E,CAAA"}
@@ -0,0 +1,29 @@
1
+ /** Pre-apply `watcherId` as the first argument of a watcher-scoped method. */
2
+ const bind = (method, watcherId) => (...args) => method(watcherId, ...args);
3
+ /**
4
+ * Build a {@link WatcherClient}: the same API with `watcherId` pre-bound.
5
+ *
6
+ * `evalValue` is bound by hand rather than through {@link bind} so its generic
7
+ * type parameter survives.
8
+ */
9
+ export const createWatcherClient = (client, watcherId) => ({
10
+ logs: bind(client.logs, watcherId),
11
+ logCursor: bind(client.logCursor, watcherId),
12
+ beginLogEpoch: bind(client.beginLogEpoch, watcherId),
13
+ net: bind(client.net, watcherId),
14
+ netRequest: bind(client.netRequest, watcherId),
15
+ netClear: bind(client.netClear, watcherId),
16
+ eval: bind(client.eval, watcherId),
17
+ evalValue: (expression, options) => client.evalValue(watcherId, expression, options),
18
+ evalUntil: bind(client.evalUntil, watcherId),
19
+ domClick: bind(client.domClick, watcherId),
20
+ visibility: bind(client.visibility, watcherId),
21
+ reload: bind(client.reload, watcherId),
22
+ traceStart: bind(client.traceStart, watcherId),
23
+ traceStop: bind(client.traceStop, watcherId),
24
+ screenshot: bind(client.screenshot, watcherId),
25
+ record: bind(client.record, watcherId),
26
+ recordStart: bind(client.recordStart, watcherId),
27
+ recordStop: bind(client.recordStop, watcherId),
28
+ });
29
+ //# sourceMappingURL=watcherHandle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcherHandle.js","sourceRoot":"","sources":["../../src/client/watcherHandle.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,MAAM,IAAI,GACT,CAAyB,MAA4C,EAAE,SAAiB,EAAE,EAAE,CAC5F,CAAC,GAAG,IAAO,EAAK,EAAE,CACjB,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAA;AAE5B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAmB,EAAE,SAAiB,EAAiB,EAAE,CAAC,CAAC;IAC9F,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC;IAClC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC;IAC5C,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC;IACpD,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC;IAChC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;IAC9C,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC1C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC;IAClC,SAAS,EAAE,CAAc,UAAkB,EAAE,OAA0B,EAAc,EAAE,CAAC,MAAM,CAAC,SAAS,CAAI,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC;IAC3I,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC;IAC5C,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC1C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;IAC9C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IACtC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;IAC9C,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC;IAC5C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;IAC9C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IACtC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC;IAChD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;CAC9C,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
- import type { WatcherRecord } from '@vforsh/argus-core';
1
+ import type { WatcherRecord, ResponseData } from '@vforsh/argus-core';
2
2
  import type { HttpOptions } from '../http/fetchJson.js';
3
3
  type RegistryContext = {
4
4
  registryPath?: string;
@@ -16,5 +16,15 @@ export declare const requestWatcher: <T>(context: RegistryContext, watcherId: st
16
16
  watcher: WatcherRecord;
17
17
  data: T;
18
18
  }>;
19
+ /**
20
+ * Issue a watcher request and return the response payload without its `ok` discriminant.
21
+ *
22
+ * SDK methods throw on failure, so the caller already knows `ok` was `true`; stripping it
23
+ * here means a method never has to re-list the response fields to drop one of them, and a
24
+ * new protocol field reaches callers without touching the method.
25
+ */
26
+ export declare const requestWatcherData: <T extends {
27
+ ok: true;
28
+ }>(context: RegistryContext, watcherId: string, options: WatcherRequestOptions) => Promise<ResponseData<T>>;
19
29
  export {};
20
30
  //# sourceMappingURL=watcherRequest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"watcherRequest.d.ts","sourceRoot":"","sources":["../../src/client/watcherRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAIvD,KAAK,eAAe,GAAG;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,CAAC,EAAE,SAAS,eAAe,EAAE,WAAW,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAQ7I,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,CAAC,EACrC,SAAS,eAAe,EACxB,WAAW,MAAM,EACjB,SAAS,qBAAqB,KAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAa3C,CAAA"}
1
+ {"version":3,"file":"watcherRequest.d.ts","sourceRoot":"","sources":["../../src/client/watcherRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAUrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGvD,KAAK,eAAe,GAAG;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,CAAC,EAAE,SAAS,eAAe,EAAE,WAAW,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAQ7I,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,CAAC,EACrC,SAAS,eAAe,EACxB,WAAW,MAAM,EACjB,SAAS,qBAAqB,KAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAuB3C,CAAA;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAAU,CAAC,SAAS;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,EAC9D,SAAS,eAAe,EACxB,WAAW,MAAM,EACjB,SAAS,qBAAqB,KAC5B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAIzB,CAAA"}
@@ -1,5 +1,5 @@
1
+ import { buildWatcherUrl, classifyWatcherFailure, formatError, formatWatcherTransportError, readAndPruneRegistry, removeWatcherAndPersist, shouldEvictWatcherOnFailure, } from '@vforsh/argus-core';
1
2
  import { fetchJson } from '../http/fetchJson.js';
2
- import { readAndPruneRegistry, removeWatcherAndPersist } from '../registry/readAndPruneRegistry.js';
3
3
  export const withWatcher = async (context, watcherId, callback) => {
4
4
  const registry = await readAndPruneRegistry({ registryPath: context.registryPath, ttlMs: context.ttlMs });
5
5
  const watcher = registry.watchers[watcherId];
@@ -18,22 +18,28 @@ export const requestWatcher = async (context, watcherId, options) => withWatcher
18
18
  return { watcher, data };
19
19
  }
20
20
  catch (error) {
21
- await removeWatcherAndPersist(watcher.id, context.registryPath);
21
+ // One classifier and one eviction policy, shared with the CLI: the same outage must not
22
+ // leave the shared registry in a different state depending on which stack observed it.
23
+ const failure = classifyWatcherFailure(error);
24
+ if (failure === 'api-rejection') {
25
+ throw new Error(`${watcher.id}: ${formatError(error)}`);
26
+ }
27
+ if (shouldEvictWatcherOnFailure(failure)) {
28
+ await removeWatcherAndPersist(watcher.id, context.registryPath);
29
+ }
22
30
  throw new Error(formatWatcherTransportError(watcher, error));
23
31
  }
24
32
  });
25
- const buildWatcherUrl = (watcher, path, query) => {
26
- const qs = query?.toString();
27
- return `http://${watcher.host}:${watcher.port}${path}${qs ? `?${qs}` : ''}`;
28
- };
29
- const formatWatcherTransportError = (watcher, error) => `${watcher.id}: failed to reach watcher (${formatUnknownError(error)})`;
30
- const formatUnknownError = (error) => {
31
- if (!error) {
32
- return 'unknown error';
33
- }
34
- if (error instanceof Error) {
35
- return error.message;
36
- }
37
- return String(error);
33
+ /**
34
+ * Issue a watcher request and return the response payload without its `ok` discriminant.
35
+ *
36
+ * SDK methods throw on failure, so the caller already knows `ok` was `true`; stripping it
37
+ * here means a method never has to re-list the response fields to drop one of them, and a
38
+ * new protocol field reaches callers without touching the method.
39
+ */
40
+ export const requestWatcherData = async (context, watcherId, options) => {
41
+ const { data } = await requestWatcher(context, watcherId, options);
42
+ const { ok: _ok, ...rest } = data;
43
+ return rest;
38
44
  };
39
45
  //# sourceMappingURL=watcherRequest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"watcherRequest.js","sourceRoot":"","sources":["../../src/client/watcherRequest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AAenG,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAK,OAAwB,EAAE,SAAiB,EAAE,QAAgD,EAAc,EAAE;IACjJ,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;IACzG,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAClC,OAAwB,EACxB,SAAiB,EACjB,OAA8B,EACiB,EAAE,CACjD,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IACjD,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,SAAS,CAAI,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YACtF,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;SAClB,CAAC,CAAA;QACF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,uBAAuB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;QAC/D,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IAC7D,CAAC;AACF,CAAC,CAAC,CAAA;AAEH,MAAM,eAAe,GAAG,CAAC,OAA6C,EAAE,IAAY,EAAE,KAAuB,EAAU,EAAE;IACxH,MAAM,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAA;IAC5B,OAAO,UAAU,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AAC5E,CAAC,CAAA;AAED,MAAM,2BAA2B,GAAG,CAAC,OAAkC,EAAE,KAAc,EAAU,EAAE,CAClG,GAAG,OAAO,CAAC,EAAE,8BAA8B,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAA;AAExE,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAU,EAAE;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,eAAe,CAAA;IACvB,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,OAAO,CAAA;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,CAAC,CAAA"}
1
+ {"version":3,"file":"watcherRequest.js","sourceRoot":"","sources":["../../src/client/watcherRequest.ts"],"names":[],"mappings":"AACA,OAAO,EACN,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,2BAA2B,EAC3B,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,GAC3B,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAehD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAK,OAAwB,EAAE,SAAiB,EAAE,QAAgD,EAAc,EAAE;IACjJ,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;IACzG,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAClC,OAAwB,EACxB,SAAiB,EACjB,OAA8B,EACiB,EAAE,CACjD,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IACjD,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,SAAS,CAAI,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YACtF,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;SAClB,CAAC,CAAA;QACF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,wFAAwF;QACxF,uFAAuF;QACvF,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAA;QAC7C,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,KAAK,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACxD,CAAC;QAED,IAAI,2BAA2B,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,MAAM,uBAAuB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;QAChE,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IAC7D,CAAC;AACF,CAAC,CAAC,CAAA;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACtC,OAAwB,EACxB,SAAiB,EACjB,OAA8B,EACH,EAAE;IAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,cAAc,CAAI,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IACrE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IACjC,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA"}
@@ -0,0 +1,30 @@
1
+ /** The page exception shape carried by `EvalResponse.exception`. */
2
+ type EvalException = {
3
+ text: string;
4
+ details?: unknown;
5
+ };
6
+ /**
7
+ * Thrown when an expression raises inside the page.
8
+ *
9
+ * Only value-returning eval APIs (`evalValue`, `evalUntil`) throw this. Raw
10
+ * `client.eval` keeps reporting page exceptions in its `exception` field so callers
11
+ * can inspect a failure without a try/catch.
12
+ */
13
+ export declare class ArgusEvalError extends Error {
14
+ /** Structured exception detail from the page, when the transport provided one. */
15
+ readonly details?: unknown;
16
+ /**
17
+ * @param text Page-side exception text, used as the error message.
18
+ * @param details Optional structured exception detail from CDP.
19
+ */
20
+ constructor(text: string, details?: unknown);
21
+ /**
22
+ * Build an error from a watcher exception payload.
23
+ *
24
+ * CDP reports `text` as a bare `"Uncaught"` for thrown errors and puts the real
25
+ * message plus stack in `details.description`, so prefer that when present.
26
+ */
27
+ static fromException(exception: EvalException): ArgusEvalError;
28
+ }
29
+ export {};
30
+ //# sourceMappingURL=ArgusEvalError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArgusEvalError.d.ts","sourceRoot":"","sources":["../../src/eval/ArgusEvalError.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,KAAK,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAExD;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACxC,kFAAkF;IAClF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAE1B;;;OAGG;gBACS,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;IAM3C;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,GAAG,cAAc;CAG9D"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Thrown when an expression raises inside the page.
3
+ *
4
+ * Only value-returning eval APIs (`evalValue`, `evalUntil`) throw this. Raw
5
+ * `client.eval` keeps reporting page exceptions in its `exception` field so callers
6
+ * can inspect a failure without a try/catch.
7
+ */
8
+ export class ArgusEvalError extends Error {
9
+ /** Structured exception detail from the page, when the transport provided one. */
10
+ details;
11
+ /**
12
+ * @param text Page-side exception text, used as the error message.
13
+ * @param details Optional structured exception detail from CDP.
14
+ */
15
+ constructor(text, details) {
16
+ super(text);
17
+ this.name = 'ArgusEvalError';
18
+ this.details = details;
19
+ }
20
+ /**
21
+ * Build an error from a watcher exception payload.
22
+ *
23
+ * CDP reports `text` as a bare `"Uncaught"` for thrown errors and puts the real
24
+ * message plus stack in `details.description`, so prefer that when present.
25
+ */
26
+ static fromException(exception) {
27
+ return new ArgusEvalError(readExceptionDescription(exception.details) ?? exception.text, exception.details);
28
+ }
29
+ }
30
+ const readExceptionDescription = (details) => {
31
+ if (details == null || typeof details !== 'object' || !('description' in details)) {
32
+ return undefined;
33
+ }
34
+ const { description } = details;
35
+ return typeof description === 'string' && description.trim() ? description : undefined;
36
+ };
37
+ //# sourceMappingURL=ArgusEvalError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArgusEvalError.js","sourceRoot":"","sources":["../../src/eval/ArgusEvalError.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACxC,kFAAkF;IACzE,OAAO,CAAU;IAE1B;;;OAGG;IACH,YAAY,IAAY,EAAE,OAAiB;QAC1C,KAAK,CAAC,IAAI,CAAC,CAAA;QACX,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,SAAwB;QAC5C,OAAO,IAAI,cAAc,CAAC,wBAAwB,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC5G,CAAC;CACD;AAED,MAAM,wBAAwB,GAAG,CAAC,OAAgB,EAAsB,EAAE;IACzE,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,IAAI,OAAO,CAAC,EAAE,CAAC;QACnF,OAAO,SAAS,CAAA;IACjB,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,GAAG,OAAoC,CAAA;IAC5D,OAAO,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;AACvF,CAAC,CAAA"}
@@ -0,0 +1,81 @@
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
+ /** Per-iteration context handed to stop conditions and result observers. */
11
+ export type EvalPollContext<TResponse> = {
12
+ response: TResponse;
13
+ /** 1-based poll iteration. */
14
+ iteration: number;
15
+ /** 1-based attempt number within the iteration, when the caller retries. */
16
+ attempt: number;
17
+ };
18
+ /** Verdict from a stop condition: matched, not matched, or the condition itself failed. */
19
+ export type EvalPollStopDecision = {
20
+ ok: true;
21
+ matched: boolean;
22
+ } | {
23
+ ok: false;
24
+ error: string;
25
+ };
26
+ /** Outcome of one injected eval attempt. */
27
+ export type EvalPollAttempt<TResponse, TFailure> = {
28
+ ok: true;
29
+ response: TResponse;
30
+ attempt: number;
31
+ } | {
32
+ ok: false;
33
+ failure: TFailure;
34
+ attempt: number;
35
+ };
36
+ /** Inputs for {@link pollEval}. */
37
+ export type EvalPollInput<TResponse, TFailure> = {
38
+ /** Perform one eval. Callers wrap their own retry policy in here. */
39
+ runEval: (iteration: number) => Promise<EvalPollAttempt<TResponse, TFailure>>;
40
+ /** Delay between polls in milliseconds. */
41
+ intervalMs: number;
42
+ /** Stop after this many polls. Unlimited when omitted. */
43
+ count?: number;
44
+ /** Give up after this much wall-clock time. Unlimited when omitted. */
45
+ totalTimeoutMs?: number;
46
+ /** Decide whether to stop. Omitted means "never match" — useful for streaming. */
47
+ shouldStop?: (context: EvalPollContext<TResponse>) => EvalPollStopDecision;
48
+ /** Observe every result, including the matching one. */
49
+ onResult?: (response: TResponse, context: EvalPollContext<TResponse>) => void | Promise<void>;
50
+ /** Cancel the loop. Yields an `interrupted` outcome rather than throwing. */
51
+ signal?: AbortSignal;
52
+ };
53
+ /** Terminal state of a poll loop. */
54
+ export type EvalPollOutcome<TResponse, TFailure> = {
55
+ kind: 'matched';
56
+ response: TResponse;
57
+ iteration: number;
58
+ attempt: number;
59
+ } | {
60
+ kind: 'exhausted';
61
+ iterations: number;
62
+ } | {
63
+ kind: 'timeout';
64
+ elapsedMs: number;
65
+ } | {
66
+ kind: 'interrupted';
67
+ } | {
68
+ kind: 'eval-error';
69
+ failure: TFailure;
70
+ } | {
71
+ kind: 'condition-error';
72
+ error: string;
73
+ };
74
+ /**
75
+ * Poll `runEval` until a stop condition matches, the budget runs out, or the signal aborts.
76
+ *
77
+ * Results are reported to `onResult` before stop conditions are checked, so streaming
78
+ * callers print the matching iteration too.
79
+ */
80
+ export declare const pollEval: <TResponse, TFailure>(input: EvalPollInput<TResponse, TFailure>) => Promise<EvalPollOutcome<TResponse, TFailure>>;
81
+ //# sourceMappingURL=pollEval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pollEval.d.ts","sourceRoot":"","sources":["../../src/eval/pollEval.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,4EAA4E;AAC5E,MAAM,MAAM,eAAe,CAAC,SAAS,IAAI;IACxC,QAAQ,EAAE,SAAS,CAAA;IACnB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAA;CACf,CAAA;AAED,2FAA2F;AAC3F,MAAM,MAAM,oBAAoB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhG,4CAA4C;AAC5C,MAAM,MAAM,eAAe,CAAC,SAAS,EAAE,QAAQ,IAC5C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD,mCAAmC;AACnC,MAAM,MAAM,aAAa,CAAC,SAAS,EAAE,QAAQ,IAAI;IAChD,qEAAqE;IACrE,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC7E,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAA;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kFAAkF;IAClF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,KAAK,oBAAoB,CAAA;IAC1E,wDAAwD;IACxD,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7F,6EAA6E;IAC7E,MAAM,CAAC,EAAE,WAAW,CAAA;CACpB,CAAA;AAED,qCAAqC;AACrC,MAAM,MAAM,eAAe,CAAC,SAAS,EAAE,QAAQ,IAC5C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAU,SAAS,EAAE,QAAQ,EAAE,OAAO,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAG,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAwC3I,CAAA"}