attenu-guard 0.13.0 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/dist/cjs/audit.d.ts +15 -1
- package/dist/cjs/audit.d.ts.map +1 -1
- package/dist/cjs/audit.js +26 -3
- package/dist/cjs/audit.js.map +1 -1
- package/dist/cjs/authority.d.ts +12 -6
- package/dist/cjs/authority.d.ts.map +1 -1
- package/dist/cjs/authority.js +51 -15
- package/dist/cjs/authority.js.map +1 -1
- package/dist/cjs/ceilings.d.ts +65 -13
- package/dist/cjs/ceilings.d.ts.map +1 -1
- package/dist/cjs/ceilings.js +393 -70
- package/dist/cjs/ceilings.js.map +1 -1
- package/dist/cjs/cli.d.ts.map +1 -1
- package/dist/cjs/cli.js +11 -4
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/display.d.ts +3 -2
- package/dist/cjs/display.d.ts.map +1 -1
- package/dist/cjs/display.js +4 -3
- package/dist/cjs/display.js.map +1 -1
- package/dist/cjs/evidence.d.ts +35 -9
- package/dist/cjs/evidence.d.ts.map +1 -1
- package/dist/cjs/evidence.js +333 -39
- package/dist/cjs/evidence.js.map +1 -1
- package/dist/cjs/guard.d.ts.map +1 -1
- package/dist/cjs/guard.js +7 -3
- package/dist/cjs/guard.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/wire.d.ts.map +1 -1
- package/dist/cjs/wire.js +3 -2
- package/dist/cjs/wire.js.map +1 -1
- package/dist/esm/audit.d.ts +15 -1
- package/dist/esm/audit.d.ts.map +1 -1
- package/dist/esm/audit.js +26 -4
- package/dist/esm/audit.js.map +1 -1
- package/dist/esm/authority.d.ts +12 -6
- package/dist/esm/authority.d.ts.map +1 -1
- package/dist/esm/authority.js +51 -15
- package/dist/esm/authority.js.map +1 -1
- package/dist/esm/ceilings.d.ts +65 -13
- package/dist/esm/ceilings.d.ts.map +1 -1
- package/dist/esm/ceilings.js +390 -70
- package/dist/esm/ceilings.js.map +1 -1
- package/dist/esm/cli.d.ts.map +1 -1
- package/dist/esm/cli.js +12 -5
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/display.d.ts +3 -2
- package/dist/esm/display.d.ts.map +1 -1
- package/dist/esm/display.js +4 -3
- package/dist/esm/display.js.map +1 -1
- package/dist/esm/evidence.d.ts +35 -9
- package/dist/esm/evidence.d.ts.map +1 -1
- package/dist/esm/evidence.js +335 -41
- package/dist/esm/evidence.js.map +1 -1
- package/dist/esm/guard.d.ts.map +1 -1
- package/dist/esm/guard.js +8 -4
- package/dist/esm/guard.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/wire.d.ts.map +1 -1
- package/dist/esm/wire.js +3 -2
- package/dist/esm/wire.js.map +1 -1
- package/package.json +1 -1
package/dist/cjs/ceilings.d.ts
CHANGED
|
@@ -16,6 +16,12 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { type CJson, type Json } from "./canonical.js";
|
|
18
18
|
import { Decision } from "./reasons.js";
|
|
19
|
+
/**
|
|
20
|
+
* The scope grammar the draft defines: lowercase dot-separated segments, `*` only as the whole last
|
|
21
|
+
* segment. `Authority` validates its scopes against it, and a scoped `CallLimit`'s `appliesTo`
|
|
22
|
+
* follows it too.
|
|
23
|
+
*/
|
|
24
|
+
export declare const SCOPE_RE: RegExp;
|
|
19
25
|
/** A request context: the quantities and attributes a call declares. */
|
|
20
26
|
export type Context = Record<string, Json>;
|
|
21
27
|
/** The shape every ceiling — built-in or custom — must implement. */
|
|
@@ -51,12 +57,29 @@ export interface Ceiling {
|
|
|
51
57
|
/** Scoped ceilings only: the pattern this ceiling meters against, or "*". */
|
|
52
58
|
readonly meterKey?: string;
|
|
53
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* `value`'s JSON type as a refusal names it: null, a boolean, a number, a string, an array or an
|
|
62
|
+
* object, or "a value that is not JSON" for anything else passed in-process (a bigint). A number
|
|
63
|
+
* this library's `parseJson` read, a `RawNumber`, is a number. The Python implementation names the
|
|
64
|
+
* same values the same way.
|
|
65
|
+
*/
|
|
66
|
+
export declare function jsonKind(value: unknown): string;
|
|
54
67
|
/**
|
|
55
68
|
* The request-context field a ceiling reads. Prefers an explicit `ctxField`,
|
|
56
69
|
* then the caller-keyed `field`, then the ceiling's own `key`.
|
|
57
70
|
*/
|
|
58
71
|
export declare function ctxFieldOf(ceiling: Ceiling): string;
|
|
59
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* Python's `type(a) is type(b)`: whether two ceilings are of one class. Ceilings pair by key, and
|
|
74
|
+
* two of different classes under one key are not comparable: neither narrows the other, so an
|
|
75
|
+
* authority holding one is not narrower than an authority holding the other (attenu-ops#110).
|
|
76
|
+
*/
|
|
77
|
+
export declare function sameType(a: Ceiling, b: Ceiling): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Uniform human-readable rendering of any ceiling. Never parsed back. A ceiling without its own
|
|
80
|
+
* `describe`, such as one this build does not define, prints as the Python implementation prints
|
|
81
|
+
* it: its key as the wire carried it, `=`, and its wire form as Python prints a dict.
|
|
82
|
+
*/
|
|
60
83
|
export declare function describe(ceiling: Ceiling): string;
|
|
61
84
|
/**
|
|
62
85
|
* A ceiling's key as the wire carried it, which is what a finding names. A ceiling this build does
|
|
@@ -69,10 +92,12 @@ export declare function wireKeyOf(ceiling: Ceiling): CJson;
|
|
|
69
92
|
* printed through `shown` (display.ts), so the finding stays on one line.
|
|
70
93
|
*
|
|
71
94
|
* `describe` itself is left alone, so dashboards and `Authority.describe()` print a region called
|
|
72
|
-
* "São Paulo" as it is, and for values in the bare set the two agree character for character
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
95
|
+
* "São Paulo" as it is, and for values in the bare set the two agree character for character, except
|
|
96
|
+
* that an allow-list's or a deny-list's string members are printed in their escaped JSON form, quoted,
|
|
97
|
+
* so the string "1" and the number 1 read differently. A ceiling this build does not define prints the
|
|
98
|
+
* Python implementation's description of it — its key, `=`, and the wire object as Python prints a
|
|
99
|
+
* dict — as it is when that is printable ASCII, spaces included, and as escaped JSON otherwise. Same
|
|
100
|
+
* text as the Python implementation's finding.
|
|
76
101
|
*/
|
|
77
102
|
export declare function describeInFinding(ceiling: Ceiling): string;
|
|
78
103
|
/**
|
|
@@ -82,11 +107,17 @@ export declare function describeInFinding(ceiling: Ceiling): string;
|
|
|
82
107
|
* asserting anything here", not "consuming an undeclared amount".
|
|
83
108
|
*/
|
|
84
109
|
export declare function isMetered(ceiling: Ceiling): boolean;
|
|
110
|
+
/**
|
|
111
|
+
* The context's own value for `field`, or `undefined`. A plain object inherits `constructor`,
|
|
112
|
+
* `toString` and the rest from Object.prototype, and a field named like one of them is absent unless
|
|
113
|
+
* the context holds it, as `ctx.get(field)` reads it in the Python implementation.
|
|
114
|
+
*/
|
|
115
|
+
export declare function ownValue(ctx: Context, field: string): Json | undefined;
|
|
85
116
|
/** Per-call cap on rows read or returned. Context field: "rows". */
|
|
86
117
|
export declare class RowLimit implements Ceiling {
|
|
87
|
-
readonly maxRows: number;
|
|
88
118
|
readonly key = "max_rows";
|
|
89
119
|
readonly ctxField = "rows";
|
|
120
|
+
readonly maxRows: number;
|
|
90
121
|
constructor(maxRows: number);
|
|
91
122
|
permits(ctx: Context): Decision;
|
|
92
123
|
describe(): string;
|
|
@@ -97,9 +128,9 @@ export declare class RowLimit implements Ceiling {
|
|
|
97
128
|
}
|
|
98
129
|
/** Per-call cap on spend, currency-agnostic. Context field: "spend". */
|
|
99
130
|
export declare class SpendCap implements Ceiling {
|
|
100
|
-
readonly maxSpend: number;
|
|
101
131
|
readonly key = "max_spend";
|
|
102
132
|
readonly ctxField = "spend";
|
|
133
|
+
readonly maxSpend: number;
|
|
103
134
|
constructor(maxSpend: number);
|
|
104
135
|
permits(ctx: Context): Decision;
|
|
105
136
|
describe(): string;
|
|
@@ -121,10 +152,10 @@ export declare class SpendCap implements Ceiling {
|
|
|
121
152
|
* does not; an explicit `calls` in the context still wins.
|
|
122
153
|
*/
|
|
123
154
|
export declare class CallLimit implements Ceiling {
|
|
124
|
-
readonly maxCalls: number;
|
|
125
155
|
readonly appliesTo: string | null;
|
|
126
156
|
readonly key: string;
|
|
127
157
|
readonly ctxField: string;
|
|
158
|
+
readonly maxCalls: number;
|
|
128
159
|
constructor(maxCalls: number, appliesTo?: string | null);
|
|
129
160
|
/** What this ceiling counts: the pattern it applies to, or every call. */
|
|
130
161
|
get meterKey(): string;
|
|
@@ -149,7 +180,11 @@ export declare class EgressRank implements Ceiling {
|
|
|
149
180
|
toWire(): Record<string, Json>;
|
|
150
181
|
static fromWire(d: Record<string, Json>): EgressRank;
|
|
151
182
|
}
|
|
152
|
-
/**
|
|
183
|
+
/**
|
|
184
|
+
* Membership allow-list: the context value MUST be one of `oneOf`. A member is its JSON type plus
|
|
185
|
+
* its value, as a Set holds it: `[1]` admits 1 and refuses `true` and `"1"`. A context value that
|
|
186
|
+
* is not a JSON scalar is refused (`wrongKind`).
|
|
187
|
+
*/
|
|
153
188
|
export declare class Allow implements Ceiling {
|
|
154
189
|
readonly key: string;
|
|
155
190
|
readonly field: string | null;
|
|
@@ -163,7 +198,12 @@ export declare class Allow implements Ceiling {
|
|
|
163
198
|
toWire(): Record<string, Json>;
|
|
164
199
|
static fromWire(d: Record<string, Json>): Allow;
|
|
165
200
|
}
|
|
166
|
-
/**
|
|
201
|
+
/**
|
|
202
|
+
* Membership deny-list: the context value MUST NOT be one of `notOneOf`. A member is its JSON type
|
|
203
|
+
* plus its value, as a Set holds it: `[1]` refuses 1 and not `true` or `"1"`. A context value that
|
|
204
|
+
* is not a JSON scalar is refused as well (`wrongKind`): a deny-list never waves through a value it
|
|
205
|
+
* cannot compare, since waving `["rm"]` through because it is not the string "rm" would fail open.
|
|
206
|
+
*/
|
|
167
207
|
export declare class Deny implements Ceiling {
|
|
168
208
|
readonly key: string;
|
|
169
209
|
readonly field: string | null;
|
|
@@ -204,10 +244,15 @@ export declare function registerCeiling(key: string, cls: CeilingClass): void;
|
|
|
204
244
|
* Fail-closed placeholder for a wire constraint this build does not recognise.
|
|
205
245
|
*
|
|
206
246
|
* `permits` always denies. `narrow` stays an unknown ceiling, so it can never
|
|
207
|
-
* resolve to something more permissive than "deny everything"
|
|
247
|
+
* resolve to something more permissive than "deny everything"; `Authority.meet`
|
|
248
|
+
* keeps a parent's against a request of any other type, so the child inherits
|
|
249
|
+
* it. `subsumes` is
|
|
208
250
|
* true only against an identical unknown ceiling — just enough reflexivity for
|
|
209
|
-
* `isNarrowerThan(self)`.
|
|
210
|
-
*
|
|
251
|
+
* `isNarrowerThan(self)`. Identical means the same RFC 8785 bytes, which is
|
|
252
|
+
* equality as JSON: `true` is not 1, `1.0` is 1, and key order is no difference
|
|
253
|
+
* at any depth; a value RFC 8785 cannot write is identical to nothing. `toWire`
|
|
254
|
+
* preserves the original bytes losslessly, so a chain that merely forwards
|
|
255
|
+
* constraints can still do so.
|
|
211
256
|
*/
|
|
212
257
|
export declare class UnknownCeiling implements Ceiling {
|
|
213
258
|
readonly raw: Record<string, Json>;
|
|
@@ -223,6 +268,13 @@ export declare class UnknownCeiling implements Ceiling {
|
|
|
223
268
|
* Reconstruct a Ceiling from its wire form. Routes on "type" when present (it
|
|
224
269
|
* disambiguates the generic ceilings), else on "key". An unrecognised
|
|
225
270
|
* discriminator fails closed via `UnknownCeiling`.
|
|
271
|
+
*
|
|
272
|
+
* A constraint is a JSON object with a string `key`, and a `type` that, when present, is a string;
|
|
273
|
+
* anything else is malformed (attenu-ops#110), in the Python implementation's words too: `a
|
|
274
|
+
* constraint is a string, not an object`, `type of constraint 'max_rows' is null, not a string`.
|
|
275
|
+
* A constraint that is not an object loaded as an unknown constraint here, null aside, and a null
|
|
276
|
+
* `type` was read as absent, so the constraint was routed by its key: `{"key": "allow", "type":
|
|
277
|
+
* null, ...}` loaded as an allow-list, where the Python implementation loaded an unknown constraint.
|
|
226
278
|
*/
|
|
227
279
|
export declare function ceilingFromWire(wire: CJson): Ceiling;
|
|
228
280
|
//# sourceMappingURL=ceilings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ceilings.d.ts","sourceRoot":"","sources":["../../src/ceilings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"ceilings.d.ts","sourceRoot":"","sources":["../../src/ceilings.ts"],"names":[],"mappings":"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"}
|