@lovrozagar/oat 0.1.0 → 0.2.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.
- package/README.md +1316 -176
- package/dist/cli.js +18 -16
- package/dist/config/define-config.d.ts +50 -0
- package/dist/config/define-config.d.ts.map +1 -1
- package/dist/config/define-config.js.map +1 -1
- package/dist/config/load.d.ts +1 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/reference/defects.d.ts.map +1 -1
- package/dist/reference/defects.js +4 -1
- package/dist/reference/defects.js.map +1 -1
- package/dist/reference/dialect.d.ts.map +1 -1
- package/dist/reference/dialect.js +4 -1
- package/dist/reference/dialect.js.map +1 -1
- package/dist/reference/http.d.ts.map +1 -1
- package/dist/reference/http.js +15 -22
- package/dist/reference/http.js.map +1 -1
- package/dist/reference/model.d.ts.map +1 -1
- package/dist/reference/model.js +27 -3
- package/dist/reference/model.js.map +1 -1
- package/dist/reference/query.d.ts.map +1 -1
- package/dist/reference/query.js +19 -35
- package/dist/reference/query.js.map +1 -1
- package/dist/reference/spec.d.ts.map +1 -1
- package/dist/reference/spec.js +8 -6
- package/dist/reference/spec.js.map +1 -1
- package/dist/reference/store-api.d.ts.map +1 -1
- package/dist/reference/store-api.js +4 -1
- package/dist/reference/store-api.js.map +1 -1
- package/dist/reference/stores/memory.d.ts.map +1 -1
- package/dist/reference/stores/memory.js +1 -3
- package/dist/reference/stores/memory.js.map +1 -1
- package/dist/reference/stores/postgres.d.ts.map +1 -1
- package/dist/reference/stores/postgres.js +8 -8
- package/dist/reference/stores/postgres.js.map +1 -1
- package/dist/reference/stores/sqlite-driver.d.ts.map +1 -1
- package/dist/reference/stores/sqlite-driver.js +2 -4
- package/dist/reference/stores/sqlite-driver.js.map +1 -1
- package/dist/reference/stores/sqlite.d.ts.map +1 -1
- package/dist/reference/stores/sqlite.js +22 -27
- package/dist/reference/stores/sqlite.js.map +1 -1
- package/dist/report/console.d.ts.map +1 -1
- package/dist/report/console.js +4 -4
- package/dist/report/console.js.map +1 -1
- package/dist/report/matrix.d.ts +6 -5
- package/dist/report/matrix.d.ts.map +1 -1
- package/dist/report/matrix.js +82 -52
- package/dist/report/matrix.js.map +1 -1
- package/dist/report/render.d.ts +8 -0
- package/dist/report/render.d.ts.map +1 -1
- package/dist/report/render.js +40 -20
- package/dist/report/render.js.map +1 -1
- package/dist/runtime/async.d.ts.map +1 -1
- package/dist/runtime/async.js +4 -1
- package/dist/runtime/async.js.map +1 -1
- package/dist/runtime/auth.d.ts.map +1 -1
- package/dist/runtime/auth.js +12 -16
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/checks.d.ts.map +1 -1
- package/dist/runtime/checks.js +195 -218
- package/dist/runtime/checks.js.map +1 -1
- package/dist/runtime/client.d.ts +12 -1
- package/dist/runtime/client.d.ts.map +1 -1
- package/dist/runtime/client.js +17 -2
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/finding.d.ts.map +1 -1
- package/dist/runtime/finding.js.map +1 -1
- package/dist/runtime/fixture.d.ts.map +1 -1
- package/dist/runtime/fixture.js.map +1 -1
- package/dist/runtime/profile.d.ts +30 -0
- package/dist/runtime/profile.d.ts.map +1 -0
- package/dist/runtime/profile.js +46 -0
- package/dist/runtime/profile.js.map +1 -0
- package/dist/runtime/progress.js +4 -4
- package/dist/runtime/progress.js.map +1 -1
- package/dist/runtime/rate-limit.d.ts +53 -0
- package/dist/runtime/rate-limit.d.ts.map +1 -0
- package/dist/runtime/rate-limit.js +165 -0
- package/dist/runtime/rate-limit.js.map +1 -0
- package/dist/runtime/run.d.ts +15 -1
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +137 -51
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/validate.d.ts.map +1 -1
- package/dist/runtime/validate.js.map +1 -1
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js.map +1 -1
- package/dist/spec/collection.d.ts.map +1 -1
- package/dist/spec/collection.js +2 -5
- package/dist/spec/collection.js.map +1 -1
- package/dist/spec/conventions.d.ts.map +1 -1
- package/dist/spec/conventions.js +2 -2
- package/dist/spec/conventions.js.map +1 -1
- package/dist/spec/extensions.d.ts +11 -0
- package/dist/spec/extensions.d.ts.map +1 -1
- package/dist/spec/extensions.js +17 -6
- package/dist/spec/extensions.js.map +1 -1
- package/dist/spec/graph.d.ts +2 -1
- package/dist/spec/graph.d.ts.map +1 -1
- package/dist/spec/graph.js +4 -4
- package/dist/spec/graph.js.map +1 -1
- package/dist/spec/load.d.ts.map +1 -1
- package/dist/spec/load.js +1 -3
- package/dist/spec/load.js.map +1 -1
- package/labs/README.md +63 -63
- package/labs/annotated-openapi.yaml +5 -5
- package/labs/demo.mjs +2 -10
- package/labs/{anyrow.config.ts → oob-auth.config.ts} +9 -9
- package/package.json +89 -78
package/dist/runtime/client.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** HTTP client with a full transcript, so every finding can cite the exchange that produced it. */
|
|
2
|
+
import type { RateLimiter } from "./rate-limit.ts";
|
|
2
3
|
export interface Exchange {
|
|
3
4
|
seq: number;
|
|
4
5
|
method: string;
|
|
@@ -9,6 +10,12 @@ export interface Exchange {
|
|
|
9
10
|
responseHeaders: Record<string, string>;
|
|
10
11
|
responseBody: unknown;
|
|
11
12
|
durationMs: number;
|
|
13
|
+
/** Rate-limit category this request was paced against, when one matched. */
|
|
14
|
+
rateLimitCategory?: string;
|
|
15
|
+
/** Where that category came from — a `spec.*` finding only ever cites a `"tag"` rejection. */
|
|
16
|
+
rateLimitSource?: "tag" | "config";
|
|
17
|
+
/** Whether the bucket had a token without waiting — oat believes it was under its own pace. */
|
|
18
|
+
rateLimitHadRoom?: boolean;
|
|
12
19
|
}
|
|
13
20
|
export interface RequestOptions {
|
|
14
21
|
headers?: Record<string, string>;
|
|
@@ -29,6 +36,8 @@ export declare class Client {
|
|
|
29
36
|
*/
|
|
30
37
|
private readonly maxInFlight;
|
|
31
38
|
private readonly onExchange?;
|
|
39
|
+
/** Paces requests per declared category. `undefined` when nothing is configured. */
|
|
40
|
+
private readonly rateLimiter?;
|
|
32
41
|
readonly transcript: Exchange[];
|
|
33
42
|
private seq;
|
|
34
43
|
private inFlight;
|
|
@@ -41,7 +50,9 @@ export declare class Client {
|
|
|
41
50
|
* faster — many APIs queue or throttle, so an unbounded burst trades wall-clock for
|
|
42
51
|
* nothing and risks tripping rate limits that then look like backend defects.
|
|
43
52
|
*/
|
|
44
|
-
maxInFlight?: number, onExchange?: ((exchange: Exchange) => void) | undefined
|
|
53
|
+
maxInFlight?: number, onExchange?: ((exchange: Exchange) => void) | undefined,
|
|
54
|
+
/** Paces requests per declared category. `undefined` when nothing is configured. */
|
|
55
|
+
rateLimiter?: RateLimiter | undefined);
|
|
45
56
|
/** Admission control. Held for the duration of one request, released in a finally. */
|
|
46
57
|
private acquire;
|
|
47
58
|
private release;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"AAAA,mGAAmG;AAEnG,MAAM,WAAW,QAAQ;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"AAAA,mGAAmG;AAEnG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,MAAM,WAAW,QAAQ;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,8FAA8F;IAC9F,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IAClC,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,cAAc;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAA;IACnD,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,8FAA8F;IAC9F,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,qBAAa,MAAM;IAOjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC5B,oFAAoF;IACpF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAlB9B,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAK;IACpC,OAAO,CAAC,GAAG,CAAI;IACf,OAAO,CAAC,QAAQ,CAAI;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;gBAG9B,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAC3D;;;;;;OAMG;IACc,WAAW,SAAI,EACf,UAAU,CAAC,GAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,aAAA;IAC1D,oFAAoF;IACnE,WAAW,CAAC,EAAE,WAAW,YAAA;IAG3C,sFAAsF;YACxE,OAAO;IASrB,OAAO,CAAC,OAAO;IAKT,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;IA0D5F,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAGlE;AAED,MAAM,WAAW,WAAW;IAC3B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,WAAgB,GAAG,MAAM,CAuB5E"}
|
package/dist/runtime/client.js
CHANGED
|
@@ -4,6 +4,7 @@ export class Client {
|
|
|
4
4
|
globalHeaders;
|
|
5
5
|
maxInFlight;
|
|
6
6
|
onExchange;
|
|
7
|
+
rateLimiter;
|
|
7
8
|
transcript = [];
|
|
8
9
|
seq = 0;
|
|
9
10
|
inFlight = 0;
|
|
@@ -16,11 +17,14 @@ export class Client {
|
|
|
16
17
|
* faster — many APIs queue or throttle, so an unbounded burst trades wall-clock for
|
|
17
18
|
* nothing and risks tripping rate limits that then look like backend defects.
|
|
18
19
|
*/
|
|
19
|
-
maxInFlight = 4, onExchange
|
|
20
|
+
maxInFlight = 4, onExchange,
|
|
21
|
+
/** Paces requests per declared category. `undefined` when nothing is configured. */
|
|
22
|
+
rateLimiter) {
|
|
20
23
|
this.baseUrl = baseUrl;
|
|
21
24
|
this.globalHeaders = globalHeaders;
|
|
22
25
|
this.maxInFlight = maxInFlight;
|
|
23
26
|
this.onExchange = onExchange;
|
|
27
|
+
this.rateLimiter = rateLimiter;
|
|
24
28
|
}
|
|
25
29
|
/** Admission control. Held for the duration of one request, released in a finally. */
|
|
26
30
|
async acquire() {
|
|
@@ -48,11 +52,20 @@ export class Client {
|
|
|
48
52
|
const init = { headers, method };
|
|
49
53
|
if (options.body !== undefined)
|
|
50
54
|
init.body = JSON.stringify(options.body);
|
|
55
|
+
/* Two independent constraints, both held: maxInFlight bounds concurrency with no notion of
|
|
56
|
+
* time, a rate-limit category bounds throughput over time. The in-flight slot is acquired
|
|
57
|
+
* first and released in the same finally as before — pacing sits entirely inside that
|
|
58
|
+
* window and never changes what maxInFlight itself guarantees. */
|
|
59
|
+
const rule = this.rateLimiter?.resolve(method.toUpperCase(), url.pathname);
|
|
51
60
|
await this.acquire();
|
|
52
|
-
|
|
61
|
+
let rateLimitHadRoom;
|
|
62
|
+
let started;
|
|
53
63
|
let response;
|
|
54
64
|
let text;
|
|
55
65
|
try {
|
|
66
|
+
if (rule !== undefined)
|
|
67
|
+
rateLimitHadRoom = await this.rateLimiter?.acquire(rule);
|
|
68
|
+
started = performance.now();
|
|
56
69
|
response = await fetch(url, init);
|
|
57
70
|
text = await response.text();
|
|
58
71
|
}
|
|
@@ -77,6 +90,8 @@ export class Client {
|
|
|
77
90
|
seq: this.seq,
|
|
78
91
|
status: response.status,
|
|
79
92
|
url: url.toString(),
|
|
93
|
+
...(rule === undefined ? {} : { rateLimitCategory: rule.category, rateLimitSource: rule.source }),
|
|
94
|
+
...(rateLimitHadRoom === undefined ? {} : { rateLimitHadRoom }),
|
|
80
95
|
};
|
|
81
96
|
this.transcript.push(exchange);
|
|
82
97
|
this.onExchange?.(exchange);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"AAAA,mGAAmG;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finding.d.ts","sourceRoot":"","sources":["../../src/runtime/finding.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,MAAM,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"finding.d.ts","sourceRoot":"","sources":["../../src/runtime/finding.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,SAAS,CAAA;AAExG,MAAM,WAAW,OAAO;IACvB,gGAAgG;IAChG,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,QAAQ,EAAE,CAAA;CACpB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAA;CACd;AAED,qBAAa,gBAAgB;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAK;IACjC,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,CAAK;IAE1C;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;IAKpE,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI9B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI;IAInG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI;IAIpG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI;IAIhG,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIzE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAW5E,MAAM,IAAI,MAAM,EAAE;IAIlB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE;CAGtC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finding.js","sourceRoot":"","sources":["../../src/runtime/finding.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"finding.js","sourceRoot":"","sources":["../../src/runtime/finding.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgCH,MAAM,OAAO,gBAAgB;IACnB,QAAQ,GAAc,EAAE,CAAA;IACxB,YAAY,GAAmB,EAAE,CAAA;IAE1C;;;;OAIG;IACH,UAAU,CAAC,KAAa,EAAE,MAAc,EAAE,MAAc;QACvD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QACjD,OAAO,SAAS,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,OAAgB;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,MAAc,EAAE,OAAe,EAAE,MAAc,EAAE,QAAoB;QAC3F,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAA;IAClF,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,MAAc,EAAE,OAAe,EAAE,MAAc,EAAE,QAAoB;QAC5F,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAA;IAC/E,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,MAAc,EAAE,OAAe,EAAE,MAAc,EAAE,QAAoB;QACxF,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAA;IAC/E,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,OAAe,EAAE,MAAc;QACjE,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;IACvF,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,MAAc,EAAE,OAAe,EAAE,KAAa;QACpE,IAAI,CAAC,MAAM,CAAC;YACX,KAAK;YACL,MAAM,EAAE,cAAc,KAAK,EAAE;YAC7B,MAAM;YACN,QAAQ,EAAE,EAAE;YACZ,OAAO;YACP,OAAO,EAAE,SAAS;SAClB,CAAC,CAAA;IACH,CAAC;IAED,MAAM;QACL,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC9D,CAAC;IAED,SAAS,CAAC,OAAgB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAA;IAC1D,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../src/runtime/fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,OAAO,GAChB,UAAU,GACV,eAAe,GACf,cAAc,GACd,YAAY,GACZ,SAAS,GACT,eAAe,GACf,UAAU,CAAA;AAEb,eAAO,MAAM,MAAM,EAAE,SAAS,OAAO,EAQpC,CAAA;AAED,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CAQrD;AAED,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAYrC,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC7B;AAED,wBAAgB,WAAW,
|
|
1
|
+
{"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../src/runtime/fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,OAAO,GAChB,UAAU,GACV,eAAe,GACf,cAAc,GACd,YAAY,GACZ,SAAS,GACT,eAAe,GACf,UAAU,CAAA;AAEb,eAAO,MAAM,MAAM,EAAE,SAAS,OAAO,EAQpC,CAAA;AAED,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CAQrD;AAED,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAYrC,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC7B;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,SAAS,OAAO,EAAW,GAAG,YAAY,EAAE,CAKnH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../src/runtime/fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,MAAM,CAAC,MAAM,MAAM,GAAuB;IACzC,UAAU;IACV,eAAe;IACf,cAAc;IACd,YAAY;IACZ,SAAS;IACT,eAAe;IACf,UAAU;CACV,CAAA;AAED,8DAA8D;AAC9D,MAAM,UAAU,UAAU,CAAC,IAAY;IACtC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAA;IAClB,OAAO,GAAG,EAAE;QACX,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QACxC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC9C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAA;IAC7C,CAAC,CAAA;AACF,CAAC;AAID,MAAM,OAAO,GAA4B;IACxC,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,EAAE;IACZ,eAAe,EAAE,0BAA0B;IAC3C,cAAc,EAAE,yBAAyB;IACzC,aAAa,EAAE,yBAAyB;IACxC,YAAY,EAAE,mBAAmB;IACjC,OAAO,EAAE,gBAAgB;CACzB,CAAA;AAOD,MAAM,UAAU,WAAW,
|
|
1
|
+
{"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../src/runtime/fixture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost gating: which operations a run is allowed to touch.
|
|
3
|
+
*
|
|
4
|
+
* `x-cost` and `x-destructive` are parsed onto every `OperationModel` regardless of whether a
|
|
5
|
+
* profile is active — this module is the only thing that reads them for gating. Everything else
|
|
6
|
+
* about an excluded operation reuses the run's existing degraded-mode machinery: nulling the op
|
|
7
|
+
* out of the check context and reporting a named `COVERAGE_GAP`, the same path a genuinely broken
|
|
8
|
+
* create already takes. An excluded operation must never look like a passed check.
|
|
9
|
+
*/
|
|
10
|
+
import type { ProfileSpec } from "../config/define-config.ts";
|
|
11
|
+
import type { OperationModel } from "../spec/graph.ts";
|
|
12
|
+
export declare const BUILTIN_PROFILES: Record<string, ProfileSpec>;
|
|
13
|
+
export interface ResolvedProfile {
|
|
14
|
+
name: string;
|
|
15
|
+
spec: ProfileSpec;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Picks the active profile by name, falling back to `"full"` — the same shape as today's
|
|
19
|
+
* behaviour, so a config that never mentions a profile runs identically to before this existed.
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveProfile(name: string | undefined, configured: Record<string, ProfileSpec> | undefined): ResolvedProfile;
|
|
22
|
+
/**
|
|
23
|
+
* Why a profile excludes this operation, or `null` when it does not.
|
|
24
|
+
*
|
|
25
|
+
* Checked in order of specificity: an explicit `exclude` entry always wins, `excludeDestructive`
|
|
26
|
+
* next, then the cost ceiling — so a reason a reader sees is always the most direct one, not
|
|
27
|
+
* whichever rule happened to be checked first.
|
|
28
|
+
*/
|
|
29
|
+
export declare function excludedByProfile(op: OperationModel, spec: ProfileSpec): string | null;
|
|
30
|
+
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/runtime/profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAGxD,CAAA;AAID,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,WAAW,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC7B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,SAAS,GACjD,eAAe,CAQjB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAStF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost gating: which operations a run is allowed to touch.
|
|
3
|
+
*
|
|
4
|
+
* `x-cost` and `x-destructive` are parsed onto every `OperationModel` regardless of whether a
|
|
5
|
+
* profile is active — this module is the only thing that reads them for gating. Everything else
|
|
6
|
+
* about an excluded operation reuses the run's existing degraded-mode machinery: nulling the op
|
|
7
|
+
* out of the check context and reporting a named `COVERAGE_GAP`, the same path a genuinely broken
|
|
8
|
+
* create already takes. An excluded operation must never look like a passed check.
|
|
9
|
+
*/
|
|
10
|
+
export const BUILTIN_PROFILES = {
|
|
11
|
+
cheap: { maxCost: "low" },
|
|
12
|
+
full: {},
|
|
13
|
+
};
|
|
14
|
+
const COST_RANK = { high: 2, low: 0, medium: 1 };
|
|
15
|
+
/**
|
|
16
|
+
* Picks the active profile by name, falling back to `"full"` — the same shape as today's
|
|
17
|
+
* behaviour, so a config that never mentions a profile runs identically to before this existed.
|
|
18
|
+
*/
|
|
19
|
+
export function resolveProfile(name, configured) {
|
|
20
|
+
const activeName = name ?? "full";
|
|
21
|
+
const spec = configured?.[activeName] ?? BUILTIN_PROFILES[activeName];
|
|
22
|
+
if (spec === undefined) {
|
|
23
|
+
const known = [...new Set([...Object.keys(BUILTIN_PROFILES), ...Object.keys(configured ?? {})])];
|
|
24
|
+
throw new Error(`oat: profile "${activeName}" is not defined. Known: ${known.join(", ")}`);
|
|
25
|
+
}
|
|
26
|
+
return { name: activeName, spec };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Why a profile excludes this operation, or `null` when it does not.
|
|
30
|
+
*
|
|
31
|
+
* Checked in order of specificity: an explicit `exclude` entry always wins, `excludeDestructive`
|
|
32
|
+
* next, then the cost ceiling — so a reason a reader sees is always the most direct one, not
|
|
33
|
+
* whichever rule happened to be checked first.
|
|
34
|
+
*/
|
|
35
|
+
export function excludedByProfile(op, spec) {
|
|
36
|
+
if (spec.exclude?.includes(op.operationId) === true) {
|
|
37
|
+
return `excluded by name (operationId: ${op.operationId})`;
|
|
38
|
+
}
|
|
39
|
+
if (spec.excludeDestructive === true && op.destructive)
|
|
40
|
+
return "x-destructive";
|
|
41
|
+
if (spec.maxCost !== undefined && COST_RANK[op.cost] > COST_RANK[spec.maxCost]) {
|
|
42
|
+
return `x-cost: ${op.cost}`;
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/runtime/profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,CAAC,MAAM,gBAAgB,GAAgC;IAC5D,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;IACzB,IAAI,EAAE,EAAE;CACR,CAAA;AAED,MAAM,SAAS,GAA8C,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;AAO3F;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC7B,IAAwB,EACxB,UAAmD;IAEnD,MAAM,UAAU,GAAG,IAAI,IAAI,MAAM,CAAA;IACjC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC,UAAU,CAAC,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAA;IACrE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAChG,MAAM,IAAI,KAAK,CAAC,iBAAiB,UAAU,4BAA4B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3F,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAkB,EAAE,IAAiB;IACtE,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;QACrD,OAAO,kCAAkC,EAAE,CAAC,WAAW,GAAG,CAAA;IAC3D,CAAC;IACD,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,IAAI,EAAE,CAAC,WAAW;QAAE,OAAO,eAAe,CAAA;IAC9E,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChF,OAAO,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;IAC5B,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC"}
|
package/dist/runtime/progress.js
CHANGED
|
@@ -131,10 +131,10 @@ export function createStderrProgress(startedAt = Date.now()) {
|
|
|
131
131
|
const keyChanged = key !== lastKey;
|
|
132
132
|
lastKey = key;
|
|
133
133
|
const stalled = snap.last !== undefined && Date.now() - snap.last.at >= STALL_MS;
|
|
134
|
-
const force = snap.phase === "done"
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
134
|
+
const force = snap.phase === "done" ||
|
|
135
|
+
snap.phase === "load" ||
|
|
136
|
+
snap.phase === "auth" ||
|
|
137
|
+
(snap.phase === "seed" && snap.check === undefined);
|
|
138
138
|
const due = Date.now() - lastWrite >= 2_000;
|
|
139
139
|
if (force || keyChanged || stalled || due)
|
|
140
140
|
write(snap);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/runtime/progress.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/runtime/progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAyBH,MAAM,YAAY,GAAG,KAAK,CAAA;AAC1B,MAAM,QAAQ,GAAG,MAAM,CAAA;AAEvB,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAClC,OAAO;IACP,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,KAAK;IACL,KAAK;IACL,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,SAAS;IACT,YAAY;CACZ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,2DAA2D;IAC3D,oGAAoG;IACpG,qFAAqF;IACrF,qDAAqD;IACrD,sDAAsD;IACtD,yDAAyD;IACzD,mEAAmE;IACnE,mDAAmD;IACnD,mFAAmF;IACnF,iDAAiD;CACjD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ,MAAM,UAAU,kBAAkB,CAAC,IAAsB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAC1E,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC3B,OAAO,MAAM,CAAC;QACb,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QAC/B,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,UAAU,EAAE,CAAC,CAAC,UAAU;KACxB,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAsB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACzE,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC3B,OAAO;QACN,GAAG;QACH,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,UAAU;KACZ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAsB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAC3E,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC3B,OAAO,IAAI,CAAC,SAAS,CAAC;QACrB,KAAK,EAAE,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;QACvC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QAC9B,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;QAChC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;QAC3B,IAAI,EAAE,IAAI,CAAC,QAAQ;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI;QAC/B,OAAO,EAAE,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACrD,OAAO,EAAE,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACrD,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;QAC1C,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;QACjC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACpC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,IAAI,CAAC,QAAQ;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QAC/B,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QAC/B,KAAK,EAAE,GAAG;KACV,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;IAI1D,IAAI,MAAoC,CAAA;IACxC,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,IAAI,MAAM,GAAG,KAAK,CAAA;IAElB,MAAM,KAAK,GAAG,CAAC,IAAsB,EAAQ,EAAE;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,GAAG,IAAI,CAAA;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,iBAAiB,IAAI,CAAC,CAAA;QAC/C,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrD,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAM;QAChC,KAAK,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC,CAAA;IACxD,CAAC,EAAE,YAAY,CAAC,CAAA;IAChB,KAAK,CAAC,KAAK,EAAE,CAAA;IAEb,OAAO;QACN,IAAI,CAAC,IAAI;YACR,MAAM,GAAG,IAAI,CAAA;YACb,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;YAC1F,MAAM,UAAU,GAAG,GAAG,KAAK,OAAO,CAAA;YAClC,OAAO,GAAG,GAAG,CAAA;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,QAAQ,CAAA;YAChF,MAAM,KAAK,GACV,IAAI,CAAC,KAAK,KAAK,MAAM;gBACrB,IAAI,CAAC,KAAK,KAAK,MAAM;gBACrB,IAAI,CAAC,KAAK,KAAK,MAAM;gBACrB,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,KAAK,CAAA;YAC3C,IAAI,KAAK,IAAI,UAAU,IAAI,OAAO,IAAI,GAAG;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QACvD,CAAC;QACD,IAAI;YACH,aAAa,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;KACD,CAAA;AACF,CAAC;AAED,SAAS,MAAM,CACd,IAAsB,EACtB,GAAW;IAkBX,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,QAAQ,CAAA;IACzE,OAAO;QACN,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG;QACxB,IAAI,EAAE,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QACrE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3D,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,GAAG;QAC1B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9D,OAAO,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChF,OAAO,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QACrE,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;QACxD,GAAG,EAAE,IAAI,CAAC,OAAO,IAAI,GAAG;QACxB,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAChE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QAChC,KAAK,EAAE,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;KACtE,CAAA;AACF,CAAC;AAED,SAAS,MAAM,CAAC,KAA6B;IAC5C,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACrB,IAAI,KAAK,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,GAAG,GAAG,IAAI,KAAK,EAAE,CAAA;QACrE,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAA;IACzC,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAA;AACZ,CAAC;AAED,oFAAoF;AACpF,SAAS,WAAW,CAAC,GAAW;IAC/B,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3B,OAAO,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,GAAG,CAAA;IACX,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate-limit pacing: keeps oat's own traffic under a per-category budget so a documented limit is
|
|
3
|
+
* respected rather than tripped and reported as a backend defect.
|
|
4
|
+
*
|
|
5
|
+
* Two sources compile down to the same shape. `config.rateLimits` is checked first — it is the
|
|
6
|
+
* operator's belief about *this* environment and wins over a general document claim. `x-rate-limit`
|
|
7
|
+
* tags fill in anything the config left uncovered. Either way the result is one ordered list of
|
|
8
|
+
* `{ test, category, rps, source }`: `Client` resolves a request's category by testing it against
|
|
9
|
+
* this list, never by knowing about operationIds or path templates itself.
|
|
10
|
+
*/
|
|
11
|
+
import type { RateLimitSpec } from "../config/define-config.ts";
|
|
12
|
+
import type { SpecModel } from "../spec/graph.ts";
|
|
13
|
+
export interface CompiledRateLimitRule {
|
|
14
|
+
test: (method: string, pathname: string) => boolean;
|
|
15
|
+
category: string;
|
|
16
|
+
rps: number;
|
|
17
|
+
/** A 429 against a tag-sourced rule is a claim the document made; against config, it is the
|
|
18
|
+
* operator's own guess about the environment — only the former is ever a finding. */
|
|
19
|
+
source: "tag" | "config";
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Builds the ordered rulebook `Client` consults on every request.
|
|
23
|
+
*
|
|
24
|
+
* Config rules come first, so they win ties against a tag covering the same route. Tag-derived
|
|
25
|
+
* rules are grouped by category and given the *minimum* rps any operation in that category
|
|
26
|
+
* declares — the conservative choice, since exceeding the smallest limit a shared budget names is
|
|
27
|
+
* what actually produces a 429. A category with no known rate anywhere gets no bucket: this only
|
|
28
|
+
* ever adds pacing where a rate is knowable, never removes coverage that existed before it.
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildRateLimitRules(model: SpecModel, configRules: readonly RateLimitSpec[] | undefined): CompiledRateLimitRule[];
|
|
31
|
+
/**
|
|
32
|
+
* A token bucket with a queue: concurrent requests against the same category are admitted one at
|
|
33
|
+
* a time, each computing its wait from the bucket's current state rather than racing on it.
|
|
34
|
+
* Burst capacity equals `rps` — up to one second's worth of headroom, the conventional default.
|
|
35
|
+
*/
|
|
36
|
+
export declare class RateBucket {
|
|
37
|
+
private readonly rps;
|
|
38
|
+
private tokens;
|
|
39
|
+
private last;
|
|
40
|
+
private queue;
|
|
41
|
+
constructor(rps: number);
|
|
42
|
+
/** Resolves once a token is consumed. Returns `false` when the caller had to wait for it. */
|
|
43
|
+
acquire(): Promise<boolean>;
|
|
44
|
+
}
|
|
45
|
+
/** Resolves a request's category from the compiled rulebook and paces it through a shared bucket. */
|
|
46
|
+
export declare class RateLimiter {
|
|
47
|
+
private readonly rules;
|
|
48
|
+
private readonly buckets;
|
|
49
|
+
constructor(rules: readonly CompiledRateLimitRule[]);
|
|
50
|
+
resolve(method: string, pathname: string): CompiledRateLimitRule | undefined;
|
|
51
|
+
acquire(rule: CompiledRateLimitRule): Promise<boolean>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=rate-limit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/runtime/rate-limit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,KAAK,EAAkB,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjE,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;IACnD,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX;yFACqF;IACrF,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAA;CACxB;AA0DD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,GAC/C,qBAAqB,EAAE,CAuCzB;AAED;;;;GAIG;AACH,qBAAa,UAAU;IAKV,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJhC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,KAAK,CAAmC;gBAEnB,GAAG,EAAE,MAAM;IAIxC,6FAA6F;IACvF,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;CAoBjC;AAED,qGAAqG;AACrG,qBAAa,WAAW;IAGX,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;gBAE3B,KAAK,EAAE,SAAS,qBAAqB,EAAE;IAEpE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAItE,OAAO,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;CAQ5D"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate-limit pacing: keeps oat's own traffic under a per-category budget so a documented limit is
|
|
3
|
+
* respected rather than tripped and reported as a backend defect.
|
|
4
|
+
*
|
|
5
|
+
* Two sources compile down to the same shape. `config.rateLimits` is checked first — it is the
|
|
6
|
+
* operator's belief about *this* environment and wins over a general document claim. `x-rate-limit`
|
|
7
|
+
* tags fill in anything the config left uncovered. Either way the result is one ordered list of
|
|
8
|
+
* `{ test, category, rps, source }`: `Client` resolves a request's category by testing it against
|
|
9
|
+
* this list, never by knowing about operationIds or path templates itself.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Turns a path template or a simple glob into an anchored regex.
|
|
13
|
+
*
|
|
14
|
+
* `{param}` segments (from an operation's own path template) and bare `*` segments (from a
|
|
15
|
+
* user-written pattern) both become `[^/]+`; `*` inside a segment becomes `[^/]*` so `item-*`
|
|
16
|
+
* matches a prefix without crossing a `/`. Deliberately not a full glob or regex language — the
|
|
17
|
+
* point of a config-level matcher is that it needs no coordination with the document, and a
|
|
18
|
+
* bigger grammar would need documenting on both ends.
|
|
19
|
+
*/
|
|
20
|
+
function compilePathPattern(pattern) {
|
|
21
|
+
const compiled = pattern
|
|
22
|
+
.split("/")
|
|
23
|
+
.map((segment) => {
|
|
24
|
+
if (segment === "*" || (segment.startsWith("{") && segment.endsWith("}")))
|
|
25
|
+
return "[^/]+";
|
|
26
|
+
return segment.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, "[^/]*");
|
|
27
|
+
})
|
|
28
|
+
.join("/");
|
|
29
|
+
return new RegExp(`^${compiled}$`);
|
|
30
|
+
}
|
|
31
|
+
/** Compiles one `match` string against the model — an operationId, a path pattern, or a category. */
|
|
32
|
+
function compileMatch(match, model) {
|
|
33
|
+
if (match.startsWith("category:")) {
|
|
34
|
+
const category = match.slice("category:".length).trim();
|
|
35
|
+
return model.operations
|
|
36
|
+
.filter((op) => op.rateLimit?.category === category)
|
|
37
|
+
.map((op) => {
|
|
38
|
+
const pathRegex = compilePathPattern(op.path);
|
|
39
|
+
const method = op.method.toUpperCase();
|
|
40
|
+
return { category, test: (m, p) => m === method && pathRegex.test(p) };
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
const op = model.byOperationId.get(match);
|
|
44
|
+
if (op !== undefined) {
|
|
45
|
+
const pathRegex = compilePathPattern(op.path);
|
|
46
|
+
const method = op.method.toUpperCase();
|
|
47
|
+
return [{ category: match, test: (m, p) => m === method && pathRegex.test(p) }];
|
|
48
|
+
}
|
|
49
|
+
/* "METHOD /pattern" or a bare "/pattern" matching any method. */
|
|
50
|
+
const spaceAt = match.indexOf(" ");
|
|
51
|
+
const methodPart = spaceAt === -1 ? null : match.slice(0, spaceAt).toUpperCase();
|
|
52
|
+
const pathPart = spaceAt === -1 ? match : match.slice(spaceAt + 1);
|
|
53
|
+
const pathRegex = compilePathPattern(pathPart);
|
|
54
|
+
return [
|
|
55
|
+
{
|
|
56
|
+
category: match,
|
|
57
|
+
test: (m, p) => (methodPart === null || methodPart === m) && pathRegex.test(p),
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Builds the ordered rulebook `Client` consults on every request.
|
|
63
|
+
*
|
|
64
|
+
* Config rules come first, so they win ties against a tag covering the same route. Tag-derived
|
|
65
|
+
* rules are grouped by category and given the *minimum* rps any operation in that category
|
|
66
|
+
* declares — the conservative choice, since exceeding the smallest limit a shared budget names is
|
|
67
|
+
* what actually produces a 429. A category with no known rate anywhere gets no bucket: this only
|
|
68
|
+
* ever adds pacing where a rate is knowable, never removes coverage that existed before it.
|
|
69
|
+
*/
|
|
70
|
+
export function buildRateLimitRules(model, configRules) {
|
|
71
|
+
const rules = [];
|
|
72
|
+
for (const spec of configRules ?? []) {
|
|
73
|
+
for (const compiled of compileMatch(spec.match, model)) {
|
|
74
|
+
/* `compiled.category` is already the right default per match kind — the category name
|
|
75
|
+
* for `category:x` (so an override merges into the tag's own bucket), the operationId
|
|
76
|
+
* or raw pattern otherwise. `spec.category` only needs to override that when a plain
|
|
77
|
+
* path/operationId rule should join an *existing* tag-declared bucket instead of
|
|
78
|
+
* getting its own. */
|
|
79
|
+
rules.push({ category: spec.category ?? compiled.category, rps: spec.rps, source: "config", test: compiled.test });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const byCategory = new Map();
|
|
83
|
+
for (const op of model.operations) {
|
|
84
|
+
if (op.rateLimit === null)
|
|
85
|
+
continue;
|
|
86
|
+
if (rules.some((rule) => rule.test(op.method.toUpperCase(), op.path)))
|
|
87
|
+
continue;
|
|
88
|
+
const entry = byCategory.get(op.rateLimit.category) ?? { ops: [], rps: null };
|
|
89
|
+
entry.ops.push(op);
|
|
90
|
+
if (op.rateLimit.rps !== null)
|
|
91
|
+
entry.rps = entry.rps === null ? op.rateLimit.rps : Math.min(entry.rps, op.rateLimit.rps);
|
|
92
|
+
byCategory.set(op.rateLimit.category, entry);
|
|
93
|
+
}
|
|
94
|
+
for (const [category, entry] of byCategory) {
|
|
95
|
+
if (entry.rps === null)
|
|
96
|
+
continue;
|
|
97
|
+
for (const op of entry.ops) {
|
|
98
|
+
const pathRegex = compilePathPattern(op.path);
|
|
99
|
+
const method = op.method.toUpperCase();
|
|
100
|
+
rules.push({
|
|
101
|
+
category,
|
|
102
|
+
rps: entry.rps,
|
|
103
|
+
source: "tag",
|
|
104
|
+
test: (m, p) => m === method && pathRegex.test(p),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return rules;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* A token bucket with a queue: concurrent requests against the same category are admitted one at
|
|
112
|
+
* a time, each computing its wait from the bucket's current state rather than racing on it.
|
|
113
|
+
* Burst capacity equals `rps` — up to one second's worth of headroom, the conventional default.
|
|
114
|
+
*/
|
|
115
|
+
export class RateBucket {
|
|
116
|
+
rps;
|
|
117
|
+
tokens;
|
|
118
|
+
last = performance.now();
|
|
119
|
+
queue = Promise.resolve();
|
|
120
|
+
constructor(rps) {
|
|
121
|
+
this.rps = rps;
|
|
122
|
+
this.tokens = rps;
|
|
123
|
+
}
|
|
124
|
+
/** Resolves once a token is consumed. Returns `false` when the caller had to wait for it. */
|
|
125
|
+
async acquire() {
|
|
126
|
+
let hadRoom = false;
|
|
127
|
+
const previous = this.queue;
|
|
128
|
+
this.queue = previous.then(async () => {
|
|
129
|
+
const now = performance.now();
|
|
130
|
+
this.tokens = Math.min(this.rps, this.tokens + ((now - this.last) / 1000) * this.rps);
|
|
131
|
+
this.last = now;
|
|
132
|
+
if (this.tokens >= 1) {
|
|
133
|
+
hadRoom = true;
|
|
134
|
+
this.tokens -= 1;
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const waitMs = ((1 - this.tokens) / this.rps) * 1000;
|
|
138
|
+
await new Promise((resolve) => setTimeout(resolve, waitMs));
|
|
139
|
+
this.tokens = 0;
|
|
140
|
+
this.last = performance.now();
|
|
141
|
+
});
|
|
142
|
+
await this.queue;
|
|
143
|
+
return hadRoom;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/** Resolves a request's category from the compiled rulebook and paces it through a shared bucket. */
|
|
147
|
+
export class RateLimiter {
|
|
148
|
+
rules;
|
|
149
|
+
buckets = new Map();
|
|
150
|
+
constructor(rules) {
|
|
151
|
+
this.rules = rules;
|
|
152
|
+
}
|
|
153
|
+
resolve(method, pathname) {
|
|
154
|
+
return this.rules.find((rule) => rule.test(method, pathname));
|
|
155
|
+
}
|
|
156
|
+
async acquire(rule) {
|
|
157
|
+
let bucket = this.buckets.get(rule.category);
|
|
158
|
+
if (bucket === undefined) {
|
|
159
|
+
bucket = new RateBucket(rule.rps);
|
|
160
|
+
this.buckets.set(rule.category, bucket);
|
|
161
|
+
}
|
|
162
|
+
return bucket.acquire();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=rate-limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/runtime/rate-limit.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/run.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* per case — which is what made prior attempts produce dozens of failures from one broken fixture.
|
|
7
7
|
*/
|
|
8
8
|
import { type SpecModel } from "../spec/graph.ts";
|
|
9
|
-
import type { Hooks, Principal } from "../config/define-config.ts";
|
|
9
|
+
import type { Hooks, Principal, ProfileSpec, RateLimitSpec } from "../config/define-config.ts";
|
|
10
10
|
import { Client } from "./client.ts";
|
|
11
11
|
import type { ProgressHandler } from "./progress.ts";
|
|
12
12
|
import { type Finding, type Inconclusive } from "./finding.ts";
|
|
@@ -22,6 +22,10 @@ export interface RunOptions {
|
|
|
22
22
|
cohortSize?: number;
|
|
23
23
|
globalHeaders?: Record<string, string>;
|
|
24
24
|
only?: string[];
|
|
25
|
+
/** Named profiles this run can select between. `"full"` and `"cheap"` exist without an entry. */
|
|
26
|
+
profiles?: Record<string, ProfileSpec>;
|
|
27
|
+
/** Active profile by name. Defaults to `"full"` — every operation runs, today's behaviour. */
|
|
28
|
+
profile?: string;
|
|
25
29
|
/** Leaves created records in place. Useful when inspecting a failure by hand. */
|
|
26
30
|
keepFixtures?: boolean;
|
|
27
31
|
/**
|
|
@@ -32,6 +36,8 @@ export interface RunOptions {
|
|
|
32
36
|
concurrency?: number;
|
|
33
37
|
/** Requests allowed in flight at once, across the whole run. */
|
|
34
38
|
maxInFlight?: number;
|
|
39
|
+
/** Paces requests per category. Checked before `x-rate-limit` tags for the same request. */
|
|
40
|
+
rateLimits?: RateLimitSpec[];
|
|
35
41
|
/** Live status. Called on phase/entity/check/request; the CLI prints a heartbeat from this. */
|
|
36
42
|
onProgress?: ProgressHandler;
|
|
37
43
|
}
|
|
@@ -62,6 +68,14 @@ export interface RunResult {
|
|
|
62
68
|
}>;
|
|
63
69
|
/** Checks that ran but could not reach a verdict — see `Inconclusive`. */
|
|
64
70
|
inconclusive: Inconclusive[];
|
|
71
|
+
/** Name of the profile that ran — `"full"` unless `--profile` / `config.profile` said otherwise. */
|
|
72
|
+
profile: string;
|
|
73
|
+
/** Operations a profile excluded, and why. Each also has a matching `profile.skip` gap finding. */
|
|
74
|
+
profileExclusions: Array<{
|
|
75
|
+
entity: string;
|
|
76
|
+
operationId: string;
|
|
77
|
+
reason: string;
|
|
78
|
+
}>;
|
|
65
79
|
created: number;
|
|
66
80
|
teardown: TeardownReport | null;
|
|
67
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEpG,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEpG,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAG9F,OAAO,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAkC,MAAM,eAAe,CAAA;AACpF,OAAO,EAAE,KAAK,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAGhF,OAAO,EAAU,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAK3D,MAAM,MAAM,aAAa,GAAG,SAAS,CAAA;AAErC,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,iGAAiG;IACjG,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACtC,8FAA8F;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,aAAa,EAAE,CAAA;IAC5B,+FAA+F;IAC/F,UAAU,CAAC,EAAE,eAAe,CAAA;CAC5B;AAED,MAAM,WAAW,SAAS;IACzB,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,KAAK,EAAE,SAAS,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,gGAAgG;IAChG,aAAa,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtE;;;;;;;OAOG;IACH,gBAAgB,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3E,0EAA0E;IAC1E,YAAY,EAAE,YAAY,EAAE,CAAA;IAC5B,oGAAoG;IACpG,OAAO,EAAE,MAAM,CAAA;IACf,mGAAmG;IACnG,iBAAiB,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjF,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAA;CAC/B;AAyMD,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CA8hBjE"}
|