@siremzam/sentinel 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +662 -0
  3. package/dist/engine.d.ts +70 -0
  4. package/dist/engine.d.ts.map +1 -0
  5. package/dist/engine.js +562 -0
  6. package/dist/engine.js.map +1 -0
  7. package/dist/index.d.ts +11 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +7 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/middleware/express.d.ts +35 -0
  12. package/dist/middleware/express.d.ts.map +1 -0
  13. package/dist/middleware/express.js +41 -0
  14. package/dist/middleware/express.js.map +1 -0
  15. package/dist/middleware/fastify.d.ts +29 -0
  16. package/dist/middleware/fastify.d.ts.map +1 -0
  17. package/dist/middleware/fastify.js +41 -0
  18. package/dist/middleware/fastify.js.map +1 -0
  19. package/dist/middleware/nestjs.d.ts +67 -0
  20. package/dist/middleware/nestjs.d.ts.map +1 -0
  21. package/dist/middleware/nestjs.js +82 -0
  22. package/dist/middleware/nestjs.js.map +1 -0
  23. package/dist/policy-builder.d.ts +39 -0
  24. package/dist/policy-builder.d.ts.map +1 -0
  25. package/dist/policy-builder.js +92 -0
  26. package/dist/policy-builder.js.map +1 -0
  27. package/dist/role-hierarchy.d.ts +42 -0
  28. package/dist/role-hierarchy.d.ts.map +1 -0
  29. package/dist/role-hierarchy.js +87 -0
  30. package/dist/role-hierarchy.js.map +1 -0
  31. package/dist/serialization.d.ts +52 -0
  32. package/dist/serialization.d.ts.map +1 -0
  33. package/dist/serialization.js +144 -0
  34. package/dist/serialization.js.map +1 -0
  35. package/dist/server.d.ts +52 -0
  36. package/dist/server.d.ts.map +1 -0
  37. package/dist/server.js +163 -0
  38. package/dist/server.js.map +1 -0
  39. package/dist/types.d.ts +137 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +27 -0
  42. package/dist/types.js.map +1 -0
  43. package/package.json +75 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { AccessEngine } from "./engine.js";
