@vforsh/argus-core 0.3.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 (140) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/auth/state.d.ts +13 -0
  3. package/dist/auth/state.d.ts.map +1 -1
  4. package/dist/auth/state.js +31 -0
  5. package/dist/auth/state.js.map +1 -1
  6. package/dist/errorMessage.d.ts +9 -0
  7. package/dist/errorMessage.d.ts.map +1 -0
  8. package/dist/errorMessage.js +17 -0
  9. package/dist/errorMessage.js.map +1 -0
  10. package/dist/http/fetch.d.ts +18 -0
  11. package/dist/http/fetch.d.ts.map +1 -1
  12. package/dist/http/fetch.js +24 -2
  13. package/dist/http/fetch.js.map +1 -1
  14. package/dist/http/watcher.d.ts +34 -0
  15. package/dist/http/watcher.d.ts.map +1 -0
  16. package/dist/http/watcher.js +33 -0
  17. package/dist/http/watcher.js.map +1 -0
  18. package/dist/index.d.ts +4 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +4 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/protocol/http/auth.d.ts +25 -21
  23. package/dist/protocol/http/auth.d.ts.map +1 -1
  24. package/dist/protocol/http/auth.js +125 -0
  25. package/dist/protocol/http/auth.js.map +1 -1
  26. package/dist/protocol/http/code.d.ts +17 -12
  27. package/dist/protocol/http/code.d.ts.map +1 -1
  28. package/dist/protocol/http/code.js +53 -1
  29. package/dist/protocol/http/code.js.map +1 -1
  30. package/dist/protocol/http/dialog.d.ts +9 -6
  31. package/dist/protocol/http/dialog.d.ts.map +1 -1
  32. package/dist/protocol/http/dialog.js +21 -1
  33. package/dist/protocol/http/dialog.js.map +1 -1
  34. package/dist/protocol/http/dom.d.ts +61 -33
  35. package/dist/protocol/http/dom.d.ts.map +1 -1
  36. package/dist/protocol/http/dom.js +252 -1
  37. package/dist/protocol/http/dom.js.map +1 -1
  38. package/dist/protocol/http/domInteraction.d.ts +9 -9
  39. package/dist/protocol/http/domInteraction.d.ts.map +1 -1
  40. package/dist/protocol/http/domInteraction.js +3 -0
  41. package/dist/protocol/http/domInteraction.js.map +1 -1
  42. package/dist/protocol/http/emulation.d.ts +14 -21
  43. package/dist/protocol/http/emulation.d.ts.map +1 -1
  44. package/dist/protocol/http/emulation.js +99 -1
  45. package/dist/protocol/http/emulation.js.map +1 -1
  46. package/dist/protocol/http/errors.d.ts +51 -4
  47. package/dist/protocol/http/errors.d.ts.map +1 -1
  48. package/dist/protocol/http/errors.js +47 -1
  49. package/dist/protocol/http/errors.js.map +1 -1
  50. package/dist/protocol/http/eval.d.ts +5 -58
  51. package/dist/protocol/http/eval.d.ts.map +1 -1
  52. package/dist/protocol/http/eval.js +24 -1
  53. package/dist/protocol/http/eval.js.map +1 -1
  54. package/dist/protocol/http/extension.d.ts +52 -36
  55. package/dist/protocol/http/extension.d.ts.map +1 -1
  56. package/dist/protocol/http/extension.js +34 -1
  57. package/dist/protocol/http/extension.js.map +1 -1
  58. package/dist/protocol/http/locate.d.ts +9 -3
  59. package/dist/protocol/http/locate.d.ts.map +1 -1
  60. package/dist/protocol/http/locate.js +28 -1
  61. package/dist/protocol/http/locate.js.map +1 -1
  62. package/dist/protocol/http/logs.d.ts +9 -12
  63. package/dist/protocol/http/logs.d.ts.map +1 -1
  64. package/dist/protocol/http/net.d.ts +19 -27
  65. package/dist/protocol/http/net.d.ts.map +1 -1
  66. package/dist/protocol/http/netMock.d.ts +17 -27
  67. package/dist/protocol/http/netMock.d.ts.map +1 -1
  68. package/dist/protocol/http/netMock.js +126 -0
  69. package/dist/protocol/http/netMock.js.map +1 -1
  70. package/dist/protocol/http/query.d.ts +97 -0
  71. package/dist/protocol/http/query.d.ts.map +1 -0
  72. package/dist/protocol/http/query.js +79 -0
  73. package/dist/protocol/http/query.js.map +1 -0
  74. package/dist/protocol/http/record.d.ts +11 -6
  75. package/dist/protocol/http/record.d.ts.map +1 -1
  76. package/dist/protocol/http/record.js +56 -0
  77. package/dist/protocol/http/record.js.map +1 -1
  78. package/dist/protocol/http/screenshot.d.ts +18 -3
  79. package/dist/protocol/http/screenshot.d.ts.map +1 -1
  80. package/dist/protocol/http/screenshot.js +45 -1
  81. package/dist/protocol/http/screenshot.js.map +1 -1
  82. package/dist/protocol/http/snapshot.d.ts +5 -3
  83. package/dist/protocol/http/snapshot.d.ts.map +1 -1
  84. package/dist/protocol/http/snapshot.js +16 -1
  85. package/dist/protocol/http/snapshot.js.map +1 -1
  86. package/dist/protocol/http/status.d.ts +17 -9
  87. package/dist/protocol/http/status.d.ts.map +1 -1
  88. package/dist/protocol/http/status.js +12 -1
  89. package/dist/protocol/http/status.js.map +1 -1
  90. package/dist/protocol/http/storage.d.ts +7 -31
  91. package/dist/protocol/http/storage.d.ts.map +1 -1
  92. package/dist/protocol/http/storage.js +31 -1
  93. package/dist/protocol/http/storage.js.map +1 -1
  94. package/dist/protocol/http/throttle.d.ts +14 -21
  95. package/dist/protocol/http/throttle.d.ts.map +1 -1
  96. package/dist/protocol/http/throttle.js +27 -1
  97. package/dist/protocol/http/throttle.js.map +1 -1
  98. package/dist/protocol/http/trace.d.ts +9 -6
  99. package/dist/protocol/http/trace.d.ts.map +1 -1
  100. package/dist/protocol/http/trace.js +29 -1
  101. package/dist/protocol/http/trace.js.map +1 -1
  102. package/dist/protocol/http/visibility.d.ts +7 -3
  103. package/dist/protocol/http/visibility.d.ts.map +1 -1
  104. package/dist/protocol/http/visibility.js +19 -1
  105. package/dist/protocol/http/visibility.js.map +1 -1
  106. package/dist/protocol/http.d.ts +18 -16
  107. package/dist/protocol/http.d.ts.map +1 -1
  108. package/dist/protocol/http.js +17 -1
  109. package/dist/protocol/http.js.map +1 -1
  110. package/dist/protocol/native-messaging.d.ts +276 -0
  111. package/dist/protocol/native-messaging.d.ts.map +1 -0
  112. package/dist/protocol/native-messaging.js +19 -0
  113. package/dist/protocol/native-messaging.js.map +1 -0
  114. package/dist/protocol/scenario.d.ts +63 -0
  115. package/dist/protocol/scenario.d.ts.map +1 -0
  116. package/dist/protocol/scenario.js +2 -0
  117. package/dist/protocol/scenario.js.map +1 -0
  118. package/dist/protocol/schemaFields.d.ts +76 -0
  119. package/dist/protocol/schemaFields.d.ts.map +1 -0
  120. package/dist/protocol/schemaFields.js +152 -0
  121. package/dist/protocol/schemaFields.js.map +1 -0
  122. package/dist/protocol/version.d.ts +14 -0
  123. package/dist/protocol/version.d.ts.map +1 -1
  124. package/dist/protocol/version.js +21 -0
  125. package/dist/protocol/version.js.map +1 -1
  126. package/dist/registry/lock.d.ts.map +1 -1
  127. package/dist/registry/lock.js +2 -3
  128. package/dist/registry/lock.js.map +1 -1
  129. package/dist/registry/registry.d.ts +14 -0
  130. package/dist/registry/registry.d.ts.map +1 -1
  131. package/dist/registry/registry.js +20 -0
  132. package/dist/registry/registry.js.map +1 -1
  133. package/dist/textPattern.d.ts.map +1 -1
  134. package/dist/textPattern.js +2 -1
  135. package/dist/textPattern.js.map +1 -1
  136. package/dist/time.d.ts +20 -0
  137. package/dist/time.d.ts.map +1 -0
  138. package/dist/time.js +39 -0
  139. package/dist/time.js.map +1 -0
  140. package/package.json +9 -7
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Typed shapes for the GET half of the protocol.
3
+ *
4
+ * Every POST body and every response has a type here; the query string did not, so it lived as
5
+ * untyped `params.set('…')` calls in three independent places — the CLI's builder, the client
6
+ * SDK's builder, and the watcher's parsers. They had already drifted: the CLI could express
7
+ * eleven network filters and the SDK three, so the SDK could not ask for filters the protocol
8
+ * supports. These types are the contract all three now conform to.
9
+ */
10
+ /** Which part of the page a network query covers. */
11
+ export const NET_SCOPES = ['selected', 'page', 'tab'];
12
+ /** First-party vs third-party request classification. */
13
+ export const NET_PARTIES = ['first', 'third'];
14
+ /**
15
+ * Serialize a typed query object into `URLSearchParams`.
16
+ *
17
+ * Omits `undefined`, `null`, `false`, blank strings, and empty arrays, so callers can hand over
18
+ * a partially populated object without guarding each field. `true` becomes `'1'` to match the
19
+ * watcher's truthy-flag reader. Values are trimmed; validation stays with the caller, which owns
20
+ * the error message its users should see.
21
+ */
22
+ export const toSearchParams = (query) => {
23
+ const params = new URLSearchParams();
24
+ for (const [key, value] of Object.entries(query)) {
25
+ appendQueryValue(params, key, value);
26
+ }
27
+ return params;
28
+ };
29
+ const appendQueryValue = (params, key, value) => {
30
+ if (value == null || value === false) {
31
+ return;
32
+ }
33
+ if (value === true) {
34
+ params.set(key, '1');
35
+ return;
36
+ }
37
+ if (typeof value === 'number') {
38
+ params.set(key, String(value));
39
+ return;
40
+ }
41
+ if (typeof value === 'string') {
42
+ const trimmed = value.trim();
43
+ if (trimmed) {
44
+ params.set(key, trimmed);
45
+ }
46
+ return;
47
+ }
48
+ for (const entry of value) {
49
+ const trimmed = entry.trim();
50
+ if (trimmed) {
51
+ params.append(key, trimmed);
52
+ }
53
+ }
54
+ };
55
+ /** Trim a query value, treating blank as absent. */
56
+ export const normalizeQueryValue = (value) => {
57
+ if (value == null) {
58
+ return undefined;
59
+ }
60
+ const trimmed = value.trim();
61
+ return trimmed ? trimmed : undefined;
62
+ };
63
+ /**
64
+ * Trim repeatable match patterns, rejecting blanks.
65
+ *
66
+ * A blank pattern would match everything, so it is far more likely to be a shell-quoting mistake
67
+ * than an intent — both the CLI and the SDK surface it as an error rather than silently dropping it.
68
+ */
69
+ export const normalizeMatchPatterns = (match) => {
70
+ if (!match || match.length === 0) {
71
+ return { patterns: [] };
72
+ }
73
+ const patterns = match.map((value) => value.trim());
74
+ if (patterns.some((value) => value.length === 0)) {
75
+ return { patterns: [], error: 'Invalid match value: empty pattern.' };
76
+ }
77
+ return { patterns };
78
+ };
79
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/protocol/http/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,qDAAqD;AACrD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAU,CAAA;AAK9D,yDAAyD;AACzD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,OAAO,CAAU,CAAA;AAgEtD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAiC,EAAmB,EAAE;IACpF,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAA;IAEpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IACrC,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,MAAuB,EAAE,GAAW,EAAE,KAAiB,EAAQ,EAAE;IAC1F,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACtC,OAAM;IACP,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACpB,OAAM;IACP,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9B,OAAM;IACP,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;QAC5B,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACzB,CAAC;QACD,OAAM;IACP,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;QAC5B,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAC5B,CAAC;IACF,CAAC;AACF,CAAC,CAAA;AAED,oDAAoD;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAgC,EAAsB,EAAE;IAC3F,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO,SAAS,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;AACrC,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAyB,EAA0C,EAAE;IAC3G,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IACxB,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IACnD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAA;IACtE,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,CAAA;AACpB,CAAC,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import type { ScreenshotClipRegion } from './screenshot.js';
2
+ import type { Ok } from './errors.js';
2
3
  /** Viewport-relative crop rectangle in CSS pixels. */
