@spinajs/authz-http-admin 3.0.13 → 3.0.15
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
package/lib/cjs/routes/query.js
CHANGED
|
@@ -10,14 +10,6 @@ const authz_1 = require("@spinajs/authz");
|
|
|
10
10
|
function invalid(field, message) {
|
|
11
11
|
throw new authz_1.AuthzAdminFailure('invalid_query', message, field);
|
|
12
12
|
}
|
|
13
|
-
function text(q, field) {
|
|
14
|
-
const v = q[field];
|
|
15
|
-
if (v === undefined)
|
|
16
|
-
return undefined;
|
|
17
|
-
if (typeof v !== 'string')
|
|
18
|
-
invalid(field, `${field} must be given once, as text`);
|
|
19
|
-
return v;
|
|
20
|
-
}
|
|
21
13
|
/** `<type>` or `<type>:<id>`, split at the first `:` (ids may hold more); `$global` is GLOBAL. */
|
|
22
14
|
function parseResourceRef(value, field) {
|
|
23
15
|
if (value === authz_1.GLOBAL.type)
|
|
@@ -51,90 +43,51 @@ function parseAssignmentSubject(value, field = 'subject') {
|
|
|
51
43
|
return bad();
|
|
52
44
|
return { type: value.slice(0, at), id: value.slice(at + 1) };
|
|
53
45
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
return undefined;
|
|
58
|
-
if (v !== 'true' && v !== 'false')
|
|
59
|
-
invalid(field, `${field} must be true or false`);
|
|
60
|
-
return v === 'true';
|
|
61
|
-
}
|
|
62
|
-
function count(q, field) {
|
|
63
|
-
const v = text(q, field);
|
|
64
|
-
if (v === undefined)
|
|
65
|
-
return undefined;
|
|
66
|
-
if (!/^\d+$/.test(v))
|
|
67
|
-
invalid(field, `${field} must be a non-negative integer`);
|
|
68
|
-
return Number(v);
|
|
69
|
-
}
|
|
70
|
-
/** `after`, the `next` of the previous page; it replaces `offset`. */
|
|
71
|
-
function cursor(q, offset) {
|
|
72
|
-
const after = text(q, 'after');
|
|
73
|
-
if (after === '')
|
|
74
|
-
invalid('after', 'after must not be empty');
|
|
46
|
+
/** `limit`, `offset` and `after` as AuthzAdmin's page, only the ones given; AuthzAdmin defaults the rest. `after` replaces `offset`. */
|
|
47
|
+
function page(q) {
|
|
48
|
+
const { limit, offset, after } = q;
|
|
75
49
|
if (after !== undefined && offset !== undefined)
|
|
76
50
|
invalid('after', 'after replaces offset: give one of them');
|
|
77
|
-
return after;
|
|
78
|
-
}
|
|
79
|
-
/** `limit`, `offset` and `after` as AuthzAdmin's page, only the ones given; AuthzAdmin defaults the rest. */
|
|
80
|
-
function page(q) {
|
|
81
|
-
const limit = count(q, 'limit');
|
|
82
|
-
const offset = count(q, 'offset');
|
|
83
|
-
const after = cursor(q, offset);
|
|
84
51
|
if (limit === undefined && offset === undefined && after === undefined)
|
|
85
52
|
return {};
|
|
86
53
|
return { page: { ...(limit === undefined ? {} : { limit }), ...(offset === undefined ? {} : { offset }), ...(after === undefined ? {} : { after }) } };
|
|
87
54
|
}
|
|
88
55
|
function scope(q) {
|
|
89
|
-
|
|
90
|
-
return v === undefined ? {} : { scope: parseResourceRef(v, 'scope') };
|
|
56
|
+
return q.scope === undefined ? {} : { scope: parseResourceRef(q.scope, 'scope') };
|
|
91
57
|
}
|
|
92
58
|
/** GET /authz/assignments: `scope`, `subject`, `role`, `includeExpired`, `limit`, `offset` or `after`. */
|
|
93
59
|
function readAssignmentsQuery(q) {
|
|
94
|
-
const subject = text(q, 'subject');
|
|
95
|
-
const role = text(q, 'role');
|
|
96
|
-
const includeExpired = flag(q, 'includeExpired');
|
|
97
60
|
return {
|
|
98
61
|
kind: 'assignments',
|
|
99
62
|
...scope(q),
|
|
100
|
-
...(subject === undefined ? {} : { subject: parseAssignmentSubject(subject) }),
|
|
101
|
-
...(role === undefined ? {} : { role }),
|
|
102
|
-
...(includeExpired === undefined ? {} : { includeExpired }),
|
|
63
|
+
...(q.subject === undefined ? {} : { subject: parseAssignmentSubject(q.subject) }),
|
|
64
|
+
...(q.role === undefined ? {} : { role: q.role }),
|
|
65
|
+
...(q.includeExpired === undefined ? {} : { includeExpired: q.includeExpired }),
|
|
103
66
|
...page(q),
|
|
104
67
|
};
|
|
105
68
|
}
|
|
106
69
|
/** GET /authz/holders: `scope` and `permission` (both required), `expandSets`, `limit`, `offset` or `after`. */
|
|
107
70
|
function readHoldersQuery(q) {
|
|
108
|
-
|
|
109
|
-
const permission = text(q, 'permission');
|
|
110
|
-
if (scope === undefined)
|
|
71
|
+
if (q.scope === undefined)
|
|
111
72
|
invalid('scope', 'scope is required');
|
|
112
|
-
if (permission === undefined || permission === '')
|
|
113
|
-
invalid('permission', 'permission is required');
|
|
114
|
-
const expandSets = flag(q, 'expandSets');
|
|
115
73
|
return {
|
|
116
74
|
kind: 'holders',
|
|
117
|
-
scope: parseResourceRef(scope, 'scope'),
|
|
118
|
-
permission,
|
|
119
|
-
...(expandSets === undefined ? {} : { expandSets }),
|
|
75
|
+
scope: parseResourceRef(q.scope, 'scope'),
|
|
76
|
+
permission: q.permission,
|
|
77
|
+
...(q.expandSets === undefined ? {} : { expandSets: q.expandSets }),
|
|
120
78
|
...page(q),
|
|
121
79
|
};
|
|
122
80
|
}
|
|
123
|
-
/** GET /authz/links and /authz/
|
|
81
|
+
/** GET /authz/links, /authz/rules and /authz/policies: `scope`, `limit`, `offset` or `after` (policies have no `after`, which their query DTO refuses). */
|
|
124
82
|
function readPageQuery(kind, q) {
|
|
125
|
-
if (kind === 'policies' && text(q, 'after') !== undefined)
|
|
126
|
-
invalid('after', 'policies are paged by offset: after is not supported');
|
|
127
83
|
return { kind, ...scope(q), ...page(q) };
|
|
128
84
|
}
|
|
129
85
|
/** The AuthzAdminOptions of a single-command route: `reason`, `idempotencyKey`, `dryRun`. */
|
|
130
86
|
function readWriteOptions(q) {
|
|
131
|
-
const reason = text(q, 'reason');
|
|
132
|
-
const idempotencyKey = text(q, 'idempotencyKey');
|
|
133
|
-
const dryRun = flag(q, 'dryRun');
|
|
134
87
|
return {
|
|
135
|
-
...(reason === undefined ? {} : { reason }),
|
|
136
|
-
...(idempotencyKey === undefined ? {} : { idempotencyKey }),
|
|
137
|
-
...(dryRun === undefined ? {} : { dryRun }),
|
|
88
|
+
...(q.reason === undefined ? {} : { reason: q.reason }),
|
|
89
|
+
...(q.idempotencyKey === undefined ? {} : { idempotencyKey: q.idempotencyKey }),
|
|
90
|
+
...(q.dryRun === undefined ? {} : { dryRun: q.dryRun }),
|
|
138
91
|
};
|
|
139
92
|
}
|
|
140
93
|
//# sourceMappingURL=query.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/routes/query.ts"],"names":[],"mappings":";;;;;;;;AAAA,0CAA2D;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/routes/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { JsonSchema } from './primitives.js';
|
|
2
|
+
export declare const AuthzAdminError: JsonSchema;
|
|
3
|
+
export declare const AuthzCommandResult: JsonSchema;
|
|
4
|
+
export declare const AuthzAdminResults: JsonSchema;
|
|
5
|
+
export declare const AuthzAdminPage: JsonSchema;
|
|
6
|
+
export declare const AuthzAdminAttributes: JsonSchema;
|
|
7
|
+
//# sourceMappingURL=answers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answers.d.ts","sourceRoot":"","sources":["../../../src/schemas/answers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,eAAO,MAAM,eAAe,EAAE,UAA+Z,CAAC;AAM9b,eAAO,MAAM,kBAAkB,EAAE,UAA4E,CAAC;AAE9G,eAAO,MAAM,iBAAiB,EAAE,UAAyR,CAAC;AAE1T,eAAO,MAAM,cAAc,EAAE,UAA+T,CAAC;AAE7V,eAAO,MAAM,oBAAoB,EAAE,UAAuE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthzAdminAttributes = exports.AuthzAdminPage = exports.AuthzAdminResults = exports.AuthzCommandResult = exports.AuthzAdminError = void 0;
|
|
4
|
+
const primitives_js_1 = require("./primitives.js");
|
|
5
|
+
const errorShape = (0, primitives_js_1.obj)(['code', 'message'], { code: primitives_js_1.text, message: primitives_js_1.text, field: { ...primitives_js_1.text, description: 'the offending field, when one is known' } });
|
|
6
|
+
exports.AuthzAdminError = (0, primitives_js_1.obj)(['error'], { error: errorShape }, 'The body of a refused request. Codes: invalid_request, invalid_query, invalid_batch, invalid_command, unknown_role, not_assignable, wrong_scope_type, unknown_ladder, unknown_permission, rule_not_compilable, invalid_attributes, set_cycle, set_too_deep (400); forbidden, escalation, last_holder, self_lockout, protected_role (403); not_found (404); conflict (409)');
|
|
7
|
+
const commandResult = {
|
|
8
|
+
oneOf: [(0, primitives_js_1.obj)(['ok', 'kind', 'affected'], { ok: { type: 'boolean', enum: [true] }, kind: primitives_js_1.text, id: primitives_js_1.text, token: { ...primitives_js_1.text, description: 'link.create only, shown once' }, affected: { type: 'integer' } }), (0, primitives_js_1.obj)(['ok', 'kind', 'error'], { ok: { type: 'boolean', enum: [false] }, kind: primitives_js_1.text, error: errorShape })],
|
|
9
|
+
};
|
|
10
|
+
exports.AuthzCommandResult = { ...commandResult, description: 'The outcome of one command' };
|
|
11
|
+
exports.AuthzAdminResults = (0, primitives_js_1.obj)(['results'], { results: { type: 'array', items: commandResult, description: 'one per command, in order; the first failure ends the list' } }, 'The answer of a write route: 200 when every command succeeded, else the status of the first failure, with the same body');
|
|
12
|
+
exports.AuthzAdminPage = (0, primitives_js_1.obj)(['items', 'total'], { items: { type: 'array', items: primitives_js_1.anyObject }, total: { type: 'integer', description: 'rows matching before paging' }, next: { type: 'string', description: 'pass it as `after` to read the following page; absent on the last page and on offset pages' } }, 'The answer of a list route');
|
|
13
|
+
exports.AuthzAdminAttributes = { ...primitives_js_1.anyObject, description: 'The attributes of a scope' };
|
|
14
|
+
//# sourceMappingURL=answers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answers.js","sourceRoot":"","sources":["../../../src/schemas/answers.ts"],"names":[],"mappings":";;;AAAA,mDAAuD;AAGvD,MAAM,UAAU,GAAG,IAAA,mBAAG,EAAC,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,oBAAI,EAAE,OAAO,EAAE,oBAAI,EAAE,KAAK,EAAE,EAAE,GAAG,oBAAI,EAAE,WAAW,EAAE,wCAAwC,EAAE,EAAE,CAAC,CAAC;AAEzI,QAAA,eAAe,GAAe,IAAA,mBAAG,EAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,2WAA2W,CAAC,CAAC;AAE9b,MAAM,aAAa,GAAe;IAChC,KAAK,EAAE,CAAC,IAAA,mBAAG,EAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,oBAAI,EAAE,EAAE,EAAE,oBAAI,EAAE,KAAK,EAAE,EAAE,GAAG,oBAAI,EAAE,WAAW,EAAE,8BAA8B,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,IAAA,mBAAG,EAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,oBAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;CACnT,CAAC;AAEW,QAAA,kBAAkB,GAAe,EAAE,GAAG,aAAa,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;AAEjG,QAAA,iBAAiB,GAAe,IAAA,mBAAG,EAAC,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,4DAA4D,EAAE,EAAE,EAAE,yHAAyH,CAAC,CAAC;AAE7S,QAAA,cAAc,GAAe,IAAA,mBAAG,EAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,yBAAS,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4FAA4F,EAAE,EAAE,EAAE,4BAA4B,CAAC,CAAC;AAEhV,QAAA,oBAAoB,GAAe,EAAE,GAAG,yBAAS,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC"}
|
|
@@ -8,6 +8,10 @@ export declare const policyBody: JsonSchema;
|
|
|
8
8
|
export declare const COMMAND_KINDS: readonly ['assignment.grant', 'assignment.revoke', 'assignment.revokeWhere', 'assignment.setTags', 'assignment.addTags', 'assignment.removeTags', 'assignment.setExpiry', 'set.addMember', 'set.removeMember', 'link.create', 'link.update', 'link.revoke', 'rule.put', 'rule.delete', 'policy.put', 'policy.delete', 'scope.setAttributes', 'scope.replaceAttributes', 'scope.forget'];
|
|
9
9
|
/** The schemas of the built-in sources, in COMMAND_KINDS order. */
|
|
10
10
|
export declare const commandSchemas: readonly JsonSchema[];
|
|
11
|
+
/** The batch body over the built-in command schemas; AuthzAdminSchemaProvider serves it over every registered source. */
|
|
12
|
+
export declare const AuthzAdminBatch: JsonSchema;
|
|
13
|
+
/** The properties of a built-in command without `kind`: the body of the route that runs that one command. */
|
|
14
|
+
export declare function commandFields(kind: (typeof COMMAND_KINDS)[number]): Record<string, JsonSchema>;
|
|
11
15
|
/** The commands of @spinajs/authz-rbac. */
|
|
12
16
|
export declare class RbacCommandSchemas extends AuthzCommandSchemaSource {
|
|
13
17
|
schemas(): Readonly<Record<string, JsonSchema>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/schemas/commands.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAIzD,4FAA4F;AAC5F,eAAO,MAAM,QAAQ,EAAE,UAsBtB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,UAAU,EAAE,UAiBxB,CAAC;AAEF,kGAAkG;AAClG,eAAO,MAAM,aAAa,YAAI,kBAAkB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,eAAe,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,cAAc,CAAU,CAAC;AA8BrZ,mEAAmE;AACnE,eAAO,MAAM,cAAc,EAAE,SAAS,UAAU,EAAwD,CAAC;AAIzG,2CAA2C;AAC3C,qBACa,kBAAmB,SAAQ,wBAAwB;IAC9D,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAE9C;CACF;AAED,2CAA2C;AAC3C,qBACa,kBAAmB,SAAQ,wBAAwB;IAC9D,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAE9C;CACF;AAED,iCAAiC;AACjC,qBACa,kBAAmB,SAAQ,wBAAwB;IAC9D,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAE9C;CACF"}
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/schemas/commands.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAIzD,4FAA4F;AAC5F,eAAO,MAAM,QAAQ,EAAE,UAsBtB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,UAAU,EAAE,UAiBxB,CAAC;AAEF,kGAAkG;AAClG,eAAO,MAAM,aAAa,YAAI,kBAAkB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,eAAe,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,cAAc,CAAU,CAAC;AA8BrZ,mEAAmE;AACnE,eAAO,MAAM,cAAc,EAAE,SAAS,UAAU,EAAwD,CAAC;AAIzG,yHAAyH;AACzH,eAAO,MAAM,eAAe,EAAE,UAAyC,CAAC;AAExE,6GAA6G;AAC7G,wBAAgB,aAAa,CAAC,IAAI,EAAE,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAG9F;AAED,2CAA2C;AAC3C,qBACa,kBAAmB,SAAQ,wBAAwB;IAC9D,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAE9C;CACF;AAED,2CAA2C;AAC3C,qBACa,kBAAmB,SAAQ,wBAAwB;IAC9D,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAE9C;CACF;AAED,iCAAiC;AACjC,qBACa,kBAAmB,SAAQ,wBAAwB;IAC9D,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAE9C;CACF"}
|
|
@@ -6,14 +6,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.CoreCommandSchemas = exports.AbacCommandSchemas = exports.RbacCommandSchemas = exports.commandSchemas = exports.COMMAND_KINDS = exports.policyBody = exports.ruleBody = void 0;
|
|
9
|
+
exports.CoreCommandSchemas = exports.AbacCommandSchemas = exports.RbacCommandSchemas = exports.AuthzAdminBatch = exports.commandSchemas = exports.COMMAND_KINDS = exports.policyBody = exports.ruleBody = void 0;
|
|
10
|
+
exports.commandFields = commandFields;
|
|
10
11
|
const di_1 = require("@spinajs/di");
|
|
11
12
|
const primitives_js_1 = require("./primitives.js");
|
|
12
13
|
const registry_js_1 = require("./registry.js");
|
|
13
|
-
const idOnly = { id: { ...primitives_js_1.
|
|
14
|
+
const idOnly = { id: { ...primitives_js_1.rowId, description: 'the id of the row' } };
|
|
14
15
|
/** A rule as `rule.put` takes it; the condition language is described by @spinajs/authz. */
|
|
15
|
-
exports.ruleBody = (0, primitives_js_1.
|
|
16
|
-
id: primitives_js_1.
|
|
16
|
+
exports.ruleBody = (0, primitives_js_1.closed)(['id', 'kind', 'scope'], {
|
|
17
|
+
id: primitives_js_1.rowId,
|
|
17
18
|
kind: { type: 'string', enum: ['restrict', 'cap', 'threshold'] },
|
|
18
19
|
scope: primitives_js_1.resourceRef,
|
|
19
20
|
resourceTypes: { type: 'array', items: primitives_js_1.text },
|
|
@@ -21,8 +22,8 @@ exports.ruleBody = (0, primitives_js_1.obj)(['id', 'kind', 'scope'], {
|
|
|
21
22
|
when: { ...primitives_js_1.anyObject, description: 'a Condition' },
|
|
22
23
|
expiresAt: primitives_js_1.nullableDateTime,
|
|
23
24
|
allow: { type: 'array', items: primitives_js_1.assignmentSubject },
|
|
24
|
-
ladder: primitives_js_1.
|
|
25
|
-
maxRole: { description: 'a role id, { ref } or null (drops the assignment)',
|
|
25
|
+
ladder: primitives_js_1.roleName,
|
|
26
|
+
maxRole: { description: 'a role id, { ref } or null (drops the assignment)', oneOf: [primitives_js_1.text, { ...primitives_js_1.anyObject, nullable: true }] },
|
|
26
27
|
stripTags: { type: 'boolean' },
|
|
27
28
|
assignments: primitives_js_1.anyObject,
|
|
28
29
|
permissions: { type: 'array', items: primitives_js_1.text },
|
|
@@ -32,8 +33,8 @@ exports.ruleBody = (0, primitives_js_1.obj)(['id', 'kind', 'scope'], {
|
|
|
32
33
|
reason: { ...primitives_js_1.anyObject, description: 'DenyReason: code, payload, priority, sortKey' },
|
|
33
34
|
}, 'A RBAC rule in SQL form; the server sets `source`');
|
|
34
35
|
/** A policy as `policy.put` takes it. */
|
|
35
|
-
exports.policyBody = (0, primitives_js_1.
|
|
36
|
-
id: primitives_js_1.
|
|
36
|
+
exports.policyBody = (0, primitives_js_1.closed)(['id', 'effect', 'permissions'], {
|
|
37
|
+
id: primitives_js_1.rowId,
|
|
37
38
|
effect: { type: 'string', enum: ['permit', 'deny'] },
|
|
38
39
|
permissions: { type: 'array', items: primitives_js_1.text, description: 'permission globs' },
|
|
39
40
|
resourceTypes: { type: 'array', items: primitives_js_1.text },
|
|
@@ -49,17 +50,17 @@ exports.policyBody = (0, primitives_js_1.obj)(['id', 'effect', 'permissions'], {
|
|
|
49
50
|
/** The command kinds the built-in sources describe: authz-rbac's, authz-abac's and the core's. */
|
|
50
51
|
exports.COMMAND_KINDS = ['assignment.grant', 'assignment.revoke', 'assignment.revokeWhere', 'assignment.setTags', 'assignment.addTags', 'assignment.removeTags', 'assignment.setExpiry', 'set.addMember', 'set.removeMember', 'link.create', 'link.update', 'link.revoke', 'rule.put', 'rule.delete', 'policy.put', 'policy.delete', 'scope.setAttributes', 'scope.replaceAttributes', 'scope.forget'];
|
|
51
52
|
const rbacCommands = [
|
|
52
|
-
(0, primitives_js_1.command)('assignment.grant', ['subject', 'role', 'scope'], { subject: primitives_js_1.assignmentSubject, role: primitives_js_1.
|
|
53
|
+
(0, primitives_js_1.command)('assignment.grant', ['subject', 'role', 'scope'], { subject: primitives_js_1.assignmentSubject, role: primitives_js_1.roleName, scope: primitives_js_1.resourceRef, tags: primitives_js_1.tags, expiresAt: primitives_js_1.nullableDateTime, replaceLadder: { type: 'boolean', description: "revoke the subject's other roles of the same ladder at this scope" } }, 'Grants a role to a subject at a scope'),
|
|
53
54
|
(0, primitives_js_1.command)('assignment.revoke', ['id'], idOnly, 'Revokes one assignment'),
|
|
54
|
-
(0, primitives_js_1.command)('assignment.revokeWhere', ['scope'], { scope: primitives_js_1.resourceRef, subject: primitives_js_1.assignmentSubject, role: primitives_js_1.
|
|
55
|
+
(0, primitives_js_1.command)('assignment.revokeWhere', ['scope'], { scope: primitives_js_1.resourceRef, subject: primitives_js_1.assignmentSubject, role: primitives_js_1.roleName }, 'Revokes the assignments at a scope, narrowed by subject and role'),
|
|
55
56
|
(0, primitives_js_1.command)('assignment.setTags', ['id', 'tags'], { ...idOnly, tags: primitives_js_1.tags }, 'Replaces the tags of an assignment'),
|
|
56
57
|
(0, primitives_js_1.command)('assignment.addTags', ['id', 'tags'], { ...idOnly, tags: primitives_js_1.tags }, 'Adds tags to an assignment'),
|
|
57
58
|
(0, primitives_js_1.command)('assignment.removeTags', ['id', 'tags'], { ...idOnly, tags: primitives_js_1.tags }, 'Removes tags from an assignment'),
|
|
58
59
|
(0, primitives_js_1.command)('assignment.setExpiry', ['id', 'expiresAt'], { ...idOnly, expiresAt: primitives_js_1.nullableDateTime }, 'Sets or clears the expiry of an assignment'),
|
|
59
60
|
(0, primitives_js_1.command)('set.addMember', ['set', 'member'], { set: primitives_js_1.roleSet, member: primitives_js_1.principalRef, expiresAt: primitives_js_1.nullableDateTime }, 'Adds a principal to a subject set (group.member at group:G)'),
|
|
60
61
|
(0, primitives_js_1.command)('set.removeMember', ['set', 'member'], { set: primitives_js_1.roleSet, member: primitives_js_1.principalRef }, 'Removes a principal from a subject set'),
|
|
61
|
-
(0, primitives_js_1.command)('link.create', ['scope', 'role'], { scope: primitives_js_1.resourceRef, role: primitives_js_1.
|
|
62
|
-
(0, primitives_js_1.command)('link.update', ['id'], { ...idOnly, expiresAt: primitives_js_1.nullableDateTime, attributes: primitives_js_1.anyObject, role: primitives_js_1.
|
|
62
|
+
(0, primitives_js_1.command)('link.create', ['scope', 'role'], { scope: primitives_js_1.resourceRef, role: primitives_js_1.roleName, tags: primitives_js_1.tags, expiresAt: primitives_js_1.nullableDateTime, attributes: primitives_js_1.anyObject }, 'Creates a share link; the answer carries its token, shown once'),
|
|
63
|
+
(0, primitives_js_1.command)('link.update', ['id'], { ...idOnly, expiresAt: primitives_js_1.nullableDateTime, attributes: primitives_js_1.anyObject, role: primitives_js_1.roleName, tags: primitives_js_1.tags }, 'Changes a share link'),
|
|
63
64
|
(0, primitives_js_1.command)('link.revoke', ['id'], idOnly, 'Revokes a share link'),
|
|
64
65
|
(0, primitives_js_1.command)('rule.put', ['rule'], { rule: exports.ruleBody }, 'Inserts or replaces a RBAC rule by id'),
|
|
65
66
|
(0, primitives_js_1.command)('rule.delete', ['id'], idOnly, 'Deletes a RBAC rule'),
|
|
@@ -76,6 +77,13 @@ const coreCommands = [
|
|
|
76
77
|
/** The schemas of the built-in sources, in COMMAND_KINDS order. */
|
|
77
78
|
exports.commandSchemas = [...rbacCommands, ...abacCommands, ...coreCommands];
|
|
78
79
|
const byKind = (schemas) => Object.fromEntries(schemas.map((s) => [s.properties.kind.enum[0], s]));
|
|
80
|
+
/** The batch body over the built-in command schemas; AuthzAdminSchemaProvider serves it over every registered source. */
|
|
81
|
+
exports.AuthzAdminBatch = (0, primitives_js_1.commandBatch)(exports.commandSchemas);
|
|
82
|
+
/** The properties of a built-in command without `kind`: the body of the route that runs that one command. */
|
|
83
|
+
function commandFields(kind) {
|
|
84
|
+
const { kind: _kind, ...fields } = byKind(exports.commandSchemas)[kind].properties;
|
|
85
|
+
return fields;
|
|
86
|
+
}
|
|
79
87
|
/** The commands of @spinajs/authz-rbac. */
|
|
80
88
|
let RbacCommandSchemas = class RbacCommandSchemas extends registry_js_1.AuthzCommandSchemaSource {
|
|
81
89
|
schemas() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/schemas/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/schemas/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,13 @@
|
|
|
1
1
|
import type { JsonSchema } from './primitives.js';
|
|
2
|
-
interface RouteDoc {
|
|
3
|
-
readonly method: 'get' | 'post' | 'put' | 'patch' | 'delete';
|
|
4
|
-
readonly path: string;
|
|
5
|
-
readonly body?: string;
|
|
6
|
-
readonly query?: readonly string[];
|
|
7
|
-
readonly requiredQuery?: readonly string[];
|
|
8
|
-
}
|
|
9
|
-
/** What each route takes that the controller's signature cannot say: its body and its query string. */
|
|
10
|
-
export declare const AUTHZ_ADMIN_ROUTES: readonly RouteDoc[];
|
|
11
2
|
/**
|
|
12
|
-
* http-swagger
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
3
|
+
* http-swagger documents the `@Body()` DTOs and the `@Param()` schemas of the admin routes itself.
|
|
4
|
+
* This adds what it cannot see, read from the same DTOs and registry the routes validate against:
|
|
5
|
+
* the body of POST /authz/commands (`$ref` AuthzAdminBatch, built from the registered
|
|
6
|
+
* AuthzCommandSchemaSources), the attribute bodies (`@AdminBody()`), the query parameters of each
|
|
7
|
+
* query DTO (`@AdminQuery()`) and the path parameter text. Operations are matched by method and path
|
|
8
|
+
* suffix, so a route prefix does not matter; `basePath` is the configured `authz.http.admin.basePath`
|
|
9
|
+
* when the app moved the routes. Changes the document in place. Pass `AuthzAdminSchemaProvider.schemas()`
|
|
10
|
+
* as `schemas` to list the commands every registered model contributes.
|
|
19
11
|
*/
|
|
20
12
|
export declare function describeAuthzAdminDocument<T extends object>(doc: T, basePath?: string, schemas?: Readonly<Record<string, JsonSchema>>): T;
|
|
21
|
-
export {};
|
|
22
13
|
//# sourceMappingURL=document.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../src/schemas/document.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../src/schemas/document.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAuDlD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,SAAU,EAAE,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAmB,GAAG,CAAC,CAkB3J"}
|
|
@@ -1,79 +1,68 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AUTHZ_ADMIN_ROUTES = void 0;
|
|
4
3
|
exports.describeAuthzAdminDocument = describeAuthzAdminDocument;
|
|
4
|
+
const http_1 = require("@spinajs/http");
|
|
5
|
+
const validation_1 = require("@spinajs/validation");
|
|
6
|
+
const AuthzAdminController_js_1 = require("../controllers/AuthzAdminController.js");
|
|
7
|
+
const commands_js_1 = require("./commands.js");
|
|
5
8
|
const provider_js_1 = require("./provider.js");
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
{ method: 'post', path: '/authz/links', body: 'AuthzLinkCreate', query: WRITE_OPTIONS },
|
|
35
|
-
{ method: 'patch', path: '/authz/links/{id}', body: 'AuthzLinkPatch', query: WRITE_OPTIONS },
|
|
36
|
-
{ method: 'delete', path: '/authz/links/{id}', query: WRITE_OPTIONS },
|
|
37
|
-
{ method: 'get', path: '/authz/rules', query: ['scope', 'limit', 'offset', 'after'] },
|
|
38
|
-
{ method: 'put', path: '/authz/rules/{id}', body: 'AuthzRuleBody', query: WRITE_OPTIONS },
|
|
39
|
-
{ method: 'delete', path: '/authz/rules/{id}', query: WRITE_OPTIONS },
|
|
40
|
-
{ method: 'get', path: '/authz/policies', query: ['scope', 'limit', 'offset'] },
|
|
41
|
-
{ method: 'put', path: '/authz/policies/{id}', body: 'AuthzPolicyBody', query: WRITE_OPTIONS },
|
|
42
|
-
{ method: 'delete', path: '/authz/policies/{id}', query: WRITE_OPTIONS },
|
|
43
|
-
{ method: 'get', path: '/authz/scopes/{type}/{id}/attributes' },
|
|
44
|
-
{ method: 'patch', path: '/authz/scopes/{type}/{id}/attributes', body: 'AuthzAttributesPatch', query: WRITE_OPTIONS },
|
|
45
|
-
{ method: 'put', path: '/authz/scopes/{type}/{id}/attributes', body: 'AuthzAttributesBody', query: WRITE_OPTIONS },
|
|
46
|
-
];
|
|
9
|
+
/** The answers and the batch body over the built-in command kinds. */
|
|
10
|
+
const DEFAULT_SCHEMAS = { ...provider_js_1.AUTHZ_ADMIN_SCHEMAS, AuthzAdminBatch: commands_js_1.AuthzAdminBatch };
|
|
11
|
+
function schemaOf(param) {
|
|
12
|
+
const type = param.RuntimeType;
|
|
13
|
+
return type?.prototype ? Reflect.getMetadata(validation_1.SCHEMA_SYMBOL, type.prototype) : undefined;
|
|
14
|
+
}
|
|
15
|
+
const jsonBody = (schema) => ({ required: true, content: { 'application/json': { schema } } });
|
|
16
|
+
/** The request body or the query parameters a custom route arg of the controller takes, which http-swagger does not know. */
|
|
17
|
+
function describeArg(operation, param) {
|
|
18
|
+
const schema = schemaOf(param);
|
|
19
|
+
if (param.Type === 'AuthzAdminBatchArg') {
|
|
20
|
+
operation.requestBody = jsonBody({ $ref: '#/components/schemas/AuthzAdminBatch' });
|
|
21
|
+
}
|
|
22
|
+
else if (param.Type === 'AuthzAdminBodyArg' && schema) {
|
|
23
|
+
const { $id: _id, ...documented } = schema;
|
|
24
|
+
operation.requestBody = jsonBody(documented);
|
|
25
|
+
}
|
|
26
|
+
else if (param.Type === 'AuthzAdminQueryArg' && schema) {
|
|
27
|
+
const parameters = (operation.parameters ??= []);
|
|
28
|
+
const required = schema.required ?? [];
|
|
29
|
+
for (const [name, property] of Object.entries(schema.properties ?? {})) {
|
|
30
|
+
if (parameters.some((p) => p.in === 'query' && p.name === name))
|
|
31
|
+
continue;
|
|
32
|
+
const { description, ...value } = property;
|
|
33
|
+
parameters.push({ name, in: 'query', required: required.includes(name), schema: value, ...(typeof description === 'string' ? { description } : {}) });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
47
37
|
/**
|
|
48
|
-
* http-swagger
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
38
|
+
* http-swagger documents the `@Body()` DTOs and the `@Param()` schemas of the admin routes itself.
|
|
39
|
+
* This adds what it cannot see, read from the same DTOs and registry the routes validate against:
|
|
40
|
+
* the body of POST /authz/commands (`$ref` AuthzAdminBatch, built from the registered
|
|
41
|
+
* AuthzCommandSchemaSources), the attribute bodies (`@AdminBody()`), the query parameters of each
|
|
42
|
+
* query DTO (`@AdminQuery()`) and the path parameter text. Operations are matched by method and path
|
|
43
|
+
* suffix, so a route prefix does not matter; `basePath` is the configured `authz.http.admin.basePath`
|
|
44
|
+
* when the app moved the routes. Changes the document in place. Pass `AuthzAdminSchemaProvider.schemas()`
|
|
45
|
+
* as `schemas` to list the commands every registered model contributes.
|
|
55
46
|
*/
|
|
56
|
-
function describeAuthzAdminDocument(doc, basePath = 'authz', schemas =
|
|
47
|
+
function describeAuthzAdminDocument(doc, basePath = 'authz', schemas = DEFAULT_SCHEMAS) {
|
|
57
48
|
const document = doc;
|
|
58
49
|
const components = ((document.components ??= {}).schemas ??= {});
|
|
59
50
|
for (const [name, schema] of Object.entries(schemas))
|
|
60
51
|
components[name] ??= schema;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
52
|
+
const base = basePath.replace(/^\/+|\/+$/g, '');
|
|
53
|
+
const paths = document.paths ?? {};
|
|
54
|
+
const descriptor = Reflect.getMetadata(http_1.CONTROLLED_DESCRIPTOR_SYMBOL, AuthzAdminController_js_1.AuthzAdminController.prototype);
|
|
55
|
+
for (const route of descriptor.Routes.values()) {
|
|
56
|
+
const routePath = `/${base}/${(route.Path ?? '').replace(/:(\w+)/g, '{$1}')}`;
|
|
57
|
+
const path = Object.keys(paths).find((p) => p === routePath || p.endsWith(routePath));
|
|
58
|
+
const operation = path ? paths[path][route.Type] : undefined;
|
|
65
59
|
if (!operation)
|
|
66
60
|
continue;
|
|
67
|
-
|
|
68
|
-
operation
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
p.description = PATH_PARAMS[p.name];
|
|
73
|
-
for (const name of route.query ?? []) {
|
|
74
|
-
if (!parameters.some((p) => p.in === 'query' && p.name === name))
|
|
75
|
-
parameters.push({ name, in: 'query', required: route.requiredQuery?.includes(name) === true, ...QUERY[name] });
|
|
76
|
-
}
|
|
61
|
+
for (const param of route.Parameters.values())
|
|
62
|
+
describeArg(operation, param);
|
|
63
|
+
for (const p of operation.parameters ?? [])
|
|
64
|
+
if (p.in === 'path' && !p.description && typeof p.schema?.description === 'string')
|
|
65
|
+
p.description = p.schema.description;
|
|
77
66
|
}
|
|
78
67
|
return doc;
|
|
79
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../../src/schemas/document.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../../src/schemas/document.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
|
package/lib/cjs/schemas/index.js
CHANGED
|
@@ -14,8 +14,8 @@ 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);
|
|
17
18
|
__exportStar(require("./commands.js"), exports);
|
|
18
|
-
__exportStar(require("./bodies.js"), exports);
|
|
19
19
|
__exportStar(require("./provider.js"), exports);
|
|
20
20
|
__exportStar(require("./document.js"), exports);
|
|
21
21
|
__exportStar(require("./registry.js"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/schemas/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,gDAA8B;AAC9B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/schemas/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,+CAA6B;AAC7B,gDAA8B;AAC9B,gDAA8B;AAC9B,gDAA8B;AAC9B,gDAA8B"}
|