@spinajs/authz-http-admin 3.0.12 → 3.0.14
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 +9 -8
- package/lib/cjs/controllers/AuthzAdminController.d.ts +35 -29
- package/lib/cjs/controllers/AuthzAdminController.d.ts.map +1 -1
- package/lib/cjs/controllers/AuthzAdminController.js +172 -175
- package/lib/cjs/controllers/AuthzAdminController.js.map +1 -1
- package/lib/cjs/dto/assignments.d.ts +33 -0
- package/lib/cjs/dto/assignments.d.ts.map +1 -0
- package/lib/cjs/dto/assignments.js +39 -0
- package/lib/cjs/dto/assignments.js.map +1 -0
- package/lib/cjs/dto/attributes.d.ts +20 -0
- package/lib/cjs/dto/attributes.d.ts.map +1 -0
- package/lib/cjs/dto/attributes.js +29 -0
- package/lib/cjs/dto/attributes.js.map +1 -0
- package/lib/cjs/dto/batch.d.ts +11 -0
- package/lib/cjs/dto/batch.d.ts.map +1 -0
- package/lib/cjs/dto/batch.js +10 -0
- package/lib/cjs/dto/batch.js.map +1 -0
- package/lib/cjs/dto/index.d.ts +9 -0
- package/lib/cjs/dto/index.d.ts.map +1 -0
- package/lib/cjs/dto/index.js +25 -0
- package/lib/cjs/dto/index.js.map +1 -0
- package/lib/cjs/dto/input.d.ts +8 -0
- package/lib/cjs/dto/input.d.ts.map +1 -0
- package/lib/cjs/dto/input.js +19 -0
- package/lib/cjs/dto/input.js.map +1 -0
- package/lib/cjs/dto/links.d.ts +28 -0
- package/lib/cjs/dto/links.d.ts.map +1 -0
- package/lib/cjs/dto/links.js +40 -0
- package/lib/cjs/dto/links.js.map +1 -0
- package/lib/cjs/dto/params.d.ts +19 -0
- package/lib/cjs/dto/params.d.ts.map +1 -0
- package/lib/cjs/dto/params.js +9 -0
- package/lib/cjs/dto/params.js.map +1 -0
- package/lib/cjs/dto/queries.d.ts +37 -0
- package/lib/cjs/dto/queries.d.ts.map +1 -0
- package/lib/cjs/dto/queries.js +70 -0
- package/lib/cjs/dto/queries.js.map +1 -0
- package/lib/cjs/dto/rules.d.ts +18 -0
- package/lib/cjs/dto/rules.d.ts.map +1 -0
- package/lib/cjs/dto/rules.js +34 -0
- package/lib/cjs/dto/rules.js.map +1 -0
- package/lib/cjs/index.d.ts +1 -0
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +1 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/routes/answers.d.ts +22 -0
- package/lib/cjs/routes/answers.d.ts.map +1 -0
- package/lib/cjs/routes/answers.js +121 -0
- package/lib/cjs/routes/answers.js.map +1 -0
- package/lib/cjs/routes/args.d.ts +59 -0
- package/lib/cjs/routes/args.d.ts.map +1 -0
- package/lib/cjs/routes/args.js +167 -0
- package/lib/cjs/routes/args.js.map +1 -0
- package/lib/cjs/routes/index.d.ts +3 -0
- package/lib/cjs/routes/index.d.ts.map +1 -1
- package/lib/cjs/routes/index.js +3 -0
- package/lib/cjs/routes/index.js.map +1 -1
- package/lib/cjs/routes/no-store.d.ts +10 -0
- package/lib/cjs/routes/no-store.d.ts.map +1 -0
- package/lib/cjs/routes/no-store.js +18 -0
- package/lib/cjs/routes/no-store.js.map +1 -0
- package/lib/cjs/routes/query.d.ts +6 -7
- package/lib/cjs/routes/query.d.ts.map +1 -1
- package/lib/cjs/routes/query.js +15 -62
- package/lib/cjs/routes/query.js.map +1 -1
- package/lib/cjs/schemas/answers.d.ts +7 -0
- package/lib/cjs/schemas/answers.d.ts.map +1 -0
- package/lib/cjs/schemas/answers.js +14 -0
- package/lib/cjs/schemas/answers.js.map +1 -0
- package/lib/cjs/schemas/commands.d.ts +4 -0
- package/lib/cjs/schemas/commands.d.ts.map +1 -1
- package/lib/cjs/schemas/commands.js +20 -12
- package/lib/cjs/schemas/commands.js.map +1 -1
- package/lib/cjs/schemas/document.d.ts +8 -17
- package/lib/cjs/schemas/document.d.ts.map +1 -1
- package/lib/cjs/schemas/document.js +53 -64
- package/lib/cjs/schemas/document.js.map +1 -1
- package/lib/cjs/schemas/index.d.ts +1 -1
- package/lib/cjs/schemas/index.d.ts.map +1 -1
- package/lib/cjs/schemas/index.js +1 -1
- package/lib/cjs/schemas/index.js.map +1 -1
- package/lib/cjs/schemas/primitives.d.ts +8 -1
- package/lib/cjs/schemas/primitives.d.ts.map +1 -1
- package/lib/cjs/schemas/primitives.js +25 -15
- package/lib/cjs/schemas/primitives.js.map +1 -1
- package/lib/cjs/schemas/provider.d.ts +4 -4
- package/lib/cjs/schemas/provider.d.ts.map +1 -1
- package/lib/cjs/schemas/provider.js +6 -6
- package/lib/cjs/schemas/provider.js.map +1 -1
- package/lib/mjs/controllers/AuthzAdminController.d.ts +35 -29
- package/lib/mjs/controllers/AuthzAdminController.d.ts.map +1 -1
- package/lib/mjs/controllers/AuthzAdminController.js +174 -177
- package/lib/mjs/controllers/AuthzAdminController.js.map +1 -1
- package/lib/mjs/dto/assignments.d.ts +33 -0
- package/lib/mjs/dto/assignments.d.ts.map +1 -0
- package/lib/mjs/dto/assignments.js +36 -0
- package/lib/mjs/dto/assignments.js.map +1 -0
- package/lib/mjs/dto/attributes.d.ts +20 -0
- package/lib/mjs/dto/attributes.d.ts.map +1 -0
- package/lib/mjs/dto/attributes.js +26 -0
- package/lib/mjs/dto/attributes.js.map +1 -0
- package/lib/mjs/dto/batch.d.ts +11 -0
- package/lib/mjs/dto/batch.d.ts.map +1 -0
- package/lib/mjs/dto/batch.js +7 -0
- package/lib/mjs/dto/batch.js.map +1 -0
- package/lib/mjs/dto/index.d.ts +9 -0
- package/lib/mjs/dto/index.d.ts.map +1 -0
- package/lib/mjs/dto/index.js +9 -0
- package/lib/mjs/dto/index.js.map +1 -0
- package/lib/mjs/dto/input.d.ts +8 -0
- package/lib/mjs/dto/input.d.ts.map +1 -0
- package/lib/mjs/dto/input.js +15 -0
- package/lib/mjs/dto/input.js.map +1 -0
- package/lib/mjs/dto/links.d.ts +28 -0
- package/lib/mjs/dto/links.d.ts.map +1 -0
- package/lib/mjs/dto/links.js +37 -0
- package/lib/mjs/dto/links.js.map +1 -0
- package/lib/mjs/dto/params.d.ts +19 -0
- package/lib/mjs/dto/params.d.ts.map +1 -0
- package/lib/mjs/dto/params.js +6 -0
- package/lib/mjs/dto/params.js.map +1 -0
- package/lib/mjs/dto/queries.d.ts +37 -0
- package/lib/mjs/dto/queries.d.ts.map +1 -0
- package/lib/mjs/dto/queries.js +66 -0
- package/lib/mjs/dto/queries.js.map +1 -0
- package/lib/mjs/dto/rules.d.ts +18 -0
- package/lib/mjs/dto/rules.d.ts.map +1 -0
- package/lib/mjs/dto/rules.js +31 -0
- package/lib/mjs/dto/rules.js.map +1 -0
- package/lib/mjs/index.d.ts +1 -0
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +1 -0
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/routes/answers.d.ts +22 -0
- package/lib/mjs/routes/answers.d.ts.map +1 -0
- package/lib/mjs/routes/answers.js +115 -0
- package/lib/mjs/routes/answers.js.map +1 -0
- package/lib/mjs/routes/args.d.ts +59 -0
- package/lib/mjs/routes/args.d.ts.map +1 -0
- package/lib/mjs/routes/args.js +160 -0
- package/lib/mjs/routes/args.js.map +1 -0
- package/lib/mjs/routes/index.d.ts +3 -0
- package/lib/mjs/routes/index.d.ts.map +1 -1
- package/lib/mjs/routes/index.js +3 -0
- package/lib/mjs/routes/index.js.map +1 -1
- package/lib/mjs/routes/no-store.d.ts +10 -0
- package/lib/mjs/routes/no-store.d.ts.map +1 -0
- package/lib/mjs/routes/no-store.js +14 -0
- package/lib/mjs/routes/no-store.js.map +1 -0
- package/lib/mjs/routes/query.d.ts +6 -7
- package/lib/mjs/routes/query.d.ts.map +1 -1
- package/lib/mjs/routes/query.js +15 -62
- package/lib/mjs/routes/query.js.map +1 -1
- package/lib/mjs/schemas/answers.d.ts +7 -0
- package/lib/mjs/schemas/answers.d.ts.map +1 -0
- package/lib/mjs/schemas/answers.js +11 -0
- package/lib/mjs/schemas/answers.js.map +1 -0
- package/lib/mjs/schemas/commands.d.ts +4 -0
- package/lib/mjs/schemas/commands.d.ts.map +1 -1
- package/lib/mjs/schemas/commands.js +19 -12
- package/lib/mjs/schemas/commands.js.map +1 -1
- package/lib/mjs/schemas/document.d.ts +8 -17
- package/lib/mjs/schemas/document.d.ts.map +1 -1
- package/lib/mjs/schemas/document.js +53 -63
- package/lib/mjs/schemas/document.js.map +1 -1
- package/lib/mjs/schemas/index.d.ts +1 -1
- package/lib/mjs/schemas/index.d.ts.map +1 -1
- package/lib/mjs/schemas/index.js +1 -1
- package/lib/mjs/schemas/index.js.map +1 -1
- package/lib/mjs/schemas/primitives.d.ts +8 -1
- package/lib/mjs/schemas/primitives.d.ts.map +1 -1
- package/lib/mjs/schemas/primitives.js +22 -14
- package/lib/mjs/schemas/primitives.js.map +1 -1
- package/lib/mjs/schemas/provider.d.ts +4 -4
- package/lib/mjs/schemas/provider.d.ts.map +1 -1
- package/lib/mjs/schemas/provider.js +6 -6
- package/lib/mjs/schemas/provider.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +13 -12
- package/lib/cjs/schemas/bodies.d.ts +0 -17
- package/lib/cjs/schemas/bodies.d.ts.map +0 -1
- package/lib/cjs/schemas/bodies.js +0 -35
- package/lib/cjs/schemas/bodies.js.map +0 -1
- package/lib/mjs/schemas/bodies.d.ts +0 -17
- package/lib/mjs/schemas/bodies.d.ts.map +0 -1
- package/lib/mjs/schemas/bodies.js +0 -32
- package/lib/mjs/schemas/bodies.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/dto/rules.ts"],"names":[],"mappings":";;;;;;;;;AAAA,0CAAwC;AACxC,oDAA6C;AAE7C,wDAA8D;AAE9D,yCAA6C;AAE7C,MAAM,cAAc,GAAG,CAAC,IAAgB,EAA8B,EAAE;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAwC,CAAC;IACjE,OAAO,EAAE,GAAG,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,kCAAkC,EAAE,EAAE,CAAC;AACtG,CAAC,CAAC;AAEW,QAAA,gBAAgB,GAAG,EAAE,GAAG,IAAA,cAAM,EAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,sBAAQ,CAAC,EAAE,2BAA2B,CAAC,EAAE,WAAW,EAAE,2EAA2E,EAAE,CAAC;AAErM,QAAA,kBAAkB,GAAG,EAAE,GAAG,IAAA,cAAM,EAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,cAAc,CAAC,wBAAU,CAAC,EAAE,6BAA6B,CAAC,EAAE,WAAW,EAAE,gFAAgF,EAAE,CAAC;AAErO,wFAAwF;AAEjF,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,0BAAe;CAGjD,CAAA;;wBAHY,aAAa;IADzB,IAAA,mBAAM,EAAC,QAAA,gBAAgB,CAAC;GACZ,aAAa,CAGzB;AAED,gGAAgG;AAEzF,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,0BAAe;CAGnD,CAAA;;0BAHY,eAAe;IAD3B,IAAA,mBAAM,EAAC,QAAA,kBAAkB,CAAC;GACd,eAAe,CAG3B"}
|
package/lib/cjs/index.d.ts
CHANGED
package/lib/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uCAAuC,CAAC;AACtD,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uCAAuC,CAAC;AACtD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./controllers/AuthzAdminController.js"), exports);
|
|
18
|
+
__exportStar(require("./dto/index.js"), exports);
|
|
18
19
|
__exportStar(require("./routes/index.js"), exports);
|
|
19
20
|
__exportStar(require("./schemas/index.js"), exports);
|
|
20
21
|
//# sourceMappingURL=index.js.map
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wEAAsD;AACtD,oDAAkC;AAClC,qDAAmC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wEAAsD;AACtD,iDAA+B;AAC/B,oDAAkC;AAClC,qDAAmC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AuthzAdminFailure } from '@spinajs/authz';
|
|
2
|
+
import type { Response } from '@spinajs/http';
|
|
3
|
+
import type { IValidationError } from '@spinajs/validation';
|
|
4
|
+
export declare function respond(status: number, body: unknown): Response;
|
|
5
|
+
/** The answer of an AuthzAdminFailure: its status with `{ error: { code, message, field? } }`. */
|
|
6
|
+
export declare function refused(e: AuthzAdminFailure): Response;
|
|
7
|
+
/**
|
|
8
|
+
* The failure `code` for input that broke its schema, naming the first offending field. `prefix` is
|
|
9
|
+
* the path of the validated value inside the request (a command of a batch), `fallbackField` the
|
|
10
|
+
* name of a scalar input such as a path parameter. Messages never quote the input.
|
|
11
|
+
*/
|
|
12
|
+
export declare function inputFailure(code: string, errors: readonly IValidationError[] | null, prefix?: readonly string[], fallbackField?: string): AuthzAdminFailure;
|
|
13
|
+
/**
|
|
14
|
+
* `@OnError` handler of the admin routes for the arguments stage (D2): input that breaks its schema
|
|
15
|
+
* answers the route's `{ error: { code, field } }`, as AuthzAdmin's own refusals do.
|
|
16
|
+
* - ValidationFailed of a body or a path parameter: 400 invalid_request.
|
|
17
|
+
* - InvalidArgument (a body that is not JSON): 400 invalid_request.
|
|
18
|
+
* - AuthzAdminFailure from the query, batch and body args: its code and status.
|
|
19
|
+
* - UnknownAuthzDomain: 403 unknown_domain.
|
|
20
|
+
*/
|
|
21
|
+
export declare function adminInputAnswer(err: Error): Response | undefined;
|
|
22
|
+
//# sourceMappingURL=answers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answers.d.ts","sourceRoot":"","sources":["../../../src/routes/answers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAInD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAI5D,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAe/D;AAED,kGAAkG;AAClG,wBAAgB,OAAO,CAAC,CAAC,EAAE,iBAAiB,GAAG,QAAQ,CAEtD;AAuDD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAAG,IAAI,EAAE,MAAM,GAAE,SAAS,MAAM,EAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAMhK;AAID;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAUjE"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.respond = respond;
|
|
4
|
+
exports.refused = refused;
|
|
5
|
+
exports.inputFailure = inputFailure;
|
|
6
|
+
exports.adminInputAnswer = adminInputAnswer;
|
|
7
|
+
const authz_1 = require("@spinajs/authz");
|
|
8
|
+
const authz_http_1 = require("@spinajs/authz-http");
|
|
9
|
+
const exceptions_1 = require("@spinajs/exceptions");
|
|
10
|
+
const http_1 = require("@spinajs/http");
|
|
11
|
+
const validation_1 = require("@spinajs/validation");
|
|
12
|
+
const status_js_1 = require("./status.js");
|
|
13
|
+
function respond(status, body) {
|
|
14
|
+
switch (status) {
|
|
15
|
+
case 200:
|
|
16
|
+
return new http_1.Ok(body);
|
|
17
|
+
case 403:
|
|
18
|
+
return new http_1.ForbiddenResponse(body);
|
|
19
|
+
case 404:
|
|
20
|
+
return new http_1.NotFound(body);
|
|
21
|
+
case 409:
|
|
22
|
+
return new http_1.Conflict(body);
|
|
23
|
+
case 500:
|
|
24
|
+
return new http_1.ServerError(body);
|
|
25
|
+
default:
|
|
26
|
+
return new http_1.BadRequestResponse(body);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** The answer of an AuthzAdminFailure: its status with `{ error: { code, message, field? } }`. */
|
|
30
|
+
function refused(e) {
|
|
31
|
+
return respond((0, status_js_1.adminErrorStatus)(e.code), { error: { code: e.code, message: e.message, ...(e.field === undefined ? {} : { field: e.field }) } });
|
|
32
|
+
}
|
|
33
|
+
const COMPOSITE = new Set(['anyOf', 'oneOf', 'allOf', 'if', 'not']);
|
|
34
|
+
const inBranch = (e) => /\/(anyOf|oneOf|allOf)\/\d+\//.test(e.schemaPath);
|
|
35
|
+
/** The error that names the input best: an unknown key, else an error outside the branches of anyOf/oneOf, else the composite itself. */
|
|
36
|
+
function primary(errors) {
|
|
37
|
+
const own = errors.filter((e) => !inBranch(e));
|
|
38
|
+
return own.find((e) => e.keyword === 'additionalProperties') ?? own.find((e) => !COMPOSITE.has(e.keyword)) ?? own[0] ?? errors[0];
|
|
39
|
+
}
|
|
40
|
+
/** `/commands/0/expiresAt` as `commands.0.expiresAt`; the key a `required` or `additionalProperties` error names is appended. */
|
|
41
|
+
function pathOf(e) {
|
|
42
|
+
const params = e.params;
|
|
43
|
+
// http's required-parameter check names the argument, not a JSON pointer.
|
|
44
|
+
if (params.missingParameter !== undefined)
|
|
45
|
+
return [];
|
|
46
|
+
const path = e.instancePath === '' ? [] : e.instancePath.slice(1).split('/').map((s) => s.replace(/~1/g, '/').replace(/~0/g, '~'));
|
|
47
|
+
if (e.keyword === 'required' && params.missingProperty !== undefined)
|
|
48
|
+
path.push(params.missingProperty);
|
|
49
|
+
if (e.keyword === 'additionalProperties' && params.additionalProperty !== undefined)
|
|
50
|
+
path.push(params.additionalProperty);
|
|
51
|
+
return path;
|
|
52
|
+
}
|
|
53
|
+
const LIMIT_WORDS = {
|
|
54
|
+
maxLength: 'exceeds the limit of',
|
|
55
|
+
maxItems: 'exceeds the limit of',
|
|
56
|
+
maximum: 'exceeds the limit of',
|
|
57
|
+
minLength: 'is below the minimum of',
|
|
58
|
+
minItems: 'is below the minimum of',
|
|
59
|
+
minimum: 'is below the minimum of',
|
|
60
|
+
};
|
|
61
|
+
function describe(e, field, errors) {
|
|
62
|
+
const what = field ?? 'the input';
|
|
63
|
+
const params = e.params;
|
|
64
|
+
if (Object.hasOwn(LIMIT_WORDS, e.keyword))
|
|
65
|
+
return `${what} ${LIMIT_WORDS[e.keyword]} ${String(params.limit)}`;
|
|
66
|
+
switch (e.keyword) {
|
|
67
|
+
case 'additionalProperties':
|
|
68
|
+
return `${what} is not a field of this request`;
|
|
69
|
+
case 'required':
|
|
70
|
+
return `${what} is required`;
|
|
71
|
+
case 'type':
|
|
72
|
+
return `${what} must be of type ${String(params.type)}`;
|
|
73
|
+
case 'anyOf': {
|
|
74
|
+
const keys = errors.filter((x) => x.keyword === 'required' && inBranch(x)).map((x) => x.params.missingProperty);
|
|
75
|
+
return keys.length > 0 ? `${what} needs one of ${keys.join(', ')}` : `${what} matches none of the allowed shapes`;
|
|
76
|
+
}
|
|
77
|
+
case 'oneOf':
|
|
78
|
+
return `${what} matches none of the allowed shapes`;
|
|
79
|
+
case 'format':
|
|
80
|
+
return `${what} must be a ${String(params.format)}`;
|
|
81
|
+
default:
|
|
82
|
+
return `${what} is invalid (${e.keyword})`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The failure `code` for input that broke its schema, naming the first offending field. `prefix` is
|
|
87
|
+
* the path of the validated value inside the request (a command of a batch), `fallbackField` the
|
|
88
|
+
* name of a scalar input such as a path parameter. Messages never quote the input.
|
|
89
|
+
*/
|
|
90
|
+
function inputFailure(code, errors, prefix = [], fallbackField) {
|
|
91
|
+
const e = primary(errors ?? []);
|
|
92
|
+
if (!e)
|
|
93
|
+
return new authz_1.AuthzAdminFailure(code, 'the input is invalid', fallbackField);
|
|
94
|
+
const path = [...prefix, ...pathOf(e)];
|
|
95
|
+
const field = path.length > 0 ? path.join('.') : fallbackField;
|
|
96
|
+
return new authz_1.AuthzAdminFailure(code, describe(e, field, errors ?? []), field);
|
|
97
|
+
}
|
|
98
|
+
const PARAM_ID = 'authz.admin.param.';
|
|
99
|
+
/**
|
|
100
|
+
* `@OnError` handler of the admin routes for the arguments stage (D2): input that breaks its schema
|
|
101
|
+
* answers the route's `{ error: { code, field } }`, as AuthzAdmin's own refusals do.
|
|
102
|
+
* - ValidationFailed of a body or a path parameter: 400 invalid_request.
|
|
103
|
+
* - InvalidArgument (a body that is not JSON): 400 invalid_request.
|
|
104
|
+
* - AuthzAdminFailure from the query, batch and body args: its code and status.
|
|
105
|
+
* - UnknownAuthzDomain: 403 unknown_domain.
|
|
106
|
+
*/
|
|
107
|
+
function adminInputAnswer(err) {
|
|
108
|
+
if (err instanceof authz_1.AuthzAdminFailure)
|
|
109
|
+
return refused(err);
|
|
110
|
+
if (err instanceof authz_http_1.UnknownAuthzDomain)
|
|
111
|
+
return respond(403, { error: { code: 'unknown_domain', message: err.message } });
|
|
112
|
+
if (err instanceof validation_1.ValidationFailed) {
|
|
113
|
+
const id = err.schema?.$id;
|
|
114
|
+
const param = typeof id === 'string' && id.startsWith(PARAM_ID) ? id.slice(PARAM_ID.length) : undefined;
|
|
115
|
+
return refused(inputFailure('invalid_request', err.parameter, [], param));
|
|
116
|
+
}
|
|
117
|
+
if (err instanceof exceptions_1.InvalidArgument)
|
|
118
|
+
return refused(new authz_1.AuthzAdminFailure('invalid_request', 'the body must be a JSON object'));
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=answers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answers.js","sourceRoot":"","sources":["../../../src/routes/answers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { RouteArgs } from '@spinajs/http';
|
|
2
|
+
import type { IRoute, IRouteCall, IRouteParameter, Req } from '@spinajs/http';
|
|
3
|
+
import type * as express from 'express';
|
|
4
|
+
import type { AuthzAdminCommandBatch } from '../dto/batch.js';
|
|
5
|
+
import { AuthzCommandSchemaRegistry } from '../schemas/registry.js';
|
|
6
|
+
type Decorator = ReturnType<typeof Req>;
|
|
7
|
+
/** Route arg of `@AdminQuery()`: the whole query string as the parameter's DTO class, validated against its `@Schema`; a failure is 400 invalid_query. */
|
|
8
|
+
export declare class AuthzAdminQueryArg extends RouteArgs {
|
|
9
|
+
get SupportedType(): string;
|
|
10
|
+
extract(callData: IRouteCall, _args: unknown[], param: IRouteParameter, req: express.Request): Promise<{
|
|
11
|
+
CallData: IRouteCall;
|
|
12
|
+
Args: object;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
/** Route arg of `@AdminBody()`: the whole body as the parameter's DTO class. Unlike `@Body()`, a body key named as the parameter is not taken for the body. */
|
|
16
|
+
export declare class AuthzAdminBodyArg extends RouteArgs {
|
|
17
|
+
get SupportedType(): string;
|
|
18
|
+
extract(callData: IRouteCall, _args: unknown[], param: IRouteParameter, req: express.Request, _res: express.Response, route: IRoute): Promise<{
|
|
19
|
+
CallData: IRouteCall;
|
|
20
|
+
Args: any;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Route arg of `@AdminBatch()`: the body of POST /authz/commands. The envelope is checked against
|
|
25
|
+
* BATCH_ENVELOPE_SCHEMA and each command against the schema AuthzCommandSchemaRegistry holds for its
|
|
26
|
+
* kind, read on each request so that a late AuthzCommandSchemaSource counts; a kind no source
|
|
27
|
+
* describes is refused. A failure is 400 invalid_request (not an object) or invalid_batch.
|
|
28
|
+
*/
|
|
29
|
+
export declare class AuthzAdminBatchArg extends RouteArgs {
|
|
30
|
+
protected Registry: AuthzCommandSchemaRegistry;
|
|
31
|
+
private strictCopies;
|
|
32
|
+
get SupportedType(): string;
|
|
33
|
+
extract(callData: IRouteCall, _args: unknown[], _param: IRouteParameter, req: express.Request): Promise<{
|
|
34
|
+
CallData: IRouteCall;
|
|
35
|
+
Args: AuthzAdminCommandBatch;
|
|
36
|
+
}>;
|
|
37
|
+
/** The command schema under an `authz.` id, which the validation package checks without coercion. */
|
|
38
|
+
private strict;
|
|
39
|
+
}
|
|
40
|
+
/** Route arg of `@AdminDomain()`: the authz domain of the request as the AuthzDomainResolver names it, `authz.http.admin.domain` being its fallback. */
|
|
41
|
+
export declare class AuthzAdminDomainArg extends RouteArgs {
|
|
42
|
+
Priority: number;
|
|
43
|
+
protected FallbackDomain: string;
|
|
44
|
+
get SupportedType(): string;
|
|
45
|
+
extract(callData: IRouteCall, _args: unknown[], _param: IRouteParameter, req: express.Request): Promise<{
|
|
46
|
+
CallData: IRouteCall;
|
|
47
|
+
Args: string;
|
|
48
|
+
}>;
|
|
49
|
+
}
|
|
50
|
+
/** The whole query string as the parameter's `@Schema` DTO class; 400 invalid_query when it breaks the schema. */
|
|
51
|
+
export declare function AdminQuery(): Decorator;
|
|
52
|
+
/** The whole body as the parameter's `@Schema` DTO class; 400 invalid_request when it breaks the schema. */
|
|
53
|
+
export declare function AdminBody(): Decorator;
|
|
54
|
+
/** The body of POST /authz/commands as AuthzAdminCommandBatch. */
|
|
55
|
+
export declare function AdminBatch(): Decorator;
|
|
56
|
+
/** The authz domain the admin routes run in for this request. */
|
|
57
|
+
export declare function AdminDomain(): Decorator;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../src/routes/args.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,EAAW,MAAM,eAAe,CAAC;AAEvF,OAAO,KAAK,KAAK,OAAO,MAAM,SAAS,CAAC;AAGxC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAIpE,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC;AAiBxC,0JAA0J;AAC1J,qBACa,kBAAmB,SAAQ,SAAS;IAC/C,IAAW,aAAa,IAAI,MAAM,CAEjC;IAEY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO;;;OAOxG;CACF;AAED,+JAA+J;AAC/J,qBACa,iBAAkB,SAAQ,SAAS;IAC9C,IAAW,aAAa,IAAI,MAAM,CAEjC;IAEY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM;;;OAE/I;CACF;AAED;;;;;GAKG;AACH,qBACa,kBAAmB,SAAQ,SAAS;IAE/C,SAAS,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IAG/C,OAAO,CAAC,YAAY,CAA6B;IAEjD,IAAW,aAAa,IAAI,MAAM,CAEjC;IAEY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO;;;OAkBzG;IAED,qGAAqG;IACrG,OAAO,CAAC,MAAM;CAMf;AAED,wJAAwJ;AACxJ,qBACa,mBAAoB,SAAQ,SAAS;IAEzC,QAAQ,SAAM;IAGrB,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IAEjC,IAAW,aAAa,IAAI,MAAM,CAEjC;IAEY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO;;;OAEzG;CACF;AAED,kHAAkH;AAClH,wBAAgB,UAAU,IAAI,SAAS,CAEtC;AAED,4GAA4G;AAC5G,wBAAgB,SAAS,IAAI,SAAS,CAErC;AAED,kEAAkE;AAClE,wBAAgB,UAAU,IAAI,SAAS,CAEtC;AAED,iEAAiE;AACjE,wBAAgB,WAAW,IAAI,SAAS,CAEvC"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AuthzAdminDomainArg = exports.AuthzAdminBatchArg = exports.AuthzAdminBodyArg = exports.AuthzAdminQueryArg = void 0;
|
|
13
|
+
exports.AdminQuery = AdminQuery;
|
|
14
|
+
exports.AdminBody = AdminBody;
|
|
15
|
+
exports.AdminBatch = AdminBatch;
|
|
16
|
+
exports.AdminDomain = AdminDomain;
|
|
17
|
+
const authz_1 = require("@spinajs/authz");
|
|
18
|
+
const authz_http_1 = require("@spinajs/authz-http");
|
|
19
|
+
const configuration_1 = require("@spinajs/configuration");
|
|
20
|
+
const di_1 = require("@spinajs/di");
|
|
21
|
+
const http_1 = require("@spinajs/http");
|
|
22
|
+
const util_1 = require("@spinajs/util");
|
|
23
|
+
const batch_js_1 = require("../dto/batch.js");
|
|
24
|
+
const registry_js_1 = require("../schemas/registry.js");
|
|
25
|
+
const answers_js_1 = require("./answers.js");
|
|
26
|
+
const decode_js_1 = require("./decode.js");
|
|
27
|
+
const q = (v) => JSON.stringify(v);
|
|
28
|
+
/** A query string value as the type its schema property names: the query string itself has none, and the admin schemas are validated without coercion. */
|
|
29
|
+
function typedQuery(schema, query) {
|
|
30
|
+
const out = {};
|
|
31
|
+
for (const [key, value] of Object.entries(query)) {
|
|
32
|
+
const type = schema?.properties?.[key]?.type;
|
|
33
|
+
if (type === 'integer' && typeof value === 'string' && /^\d{1,15}$/.test(value))
|
|
34
|
+
out[key] = Number(value);
|
|
35
|
+
else if (type === 'boolean' && (value === 'true' || value === 'false'))
|
|
36
|
+
out[key] = value === 'true';
|
|
37
|
+
else
|
|
38
|
+
out[key] = value;
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
/** Route arg of `@AdminQuery()`: the whole query string as the parameter's DTO class, validated against its `@Schema`; a failure is 400 invalid_query. */
|
|
43
|
+
let AuthzAdminQueryArg = class AuthzAdminQueryArg extends http_1.RouteArgs {
|
|
44
|
+
get SupportedType() {
|
|
45
|
+
return 'AuthzAdminQueryArg';
|
|
46
|
+
}
|
|
47
|
+
async extract(callData, _args, param, req) {
|
|
48
|
+
const Dto = param.RuntimeType;
|
|
49
|
+
const schema = this.Validator.extractSchema(Dto);
|
|
50
|
+
const input = typedQuery(schema, req.query ?? {});
|
|
51
|
+
const [valid, errors] = this.Validator.tryValidate(schema, input);
|
|
52
|
+
if (!valid)
|
|
53
|
+
throw (0, answers_js_1.inputFailure)('invalid_query', errors);
|
|
54
|
+
return { CallData: callData, Args: new Dto(input) };
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
exports.AuthzAdminQueryArg = AuthzAdminQueryArg;
|
|
58
|
+
exports.AuthzAdminQueryArg = AuthzAdminQueryArg = __decorate([
|
|
59
|
+
(0, di_1.Injectable)()
|
|
60
|
+
], AuthzAdminQueryArg);
|
|
61
|
+
/** Route arg of `@AdminBody()`: the whole body as the parameter's DTO class. Unlike `@Body()`, a body key named as the parameter is not taken for the body. */
|
|
62
|
+
let AuthzAdminBodyArg = class AuthzAdminBodyArg extends http_1.RouteArgs {
|
|
63
|
+
get SupportedType() {
|
|
64
|
+
return 'AuthzAdminBodyArg';
|
|
65
|
+
}
|
|
66
|
+
async extract(callData, _args, param, req, _res, route) {
|
|
67
|
+
return { CallData: callData, Args: await this.tryHydrateParam(req.body ?? null, param, route) };
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
exports.AuthzAdminBodyArg = AuthzAdminBodyArg;
|
|
71
|
+
exports.AuthzAdminBodyArg = AuthzAdminBodyArg = __decorate([
|
|
72
|
+
(0, di_1.Injectable)()
|
|
73
|
+
], AuthzAdminBodyArg);
|
|
74
|
+
/**
|
|
75
|
+
* Route arg of `@AdminBatch()`: the body of POST /authz/commands. The envelope is checked against
|
|
76
|
+
* BATCH_ENVELOPE_SCHEMA and each command against the schema AuthzCommandSchemaRegistry holds for its
|
|
77
|
+
* kind, read on each request so that a late AuthzCommandSchemaSource counts; a kind no source
|
|
78
|
+
* describes is refused. A failure is 400 invalid_request (not an object) or invalid_batch.
|
|
79
|
+
*/
|
|
80
|
+
let AuthzAdminBatchArg = class AuthzAdminBatchArg extends http_1.RouteArgs {
|
|
81
|
+
constructor() {
|
|
82
|
+
super(...arguments);
|
|
83
|
+
// Ajv caches every schema object it compiled for good, so the copies are keyed by content: sources may build fresh objects per call.
|
|
84
|
+
this.strictCopies = new Map();
|
|
85
|
+
}
|
|
86
|
+
get SupportedType() {
|
|
87
|
+
return 'AuthzAdminBatchArg';
|
|
88
|
+
}
|
|
89
|
+
async extract(callData, _args, _param, req) {
|
|
90
|
+
const body = req.body;
|
|
91
|
+
if (!(0, util_1.isPlainObject)(body))
|
|
92
|
+
throw new authz_1.AuthzAdminFailure('invalid_request', 'the body must be an object { commands, reason?, idempotencyKey?, dryRun? }');
|
|
93
|
+
const [valid, errors] = this.Validator.tryValidate(batch_js_1.BATCH_ENVELOPE_SCHEMA, body);
|
|
94
|
+
if (!valid)
|
|
95
|
+
throw (0, answers_js_1.inputFailure)('invalid_batch', errors);
|
|
96
|
+
const schemas = this.Registry.commands();
|
|
97
|
+
const commands = body.commands;
|
|
98
|
+
commands.forEach((command, i) => {
|
|
99
|
+
if (!Object.hasOwn(schemas, command.kind))
|
|
100
|
+
throw new authz_1.AuthzAdminFailure('invalid_batch', `command ${i} has kind ${q(command.kind)}, which no AuthzCommandSchemaSource describes`, `commands.${i}.kind`);
|
|
101
|
+
const [ok, failures] = this.Validator.tryValidate(this.strict(command.kind, schemas[command.kind]), command);
|
|
102
|
+
if (!ok)
|
|
103
|
+
throw (0, answers_js_1.inputFailure)('invalid_batch', failures, ['commands', String(i)]);
|
|
104
|
+
});
|
|
105
|
+
const options = {};
|
|
106
|
+
for (const key of ['reason', 'idempotencyKey', 'dryRun'])
|
|
107
|
+
if (key in body)
|
|
108
|
+
options[key] = body[key];
|
|
109
|
+
const batch = { commands: (0, decode_js_1.decodeCommands)(commands), options };
|
|
110
|
+
return { CallData: callData, Args: batch };
|
|
111
|
+
}
|
|
112
|
+
/** The command schema under an `authz.` id, which the validation package checks without coercion. */
|
|
113
|
+
strict(kind, schema) {
|
|
114
|
+
const key = `${kind}\n${JSON.stringify(schema)}`;
|
|
115
|
+
let copy = this.strictCopies.get(key);
|
|
116
|
+
if (!copy)
|
|
117
|
+
this.strictCopies.set(key, (copy = { ...schema, $id: `authz.admin.command.${kind}` }));
|
|
118
|
+
return copy;
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
exports.AuthzAdminBatchArg = AuthzAdminBatchArg;
|
|
122
|
+
__decorate([
|
|
123
|
+
(0, di_1.Autoinject)(registry_js_1.AuthzCommandSchemaRegistry),
|
|
124
|
+
__metadata("design:type", registry_js_1.AuthzCommandSchemaRegistry)
|
|
125
|
+
], AuthzAdminBatchArg.prototype, "Registry", void 0);
|
|
126
|
+
exports.AuthzAdminBatchArg = AuthzAdminBatchArg = __decorate([
|
|
127
|
+
(0, di_1.Injectable)()
|
|
128
|
+
], AuthzAdminBatchArg);
|
|
129
|
+
/** Route arg of `@AdminDomain()`: the authz domain of the request as the AuthzDomainResolver names it, `authz.http.admin.domain` being its fallback. */
|
|
130
|
+
let AuthzAdminDomainArg = class AuthzAdminDomainArg extends http_1.RouteArgs {
|
|
131
|
+
constructor() {
|
|
132
|
+
super(...arguments);
|
|
133
|
+
// Before the inputs, so that an unknown domain is refused before the input is checked.
|
|
134
|
+
this.Priority = 10;
|
|
135
|
+
}
|
|
136
|
+
get SupportedType() {
|
|
137
|
+
return 'AuthzAdminDomainArg';
|
|
138
|
+
}
|
|
139
|
+
async extract(callData, _args, _param, req) {
|
|
140
|
+
return { CallData: callData, Args: await (0, authz_http_1.resolveAuthzDomain)(req, this.FallbackDomain) };
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
exports.AuthzAdminDomainArg = AuthzAdminDomainArg;
|
|
144
|
+
__decorate([
|
|
145
|
+
(0, configuration_1.Config)('authz.http.admin.domain'),
|
|
146
|
+
__metadata("design:type", String)
|
|
147
|
+
], AuthzAdminDomainArg.prototype, "FallbackDomain", void 0);
|
|
148
|
+
exports.AuthzAdminDomainArg = AuthzAdminDomainArg = __decorate([
|
|
149
|
+
(0, di_1.Injectable)()
|
|
150
|
+
], AuthzAdminDomainArg);
|
|
151
|
+
/** The whole query string as the parameter's `@Schema` DTO class; 400 invalid_query when it breaks the schema. */
|
|
152
|
+
function AdminQuery() {
|
|
153
|
+
return (0, http_1.Route)((0, http_1.Parameter)('AuthzAdminQueryArg', null));
|
|
154
|
+
}
|
|
155
|
+
/** The whole body as the parameter's `@Schema` DTO class; 400 invalid_request when it breaks the schema. */
|
|
156
|
+
function AdminBody() {
|
|
157
|
+
return (0, http_1.Route)((0, http_1.Parameter)('AuthzAdminBodyArg', null, { required: true }));
|
|
158
|
+
}
|
|
159
|
+
/** The body of POST /authz/commands as AuthzAdminCommandBatch. */
|
|
160
|
+
function AdminBatch() {
|
|
161
|
+
return (0, http_1.Route)((0, http_1.Parameter)('AuthzAdminBatchArg', null));
|
|
162
|
+
}
|
|
163
|
+
/** The authz domain the admin routes run in for this request. */
|
|
164
|
+
function AdminDomain() {
|
|
165
|
+
return (0, http_1.Route)((0, http_1.Parameter)('AuthzAdminDomainArg', null));
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../src/routes/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
package/lib/cjs/routes/index.js
CHANGED
|
@@ -14,7 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./answers.js"), exports);
|
|
18
|
+
__exportStar(require("./args.js"), exports);
|
|
17
19
|
__exportStar(require("./decode.js"), exports);
|
|
20
|
+
__exportStar(require("./no-store.js"), exports);
|
|
18
21
|
__exportStar(require("./query.js"), exports);
|
|
19
22
|
__exportStar(require("./status.js"), exports);
|
|
20
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,6CAA2B;AAC3B,8CAA4B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,4CAA0B;AAC1B,8CAA4B;AAC5B,gDAA8B;AAC9B,6CAA2B;AAC3B,8CAA4B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RouteMiddleware } from '@spinajs/http';
|
|
2
|
+
import type * as express from 'express';
|
|
3
|
+
/** For routes whose answer may hold a link token: no proxy or browser cache may keep one. Set before the route runs, so it goes out with any answer it gives. */
|
|
4
|
+
export declare class NoStore extends RouteMiddleware {
|
|
5
|
+
isEnabled(): boolean;
|
|
6
|
+
onBefore(_req: express.Request, res: express.Response): Promise<void>;
|
|
7
|
+
onAfter(): Promise<void>;
|
|
8
|
+
onResponse(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=no-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-store.d.ts","sourceRoot":"","sources":["../../../src/routes/no-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,KAAK,OAAO,MAAM,SAAS,CAAC;AAExC,iKAAiK;AACjK,qBAAa,OAAQ,SAAQ,eAAe;IACnC,SAAS,IAAI,OAAO,CAE1B;IAEY,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjF;IAEY,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;IAE3B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;CAC5C"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NoStore = void 0;
|
|
4
|
+
const http_1 = require("@spinajs/http");
|
|
5
|
+
/** For routes whose answer may hold a link token: no proxy or browser cache may keep one. Set before the route runs, so it goes out with any answer it gives. */
|
|
6
|
+
class NoStore extends http_1.RouteMiddleware {
|
|
7
|
+
isEnabled() {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
async onBefore(_req, res) {
|
|
11
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
12
|
+
res.setHeader('Pragma', 'no-cache');
|
|
13
|
+
}
|
|
14
|
+
async onAfter() { }
|
|
15
|
+
async onResponse() { }
|
|
16
|
+
}
|
|
17
|
+
exports.NoStore = NoStore;
|
|
18
|
+
//# sourceMappingURL=no-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-store.js","sourceRoot":"","sources":["../../../src/routes/no-store.ts"],"names":[],"mappings":";;;AAAA,wCAAgD;AAGhD,iKAAiK;AACjK,aAAqB,SAAQ,sBAAe;IACnC,SAAS;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,IAAqB,EAAE,GAAqB;QAChE,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QAC3C,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACtC,CAAC;IAEM,KAAK,CAAC,OAAO,KAAmB,CAAC;IAEjC,KAAK,CAAC,UAAU,KAAmB,CAAC;CAC5C"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { AuthzAdminOptions, AuthzAdminQuery, PrincipalRef, ResourceRef } from '@spinajs/authz';
|
|
2
|
-
|
|
3
|
-
export type QueryInput = Readonly<Record<string, unknown>>;
|
|
2
|
+
import type { AuthzAdminPageQuery, AuthzAssignmentsQuery, AuthzHoldersQuery, AuthzWriteOptionsQuery } from '../dto/queries.js';
|
|
4
3
|
/** authz-rbac's AssignmentSubject; the list queries belong to models this package does not import. */
|
|
5
4
|
type AssignmentSubject = PrincipalRef | {
|
|
6
5
|
readonly set: {
|
|
@@ -13,12 +12,12 @@ export declare function parseResourceRef(value: string, field: string): Resource
|
|
|
13
12
|
/** `<type>:<id>` (a principal) or `set:<role>@<type>:<id>` (a subject set). */
|
|
14
13
|
export declare function parseAssignmentSubject(value: string, field?: string): AssignmentSubject;
|
|
15
14
|
/** GET /authz/assignments: `scope`, `subject`, `role`, `includeExpired`, `limit`, `offset` or `after`. */
|
|
16
|
-
export declare function readAssignmentsQuery(q:
|
|
15
|
+
export declare function readAssignmentsQuery(q: AuthzAssignmentsQuery): AuthzAdminQuery;
|
|
17
16
|
/** GET /authz/holders: `scope` and `permission` (both required), `expandSets`, `limit`, `offset` or `after`. */
|
|
18
|
-
export declare function readHoldersQuery(q:
|
|
19
|
-
/** GET /authz/links and /authz/
|
|
20
|
-
export declare function readPageQuery(kind: 'links' | 'rules' | 'policies', q:
|
|
17
|
+
export declare function readHoldersQuery(q: AuthzHoldersQuery): AuthzAdminQuery;
|
|
18
|
+
/** GET /authz/links, /authz/rules and /authz/policies: `scope`, `limit`, `offset` or `after` (policies have no `after`, which their query DTO refuses). */
|
|
19
|
+
export declare function readPageQuery(kind: 'links' | 'rules' | 'policies', q: AuthzAdminPageQuery): AuthzAdminQuery;
|
|
21
20
|
/** The AuthzAdminOptions of a single-command route: `reason`, `idempotencyKey`, `dryRun`. */
|
|
22
|
-
export declare function readWriteOptions(q:
|
|
21
|
+
export declare function readWriteOptions(q: AuthzWriteOptionsQuery): AuthzAdminOptions;
|
|
23
22
|
export {};
|
|
24
23
|
//# sourceMappingURL=query.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/routes/query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEpG,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/routes/query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEpG,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAI/H,sGAAsG;AACtG,KAAK,iBAAiB,GAAG,YAAY,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;KAAE,CAAA;CAAE,CAAC;AAMjH,kGAAkG;AAClG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAS1E;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAY,GAAG,iBAAiB,CAa1F;AAcD,0GAA0G;AAC1G,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,qBAAqB,GAAG,eAAe,CAS9E;AAED,gHAAgH;AAChH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,iBAAiB,GAAG,eAAe,CAStE;AAED,2JAA2J;AAC3J,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAE3G;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,sBAAsB,GAAG,iBAAiB,CAM7E"}
|