2
+ export type { AccessEngineOptions } from "./engine.js";
3
+ export { RuleBuilder, allow, deny, createPolicyFactory } from "./policy-builder.js";
4
+ export { RoleHierarchy } from "./role-hierarchy.js";
5
+ export { ConditionRegistry, exportRules, exportRulesToJson, importRules, importRulesFromJson, } from "./serialization.js";
6
+ export { createAuthServer } from "./server.js";
7
+ export { toAuditEntry } from "./types.js";
8
+ export type { SchemaDefinition, ActionString, InferRole, InferResource, InferAction, InferTenantId, RoleAssignment, Subject, ResourceContext, EvaluationContext, Condition, PolicyEffect, PolicyRule, Decision, AuditEntry, DecisionListener, ConditionError, ConditionErrorHandler, EngineOptions, ExplainResult, RuleEvaluation, ConditionResult, } from "./types.js";
9
+ export type { JsonPolicyRule, JsonPolicyDocument, } from "./serialization.js";
10
+ export type { ServerOptions, EvalRequestBody } from "./server.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,cAAc,EACd,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,cAAc,EACd,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export { AccessEngine } from "./engine.js";
2
+ export { RuleBuilder, allow, deny, createPolicyFactory } from "./policy-builder.js";
3
+ export { RoleHierarchy } from "./role-hierarchy.js";
4
+ export { ConditionRegistry, exportRules, exportRulesToJson, importRules, importRulesFromJson, } from "./serialization.js";
5
+ export { createAuthServer } from "./server.js";
6
+ export { toAuditEntry } from "./types.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { AccessEngine } from "../engine.js";
2
+ import type { SchemaDefinition, InferAction, InferResource, Subject, ResourceContext } from "../types.js";
3
+ /**
4
+ * Minimal Express-compatible types so we don't depend on @types/express at runtime.
5
+ */
6
+ interface Request {
7
+ [key: string]: unknown;
8
+ }
9
+ interface Response {
10
+ status(code: number): Response;
11
+ json(body: unknown): void;
12
+ }
13
+ type NextFunction = (err?: unknown) => void;
14
+ export interface GuardOptions<S extends SchemaDefinition> {
15
+ /** Extract the subject from the request. */
16
+ getSubject: (req: Request) => Subject<S> | undefined;
17
+ /** Extract the resource context from the request (optional). */
18
+ getResourceContext?: (req: Request) => ResourceContext;
19
+ /** Extract the tenant ID from the request (optional). */
20
+ getTenantId?: (req: Request) => string | undefined;
21
+ /** Custom denial handler. Defaults to 403 JSON response. */
22
+ onDenied?: (req: Request, res: Response, next: NextFunction) => void;
23
+ }
24
+ /**
25
+ * Express middleware factory.
26
+ *
27
+ * Usage:
28
+ * app.post("/invoices/:id/approve",
29
+ * guard(engine, "invoice:approve", "invoice", guardOptions),
30
+ * handler
31
+ * );
32
+ */
33
+ export declare function guard<S extends SchemaDefinition>(engine: AccessEngine<S>, action: InferAction<S>, resource: InferResource<S>, options: GuardOptions<S>): (req: Request, res: Response, next: NextFunction) => void;
34
+ export {};
35
+ //# sourceMappingURL=express.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/middleware/express.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1G;;GAEG;AACH,UAAU,OAAO;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AACD,UAAU,QAAQ;IAChB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC/B,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAC3B;AACD,KAAK,YAAY,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAE5C,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,gBAAgB;IACtD,4CAA4C;IAC5C,UAAU,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACrD,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,eAAe,CAAC;IACvD,yDAAyD;IACzD,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;IACnD,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CACtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,gBAAgB,EAC9C,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAEhB,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,UA4BxD"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Express middleware factory.
3
+ *
4
+ * Usage:
5
+ * app.post("/invoices/:id/approve",
6
+ * guard(engine, "invoice:approve", "invoice", guardOptions),
7
+ * handler
8
+ * );
9
+ */
10
+ export function guard(engine, action, resource, options) {
11
+ return (req, res, next) => {
12
+ const subject = options.getSubject(req);
13
+ if (!subject) {
14
+ res.status(401).json({ error: "Unauthorized — no subject" });
15
+ return;
16
+ }
17
+ let decision;
18
+ try {
19
+ const resourceContext = options.getResourceContext?.(req) ?? {};
20
+ const tenantId = options.getTenantId?.(req);
21
+ decision = engine.evaluate(subject, action, resource, resourceContext, tenantId);
22
+ }
23
+ catch (err) {
24
+ next(err);
25
+ return;
26
+ }
27
+ if (decision.allowed) {
28
+ next();
29
+ }
30
+ else if (options.onDenied) {
31
+ options.onDenied(req, res, next);
32
+ }
33
+ else {
34
+ res.status(403).json({
35
+ error: "Forbidden",
36
+ reason: decision.reason,
37
+ });
38
+ }
39
+ };
40
+ }
41
+ //# sourceMappingURL=express.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/middleware/express.ts"],"names":[],"mappings":"AA0BA;;;;;;;;GAQG;AACH,MAAM,UAAU,KAAK,CACnB,MAAuB,EACvB,MAAsB,EACtB,QAA0B,EAC1B,OAAwB;IAExB,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC;QACb,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;YAC5C,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,EAAE,CAAC;QACT,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,QAAQ,CAAC,MAAM;aACxB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { AccessEngine } from "../engine.js";
2
+ import type { SchemaDefinition, InferAction, InferResource, Subject, ResourceContext } from "../types.js";
3
+ /**
4
+ * Minimal Fastify-compatible types so we don't depend on fastify at runtime.
5
+ */
6
+ interface FastifyRequest {
7
+ [key: string]: unknown;
8
+ }
9
+ interface FastifyReply {
10
+ code(statusCode: number): FastifyReply;
11
+ send(payload?: unknown): FastifyReply;
12
+ }
13
+ export interface FastifyGuardOptions<S extends SchemaDefinition> {
14
+ getSubject: (req: FastifyRequest) => Subject<S> | undefined;
15
+ getResourceContext?: (req: FastifyRequest) => ResourceContext;
16
+ getTenantId?: (req: FastifyRequest) => string | undefined;
17
+ onDenied?: (req: FastifyRequest, reply: FastifyReply) => void;
18
+ }
19
+ /**
20
+ * Fastify preHandler hook factory.
21
+ *
22
+ * Usage:
23
+ * fastify.post("/invoices/:id/approve", {
24
+ * preHandler: fastifyGuard(engine, "invoice:approve", "invoice", opts),
25
+ * }, handler);
26
+ */
27
+ export declare function fastifyGuard<S extends SchemaDefinition>(engine: AccessEngine<S>, action: InferAction<S>, resource: InferResource<S>, options: FastifyGuardOptions<S>): (req: FastifyRequest, reply: FastifyReply, done: (err?: Error) => void) => void;
28
+ export {};
29
+ //# sourceMappingURL=fastify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../../src/middleware/fastify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1G;;GAEG;AACH,UAAU,cAAc;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AACD,UAAU,YAAY;IACpB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,gBAAgB;IAC7D,UAAU,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAC5D,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,eAAe,CAAC;IAC9D,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CAC/D;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,gBAAgB,EACrD,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAEvB,KAAK,cAAc,EAAE,OAAO,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,UA6B9E"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Fastify preHandler hook factory.
3
+ *
4
+ * Usage:
5
+ * fastify.post("/invoices/:id/approve", {
6
+ * preHandler: fastifyGuard(engine, "invoice:approve", "invoice", opts),
7
+ * }, handler);
8
+ */
9
+ export function fastifyGuard(engine, action, resource, options) {
10
+ return (req, reply, done) => {
11
+ const subject = options.getSubject(req);
12
+ if (!subject) {
13
+ reply.code(401).send({ error: "Unauthorized — no subject" });
14
+ return;
15
+ }
16
+ let decision;
17
+ try {
18
+ const resourceContext = options.getResourceContext?.(req) ?? {};
19
+ const tenantId = options.getTenantId?.(req);
20
+ decision = engine.evaluate(subject, action, resource, resourceContext, tenantId);
21
+ }
22
+ catch (err) {
23
+ done(err instanceof Error ? err : new Error(String(err)));
24
+ return;
25
+ }
26
+ if (decision.allowed) {
27
+ done();
28
+ }
29
+ else if (options.onDenied) {
30
+ options.onDenied(req, reply);
31
+ done();
32
+ }
33
+ else {
34
+ reply.code(403).send({
35
+ error: "Forbidden",
36
+ reason: decision.reason,
37
+ });
38
+ }
39
+ };
40
+ }
41
+ //# sourceMappingURL=fastify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify.js","sourceRoot":"","sources":["../../src/middleware/fastify.ts"],"names":[],"mappings":"AAqBA;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAuB,EACvB,MAAsB,EACtB,QAA0B,EAC1B,OAA+B;IAE/B,OAAO,CAAC,GAAmB,EAAE,KAAmB,EAAE,IAA2B,EAAE,EAAE;QAC/E,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC;QACb,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;YAC5C,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,EAAE,CAAC;QACT,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC7B,IAAI,EAAE,CAAC;QACT,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,QAAQ,CAAC,MAAM;aACxB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,67 @@
1
+ import type { AccessEngine } from "../engine.js";
2
+ import type { SchemaDefinition, InferAction, InferResource, Subject, ResourceContext } from "../types.js";
3
+ /**
4
+ * NestJS-compatible guard and decorator factory.
5
+ *
6
+ * Since we don't want a hard dependency on @nestjs/common or reflect-metadata,
7
+ * this module uses a WeakMap to store metadata and provides factory functions
8
+ * that produce NestJS-shaped guards and decorators.
9
+ */
10
+ interface ExecutionContext {
11
+ switchToHttp(): {
12
+ getRequest(): Record<string, unknown>;
13
+ getResponse(): Record<string, unknown>;
14
+ };
15
+ getHandler(): (...args: unknown[]) => unknown;
16
+ getClass(): new (...args: unknown[]) => unknown;
17
+ }
18
+ interface CanActivate {
19
+ canActivate(context: ExecutionContext): boolean | Promise<boolean>;
20
+ }
21
+ export interface AuthorizeMetadata {
22
+ action: string;
23
+ resource: string;
24
+ }
25
+ /**
26
+ * Retrieve stored authorization metadata for a handler or class.
27
+ */
28
+ export declare function getAuthorizeMetadata(...targets: object[]): AuthorizeMetadata | undefined;
29
+ /**
30
+ * Creates a method decorator that stores authorization metadata.
31
+ *
32
+ * Usage in a NestJS controller:
33
+ * ```ts
34
+ * const Authorize = createAuthorizeDecorator<MySchema>();
35
+ *
36
+ * @Controller("invoices")
37
+ * class InvoiceController {
38
+ * @Post(":id/approve")
39
+ * @Authorize("invoice:approve", "invoice")
40
+ * approve(@Param("id") id: string) { ... }
41
+ * }
42
+ * ```
43
+ */
44
+ export declare function createAuthorizeDecorator<S extends SchemaDefinition>(): (action: InferAction<S>, resource: InferResource<S>) => MethodDecorator;
45
+ export interface NestGuardOptions<S extends SchemaDefinition> {
46
+ engine: AccessEngine<S>;
47
+ getSubject: (request: Record<string, unknown>) => Subject<S> | undefined;
48
+ getResourceContext?: (request: Record<string, unknown>) => ResourceContext;
49
+ getTenantId?: (request: Record<string, unknown>) => string | undefined;
50
+ }
51
+ /**
52
+ * Creates a NestJS CanActivate guard class.
53
+ *
54
+ * Usage:
55
+ * ```ts
56
+ * const AuthGuard = createAuthGuard({
57
+ * engine,
58
+ * getSubject: (req) => req.user as Subject<MySchema>,
59
+ * });
60
+ *
61
+ * // Use as a global guard:
62
+ * app.useGlobalGuards(new AuthGuard());
63
+ * ```
64
+ */
65
+ export declare function createAuthGuard<S extends SchemaDefinition>(options: NestGuardOptions<S>): new () => CanActivate;
66
+ export {};
67
+ //# sourceMappingURL=nestjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nestjs.d.ts","sourceRoot":"","sources":["../../src/middleware/nestjs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1G;;;;;;GAMG;AAMH,UAAU,gBAAgB;IACxB,YAAY,IAAI;QACd,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC,CAAC;IACF,UAAU,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IAC9C,QAAQ,IAAI,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;CACjD;AAED,UAAU,WAAW;IACnB,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpE;AAMD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,OAAO,EAAE,MAAM,EAAE,GACnB,iBAAiB,GAAG,SAAS,CAM/B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,gBAAgB,MAE/D,QAAQ,WAAW,CAAC,CAAC,CAAC,EACtB,UAAU,aAAa,CAAC,CAAC,CAAC,KACzB,eAAe,CAWnB;AAMD,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,gBAAgB;IAC1D,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACxB,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACzE,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,eAAe,CAAC;IAC3E,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;CACxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,gBAAgB,EACxD,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAC3B,UAAU,WAAW,CAmCvB"}
@@ -0,0 +1,82 @@
1
+ const metadataStore = new WeakMap();
2
+ /**
3
+ * Retrieve stored authorization metadata for a handler or class.
4
+ */
5
+ export function getAuthorizeMetadata(...targets) {
6
+ for (const target of targets) {
7
+ const meta = metadataStore.get(target);
8
+ if (meta)
9
+ return meta;
10
+ }
11
+ return undefined;
12
+ }
13
+ /**
14
+ * Creates a method decorator that stores authorization metadata.
15
+ *
16
+ * Usage in a NestJS controller:
17
+ * ```ts
18
+ * const Authorize = createAuthorizeDecorator<MySchema>();
19
+ *
20
+ * @Controller("invoices")
21
+ * class InvoiceController {
22
+ * @Post(":id/approve")
23
+ * @Authorize("invoice:approve", "invoice")
24
+ * approve(@Param("id") id: string) { ... }
25
+ * }
26
+ * ```
27
+ */
28
+ export function createAuthorizeDecorator() {
29
+ return function Authorize(action, resource) {
30
+ return (_target, _propertyKey, descriptor) => {
31
+ if (!descriptor?.value)
32
+ return descriptor;
33
+ const metadata = {
34
+ action: action,
35
+ resource: resource,
36
+ };
37
+ metadataStore.set(descriptor.value, metadata);
38
+ return descriptor;
39
+ };
40
+ };
41
+ }
42
+ /**
43
+ * Creates a NestJS CanActivate guard class.
44
+ *
45
+ * Usage:
46
+ * ```ts
47
+ * const AuthGuard = createAuthGuard({
48
+ * engine,
49
+ * getSubject: (req) => req.user as Subject<MySchema>,
50
+ * });
51
+ *
52
+ * // Use as a global guard:
53
+ * app.useGlobalGuards(new AuthGuard());
54
+ * ```
55
+ */
56
+ export function createAuthGuard(options) {
57
+ const { engine, getSubject, getResourceContext, getTenantId } = options;
58
+ class AccessControlGuard {
59
+ canActivate(context) {
60
+ const handler = context.getHandler();
61
+ const cls = context.getClass();
62
+ const metadata = getAuthorizeMetadata(handler, cls);
63
+ if (!metadata)
64
+ return true;
65
+ const request = context.switchToHttp().getRequest();
66
+ const subject = getSubject(request);
67
+ if (!subject)
68
+ return false;
69
+ try {
70
+ const resourceContext = getResourceContext?.(request) ?? {};
71
+ const tenantId = getTenantId?.(request);
72
+ const decision = engine.evaluate(subject, metadata.action, metadata.resource, resourceContext, tenantId);
73
+ return decision.allowed;
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ }
80
+ return AccessControlGuard;
81
+ }
82
+ //# sourceMappingURL=nestjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nestjs.js","sourceRoot":"","sources":["../../src/middleware/nestjs.ts"],"names":[],"mappings":"AAqCA,MAAM,aAAa,GAAG,IAAI,OAAO,EAA6B,CAAC;AAE/D;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAG,OAAiB;IAEpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,SAAS,SAAS,CACvB,MAAsB,EACtB,QAA0B;QAE1B,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,UAA8B,EAAE,EAAE;YAC/D,IAAI,CAAC,UAAU,EAAE,KAAK;gBAAE,OAAO,UAAU,CAAC;YAC1C,MAAM,QAAQ,GAAsB;gBAClC,MAAM,EAAE,MAAgB;gBACxB,QAAQ,EAAE,QAAkB;aAC7B,CAAC;YACF,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,KAAe,EAAE,QAAQ,CAAC,CAAC;YACxD,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAaD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA4B;IAE5B,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAExE,MAAM,kBAAkB;QACtB,WAAW,CAAC,OAAyB;YACnC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAEpD,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAE3B,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;YACpD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YAE3B,IAAI,CAAC;gBACH,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC5D,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC;gBAExC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAC9B,OAAO,EACP,QAAQ,CAAC,MAA+C,EACxD,QAAQ,CAAC,QAAiD,EAC1D,eAAe,EACf,QAAQ,CACT,CAAC;gBAEF,OAAO,QAAQ,CAAC,OAAO,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KACF;IAED,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { SchemaDefinition, InferRole, InferAction, InferResource, PolicyRule, PolicyEffect, Condition } from "./types.js";
2
+ export declare class RuleBuilder<S extends SchemaDefinition> {
3
+ private _effect;
4
+ private _roles;
5
+ private _actions;
6
+ private _resources;
7
+ private _conditions;
8
+ private _priority;
9
+ private _description?;
10
+ private _id;
11
+ constructor(effect: PolicyEffect);
12
+ id(id: string): this;
13
+ roles(...roles: InferRole<S>[]): this;
14
+ anyRole(): this;
15
+ actions(...actions: InferAction<S>[]): this;
16
+ anyAction(): this;
17
+ on(...resources: InferResource<S>[]): this;
18
+ anyResource(): this;
19
+ when(condition: Condition<S>): this;
20
+ priority(p: number): this;
21
+ describe(desc: string): this;
22
+ build(): PolicyRule<S>;
23
+ }
24
+ export declare function allow<S extends SchemaDefinition>(): RuleBuilder<S>;
25
+ export declare function deny<S extends SchemaDefinition>(): RuleBuilder<S>;
26
+ /**
27
+ * Creates schema-bound allow/deny factories so you don't need to pass
28
+ * the generic parameter on every call.
29
+ *
30
+ * ```ts
31
+ * const { allow, deny } = createPolicyFactory<MySchema>();
32
+ * allow().roles("admin").anyAction().anyResource().build();
33
+ * ```
34
+ */
35
+ export declare function createPolicyFactory<S extends SchemaDefinition>(): {
36
+ allow: () => RuleBuilder<S>;
37
+ deny: () => RuleBuilder<S>;
38
+ };
39
+ //# sourceMappingURL=policy-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-builder.d.ts","sourceRoot":"","sources":["../src/policy-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,aAAa,EACb,UAAU,EACV,YAAY,EACZ,SAAS,EACV,MAAM,YAAY,CAAC;AAQpB,qBAAa,WAAW,CAAC,CAAC,SAAS,gBAAgB;IACjD,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,GAAG,CAAS;gBAER,MAAM,EAAE,YAAY;IAKhC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKpB,KAAK,CAAC,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAKrC,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,GAAG,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAK3C,SAAS,IAAI,IAAI;IAKjB,EAAE,CAAC,GAAG,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAK1C,WAAW,IAAI,IAAI;IAKnB,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IAKnC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK5B,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC;CAYvB;AAED,wBAAgB,KAAK,CAAC,CAAC,SAAS,gBAAgB,KAAK,WAAW,CAAC,CAAC,CAAC,CAElE;AAED,wBAAgB,IAAI,CAAC,CAAC,SAAS,gBAAgB,KAAK,WAAW,CAAC,CAAC,CAAC,CAEjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,gBAAgB,KAAK;IACjE,KAAK,EAAE,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,EAAE,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC;CAC5B,CAKA"}
@@ -0,0 +1,92 @@
1
+ let ruleCounter = 0;
2
+ function nextRuleId(prefix) {
3
+ return `${prefix}-${++ruleCounter}`;
4
+ }
5
+ export class RuleBuilder {
6
+ _effect;
7
+ _roles = "*";
8
+ _actions = "*";
9
+ _resources = "*";
10
+ _conditions = [];
11
+ _priority = 0;
12
+ _description;
13
+ _id;
14
+ constructor(effect) {
15
+ this._effect = effect;
16
+ this._id = nextRuleId(effect);
17
+ }
18
+ id(id) {
19
+ this._id = id;
20
+ return this;
21
+ }
22
+ roles(...roles) {
23
+ this._roles = roles;
24
+ return this;
25
+ }
26
+ anyRole() {
27
+ this._roles = "*";
28
+ return this;
29
+ }
30
+ actions(...actions) {
31
+ this._actions = actions;
32
+ return this;
33
+ }
34
+ anyAction() {
35
+ this._actions = "*";
36
+ return this;
37
+ }
38
+ on(...resources) {
39
+ this._resources = resources;
40
+ return this;
41
+ }
42
+ anyResource() {
43
+ this._resources = "*";
44
+ return this;
45
+ }
46
+ when(condition) {
47
+ this._conditions.push(condition);
48
+ return this;
49
+ }
50
+ priority(p) {
51
+ this._priority = p;
52
+ return this;
53
+ }
54
+ describe(desc) {
55
+ this._description = desc;
56
+ return this;
57
+ }
58
+ build() {
59
+ return {
60
+ id: this._id,
61
+ effect: this._effect,
62
+ roles: this._roles,
63
+ actions: this._actions,
64
+ resources: this._resources,
65
+ conditions: this._conditions.length > 0 ? this._conditions : undefined,
66
+ priority: this._priority,
67
+ description: this._description,
68
+ };
69
+ }
70
+ }
71
+ export function allow() {
72
+ return new RuleBuilder("allow");
73
+ }
74
+ export function deny() {
75
+ return new RuleBuilder("deny");
76
+ }
77
+ /**
78
+ * Creates schema-bound allow/deny factories so you don't need to pass
79
+ * the generic parameter on every call.
80
+ *
81
+ * ```ts
82
+ * const { allow, deny } = createPolicyFactory<MySchema>();
83
+ * allow().roles("admin").anyAction().anyResource().build();
84
+ * ```
85
+ */
86
+ export function createPolicyFactory() {
87
+ return {
88
+ allow: () => new RuleBuilder("allow"),
89
+ deny: () => new RuleBuilder("deny"),
90
+ };
91
+ }
92
+ //# sourceMappingURL=policy-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-builder.js","sourceRoot":"","sources":["../src/policy-builder.ts"],"names":[],"mappings":"AAUA,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO,GAAG,MAAM,IAAI,EAAE,WAAW,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,OAAO,WAAW;IACd,OAAO,CAAe;IACtB,MAAM,GAAyB,GAAG,CAAC;IACnC,QAAQ,GAA2B,GAAG,CAAC;IACvC,UAAU,GAA6B,GAAG,CAAC;IAC3C,WAAW,GAAmB,EAAE,CAAC;IACjC,SAAS,GAAG,CAAC,CAAC;IACd,YAAY,CAAU;IACtB,GAAG,CAAS;IAEpB,YAAY,MAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,EAAE,CAAC,EAAU;QACX,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,GAAG,KAAqB;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAG,OAAyB;QAClC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS;QACP,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CAAC,GAAG,SAA6B;QACjC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;QACT,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,SAAuB;QAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,CAAS;QAChB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YACtE,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,WAAW,EAAE,IAAI,CAAC,YAAY;SAC/B,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,KAAK;IACnB,OAAO,IAAI,WAAW,CAAI,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,OAAO,IAAI,WAAW,CAAI,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB;IAIjC,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,CAAI,OAAO,CAAC;QACxC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,CAAI,MAAM,CAAC;KACvC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { SchemaDefinition, InferRole } from "./types.js";
2
+ /**
3
+ * Defines a role inheritance hierarchy.
4
+ *
5
+ * When a role inherits from another, it gains all permissions of its parent roles.
6
+ * Cycles are detected and rejected at definition time.
7
+ *
8
+ * ```ts
9
+ * const hierarchy = new RoleHierarchy<MySchema>()
10
+ * .define("admin", ["manager", "viewer"])
11
+ * .define("manager", ["member"])
12
+ * .define("member", ["viewer"]);
13
+ *
14
+ * hierarchy.resolve("admin");
15
+ * // Set { "admin", "manager", "member", "viewer" }
16
+ * ```
17
+ */
18
+ export declare class RoleHierarchy<S extends SchemaDefinition> {
19
+ private parents;
20
+ private cache;
21
+ /**
22
+ * Define that `role` inherits permissions from `inheritsFrom` roles.
23
+ * Clears the resolution cache.
24
+ */
25
+ define(role: InferRole<S>, inheritsFrom: InferRole<S>[]): this;
26
+ /**
27
+ * Resolve the full set of roles a given role expands to,
28
+ * including all inherited roles (transitive).
29
+ */
30
+ resolve(role: InferRole<S>): Set<string>;
31
+ /**
32
+ * Resolve multiple roles at once, returning the merged set.
33
+ */
34
+ resolveAll(roles: Iterable<InferRole<S>>): Set<string>;
35
+ /**
36
+ * Get all defined roles that have inheritance rules.
37
+ */
38
+ definedRoles(): string[];
39
+ private walk;
40
+ private detectCycle;
41
+ }
42
+ //# sourceMappingURL=role-hierarchy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-hierarchy.d.ts","sourceRoot":"","sources":["../src/role-hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE9D;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,gBAAgB;IACnD,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,KAAK,CAAkC;IAE/C;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAO9D;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAWxC;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAUtD;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,WAAW;CAepB"}