3
4
  export type RecordClipRegion = ScreenshotClipRegion;
4
5
  /** Supported recording containers/codecs. */
@@ -24,23 +25,21 @@ export type RecordRequest = RecordOptions & {
24
25
  /** Request payload for POST /record/start. */
25
26
  export type RecordStartRequest = RecordOptions;
26
27
  /** Response payload for POST /record/start. */
27
- export type RecordStartResponse = {
28
- ok: true;
28
+ export type RecordStartResponse = Ok<{
29
29
  recordId: string;
30
30
  sessionName: string;
31
31
  outFile: string;
32
32
  format: RecordFormat;
33
33
  fps: number;
34
34
  clipped: boolean;
35
- };
35
+ }>;
36
36
  /** Request payload for POST /record/stop. */
37
37
  export type RecordStopRequest = {
38
38
  recordId?: string;
39
39
  outFile?: string;
40
40
  };
41
41
  /** Response payload for POST /record and POST /record/stop. */
42
- export type RecordStopResponse = {
43
- ok: true;
42
+ export type RecordStopResponse = Ok<{
44
43
  recordId: string;
45
44
  sessionName: string;
46
45
  outFile: string;
@@ -49,6 +48,12 @@ export type RecordStopResponse = {
49
48
  durationMs: number;
50
49
  fps: number;
51
50
  clipped: boolean;
52
- };
51
+ }>;
53
52
  export type RecordResponse = RecordStopResponse;
53
+ /** Schema for POST /record/start request payloads. */
54
+ export declare const recordStartRequestSchema: import("../schema.js").ProtocolSchema<RecordOptions>;
55
+ /** Schema for POST /record request payloads (fixed-duration capture). */
56
+ export declare const recordRequestSchema: import("../schema.js").ProtocolSchema<RecordRequest>;
57
+ /** Schema for POST /record/stop request payloads. */
58
+ export declare const recordStopRequestSchema: import("../schema.js").ProtocolSchema<RecordStopRequest>;
54
59
  //# sourceMappingURL=record.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAE3D,sDAAsD;AACtD,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,CAAA;AAEnD,6CAA6C;AAC7C,eAAO,MAAM,cAAc,0BAA2B,CAAA;AAEtD,wCAAwC;AACxC,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1D,mDAAmD;AACnD,MAAM,MAAM,aAAa,GAAG;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0FAA0F;IAC1F,IAAI,CAAC,EAAE,gBAAgB,CAAA;IACvB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,6EAA6E;IAC7E,MAAM,CAAC,EAAE,YAAY,CAAA;CACrB,CAAA;AAED,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAC3C,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,8CAA8C;AAC9C,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAA;AAE9C,+CAA+C;AAC/C,MAAM,MAAM,mBAAmB,GAAG;IACjC,EAAE,EAAE,IAAI,CAAA;IACR,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,YAAY,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,6CAA6C;AAC7C,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,+DAA+D;AAC/D,MAAM,MAAM,kBAAkB,GAAG;IAChC,EAAE,EAAE,IAAI,CAAA;IACR,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,YAAY,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,CAAA"}
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/record.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAErC,sDAAsD;AACtD,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,CAAA;AAEnD,6CAA6C;AAC7C,eAAO,MAAM,cAAc,0BAA2B,CAAA;AAEtD,wCAAwC;AACxC,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1D,mDAAmD;AACnD,MAAM,MAAM,aAAa,GAAG;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0FAA0F;IAC1F,IAAI,CAAC,EAAE,gBAAgB,CAAA;IACvB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,6EAA6E;IAC7E,MAAM,CAAC,EAAE,YAAY,CAAA;CACrB,CAAA;AAED,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAC3C,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,8CAA8C;AAC9C,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAA;AAE9C,+CAA+C;AAC/C,MAAM,MAAM,mBAAmB,GAAG,EAAE,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,YAAY,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CAChB,CAAC,CAAA;AAEF,6CAA6C;AAC7C,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,+DAA+D;AAC/D,MAAM,MAAM,kBAAkB,GAAG,EAAE,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,YAAY,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CAChB,CAAC,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,kBAAkB,CAAA;AAW/C,sDAAsD;AACtD,eAAO,MAAM,wBAAwB,sDAWnC,CAAA;AAEF,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,sDAkB9B,CAAA;AAEF,qDAAqD;AACrD,eAAO,MAAM,uBAAuB,0DAWlC,CAAA"}
@@ -1,3 +1,59 @@
1
+ import { defineProtocolSchema, invalidProtocolPayload, validProtocolPayload } from '../schema.js';
2
+ import { compact, optionalEnum, optionalNonEmptyString, optionalNumber, optionalString, readFields, requireObject } from '../schemaFields.js';
3
+ import { optionalClipRegion, requireSingleCaptureTarget } from './screenshot.js';
1
4
  /** Supported recording containers/codecs. */
2
5
  export const RECORD_FORMATS = ['mp4', 'webm'];
6
+ /** Readers for the outFile/selector/clip/fps/format options every record route shares. */
7
+ const recordOptionReaders = {
8
+ outFile: optionalString,
9
+ selector: optionalNonEmptyString,
10
+ clip: optionalClipRegion,
11
+ fps: (source, key) => optionalNumber(source, key, { min: 1, max: 60 }),
12
+ format: (source, key) => optionalEnum(source, key, RECORD_FORMATS),
13
+ };
14
+ /** Schema for POST /record/start request payloads. */
15
+ export const recordStartRequestSchema = defineProtocolSchema((value) => {
16
+ const invalid = requireObject(value);
17
+ if (invalid)
18
+ return invalid;
19
+ const fields = readFields(value, recordOptionReaders);
20
+ if (!fields.ok)
21
+ return fields;
22
+ const conflict = requireSingleCaptureTarget(fields.value);
23
+ if (conflict)
24
+ return invalidProtocolPayload(conflict);
25
+ return validProtocolPayload(compact(fields.value));
26
+ });
27
+ /** Schema for POST /record request payloads (fixed-duration capture). */
28
+ export const recordRequestSchema = defineProtocolSchema((value) => {
29
+ const invalid = requireObject(value);
30
+ if (invalid)
31
+ return invalid;
32
+ const fields = readFields(value, {
33
+ ...recordOptionReaders,
34
+ durationMs: (source, key) => optionalNumber(source, key, { min: Number.EPSILON }),
35
+ });
36
+ if (!fields.ok)
37
+ return fields;
38
+ const conflict = requireSingleCaptureTarget(fields.value);
39
+ if (conflict)
40
+ return invalidProtocolPayload(conflict);
41
+ if (fields.value.durationMs == null) {
42
+ return invalidProtocolPayload('durationMs must be greater than 0');
43
+ }
44
+ return validProtocolPayload(compact({ ...fields.value, durationMs: fields.value.durationMs }));
45
+ });
46
+ /** Schema for POST /record/stop request payloads. */
47
+ export const recordStopRequestSchema = defineProtocolSchema((value) => {
48
+ const invalid = requireObject(value);
49
+ if (invalid)
50
+ return invalid;
51
+ const fields = readFields(value, {
52
+ recordId: optionalNonEmptyString,
53
+ outFile: optionalString,
54
+ });
55
+ if (!fields.ok)
56
+ return fields;
57
+ return validProtocolPayload(compact(fields.value));
58
+ });
3
59
  //# sourceMappingURL=record.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/protocol/http/record.ts"],"names":[],"mappings":"AAKA,6CAA6C;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,CAAU,CAAA"}
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/protocol/http/record.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { type FieldError } from '../schemaFields.js';
2
+ import type { Ok } from './errors.js';
1
3
  /** Rectangle crop in CSS pixels relative to the selected target viewport. */
2
4
  export type ScreenshotClipRegion = {
3
5
  x: number;
@@ -14,9 +16,22 @@ export type ScreenshotRequest = {
14
16
  format?: 'png';
15
17
  };
16
18
  /** Response payload for POST /screenshot. */
17
- export type ScreenshotResponse = {
18
- ok: true;
19
+ export type ScreenshotResponse = Ok<{
19
20
  outFile: string;
20
21
  clipped: boolean;
21
- };
22
+ }>;
23
+ /**
24
+ * Read an optional crop rectangle.
25
+ *
26
+ * Shared by /screenshot and the record routes: `RecordClipRegion` is an alias of
27
+ * `ScreenshotClipRegion`, and the two validators were byte-identical copies.
28
+ */
29
+ export declare const optionalClipRegion: (source: Record<string, unknown>, key: string) => ScreenshotClipRegion | undefined | FieldError;
30
+ /** Reject the selector+clip combination every capture route forbids. */
31
+ export declare const requireSingleCaptureTarget: (target: {
32
+ selector?: string;
33
+ clip?: ScreenshotClipRegion;
34
+ }) => string | null;
35
+ /** Schema for POST /screenshot request payloads. */
36
+ export declare const screenshotRequestSchema: import("../schema.js").ProtocolSchema<ScreenshotRequest>;
22
37
  //# sourceMappingURL=screenshot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/screenshot.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,MAAM,MAAM,oBAAoB,GAAG;IAClC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACd,CAAA;AAED,4CAA4C;AAC5C,MAAM,MAAM,iBAAiB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0FAA0F;IAC1F,IAAI,CAAC,EAAE,oBAAoB,CAAA;IAC3B,MAAM,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,6CAA6C;AAC7C,MAAM,MAAM,kBAAkB,GAAG;IAChC,EAAE,EAAE,IAAI,CAAA;IACR,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;CAChB,CAAA"}
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/screenshot.ts"],"names":[],"mappings":"AACA,OAAO,EAUN,KAAK,UAAU,EACf,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAErC,6EAA6E;AAC7E,MAAM,MAAM,oBAAoB,GAAG;IAClC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACd,CAAA;AAED,4CAA4C;AAC5C,MAAM,MAAM,iBAAiB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0FAA0F;IAC1F,IAAI,CAAC,EAAE,oBAAoB,CAAA;IAC3B,MAAM,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,6CAA6C;AAC7C,MAAM,MAAM,kBAAkB,GAAG,EAAE,CAAC;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;CAChB,CAAC,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,MAAM,KAAG,oBAAoB,GAAG,SAAS,GAAG,UAkBpH,CAAA;AAED,wEAAwE;AACxE,eAAO,MAAM,0BAA0B,GAAI,QAAQ;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,oBAAoB,CAAA;CAAE,KAAG,MAAM,GAAG,IAC9B,CAAA;AAEnF,oDAAoD;AACpD,eAAO,MAAM,uBAAuB,0DAgBlC,CAAA"}
@@ -1,2 +1,46 @@
1
- export {};
1
+ import { defineProtocolSchema, invalidProtocolPayload, validProtocolPayload } from '../schema.js';
2
+ import { compact, fieldError, isFieldError, optionalEnum, optionalNonEmptyString, optionalRecord, optionalString, readFields, requireObject, } from '../schemaFields.js';
3
+ /**
4
+ * Read an optional crop rectangle.
5
+ *
6
+ * Shared by /screenshot and the record routes: `RecordClipRegion` is an alias of
7
+ * `ScreenshotClipRegion`, and the two validators were byte-identical copies.
8
+ */
9
+ export const optionalClipRegion = (source, key) => {
10
+ const clip = optionalRecord(source, key);
11
+ if (clip == null) {
12
+ return undefined;
13
+ }
14
+ if (isFieldError(clip)) {
15
+ return fieldError('clip must be an object with x, y, width, and height');
16
+ }
17
+ const { x, y, width, height } = clip;
18
+ if (![x, y, width, height].every((entry) => typeof entry === 'number' && Number.isFinite(entry))) {
19
+ return fieldError('clip.x, clip.y, clip.width, and clip.height must be finite numbers');
20
+ }
21
+ if (width <= 0 || height <= 0) {
22
+ return fieldError('clip.width and clip.height must be greater than 0');
23
+ }
24
+ return { x: x, y: y, width: width, height: height };
25
+ };
26
+ /** Reject the selector+clip combination every capture route forbids. */
27
+ export const requireSingleCaptureTarget = (target) => target.selector && target.clip ? 'selector and clip are mutually exclusive' : null;
28
+ /** Schema for POST /screenshot request payloads. */
29
+ export const screenshotRequestSchema = defineProtocolSchema((value) => {
30
+ const invalid = requireObject(value);
31
+ if (invalid)
32
+ return invalid;
33
+ const fields = readFields(value, {
34
+ outFile: optionalString,
35
+ selector: optionalNonEmptyString,
36
+ clip: optionalClipRegion,
37
+ format: (source, key) => optionalEnum(source, key, ['png']),
38
+ });
39
+ if (!fields.ok)
40
+ return fields;
41
+ const conflict = requireSingleCaptureTarget(fields.value);
42
+ if (conflict)
43
+ return invalidProtocolPayload(conflict);
44
+ return validProtocolPayload(compact(fields.value));
45
+ });
2
46
  //# sourceMappingURL=screenshot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/protocol/http/screenshot.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/protocol/http/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACjG,OAAO,EACN,OAAO,EACP,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,UAAU,EACV,aAAa,GAEb,MAAM,oBAAoB,CAAA;AA0B3B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAA+B,EAAE,GAAW,EAAiD,EAAE;IACjI,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,SAAS,CAAA;IACjB,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC,qDAAqD,CAAC,CAAA;IACzE,CAAC;IAED,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACpC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAClG,OAAO,UAAU,CAAC,oEAAoE,CAAC,CAAA;IACxF,CAAC;IACD,IAAK,KAAgB,IAAI,CAAC,IAAK,MAAiB,IAAI,CAAC,EAAE,CAAC;QACvD,OAAO,UAAU,CAAC,mDAAmD,CAAC,CAAA;IACvE,CAAC;IAED,OAAO,EAAE,CAAC,EAAE,CAAW,EAAE,CAAC,EAAE,CAAW,EAAE,KAAK,EAAE,KAAe,EAAE,MAAM,EAAE,MAAgB,EAAE,CAAA;AAC5F,CAAC,CAAA;AAED,wEAAwE;AACxE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,MAA0D,EAAiB,EAAE,CACvH,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,IAAI,CAAA;AAEnF,oDAAoD;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAAoB,CAAoB,CAAC,KAAK,EAAE,EAAE;IACxF,MAAM,OAAO,GAAG,aAAa,CAAoB,KAAK,CAAC,CAAA;IACvD,IAAI,OAAO;QAAE,OAAO,OAAO,CAAA;IAE3B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAgC,EAAE;QAC3D,OAAO,EAAE,cAAc;QACvB,QAAQ,EAAE,sBAAsB;QAChC,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAU,CAAC;KACpE,CAAC,CAAA;IACF,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAA;IAE7B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACzD,IAAI,QAAQ;QAAE,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAA;IAErD,OAAO,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AACnD,CAAC,CAAC,CAAA"}
@@ -1,3 +1,4 @@
1
+ import type { Ok } from './errors.js';
1
2
  /**
2
3
  * A node in the accessibility tree.
3
4
  * Reconstructed from CDP's flat AXNode array into a nested structure.
@@ -30,13 +31,14 @@ export type SnapshotRequest = {
30
31
  /**
31
32
  * Response payload for POST /snapshot.
32
33
  */
33
- export type SnapshotResponse = {
34
- ok: true;
34
+ export type SnapshotResponse = Ok<{
35
35
  /** Root nodes of the accessibility tree. */
36
36
  roots: AXTreeNode[];
37
37
  /** Total number of nodes before filtering. */
38
38
  totalNodes: number;
39
39
  /** Number of nodes after filtering. */
40
40
  returnedNodes: number;
41
- };
41
+ }>;
42
+ /** Schema for POST /snapshot request payloads. */
43
+ export declare const snapshotRequestSchema: import("../schema.js").ProtocolSchema<SnapshotRequest>;
42
44
  //# sourceMappingURL=snapshot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;IACtD,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC9B,EAAE,EAAE,IAAI,CAAA;IACR,4CAA4C;IAC5C,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAA;IAClB,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAA;CACrB,CAAA"}
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/snapshot.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAErC;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;IACtD,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,EAAE,CAAC;IACjC,4CAA4C;IAC5C,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAA;IAClB,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAA;CACrB,CAAC,CAAA;AAEF,kDAAkD;AAClD,eAAO,MAAM,qBAAqB,wDAYhC,CAAA"}
@@ -1,2 +1,17 @@
1
- export {};
1
+ import { defineProtocolSchema, validProtocolPayload } from '../schema.js';
2
+ import { compact, optionalBoolean, optionalInteger, optionalNonEmptyString, readFields, requireObject } from '../schemaFields.js';
3
+ /** Schema for POST /snapshot request payloads. */
4
+ export const snapshotRequestSchema = defineProtocolSchema((value) => {
5
+ const invalid = requireObject(value);
6
+ if (invalid)
7
+ return invalid;
8
+ const fields = readFields(value, {
9
+ selector: optionalNonEmptyString,
10
+ depth: (source, key) => optionalInteger(source, key, { min: 0 }),
11
+ interactive: optionalBoolean,
12
+ });
13
+ if (!fields.ok)
14
+ return fields;
15
+ return validProtocolPayload(compact(fields.value));
16
+ });
2
17
  //# sourceMappingURL=snapshot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/protocol/http/snapshot.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/protocol/http/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,sBAAsB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AA8CjI,kDAAkD;AAClD,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,CAAkB,CAAC,KAAK,EAAE,EAAE;IACpF,MAAM,OAAO,GAAG,aAAa,CAAkB,KAAK,CAAC,CAAA;IACrD,IAAI,OAAO;QAAE,OAAO,OAAO,CAAA;IAE3B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAgC,EAAE;QAC3D,QAAQ,EAAE,sBAAsB;QAChC,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAChE,WAAW,EAAE,eAAe;KAC5B,CAAC,CAAA;IACF,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAA;IAE7B,OAAO,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AACnD,CAAC,CAAC,CAAA"}
@@ -1,9 +1,9 @@
1
1
  import type { WatcherRecord } from '../../registry/types.js';
2
2
  import type { DialogStatus } from './dialog.js';
3
3
  import type { ArgusProtocolVersion } from '../version.js';
4
+ import type { Ok } from './errors.js';
4
5
  /** Response payload for GET /status. */
5
- export type StatusResponse = {
6
- ok: true;
6
+ export type StatusResponse = Ok<{
7
7
  id: string;
8
8
  pid: number;
9
9
  attached: boolean;
@@ -29,18 +29,26 @@ export type StatusResponse = {
29
29
  protocolVersion?: ArgusProtocolVersion;
30
30
  /** Watcher package version (e.g. "0.1.2"). */
31
31
  watcherVersion?: string;
32
- };
32
+ /**
33
+ * Lifetime counters for side effects that are hard to observe from outside.
34
+ *
35
+ * `pageNavigations` counts top-frame navigations the watcher acted on (log rotation,
36
+ * sourcemap cache reset, indicator repaint). One real navigation must count exactly once;
37
+ * the extension-mode e2e asserts on it to catch duplicated or lost navigation handling.
38
+ */
39
+ counters?: {
40
+ pageNavigations: number;
41
+ };
42
+ }>;
33
43
  /** Response payload for POST /shutdown. */
34
- export type ShutdownResponse = {
35
- ok: true;
36
- };
44
+ export type ShutdownResponse = Ok<{}>;
37
45
  /** Request payload for POST /reload. */
38
46
  export type ReloadRequest = {
39
47
  /** If true, bypass browser cache. Default: false. */
40
48
  ignoreCache?: boolean;
41
49
  };
42
50
  /** Response payload for POST /reload. */
43
- export type ReloadResponse = {
44
- ok: true;
45
- };
51
+ export type ReloadResponse = Ok<{}>;
52
+ /** Schema for POST /reload request payloads. */
53
+ export declare const reloadRequestSchema: import("../schema.js").ProtocolSchema<ReloadRequest>;
46
54
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEzD,wCAAwC;AACxC,MAAM,MAAM,cAAc,GAAG;IAC5B,EAAE,EAAE,IAAI,CAAA;IACR,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,OAAO,CAAA;IACjB,gFAAgF;IAChF,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE;QACP,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;QAClB,8EAA8E;QAC9E,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,qFAAqF;QACrF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KACxB,GAAG,IAAI,CAAA;IACR,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE;QACP,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KACpB,CAAA;IACD,OAAO,EAAE,aAAa,CAAA;IACtB,kDAAkD;IAClD,eAAe,CAAC,EAAE,oBAAoB,CAAA;IACtC,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,GAAG;IAC9B,EAAE,EAAE,IAAI,CAAA;CACR,CAAA;AAED,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG;IAC3B,qDAAqD;IACrD,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,yCAAyC;AACzC,MAAM,MAAM,cAAc,GAAG;IAC5B,EAAE,EAAE,IAAI,CAAA;CACR,CAAA"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAErC,wCAAwC;AACxC,MAAM,MAAM,cAAc,GAAG,EAAE,CAAC;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,OAAO,CAAA;IACjB,gFAAgF;IAChF,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE;QACP,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;QAClB,8EAA8E;QAC9E,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,qFAAqF;QACrF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KACxB,GAAG,IAAI,CAAA;IACR,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE;QACP,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KACpB,CAAA;IACD,OAAO,EAAE,aAAa,CAAA;IACtB,kDAAkD;IAClD,eAAe,CAAC,EAAE,oBAAoB,CAAA;IACtC,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE;QACV,eAAe,EAAE,MAAM,CAAA;KACvB,CAAA;CACD,CAAC,CAAA;AAEF,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;AAErC,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG;IAC3B,qDAAqD;IACrD,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,yCAAyC;AACzC,MAAM,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;AAEnC,gDAAgD;AAChD,eAAO,MAAM,mBAAmB,sDAQ9B,CAAA"}
@@ -1,2 +1,13 @@
1
- export {};
1
+ import { defineProtocolSchema, validProtocolPayload } from '../schema.js';
2
+ import { compact, optionalBoolean, readFields, requireObject } from '../schemaFields.js';
3
+ /** Schema for POST /reload request payloads. */
4
+ export const reloadRequestSchema = defineProtocolSchema((value) => {
5
+ const invalid = requireObject(value);
6
+ if (invalid)
7
+ return invalid;
8
+ const fields = readFields(value, { ignoreCache: optionalBoolean });
9
+ if (!fields.ok)
10
+ return fields;
11
+ return validProtocolPayload(compact(fields.value));
12
+ });
2
13
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/protocol/http/status.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/protocol/http/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AA0DxF,gDAAgD;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAgB,CAAC,KAAK,EAAE,EAAE;IAChF,MAAM,OAAO,GAAG,aAAa,CAAgB,KAAK,CAAC,CAAA;IACnD,IAAI,OAAO;QAAE,OAAO,OAAO,CAAA;IAE3B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAgC,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAA;IAC7F,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAA;IAE7B,OAAO,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AACnD,CAAC,CAAC,CAAA"}
@@ -1,3 +1,4 @@
1
+ import type { Ok } from './errors.js';
1
2
  /** Storage areas exposed by the watcher API. */
2
3
  export type StorageArea = 'local' | 'session';
3
4
  /** Supported operations for POST /storage/<area>. */
@@ -13,10 +14,9 @@ export type StorageRequest = {
13
14
  /** Optional origin to validate against page's current origin. */
14
15
  origin?: string;
15
16
  };
16
- type StorageResponseBase = {
17
- ok: true;
17
+ type StorageResponseBase = Ok<{
18
18
  origin: string;
19
- };
19
+ }>;
20
20
  /** Response payload for POST /storage/<area> (get). */
21
21
  export type StorageGetResponse = StorageResponseBase & {
22
22
  key: string;
@@ -37,33 +37,9 @@ export type StorageClearResponse = StorageResponseBase & {
37
37
  };
38
38
  /** Union of all storage responses. */
39
39
  export type StorageResponse = StorageGetResponse | StorageKeyMutationResponse | StorageListResponse | StorageClearResponse;
40
- /** Back-compat alias for the localStorage endpoint request. */
41
- export type StorageLocalRequest = StorageRequest;
42
- /** Back-compat alias for the localStorage endpoint get response. */
43
- export type StorageLocalGetResponse = StorageGetResponse;
44
- /** Back-compat alias for the localStorage endpoint set response. */
45
- export type StorageLocalSetResponse = StorageKeyMutationResponse;
46
- /** Back-compat alias for the localStorage endpoint remove response. */
47
- export type StorageLocalRemoveResponse = StorageKeyMutationResponse;
48
- /** Back-compat alias for the localStorage endpoint list response. */
49
- export type StorageLocalListResponse = StorageListResponse;
50
- /** Back-compat alias for the localStorage endpoint clear response. */
51
- export type StorageLocalClearResponse = StorageClearResponse;
52
- /** Back-compat alias for the localStorage endpoint response union. */
53
- export type StorageLocalResponse = StorageResponse;
54
- /** Alias for the sessionStorage endpoint request. */
55
- export type StorageSessionRequest = StorageRequest;
56
- /** Alias for the sessionStorage endpoint get response. */
57
- export type StorageSessionGetResponse = StorageGetResponse;
58
- /** Alias for the sessionStorage endpoint set response. */
59
- export type StorageSessionSetResponse = StorageKeyMutationResponse;
60
- /** Alias for the sessionStorage endpoint remove response. */
61
- export type StorageSessionRemoveResponse = StorageKeyMutationResponse;
62
- /** Alias for the sessionStorage endpoint list response. */
63
- export type StorageSessionListResponse = StorageListResponse;
64
- /** Alias for the sessionStorage endpoint clear response. */
65
- export type StorageSessionClearResponse = StorageClearResponse;
66
- /** Alias for the sessionStorage endpoint response union. */
67
- export type StorageSessionResponse = StorageResponse;
40
+ /** Operations accepted by POST /storage/<area>. */
41
+ export declare const STORAGE_ACTIONS: readonly ["get", "set", "remove", "list", "clear"];
42
+ /** Schema for POST /storage/<area> request payloads. */
43
+ export declare const storageRequestSchema: import("../schema.js").ProtocolSchema<StorageRequest>;
68
44
  export {};
69
45
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/storage.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,CAAA;AAE7C,qDAAqD;AACrD,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAEvE,gDAAgD;AAChD,MAAM,MAAM,cAAc,GAAG;IAC5B,gCAAgC;IAChC,MAAM,EAAE,aAAa,CAAA;IACrB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,KAAK,mBAAmB,GAAG;IAC1B,EAAE,EAAE,IAAI,CAAA;IACR,MAAM,EAAE,MAAM,CAAA;CACd,CAAA;AAED,uDAAuD;AACvD,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG;IACtD,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,8DAA8D;AAC9D,MAAM,MAAM,0BAA0B,GAAG,mBAAmB,GAAG;IAC9D,GAAG,EAAE,MAAM,CAAA;CACX,CAAA;AAED,wDAAwD;AACxD,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG;IACvD,IAAI,EAAE,MAAM,EAAE,CAAA;CACd,CAAA;AAED,yDAAyD;AACzD,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACxD,OAAO,EAAE,MAAM,CAAA;CACf,CAAA;AAED,sCAAsC;AACtC,MAAM,MAAM,eAAe,GAAG,kBAAkB,GAAG,0BAA0B,GAAG,mBAAmB,GAAG,oBAAoB,CAAA;AAE1H,+DAA+D;AAC/D,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAEhD,oEAAoE;AACpE,MAAM,MAAM,uBAAuB,GAAG,kBAAkB,CAAA;AAExD,oEAAoE;AACpE,MAAM,MAAM,uBAAuB,GAAG,0BAA0B,CAAA;AAEhE,uEAAuE;AACvE,MAAM,MAAM,0BAA0B,GAAG,0BAA0B,CAAA;AAEnE,qEAAqE;AACrE,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,CAAA;AAE1D,sEAAsE;AACtE,MAAM,MAAM,yBAAyB,GAAG,oBAAoB,CAAA;AAE5D,sEAAsE;AACtE,MAAM,MAAM,oBAAoB,GAAG,eAAe,CAAA;AAElD,qDAAqD;AACrD,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAA;AAElD,0DAA0D;AAC1D,MAAM,MAAM,yBAAyB,GAAG,kBAAkB,CAAA;AAE1D,0DAA0D;AAC1D,MAAM,MAAM,yBAAyB,GAAG,0BAA0B,CAAA;AAElE,6DAA6D;AAC7D,MAAM,MAAM,4BAA4B,GAAG,0BAA0B,CAAA;AAErE,2DAA2D;AAC3D,MAAM,MAAM,0BAA0B,GAAG,mBAAmB,CAAA;AAE5D,4DAA4D;AAC5D,MAAM,MAAM,2BAA2B,GAAG,oBAAoB,CAAA;AAE9D,4DAA4D;AAC5D,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAA"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAErC,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,CAAA;AAE7C,qDAAqD;AACrD,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAEvE,gDAAgD;AAChD,MAAM,MAAM,cAAc,GAAG;IAC5B,gCAAgC;IAChC,MAAM,EAAE,aAAa,CAAA;IACrB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,KAAK,mBAAmB,GAAG,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAA;CACd,CAAC,CAAA;AAEF,uDAAuD;AACvD,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG;IACtD,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,8DAA8D;AAC9D,MAAM,MAAM,0BAA0B,GAAG,mBAAmB,GAAG;IAC9D,GAAG,EAAE,MAAM,CAAA;CACX,CAAA;AAED,wDAAwD;AACxD,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG;IACvD,IAAI,EAAE,MAAM,EAAE,CAAA;CACd,CAAA;AAED,yDAAyD;AACzD,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACxD,OAAO,EAAE,MAAM,CAAA;CACf,CAAA;AAED,sCAAsC;AACtC,MAAM,MAAM,eAAe,GAAG,kBAAkB,GAAG,0BAA0B,GAAG,mBAAmB,GAAG,oBAAoB,CAAA;AAE1H,mDAAmD;AACnD,eAAO,MAAM,eAAe,oDAAqD,CAAA;AAKjF,wDAAwD;AACxD,eAAO,MAAM,oBAAoB,uDAwB/B,CAAA"}
@@ -1,2 +1,32 @@
1
- export {};
1
+ import { defineProtocolSchema, invalidProtocolPayload, validProtocolPayload } from '../schema.js';
2
+ import { compact, optionalEnum, optionalString, readFields, requireObject } from '../schemaFields.js';
3
+ /** Operations accepted by POST /storage/<area>. */
4
+ export const STORAGE_ACTIONS = ['get', 'set', 'remove', 'list', 'clear'];
5
+ /** Operations that address a single key. */
6
+ const KEYED_STORAGE_ACTIONS = new Set(['get', 'set', 'remove']);
7
+ /** Schema for POST /storage/<area> request payloads. */
8
+ export const storageRequestSchema = defineProtocolSchema((value) => {
9
+ const invalid = requireObject(value);
10
+ if (invalid)
11
+ return invalid;
12
+ const fields = readFields(value, {
13
+ action: (source, key) => optionalEnum(source, key, STORAGE_ACTIONS),
14
+ key: optionalString,
15
+ value: optionalString,
16
+ origin: optionalString,
17
+ });
18
+ if (!fields.ok)
19
+ return fields;
20
+ const { action, key, value: entryValue, origin } = fields.value;
21
+ if (action == null) {
22
+ return invalidProtocolPayload(`action must be one of: ${STORAGE_ACTIONS.join(', ')}`);
23
+ }
24
+ if (KEYED_STORAGE_ACTIONS.has(action) && !key) {
25
+ return invalidProtocolPayload(`key is required for the ${action} action`);
26
+ }
27
+ if (action === 'set' && typeof entryValue !== 'string') {
28
+ return invalidProtocolPayload('value is required for the set action');
29
+ }
30
+ return validProtocolPayload(compact({ action, key, value: entryValue, origin }));
31
+ });
2
32
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/protocol/http/storage.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/protocol/http/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACjG,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAkDrG,mDAAmD;AACnD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,CAAA;AAEjF,4CAA4C;AAC5C,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;AAE9E,wDAAwD;AACxD,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAiB,CAAC,KAAK,EAAE,EAAE;IAClF,MAAM,OAAO,GAAG,aAAa,CAAiB,KAAK,CAAC,CAAA;IACpD,IAAI,OAAO;QAAE,OAAO,OAAO,CAAA;IAE3B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAgC,EAAE;QAC3D,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,eAAe,CAAC;QACnE,GAAG,EAAE,cAAc;QACnB,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,cAAc;KACtB,CAAC,CAAA;IACF,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAA;IAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAA;IAE/D,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,sBAAsB,CAAC,0BAA0B,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACtF,CAAC;IACD,IAAI,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/C,OAAO,sBAAsB,CAAC,2BAA2B,MAAM,SAAS,CAAC,CAAA;IAC1E,CAAC;IACD,IAAI,MAAM,KAAK,KAAK,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO,sBAAsB,CAAC,sCAAsC,CAAC,CAAA;IACtE,CAAC;IAED,OAAO,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;AACjF,CAAC,CAAC,CAAA"}
@@ -1,3 +1,4 @@
1
+ import type { ErrorDetail, Ok } from './errors.js';
1
2
  /**
2
3
  * CPU throttle state.
3
4
  * Rate 1 = no throttle, 4 = 4x slowdown. Must be >= 1.
@@ -13,36 +14,28 @@ export type ThrottleRequest = {
13
14
  action: 'clear';
14
15
  };
15
16
  /** POST /throttle response for the `set` action. */
16
- export type ThrottleSetResponse = {
17
- ok: true;
17
+ export type ThrottleSetResponse = Ok<{
18
18
  attached: boolean;
19
19
  applied: boolean;
20
20
  state: ThrottleState | null;
21
- error?: {
22
- message: string;
23
- code?: string;
24
- } | null;
25
- };
21
+ error?: ErrorDetail | null;
22
+ }>;
26
23
  /** POST /throttle response for the `clear` action. */
27
- export type ThrottleClearResponse = {
28
- ok: true;
24
+ export type ThrottleClearResponse = Ok<{
29
25
  attached: boolean;
30
26
  applied: boolean;
31
27
  state: null;
32
- error?: {
33
- message: string;
34
- code?: string;
35
- } | null;
36
- };
28
+ error?: ErrorDetail | null;
29
+ }>;
37
30
  /** GET /throttle response. */
38
- export type ThrottleStatusResponse = {
39
- ok: true;
31
+ export type ThrottleStatusResponse = Ok<{
40
32
  attached: boolean;
41
33
  applied: boolean;
42
34
  state: ThrottleState | null;
43
- lastError?: {
44
- message: string;
45
- code?: string;
46
- } | null;
47
- };
35
+ lastError?: ErrorDetail | null;
36
+ }>;
37
+ /** Actions accepted by POST /throttle. */
38
+ export declare const THROTTLE_ACTIONS: readonly ["set", "clear"];
39
+ /** Schema for POST /throttle request payloads. */
40
+ export declare const throttleRequestSchema: import("../schema.js").ProtocolSchema<ThrottleRequest>;
48
41
  //# sourceMappingURL=throttle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/throttle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,sCAAsC;AACtC,MAAM,MAAM,eAAe,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAA;AAEnF,oDAAoD;AACpD,MAAM,MAAM,mBAAmB,GAAG;IACjC,EAAE,EAAE,IAAI,CAAA;IACR,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAA;IAC3B,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CACjD,CAAA;AAED,sDAAsD;AACtD,MAAM,MAAM,qBAAqB,GAAG;IACnC,EAAE,EAAE,IAAI,CAAA;IACR,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CACjD,CAAA;AAED,8BAA8B;AAC9B,MAAM,MAAM,sBAAsB,GAAG;IACpC,EAAE,EAAE,IAAI,CAAA;IACR,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAA;IAC3B,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CACrD,CAAA"}
1
+ {"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/throttle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAElD;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,sCAAsC;AACtC,MAAM,MAAM,eAAe,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAA;AAEnF,oDAAoD;AACpD,MAAM,MAAM,mBAAmB,GAAG,EAAE,CAAC;IACpC,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAA;IAC3B,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAC1B,CAAC,CAAA;AAEF,sDAAsD;AACtD,MAAM,MAAM,qBAAqB,GAAG,EAAE,CAAC;IACtC,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAC1B,CAAC,CAAA;AAEF,8BAA8B;AAC9B,MAAM,MAAM,sBAAsB,GAAG,EAAE,CAAC;IACvC,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAA;IAC3B,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAC9B,CAAC,CAAA;AAEF,0CAA0C;AAC1C,eAAO,MAAM,gBAAgB,2BAA4B,CAAA;AAEzD,kDAAkD;AAClD,eAAO,MAAM,qBAAqB,wDAsBhC,CAAA"}