@spinajs/authz-http-admin 3.0.3 → 3.0.4
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/lib/cjs/controllers/AuthzAdminController.d.ts +9 -6
- package/lib/cjs/controllers/AuthzAdminController.d.ts.map +1 -1
- package/lib/cjs/controllers/AuthzAdminController.js +28 -15
- package/lib/cjs/controllers/AuthzAdminController.js.map +1 -1
- package/lib/cjs/routes/query.d.ts +12 -4
- package/lib/cjs/routes/query.d.ts.map +1 -1
- package/lib/cjs/routes/query.js +18 -6
- package/lib/cjs/routes/query.js.map +1 -1
- package/lib/cjs/schemas/bodies.d.ts +1 -0
- package/lib/cjs/schemas/bodies.d.ts.map +1 -1
- package/lib/cjs/schemas/bodies.js +3 -7
- package/lib/cjs/schemas/bodies.js.map +1 -1
- package/lib/cjs/schemas/commands.d.ts +15 -1
- package/lib/cjs/schemas/commands.d.ts.map +1 -1
- package/lib/cjs/schemas/commands.js +48 -3
- package/lib/cjs/schemas/commands.js.map +1 -1
- package/lib/cjs/schemas/document.d.ts +5 -2
- package/lib/cjs/schemas/document.d.ts.map +1 -1
- package/lib/cjs/schemas/document.js +12 -8
- package/lib/cjs/schemas/document.js.map +1 -1
- package/lib/cjs/schemas/index.d.ts +1 -0
- package/lib/cjs/schemas/index.d.ts.map +1 -1
- package/lib/cjs/schemas/index.js +1 -0
- package/lib/cjs/schemas/index.js.map +1 -1
- package/lib/cjs/schemas/primitives.d.ts +2 -0
- package/lib/cjs/schemas/primitives.d.ts.map +1 -1
- package/lib/cjs/schemas/primitives.js +10 -0
- package/lib/cjs/schemas/primitives.js.map +1 -1
- package/lib/cjs/schemas/provider.d.ts +5 -1
- package/lib/cjs/schemas/provider.d.ts.map +1 -1
- package/lib/cjs/schemas/provider.js +15 -1
- package/lib/cjs/schemas/provider.js.map +1 -1
- package/lib/cjs/schemas/registry.d.ts +21 -0
- package/lib/cjs/schemas/registry.d.ts.map +1 -0
- package/lib/cjs/schemas/registry.js +71 -0
- package/lib/cjs/schemas/registry.js.map +1 -0
- package/lib/mjs/controllers/AuthzAdminController.d.ts +9 -6
- package/lib/mjs/controllers/AuthzAdminController.d.ts.map +1 -1
- package/lib/mjs/controllers/AuthzAdminController.js +29 -16
- package/lib/mjs/controllers/AuthzAdminController.js.map +1 -1
- package/lib/mjs/routes/query.d.ts +12 -4
- package/lib/mjs/routes/query.d.ts.map +1 -1
- package/lib/mjs/routes/query.js +18 -6
- package/lib/mjs/routes/query.js.map +1 -1
- package/lib/mjs/schemas/bodies.d.ts +1 -0
- package/lib/mjs/schemas/bodies.d.ts.map +1 -1
- package/lib/mjs/schemas/bodies.js +4 -8
- package/lib/mjs/schemas/bodies.js.map +1 -1
- package/lib/mjs/schemas/commands.d.ts +15 -1
- package/lib/mjs/schemas/commands.d.ts.map +1 -1
- package/lib/mjs/schemas/commands.js +47 -2
- package/lib/mjs/schemas/commands.js.map +1 -1
- package/lib/mjs/schemas/document.d.ts +5 -2
- package/lib/mjs/schemas/document.d.ts.map +1 -1
- package/lib/mjs/schemas/document.js +12 -8
- package/lib/mjs/schemas/document.js.map +1 -1
- package/lib/mjs/schemas/index.d.ts +1 -0
- package/lib/mjs/schemas/index.d.ts.map +1 -1
- package/lib/mjs/schemas/index.js +1 -0
- package/lib/mjs/schemas/index.js.map +1 -1
- package/lib/mjs/schemas/primitives.d.ts +2 -0
- package/lib/mjs/schemas/primitives.d.ts.map +1 -1
- package/lib/mjs/schemas/primitives.js +9 -0
- package/lib/mjs/schemas/primitives.js.map +1 -1
- package/lib/mjs/schemas/provider.d.ts +5 -1
- package/lib/mjs/schemas/provider.d.ts.map +1 -1
- package/lib/mjs/schemas/provider.js +16 -2
- package/lib/mjs/schemas/provider.js.map +1 -1
- package/lib/mjs/schemas/registry.d.ts +21 -0
- package/lib/mjs/schemas/registry.d.ts.map +1 -0
- package/lib/mjs/schemas/registry.js +67 -0
- package/lib/mjs/schemas/registry.js.map +1 -0
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +12 -12
|
@@ -1,16 +1,24 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AuthzAdminOptions, AuthzAdminQuery, PrincipalRef, ResourceRef } from '@spinajs/authz';
|
|
2
2
|
/** A parsed query string (express: string, string[] or a nested object per key). */
|
|
3
3
|
export type QueryInput = Readonly<Record<string, unknown>>;
|
|
4
|
+
/** authz-rbac's AssignmentSubject; the list queries belong to models this package does not import. */
|
|
5
|
+
type AssignmentSubject = PrincipalRef | {
|
|
6
|
+
readonly set: {
|
|
7
|
+
readonly role: string;
|
|
8
|
+
readonly scope: ResourceRef;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
4
11
|
/** `<type>` or `<type>:<id>`, split at the first `:` (ids may hold more); `$global` is GLOBAL. */
|
|
5
12
|
export declare function parseResourceRef(value: string, field: string): ResourceRef;
|
|
6
13
|
/** `<type>:<id>` (a principal) or `set:<role>@<type>:<id>` (a subject set). */
|
|
7
14
|
export declare function parseAssignmentSubject(value: string, field?: string): AssignmentSubject;
|
|
8
|
-
/** GET /authz/assignments: `scope`, `subject`, `role`, `includeExpired`, `limit`, `offset`. */
|
|
15
|
+
/** GET /authz/assignments: `scope`, `subject`, `role`, `includeExpired`, `limit`, `offset` or `after`. */
|
|
9
16
|
export declare function readAssignmentsQuery(q: QueryInput): AuthzAdminQuery;
|
|
10
|
-
/** GET /authz/holders: `scope` and `permission` (both required), `expandSets`, `limit`, `offset`. */
|
|
17
|
+
/** GET /authz/holders: `scope` and `permission` (both required), `expandSets`, `limit`, `offset` or `after`. */
|
|
11
18
|
export declare function readHoldersQuery(q: QueryInput): AuthzAdminQuery;
|
|
12
|
-
/** GET /authz/links
|
|
19
|
+
/** GET /authz/links and /authz/rules: `scope`, `limit`, `offset` or `after`; GET /authz/policies has no `after`. */
|
|
13
20
|
export declare function readPageQuery(kind: 'links' | 'rules' | 'policies', q: QueryInput): AuthzAdminQuery;
|
|
14
21
|
/** The AuthzAdminOptions of a single-command route: `reason`, `idempotencyKey`, `dryRun`. */
|
|
15
22
|
export declare function readWriteOptions(q: QueryInput): AuthzAdminOptions;
|
|
23
|
+
export {};
|
|
16
24
|
//# 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,
|
|
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,oFAAoF;AACpF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAI3D,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;AAajH,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;AAsCD,0GAA0G;AAC1G,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,UAAU,GAAG,eAAe,CAYnE;AAED,gHAAgH;AAChH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,eAAe,CAa/D;AAED,oHAAoH;AACpH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,eAAe,CAGlG;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,iBAAiB,CASjE"}
|
package/lib/mjs/routes/query.js
CHANGED
|
@@ -59,19 +59,29 @@ function count(q, field) {
|
|
|
59
59
|
invalid(field, `${field} must be a non-negative integer`);
|
|
60
60
|
return Number(v);
|
|
61
61
|
}
|
|
62
|
-
/** `
|
|
62
|
+
/** `after`, the `next` of the previous page; it replaces `offset`. */
|
|
63
|
+
function cursor(q, offset) {
|
|
64
|
+
const after = text(q, 'after');
|
|
65
|
+
if (after === '')
|
|
66
|
+
invalid('after', 'after must not be empty');
|
|
67
|
+
if (after !== undefined && offset !== undefined)
|
|
68
|
+
invalid('after', 'after replaces offset: give one of them');
|
|
69
|
+
return after;
|
|
70
|
+
}
|
|
71
|
+
/** `limit`, `offset` and `after` as AuthzAdmin's page, only the ones given; AuthzAdmin defaults the rest. */
|
|
63
72
|
function page(q) {
|
|
64
73
|
const limit = count(q, 'limit');
|
|
65
74
|
const offset = count(q, 'offset');
|
|
66
|
-
|
|
75
|
+
const after = cursor(q, offset);
|
|
76
|
+
if (limit === undefined && offset === undefined && after === undefined)
|
|
67
77
|
return {};
|
|
68
|
-
return { page: { ...(limit === undefined ? {} : { limit }), ...(offset === undefined ? {} : { offset }) } };
|
|
78
|
+
return { page: { ...(limit === undefined ? {} : { limit }), ...(offset === undefined ? {} : { offset }), ...(after === undefined ? {} : { after }) } };
|
|
69
79
|
}
|
|
70
80
|
function scope(q) {
|
|
71
81
|
const v = text(q, 'scope');
|
|
72
82
|
return v === undefined ? {} : { scope: parseResourceRef(v, 'scope') };
|
|
73
83
|
}
|
|
74
|
-
/** GET /authz/assignments: `scope`, `subject`, `role`, `includeExpired`, `limit`, `offset`. */
|
|
84
|
+
/** GET /authz/assignments: `scope`, `subject`, `role`, `includeExpired`, `limit`, `offset` or `after`. */
|
|
75
85
|
export function readAssignmentsQuery(q) {
|
|
76
86
|
const subject = text(q, 'subject');
|
|
77
87
|
const role = text(q, 'role');
|
|
@@ -85,7 +95,7 @@ export function readAssignmentsQuery(q) {
|
|
|
85
95
|
...page(q),
|
|
86
96
|
};
|
|
87
97
|
}
|
|
88
|
-
/** GET /authz/holders: `scope` and `permission` (both required), `expandSets`, `limit`, `offset`. */
|
|
98
|
+
/** GET /authz/holders: `scope` and `permission` (both required), `expandSets`, `limit`, `offset` or `after`. */
|
|
89
99
|
export function readHoldersQuery(q) {
|
|
90
100
|
const scope = text(q, 'scope');
|
|
91
101
|
const permission = text(q, 'permission');
|
|
@@ -102,8 +112,10 @@ export function readHoldersQuery(q) {
|
|
|
102
112
|
...page(q),
|
|
103
113
|
};
|
|
104
114
|
}
|
|
105
|
-
/** GET /authz/links
|
|
115
|
+
/** GET /authz/links and /authz/rules: `scope`, `limit`, `offset` or `after`; GET /authz/policies has no `after`. */
|
|
106
116
|
export function readPageQuery(kind, q) {
|
|
117
|
+
if (kind === 'policies' && text(q, 'after') !== undefined)
|
|
118
|
+
invalid('after', 'policies are paged by offset: after is not supported');
|
|
107
119
|
return { kind, ...scope(q), ...page(q) };
|
|
108
120
|
}
|
|
109
121
|
/** The AuthzAdminOptions of a single-command route: `reason`, `idempotencyKey`, `dryRun`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/routes/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/routes/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { JsonSchema } from './primitives.js';
|
|
2
|
+
/** Over the built-in command schemas; AuthzAdminSchemaProvider serves it over every registered source. */
|
|
2
3
|
export declare const AuthzAdminBatch: JsonSchema;
|
|
3
4
|
export declare const AuthzAssignmentGrant: JsonSchema;
|
|
4
5
|
export declare const AuthzAssignmentPatch: JsonSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bodies.d.ts","sourceRoot":"","sources":["../../../src/schemas/bodies.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"bodies.d.ts","sourceRoot":"","sources":["../../../src/schemas/bodies.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,0GAA0G;AAC1G,eAAO,MAAM,eAAe,EAAE,UAAyC,CAAC;AAExE,eAAO,MAAM,oBAAoB,EAAE,UAA2S,CAAC;AAE/U,eAAO,MAAM,oBAAoB,EAAE,UAIlC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,UAA4T,CAAC;AAE3V,eAAO,MAAM,cAAc,EAAE,UAI5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,UAA4H,CAAC;AACzJ,eAAO,MAAM,eAAe,EAAE,UAA2I,CAAC;AAC1K,eAAO,MAAM,oBAAoB,EAAE,UAAyH,CAAC;AAC7J,eAAO,MAAM,mBAAmB,EAAE,UAA+G,CAAC;AAIlJ,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"}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { commandSchemas, policyBody, ruleBody } from './commands.js';
|
|
2
|
-
import { anyObject, assignmentSubject, nullableDateTime, obj, resourceRef, tags, text } from './primitives.js';
|
|
2
|
+
import { anyObject, assignmentSubject, commandBatch, nullableDateTime, obj, resourceRef, tags, text } from './primitives.js';
|
|
3
3
|
const { id: _ruleId, ...ruleFields } = ruleBody.properties;
|
|
4
4
|
const { id: _policyId, ...policyFields } = policyBody.properties;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
idempotencyKey: { ...text, description: 'a retried batch with the same key returns the first result' },
|
|
8
|
-
dryRun: { type: 'boolean', description: 'validate and guard, then roll back' },
|
|
9
|
-
};
|
|
10
|
-
export const AuthzAdminBatch = obj(['commands'], { commands: { type: 'array', items: { oneOf: commandSchemas } }, ...writeOptions }, 'POST /authz/commands: the commands run in one transaction, in order; the first failure rolls the batch back');
|
|
5
|
+
/** Over the built-in command schemas; AuthzAdminSchemaProvider serves it over every registered source. */
|
|
6
|
+
export const AuthzAdminBatch = commandBatch(commandSchemas);
|
|
11
7
|
export const AuthzAssignmentGrant = obj(['subject', 'role', 'scope'], { subject: assignmentSubject, role: text, scope: resourceRef, tags, expiresAt: nullableDateTime, replaceLadder: { type: 'boolean' } }, 'POST /authz/assignments: the fields of assignment.grant (reason, idempotencyKey and dryRun go in the query string)');
|
|
12
8
|
export const AuthzAssignmentPatch = {
|
|
13
9
|
...obj([], { tags: { ...tags, description: 'replaces the tags' }, addTags: tags, removeTags: tags, expiresAt: nullableDateTime }, 'PATCH /authz/assignments/{id}: at least one key; the keys run as assignment.setTags, addTags, removeTags and setExpiry in one batch'),
|
|
@@ -31,6 +27,6 @@ const commandResult = {
|
|
|
31
27
|
};
|
|
32
28
|
export const AuthzCommandResult = { ...commandResult, description: 'The outcome of one command' };
|
|
33
29
|
export const AuthzAdminResults = 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');
|
|
34
|
-
export const AuthzAdminPage = obj(['items', 'total'], { items: { type: 'array', items: anyObject }, total: { type: 'integer', description: 'rows matching before paging' } }, 'The answer of a list route');
|
|
30
|
+
export const AuthzAdminPage = obj(['items', 'total'], { items: { type: 'array', items: 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');
|
|
35
31
|
export const AuthzAdminAttributes = { ...anyObject, description: 'The attributes of a scope' };
|
|
36
32
|
//# sourceMappingURL=bodies.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bodies.js","sourceRoot":"","sources":["../../../src/schemas/bodies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"bodies.js","sourceRoot":"","sources":["../../../src/schemas/bodies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
import type { JsonSchema } from './primitives.js';
|
|
2
|
+
import { AuthzCommandSchemaSource } from './registry.js';
|
|
2
3
|
/** A rule as `rule.put` takes it; the condition language is described by @spinajs/authz. */
|
|
3
4
|
export declare const ruleBody: JsonSchema;
|
|
4
5
|
/** A policy as `policy.put` takes it. */
|
|
5
6
|
export declare const policyBody: JsonSchema;
|
|
6
|
-
/** The command kinds
|
|
7
|
+
/** The command kinds the built-in sources describe: authz-rbac's, authz-abac's and the core's. */
|
|
7
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
|
+
/** The schemas of the built-in sources, in COMMAND_KINDS order. */
|
|
8
10
|
export declare const commandSchemas: readonly JsonSchema[];
|
|
11
|
+
/** The commands of @spinajs/authz-rbac. */
|
|
12
|
+
export declare class RbacCommandSchemas extends AuthzCommandSchemaSource {
|
|
13
|
+
schemas(): Readonly<Record<string, JsonSchema>>;
|
|
14
|
+
}
|
|
15
|
+
/** The commands of @spinajs/authz-abac. */
|
|
16
|
+
export declare class AbacCommandSchemas extends AuthzCommandSchemaSource {
|
|
17
|
+
schemas(): Readonly<Record<string, JsonSchema>>;
|
|
18
|
+
}
|
|
19
|
+
/** The core's scope commands. */
|
|
20
|
+
export declare class CoreCommandSchemas extends AuthzCommandSchemaSource {
|
|
21
|
+
schemas(): Readonly<Record<string, JsonSchema>>;
|
|
22
|
+
}
|
|
9
23
|
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/schemas/commands.ts"],"names":[],"mappings":"
|
|
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,4 +1,12 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Injectable } from '@spinajs/di';
|
|
1
8
|
import { anyObject, assignmentSubject, command, nullableDateTime, obj, principalRef, resourceRef, roleSet, tags, text } from './primitives.js';
|
|
9
|
+
import { AuthzCommandSchemaSource } from './registry.js';
|
|
2
10
|
const idOnly = { id: { ...text, description: 'the id of the row' } };
|
|
3
11
|
/** A rule as `rule.put` takes it; the condition language is described by @spinajs/authz. */
|
|
4
12
|
export const ruleBody = obj(['id', 'kind', 'scope'], {
|
|
@@ -35,9 +43,9 @@ export const policyBody = obj(['id', 'effect', 'permissions'], {
|
|
|
35
43
|
priority: { type: 'integer', description: 'default 500' },
|
|
36
44
|
expiresAt: nullableDateTime,
|
|
37
45
|
}, 'An ABAC policy; the server sets `source`');
|
|
38
|
-
/** The command kinds
|
|
46
|
+
/** The command kinds the built-in sources describe: authz-rbac's, authz-abac's and the core's. */
|
|
39
47
|
export const 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'];
|
|
40
|
-
|
|
48
|
+
const rbacCommands = [
|
|
41
49
|
command('assignment.grant', ['subject', 'role', 'scope'], { subject: assignmentSubject, role: text, scope: resourceRef, tags, expiresAt: 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'),
|
|
42
50
|
command('assignment.revoke', ['id'], idOnly, 'Revokes one assignment'),
|
|
43
51
|
command('assignment.revokeWhere', ['scope'], { scope: resourceRef, subject: assignmentSubject, role: text }, 'Revokes the assignments at a scope, narrowed by subject and role'),
|
|
@@ -52,10 +60,47 @@ export const commandSchemas = [
|
|
|
52
60
|
command('link.revoke', ['id'], idOnly, 'Revokes a share link'),
|
|
53
61
|
command('rule.put', ['rule'], { rule: ruleBody }, 'Inserts or replaces a RBAC rule by id'),
|
|
54
62
|
command('rule.delete', ['id'], idOnly, 'Deletes a RBAC rule'),
|
|
63
|
+
];
|
|
64
|
+
const abacCommands = [
|
|
55
65
|
command('policy.put', ['policy'], { policy: policyBody }, 'Inserts or replaces an ABAC policy by id'),
|
|
56
66
|
command('policy.delete', ['id'], idOnly, 'Deletes an ABAC policy'),
|
|
67
|
+
];
|
|
68
|
+
const coreCommands = [
|
|
57
69
|
command('scope.setAttributes', ['scope', 'patch'], { scope: resourceRef, patch: { ...anyObject, description: 'deep merge; null deletes a path' } }, 'Merges a patch into the attributes of a scope'),
|
|
58
70
|
command('scope.replaceAttributes', ['scope', 'attributes'], { scope: resourceRef, attributes: anyObject }, 'Replaces the attributes of a scope'),
|
|
59
71
|
command('scope.forget', ['scope'], { scope: resourceRef }, 'Removes everything held AT a scope node (assignments, links, rules, policies, attributes)'),
|
|
60
72
|
];
|
|
73
|
+
/** The schemas of the built-in sources, in COMMAND_KINDS order. */
|
|
74
|
+
export const commandSchemas = [...rbacCommands, ...abacCommands, ...coreCommands];
|
|
75
|
+
const byKind = (schemas) => Object.fromEntries(schemas.map((s) => [s.properties.kind.enum[0], s]));
|
|
76
|
+
/** The commands of @spinajs/authz-rbac. */
|
|
77
|
+
let RbacCommandSchemas = class RbacCommandSchemas extends AuthzCommandSchemaSource {
|
|
78
|
+
schemas() {
|
|
79
|
+
return byKind(rbacCommands);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
RbacCommandSchemas = __decorate([
|
|
83
|
+
Injectable(AuthzCommandSchemaSource)
|
|
84
|
+
], RbacCommandSchemas);
|
|
85
|
+
export { RbacCommandSchemas };
|
|
86
|
+
/** The commands of @spinajs/authz-abac. */
|
|
87
|
+
let AbacCommandSchemas = class AbacCommandSchemas extends AuthzCommandSchemaSource {
|
|
88
|
+
schemas() {
|
|
89
|
+
return byKind(abacCommands);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
AbacCommandSchemas = __decorate([
|
|
93
|
+
Injectable(AuthzCommandSchemaSource)
|
|
94
|
+
], AbacCommandSchemas);
|
|
95
|
+
export { AbacCommandSchemas };
|
|
96
|
+
/** The core's scope commands. */
|
|
97
|
+
let CoreCommandSchemas = class CoreCommandSchemas extends AuthzCommandSchemaSource {
|
|
98
|
+
schemas() {
|
|
99
|
+
return byKind(coreCommands);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
CoreCommandSchemas = __decorate([
|
|
103
|
+
Injectable(AuthzCommandSchemaSource)
|
|
104
|
+
], CoreCommandSchemas);
|
|
105
|
+
export { CoreCommandSchemas };
|
|
61
106
|
//# sourceMappingURL=commands.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/schemas/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/schemas/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { JsonSchema } from './primitives.js';
|
|
1
2
|
interface RouteDoc {
|
|
2
3
|
readonly method: 'get' | 'post' | 'put' | 'patch' | 'delete';
|
|
3
4
|
readonly path: string;
|
|
@@ -12,8 +13,10 @@ export declare const AUTHZ_ADMIN_ROUTES: readonly RouteDoc[];
|
|
|
12
13
|
* routes read both from `@Req()` so that no http-layer step can refuse what AuthzAdmin would answer.
|
|
13
14
|
* This adds what the builder cannot see to an OpenAPI document it built: the request bodies, the
|
|
14
15
|
* query parameters, the path parameter text and the body schemas as components. Operations are
|
|
15
|
-
* matched by method and path suffix, so a route prefix does not matter.
|
|
16
|
+
* matched by method and path suffix, so a route prefix does not matter. `basePath` is the configured
|
|
17
|
+
* `authz.http.admin.basePath` when the app moved the routes. Changes the document in place.
|
|
18
|
+
* Pass `AuthzAdminSchemaProvider.schemas()` as `schemas` to list the commands every registered model contributes.
|
|
16
19
|
*/
|
|
17
|
-
export declare function describeAuthzAdminDocument<T extends object>(doc: T): T;
|
|
20
|
+
export declare function describeAuthzAdminDocument<T extends object>(doc: T, basePath?: string, schemas?: Readonly<Record<string, JsonSchema>>): T;
|
|
18
21
|
export {};
|
|
19
22
|
//# 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":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,UAAU,QAAQ;IAChB,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAwBD,uGAAuG;AACvG,eAAO,MAAM,kBAAkB,EAAE,SAAS,QAAQ,EAoBjD,CAAC;AAEF;;;;;;;;GAQG;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,CAAuB,GAAG,CAAC,CAoB/J"}
|
|
@@ -9,6 +9,7 @@ const QUERY = {
|
|
|
9
9
|
includeExpired: { schema: { type: 'boolean' }, description: '`true` or `false`' },
|
|
10
10
|
limit: { schema: { type: 'integer', minimum: 0 }, description: 'page size; the server sets the default' },
|
|
11
11
|
offset: { schema: { type: 'integer', minimum: 0 }, description: 'rows to skip' },
|
|
12
|
+
after: { schema: { type: 'string' }, description: 'the `next` of the previous page: continues behind its last row; give it instead of `offset`' },
|
|
12
13
|
reason: { schema: { type: 'string' }, description: 'goes to the audit trail' },
|
|
13
14
|
idempotencyKey: { schema: { type: 'string' }, description: 'a retried request with the same key returns the first result' },
|
|
14
15
|
dryRun: { schema: { type: 'boolean' }, description: '`true` validates and guards, then rolls back' },
|
|
@@ -20,16 +21,16 @@ const PATH_PARAMS = {
|
|
|
20
21
|
/** What each route takes that the controller's signature cannot say: its body and its query string. */
|
|
21
22
|
export const AUTHZ_ADMIN_ROUTES = [
|
|
22
23
|
{ method: 'post', path: '/authz/commands', body: 'AuthzAdminBatch' },
|
|
23
|
-
{ method: 'get', path: '/authz/assignments', query: ['scope', 'subject', 'role', 'includeExpired', 'limit', 'offset'] },
|
|
24
|
-
{ method: 'get', path: '/authz/holders', query: ['scope', 'permission', 'expandSets', 'limit', 'offset'], requiredQuery: ['scope', 'permission'] },
|
|
24
|
+
{ method: 'get', path: '/authz/assignments', query: ['scope', 'subject', 'role', 'includeExpired', 'limit', 'offset', 'after'] },
|
|
25
|
+
{ method: 'get', path: '/authz/holders', query: ['scope', 'permission', 'expandSets', 'limit', 'offset', 'after'], requiredQuery: ['scope', 'permission'] },
|
|
25
26
|
{ method: 'post', path: '/authz/assignments', body: 'AuthzAssignmentGrant', query: WRITE_OPTIONS },
|
|
26
27
|
{ method: 'patch', path: '/authz/assignments/{id}', body: 'AuthzAssignmentPatch', query: WRITE_OPTIONS },
|
|
27
28
|
{ method: 'delete', path: '/authz/assignments/{id}', query: WRITE_OPTIONS },
|
|
28
|
-
{ method: 'get', path: '/authz/links', query: ['scope', 'limit', 'offset'] },
|
|
29
|
+
{ method: 'get', path: '/authz/links', query: ['scope', 'limit', 'offset', 'after'] },
|
|
29
30
|
{ method: 'post', path: '/authz/links', body: 'AuthzLinkCreate', query: WRITE_OPTIONS },
|
|
30
31
|
{ method: 'patch', path: '/authz/links/{id}', body: 'AuthzLinkPatch', query: WRITE_OPTIONS },
|
|
31
32
|
{ method: 'delete', path: '/authz/links/{id}', query: WRITE_OPTIONS },
|
|
32
|
-
{ method: 'get', path: '/authz/rules', query: ['scope', 'limit', 'offset'] },
|
|
33
|
+
{ method: 'get', path: '/authz/rules', query: ['scope', 'limit', 'offset', 'after'] },
|
|
33
34
|
{ method: 'put', path: '/authz/rules/{id}', body: 'AuthzRuleBody', query: WRITE_OPTIONS },
|
|
34
35
|
{ method: 'delete', path: '/authz/rules/{id}', query: WRITE_OPTIONS },
|
|
35
36
|
{ method: 'get', path: '/authz/policies', query: ['scope', 'limit', 'offset'] },
|
|
@@ -44,15 +45,18 @@ export const AUTHZ_ADMIN_ROUTES = [
|
|
|
44
45
|
* routes read both from `@Req()` so that no http-layer step can refuse what AuthzAdmin would answer.
|
|
45
46
|
* This adds what the builder cannot see to an OpenAPI document it built: the request bodies, the
|
|
46
47
|
* query parameters, the path parameter text and the body schemas as components. Operations are
|
|
47
|
-
* matched by method and path suffix, so a route prefix does not matter.
|
|
48
|
+
* matched by method and path suffix, so a route prefix does not matter. `basePath` is the configured
|
|
49
|
+
* `authz.http.admin.basePath` when the app moved the routes. Changes the document in place.
|
|
50
|
+
* Pass `AuthzAdminSchemaProvider.schemas()` as `schemas` to list the commands every registered model contributes.
|
|
48
51
|
*/
|
|
49
|
-
export function describeAuthzAdminDocument(doc) {
|
|
52
|
+
export function describeAuthzAdminDocument(doc, basePath = 'authz', schemas = AUTHZ_ADMIN_SCHEMAS) {
|
|
50
53
|
const document = doc;
|
|
51
54
|
const components = ((document.components ??= {}).schemas ??= {});
|
|
52
|
-
for (const [name, schema] of Object.entries(
|
|
55
|
+
for (const [name, schema] of Object.entries(schemas))
|
|
53
56
|
components[name] ??= schema;
|
|
54
57
|
for (const route of AUTHZ_ADMIN_ROUTES) {
|
|
55
|
-
const
|
|
58
|
+
const routePath = route.path.replace(/^\/authz/, `/${basePath.replace(/^\/+|\/+$/g, '')}`);
|
|
59
|
+
const path = Object.keys(document.paths ?? {}).find((p) => p === routePath || p.endsWith(routePath));
|
|
56
60
|
const operation = path ? document.paths[path][route.method] : undefined;
|
|
57
61
|
if (!operation)
|
|
58
62
|
continue;
|
|
@@ -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,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,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,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
|
package/lib/mjs/schemas/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/schemas/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/schemas/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
|
|
@@ -9,5 +9,7 @@ export declare const roleSet: JsonSchema;
|
|
|
9
9
|
export declare const subjectSet: JsonSchema;
|
|
10
10
|
export declare const assignmentSubject: JsonSchema;
|
|
11
11
|
export declare function obj(required: readonly string[], properties: Record<string, JsonSchema>, description?: string): JsonSchema;
|
|
12
|
+
/** The body of POST /authz/commands over the given command schemas. */
|
|
13
|
+
export declare function commandBatch(commands: readonly JsonSchema[]): JsonSchema;
|
|
12
14
|
export declare function command(kind: string, required: readonly string[], properties: Record<string, JsonSchema>, description: string): JsonSchema;
|
|
13
15
|
//# sourceMappingURL=primitives.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/schemas/primitives.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,eAAO,MAAM,IAAI,EAAE,UAA+B,CAAC;AACnD,eAAO,MAAM,gBAAgB,EAAE,UAAmK,CAAC;AACnM,eAAO,MAAM,IAAI,EAAE,UAA2C,CAAC;AAC/D,eAAO,MAAM,SAAS,EAAE,UAA2D,CAAC;AAEpF,eAAO,MAAM,WAAW,EAAE,UAIzB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,UAI1B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,UAA4G,CAAC;AAEnI,eAAO,MAAM,UAAU,EAAE,UAAgF,CAAC;AAE1G,eAAO,MAAM,iBAAiB,EAAE,UAAmH,CAAC;AAEpJ,wBAAgB,GAAG,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAEzH;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,CAE1I"}
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/schemas/primitives.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,eAAO,MAAM,IAAI,EAAE,UAA+B,CAAC;AACnD,eAAO,MAAM,gBAAgB,EAAE,UAAmK,CAAC;AACnM,eAAO,MAAM,IAAI,EAAE,UAA2C,CAAC;AAC/D,eAAO,MAAM,SAAS,EAAE,UAA2D,CAAC;AAEpF,eAAO,MAAM,WAAW,EAAE,UAIzB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,UAI1B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,UAA4G,CAAC;AAEnI,eAAO,MAAM,UAAU,EAAE,UAAgF,CAAC;AAE1G,eAAO,MAAM,iBAAiB,EAAE,UAAmH,CAAC;AAEpJ,wBAAgB,GAAG,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAEzH;AAQD,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,CAExE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,CAE1I"}
|
|
@@ -18,6 +18,15 @@ export const assignmentSubject = { description: 'A principal, or the holders of
|
|
|
18
18
|
export function obj(required, properties, description) {
|
|
19
19
|
return { type: 'object', ...(description ? { description } : {}), ...(required.length ? { required } : {}), properties };
|
|
20
20
|
}
|
|
21
|
+
const writeOptions = {
|
|
22
|
+
reason: { ...text, description: 'goes to the audit trail' },
|
|
23
|
+
idempotencyKey: { ...text, description: 'a retried batch with the same key returns the first result' },
|
|
24
|
+
dryRun: { type: 'boolean', description: 'validate and guard, then roll back' },
|
|
25
|
+
};
|
|
26
|
+
/** The body of POST /authz/commands over the given command schemas. */
|
|
27
|
+
export function commandBatch(commands) {
|
|
28
|
+
return obj(['commands'], { commands: { type: 'array', items: { oneOf: commands } }, ...writeOptions }, 'POST /authz/commands: the commands run in one transaction, in order; the first failure rolls the batch back');
|
|
29
|
+
}
|
|
21
30
|
export function command(kind, required, properties, description) {
|
|
22
31
|
return obj(['kind', ...required], { kind: { type: 'string', enum: [kind] }, ...properties }, description);
|
|
23
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../../src/schemas/primitives.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,gFAAgF,EAAE,CAAC;AACnM,MAAM,CAAC,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/D,MAAM,CAAC,MAAM,SAAS,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;AAEpF,MAAM,CAAC,MAAM,WAAW,GAAe;IACrC,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,MAAM,CAAC;IAClB,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,+BAA+B,EAAE,EAAE;CAC1F,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAe;IACtC,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACxB,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC;AAEnI,MAAM,CAAC,MAAM,UAAU,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;AAE1G,MAAM,CAAC,MAAM,iBAAiB,GAAe,EAAE,WAAW,EAAE,kDAAkD,EAAE,KAAK,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC;AAEpJ,MAAM,UAAU,GAAG,CAAC,QAA2B,EAAE,UAAsC,EAAE,WAAoB;IAC3G,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;AAC3H,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,QAA2B,EAAE,UAAsC,EAAE,WAAmB;IAC5H,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,UAAU,EAAE,EAAE,WAAW,CAAC,CAAC;AAC5G,CAAC"}
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../../src/schemas/primitives.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SchemaProvider } from '@spinajs/validation';
|
|
2
2
|
import type { JsonSchema } from './primitives.js';
|
|
3
|
-
|
|
3
|
+
import { AuthzCommandSchemaRegistry } from './registry.js';
|
|
4
|
+
/** Every schema of the admin routes by name, as the swagger document names them, over the built-in commands. */
|
|
4
5
|
export declare const AUTHZ_ADMIN_SCHEMAS: Readonly<Record<string, JsonSchema>>;
|
|
5
6
|
/**
|
|
6
7
|
* Serves the schemas to http-swagger by the type names the controller's `@response` tags use.
|
|
@@ -8,6 +9,9 @@ export declare const AUTHZ_ADMIN_SCHEMAS: Readonly<Record<string, JsonSchema>>;
|
|
|
8
9
|
* metadata and route argument schemas, neither of which these routes carry.
|
|
9
10
|
*/
|
|
10
11
|
export declare class AuthzAdminSchemaProvider extends SchemaProvider {
|
|
12
|
+
protected Registry: AuthzCommandSchemaRegistry;
|
|
13
|
+
/** Every schema of the admin routes by name, with AuthzAdminBatch listing the registered command kinds. */
|
|
14
|
+
schemas(): Readonly<Record<string, JsonSchema>>;
|
|
11
15
|
getSchema(typeName: string): Record<string, unknown> | undefined;
|
|
12
16
|
}
|
|
13
17
|
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/schemas/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/schemas/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAE3D,gHAAgH;AAChH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAiB,CAAC;AAEvF;;;;GAIG;AACH,qBACa,wBAAyB,SAAQ,cAAc;IAE1D,SAAS,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IAE/C,2GAA2G;IACpG,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAErD;IAEM,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAGtE;CACF"}
|
|
@@ -4,10 +4,14 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
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;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Autoinject, Injectable } from '@spinajs/di';
|
|
8
11
|
import { SchemaProvider } from '@spinajs/validation';
|
|
9
12
|
import * as bodies from './bodies.js';
|
|
10
|
-
|
|
13
|
+
import { AuthzCommandSchemaRegistry } from './registry.js';
|
|
14
|
+
/** Every schema of the admin routes by name, as the swagger document names them, over the built-in commands. */
|
|
11
15
|
export const AUTHZ_ADMIN_SCHEMAS = { ...bodies };
|
|
12
16
|
/**
|
|
13
17
|
* Serves the schemas to http-swagger by the type names the controller's `@response` tags use.
|
|
@@ -15,10 +19,20 @@ export const AUTHZ_ADMIN_SCHEMAS = { ...bodies };
|
|
|
15
19
|
* metadata and route argument schemas, neither of which these routes carry.
|
|
16
20
|
*/
|
|
17
21
|
let AuthzAdminSchemaProvider = class AuthzAdminSchemaProvider extends SchemaProvider {
|
|
22
|
+
/** Every schema of the admin routes by name, with AuthzAdminBatch listing the registered command kinds. */
|
|
23
|
+
schemas() {
|
|
24
|
+
return { ...AUTHZ_ADMIN_SCHEMAS, AuthzAdminBatch: this.Registry.batch() };
|
|
25
|
+
}
|
|
18
26
|
getSchema(typeName) {
|
|
27
|
+
if (typeName === 'AuthzAdminBatch')
|
|
28
|
+
return this.Registry.batch();
|
|
19
29
|
return Object.hasOwn(AUTHZ_ADMIN_SCHEMAS, typeName) ? AUTHZ_ADMIN_SCHEMAS[typeName] : undefined;
|
|
20
30
|
}
|
|
21
31
|
};
|
|
32
|
+
__decorate([
|
|
33
|
+
Autoinject(AuthzCommandSchemaRegistry),
|
|
34
|
+
__metadata("design:type", AuthzCommandSchemaRegistry)
|
|
35
|
+
], AuthzAdminSchemaProvider.prototype, "Registry", void 0);
|
|
22
36
|
AuthzAdminSchemaProvider = __decorate([
|
|
23
37
|
Injectable(SchemaProvider)
|
|
24
38
|
], AuthzAdminSchemaProvider);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/schemas/provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/schemas/provider.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAE3D,gHAAgH;AAChH,MAAM,CAAC,MAAM,mBAAmB,GAAyC,EAAE,GAAG,MAAM,EAAE,CAAC;AAEvF;;;;GAIG;AAEI,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,cAAc;IAI1D,2GAA2G;IACpG,OAAO;QACZ,OAAO,EAAE,GAAG,mBAAmB,EAAE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;IAC5E,CAAC;IAEM,SAAS,CAAC,QAAgB;QAC/B,IAAI,QAAQ,KAAK,iBAAiB;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjE,OAAO,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,CAAC;CACF,CAAA;AAXW;IADT,UAAU,CAAC,0BAA0B,CAAC;8BACnB,0BAA0B;0DAAC;AAFpC,wBAAwB;IADpC,UAAU,CAAC,cAAc,CAAC;GACd,wBAAwB,CAapC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { IContainer } from '@spinajs/di';
|
|
2
|
+
import type { JsonSchema } from './primitives.js';
|
|
3
|
+
/**
|
|
4
|
+
* The JSON schemas of one model's admin commands, by command kind. Each model contributes one with
|
|
5
|
+
* `@Injectable(AuthzCommandSchemaSource)`; the batch body of POST /authz/commands lists every registered kind.
|
|
6
|
+
*/
|
|
7
|
+
export declare abstract class AuthzCommandSchemaSource {
|
|
8
|
+
/** Command kind -> the JSON schema of that command, `kind` included. */
|
|
9
|
+
abstract schemas(): Readonly<Record<string, object>>;
|
|
10
|
+
}
|
|
11
|
+
/** The command schemas of every registered AuthzCommandSchemaSource, read on each call so a late registration counts. */
|
|
12
|
+
export declare class AuthzCommandSchemaRegistry {
|
|
13
|
+
protected readonly container: IContainer;
|
|
14
|
+
constructor(container: IContainer);
|
|
15
|
+
/** Command kind -> JSON schema, merged from the sources of this container and its ancestors. */
|
|
16
|
+
commands(): Readonly<Record<string, JsonSchema>>;
|
|
17
|
+
/** The body of POST /authz/commands over the registered command kinds (schema AuthzAdminBatch). */
|
|
18
|
+
batch(): JsonSchema;
|
|
19
|
+
private sources;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=registry.d.ts.map
|