@zudojs/permissions 1.4.2 → 1.5.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 (107) hide show
  1. package/dist/ability/ability.core.d.ts +0 -1
  2. package/dist/ability/ability.core.js +0 -1
  3. package/dist/ability/index.d.ts +0 -1
  4. package/dist/ability/index.js +0 -1
  5. package/dist/actor/actor.core.d.ts +0 -1
  6. package/dist/actor/actor.core.js +0 -1
  7. package/dist/actor/index.d.ts +0 -1
  8. package/dist/actor/index.js +0 -1
  9. package/dist/cache/cache.actorDigest.d.ts +0 -1
  10. package/dist/cache/cache.actorDigest.js +0 -1
  11. package/dist/cache/cache.core.d.ts +0 -1
  12. package/dist/cache/cache.core.js +0 -1
  13. package/dist/cache/index.d.ts +0 -1
  14. package/dist/cache/index.js +0 -1
  15. package/dist/conditions/conditions.core.d.ts +0 -1
  16. package/dist/conditions/conditions.core.js +0 -1
  17. package/dist/conditions/index.d.ts +0 -1
  18. package/dist/conditions/index.js +0 -1
  19. package/dist/evaluator/authorizationEngine.d.ts +0 -1
  20. package/dist/evaluator/authorizationEngine.js +0 -1
  21. package/dist/evaluator/engineSupport/authorizationEngine.validation.d.ts +0 -1
  22. package/dist/evaluator/engineSupport/authorizationEngine.validation.js +0 -1
  23. package/dist/evaluator/engineSupport/evaluator.cacheKey.d.ts +0 -1
  24. package/dist/evaluator/engineSupport/evaluator.cacheKey.js +0 -1
  25. package/dist/evaluator/engineSupport/evaluator.observed.d.ts +0 -1
  26. package/dist/evaluator/engineSupport/evaluator.observed.js +0 -1
  27. package/dist/evaluator/engineSupport/index.d.ts +0 -1
  28. package/dist/evaluator/engineSupport/index.js +0 -1
  29. package/dist/evaluator/evaluator.core.d.ts +0 -1
  30. package/dist/evaluator/evaluator.core.js +0 -1
  31. package/dist/evaluator/evaluator.explain.d.ts +0 -1
  32. package/dist/evaluator/evaluator.explain.js +0 -1
  33. package/dist/evaluator/evaluator.pipeline.d.ts +0 -1
  34. package/dist/evaluator/evaluator.pipeline.js +0 -1
  35. package/dist/evaluator/index.d.ts +0 -1
  36. package/dist/evaluator/index.js +0 -1
  37. package/dist/http/httpHelpers.d.ts +0 -1
  38. package/dist/http/httpHelpers.js +0 -1
  39. package/dist/http/httpMiddleware.core.d.ts +0 -1
  40. package/dist/http/httpMiddleware.core.js +0 -1
  41. package/dist/http/httpResource.helper.d.ts +0 -1
  42. package/dist/http/httpResource.helper.js +0 -1
  43. package/dist/http/httpTypes.d.ts +0 -1
  44. package/dist/http/httpTypes.js +0 -1
  45. package/dist/http/index.d.ts +0 -1
  46. package/dist/http/index.js +0 -1
  47. package/dist/index.d.ts +0 -1
  48. package/dist/index.js +0 -1
  49. package/dist/observability/index.d.ts +0 -1
  50. package/dist/observability/index.js +0 -1
  51. package/dist/observability/observability.core.d.ts +0 -1
  52. package/dist/observability/observability.core.js +0 -1
  53. package/dist/permission/index.d.ts +1 -2
  54. package/dist/permission/index.js +1 -2
  55. package/dist/permission/permission.core.d.ts +11 -3
  56. package/dist/permission/permission.core.js +14 -1
  57. package/dist/permission/permissionRegistry.d.ts +0 -1
  58. package/dist/permission/permissionRegistry.js +0 -1
  59. package/dist/permissionErrors/index.d.ts +0 -1
  60. package/dist/permissionErrors/index.js +0 -1
  61. package/dist/permissionErrors/permissionError.access.d.ts +0 -1
  62. package/dist/permissionErrors/permissionError.access.js +0 -1
  63. package/dist/permissionErrors/permissionError.base.d.ts +0 -1
  64. package/dist/permissionErrors/permissionError.base.js +0 -1
  65. package/dist/permissionErrors/permissionError.types.d.ts +0 -1
  66. package/dist/permissionErrors/permissionError.types.js +0 -1
  67. package/dist/permissionErrors/permissionError.validation.d.ts +0 -1
  68. package/dist/permissionErrors/permissionError.validation.js +0 -1
  69. package/dist/permissionTypes/index.d.ts +1 -2
  70. package/dist/permissionTypes/index.js +0 -1
  71. package/dist/permissionTypes/permissionActor.d.ts +17 -2
  72. package/dist/permissionTypes/permissionActor.js +0 -1
  73. package/dist/permissionTypes/policyTypes.d.ts +0 -1
  74. package/dist/permissionTypes/policyTypes.js +0 -1
  75. package/dist/permissionTypes/ruleTypes.d.ts +0 -1
  76. package/dist/permissionTypes/ruleTypes.js +0 -1
  77. package/dist/policy/index.d.ts +0 -1
  78. package/dist/policy/index.js +0 -1
  79. package/dist/policy/policyEffect.core.d.ts +0 -1
  80. package/dist/policy/policyEffect.core.js +0 -1
  81. package/dist/policy/policyRegistry.d.ts +0 -1
  82. package/dist/policy/policyRegistry.js +0 -1
  83. package/dist/resolvers/index.d.ts +0 -1
  84. package/dist/resolvers/index.js +0 -1
  85. package/dist/resolvers/resolvers.core.d.ts +0 -1
  86. package/dist/resolvers/resolvers.core.js +0 -1
  87. package/dist/role/index.d.ts +0 -1
  88. package/dist/role/index.js +0 -1
  89. package/dist/role/roleHierarchy.d.ts +0 -1
  90. package/dist/role/roleHierarchy.js +0 -1
  91. package/dist/role/roleRegistry.d.ts +0 -1
  92. package/dist/role/roleRegistry.js +0 -1
  93. package/dist/rule/index.d.ts +0 -1
  94. package/dist/rule/index.js +0 -1
  95. package/dist/rule/rule.core.d.ts +0 -1
  96. package/dist/rule/rule.core.js +0 -1
  97. package/dist/rule/rule.pattern.d.ts +0 -1
  98. package/dist/rule/rule.pattern.js +0 -1
  99. package/dist/rule/ruleCompiler.d.ts +0 -1
  100. package/dist/rule/ruleCompiler.js +0 -1
  101. package/dist/utils/index.d.ts +0 -1
  102. package/dist/utils/index.js +0 -1
  103. package/dist/utils/utils.helper.d.ts +0 -1
  104. package/dist/utils/utils.helper.js +0 -1
  105. package/dist/utils/utils.notifier.d.ts +0 -1
  106. package/dist/utils/utils.notifier.js +0 -1
  107. package/package.json +3 -3
@@ -27,4 +27,3 @@ export interface Ability {
27
27
  * Create an Ability for an actor.
28
28
  */
29
29
  export declare function createAbility(actor: PermissionActor, evaluatorOptions: EvaluatorOptions, emitter?: PermissionEventEmitter): Ability;
30
- //# sourceMappingURL=ability.core.d.ts.map
@@ -40,4 +40,3 @@ export function createAbility(actor, evaluatorOptions, emitter) {
40
40
  },
41
41
  };
42
42
  }
43
- //# sourceMappingURL=ability.core.js.map
@@ -4,4 +4,3 @@
4
4
  * @module ability
5
5
  */
6
6
  export { createAbility, type Ability } from "./ability.core.js";
7
- //# sourceMappingURL=index.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * @module ability
5
5
  */
6
6
  export { createAbility } from "./ability.core.js";
7
- //# sourceMappingURL=index.js.map
@@ -25,4 +25,3 @@ export declare function actorHasPermission(actor: PermissionActor, permission: s
25
25
  * Check if an actor is a system/service actor.
26
26
  */
27
27
  export declare function isSystemActor(actor: PermissionActor): boolean;
28
- //# sourceMappingURL=actor.core.d.ts.map
@@ -37,4 +37,3 @@ export function actorHasPermission(actor, permission) {
37
37
  export function isSystemActor(actor) {
38
38
  return actor.type === "system" || actor.type === "service";
39
39
  }
40
- //# sourceMappingURL=actor.core.js.map
@@ -4,4 +4,3 @@
4
4
  * @module actor
5
5
  */
6
6
  export { createPermissionActor, actorHasRole, actorHasPermission, isSystemActor, } from "./actor.core.js";
7
- //# sourceMappingURL=index.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * @module actor
5
5
  */
6
6
  export { createPermissionActor, actorHasRole, actorHasPermission, isSystemActor, } from "./actor.core.js";
7
- //# sourceMappingURL=index.js.map
@@ -23,4 +23,3 @@ export declare const MAX_ACTOR_DIGEST_LENGTH = 4096;
23
23
  * description.
24
24
  */
25
25
  export declare function actorCacheDigest(actor: PermissionActor): string | undefined;
26
- //# sourceMappingURL=cache.actorDigest.d.ts.map
@@ -87,4 +87,3 @@ export function actorCacheDigest(actor) {
87
87
  return undefined;
88
88
  return digest.length > MAX_ACTOR_DIGEST_LENGTH ? undefined : digest;
89
89
  }
90
- //# sourceMappingURL=cache.actorDigest.js.map
@@ -40,4 +40,3 @@ export interface MemoryPermissionCacheOptions {
40
40
  export declare function createMemoryPermissionCache(optionsOrTtl?: MemoryPermissionCacheOptions | number): PermissionCache & {
41
41
  size(): number;
42
42
  };
43
- //# sourceMappingURL=cache.core.d.ts.map
@@ -112,4 +112,3 @@ export function createMemoryPermissionCache(optionsOrTtl = {}) {
112
112
  },
113
113
  };
114
114
  }
115
- //# sourceMappingURL=cache.core.js.map
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { createMemoryPermissionCache, permissionCacheKey, type MemoryPermissionCacheOptions, } from "./cache.core.js";
7
7
  export { actorCacheDigest, MAX_ACTOR_DIGEST_LENGTH, } from "./cache.actorDigest.js";
8
- //# sourceMappingURL=index.d.ts.map
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { createMemoryPermissionCache, permissionCacheKey, } from "./cache.core.js";
7
7
  export { actorCacheDigest, MAX_ACTOR_DIGEST_LENGTH, } from "./cache.actorDigest.js";
8
- //# sourceMappingURL=index.js.map
@@ -53,4 +53,3 @@ export declare function tenantIsolation(actorTenantField?: string, resourceTenan
53
53
  export declare function metadataEquals(key: string, expected: unknown): PermissionConditionFn;
54
54
  /** Check that the resource field matches the expected value. */
55
55
  export declare function resourceEquals(field: string, expected: unknown): PermissionConditionFn;
56
- //# sourceMappingURL=conditions.core.d.ts.map
@@ -115,4 +115,3 @@ export function resourceEquals(field, expected) {
115
115
  return context.resource[field] === expected;
116
116
  };
117
117
  }
118
- //# sourceMappingURL=conditions.core.js.map
@@ -4,4 +4,3 @@
4
4
  * @module conditions
5
5
  */
6
6
  export { allOf, anyOf, not, always, never, isOwner, tenantIsolation, metadataEquals, resourceEquals, } from "./conditions.core.js";
7
- //# sourceMappingURL=index.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * @module conditions
5
5
  */
6
6
  export { allOf, anyOf, not, always, never, isOwner, tenantIsolation, metadataEquals, resourceEquals, } from "./conditions.core.js";
7
- //# sourceMappingURL=index.js.map
@@ -151,4 +151,3 @@ export interface PermissionEngine {
151
151
  * Create a permission engine.
152
152
  */
153
153
  export declare function createPermissionEngine(options?: PermissionEngineOptions): PermissionEngine;
154
- //# sourceMappingURL=authorizationEngine.d.ts.map
@@ -195,4 +195,3 @@ export function createPermissionEngine(options) {
195
195
  },
196
196
  };
197
197
  }
198
- //# sourceMappingURL=authorizationEngine.js.map
@@ -34,4 +34,3 @@ export declare function validatePolicy(policy: PermissionPolicyDefinition): void
34
34
  export declare function validateRole(role: RoleDefinition): void;
35
35
  /** Validate a role list, rejecting duplicates as well. */
36
36
  export declare function validateRoles(roles: readonly RoleDefinition[]): void;
37
- //# sourceMappingURL=authorizationEngine.validation.d.ts.map
@@ -87,4 +87,3 @@ export function validateRoles(roles) {
87
87
  seen.add(role.name);
88
88
  }
89
89
  }
90
- //# sourceMappingURL=authorizationEngine.validation.js.map
@@ -25,4 +25,3 @@ import type { EvaluatorOptions } from "../evaluator.pipeline.js";
25
25
  * change.
26
26
  */
27
27
  export declare function decisionCacheKey(actor: PermissionActor, permissionStr: string, resource: unknown, options: EvaluatorOptions, authOptions?: AuthorizationOptions): string | undefined;
28
- //# sourceMappingURL=evaluator.cacheKey.d.ts.map
@@ -67,4 +67,3 @@ export function decisionCacheKey(actor, permissionStr, resource, options, authOp
67
67
  }
68
68
  return permissionCacheKey(actor.id, permissionStr, resourceId, `${generation}${digest}`);
69
69
  }
70
- //# sourceMappingURL=evaluator.cacheKey.js.map
@@ -15,4 +15,3 @@ export declare function resourceTypeOf(resource: unknown): string | undefined;
15
15
  * cache entries that later checks are served from.
16
16
  */
17
17
  export declare function observed<T>(emitter: PermissionEventEmitter | undefined, actor: PermissionActor, permission: string, resource: unknown, run: () => Promise<T>, decisionOf: (result: T) => PermissionDecision): Promise<T>;
18
- //# sourceMappingURL=evaluator.observed.d.ts.map
@@ -46,4 +46,3 @@ export async function observed(emitter, actor, permission, resource, run, decisi
46
46
  });
47
47
  }
48
48
  }
49
- //# sourceMappingURL=evaluator.observed.js.map
@@ -7,4 +7,3 @@
7
7
  export { invalidRulePattern, validatePolicy, validateRole, validateRoles, validateRule, } from "./authorizationEngine.validation.js";
8
8
  export { decisionCacheKey } from "./evaluator.cacheKey.js";
9
9
  export { observed, resourceTypeOf } from "./evaluator.observed.js";
10
- //# sourceMappingURL=index.d.ts.map
@@ -7,4 +7,3 @@
7
7
  export { invalidRulePattern, validatePolicy, validateRole, validateRoles, validateRule, } from "./authorizationEngine.validation.js";
8
8
  export { decisionCacheKey } from "./evaluator.cacheKey.js";
9
9
  export { observed, resourceTypeOf } from "./evaluator.observed.js";
10
- //# sourceMappingURL=index.js.map
@@ -32,4 +32,3 @@ export declare function evaluate(actor: PermissionActor, permissionStr: string,
32
32
  * other than the one that was made.
33
33
  */
34
34
  export declare function evaluateWithTrace(actor: PermissionActor, permissionStr: string, resource: unknown, options: EvaluatorOptions, authOptions?: AuthorizationOptions): Promise<ExplainResult>;
35
- //# sourceMappingURL=evaluator.core.d.ts.map
@@ -261,4 +261,3 @@ export async function evaluateWithTrace(actor, permissionStr, resource, options,
261
261
  decision,
262
262
  });
263
263
  }
264
- //# sourceMappingURL=evaluator.core.js.map
@@ -12,4 +12,3 @@ import type { EvaluatorOptions } from "./evaluator.pipeline.js";
12
12
  * Evaluate with a full explain trace.
13
13
  */
14
14
  export declare function evaluateWithExplain(actor: PermissionActor, permissionStr: string, resource: unknown, options: EvaluatorOptions, authOptions?: AuthorizationOptions): Promise<ExplainResult>;
15
- //# sourceMappingURL=evaluator.explain.d.ts.map
@@ -13,4 +13,3 @@ import { evaluateWithTrace } from "./evaluator.core.js";
13
13
  export async function evaluateWithExplain(actor, permissionStr, resource, options, authOptions) {
14
14
  return evaluateWithTrace(actor, permissionStr, resource, options, authOptions);
15
15
  }
16
- //# sourceMappingURL=evaluator.explain.js.map
@@ -112,4 +112,3 @@ export declare function evaluatePolicies(context: PermissionContext, policies: r
112
112
  * Pass `undefined` to disable.
113
113
  */
114
114
  export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number | undefined, policyName?: string): Promise<T>;
115
- //# sourceMappingURL=evaluator.pipeline.d.ts.map
@@ -269,4 +269,3 @@ export async function withTimeout(promise, timeoutMs, policyName = "policy") {
269
269
  clearTimeout(timer);
270
270
  }
271
271
  }
272
- //# sourceMappingURL=evaluator.pipeline.js.map
@@ -7,4 +7,3 @@ export { evaluate, evaluateWithTrace } from "./evaluator.core.js";
7
7
  export { evaluateWithExplain } from "./evaluator.explain.js";
8
8
  export { resolveActorGrants, resolveActorPermissions, evaluatePolicies, selectPolicies, withTimeout, toMetadataMap, assertNotAborted, type EvaluatorOptions, type ResolvedGrants, type PolicyOutcome, } from "./evaluator.pipeline.js";
9
9
  export { createPermissionEngine, type PermissionEngine, type PermissionEngineOptions, } from "./authorizationEngine.js";
10
- //# sourceMappingURL=index.d.ts.map
@@ -7,4 +7,3 @@ export { evaluate, evaluateWithTrace } from "./evaluator.core.js";
7
7
  export { evaluateWithExplain } from "./evaluator.explain.js";
8
8
  export { resolveActorGrants, resolveActorPermissions, evaluatePolicies, selectPolicies, withTimeout, toMetadataMap, assertNotAborted, } from "./evaluator.pipeline.js";
9
9
  export { createPermissionEngine, } from "./authorizationEngine.js";
10
- //# sourceMappingURL=index.js.map
@@ -52,4 +52,3 @@ export declare function createNotFoundResponse(options?: NotFoundResponseOptions
52
52
  * Create a JSON response.
53
53
  */
54
54
  export declare function createJsonResponse(status: number, body: unknown): PermissionHttpResponse;
55
- //# sourceMappingURL=httpHelpers.d.ts.map
@@ -56,4 +56,3 @@ export function createNotFoundResponse(options) {
56
56
  export function createJsonResponse(status, body) {
57
57
  return createGuardResponse({ status, body, headers: JSON_HEADERS });
58
58
  }
59
- //# sourceMappingURL=httpHelpers.js.map
@@ -98,4 +98,3 @@ export interface RequirePermissionsMiddlewareOptions extends AuthorizeMiddleware
98
98
  * permission list denies in either mode.
99
99
  */
100
100
  export declare function createRequirePermissionsMiddleware(engine: PermissionEngine, permissions: readonly string[], options?: RequirePermissionsMiddlewareOptions): HttpMiddleware;
101
- //# sourceMappingURL=httpMiddleware.core.d.ts.map
@@ -144,4 +144,3 @@ export function createRequirePermissionsMiddleware(engine, permissions, options
144
144
  return next();
145
145
  };
146
146
  }
147
- //# sourceMappingURL=httpMiddleware.core.js.map
@@ -70,4 +70,3 @@ export interface MissingResourceRefusal {
70
70
  * @returns The refusal to send, or `undefined` to evaluate as usual.
71
71
  */
72
72
  export declare function refuseMissingResource(extract: ResourceExtractor | undefined, resource: unknown, options: MissingResourceOptions & DeniedResponseOptions): MissingResourceRefusal | undefined;
73
- //# sourceMappingURL=httpResource.helper.d.ts.map
@@ -56,4 +56,3 @@ export function refuseMissingResource(extract, resource, options) {
56
56
  : createForbiddenResponse(decision, options);
57
57
  return { decision, response };
58
58
  }
59
- //# sourceMappingURL=httpResource.helper.js.map
@@ -65,4 +65,3 @@ export interface HttpMiddlewareState {
65
65
  get<T = unknown>(key: string): T | undefined;
66
66
  set<T = unknown>(key: string, value: T): void;
67
67
  }
68
- //# sourceMappingURL=httpTypes.d.ts.map
@@ -7,4 +7,3 @@
7
7
  * @module http/httpTypes
8
8
  */
9
9
  export {};
10
- //# sourceMappingURL=httpTypes.js.map
@@ -14,4 +14,3 @@ export { createActorMiddleware, createRequirePermissionMiddleware, authorize, cr
14
14
  export { createForbiddenResponse, createUnauthorizedResponse, createJsonResponse, createNotFoundResponse, type DeniedResponseOptions, type NotFoundResponseOptions, type PermissionHttpResponse, } from "./httpHelpers.js";
15
15
  export { loadResource, refuseMissingResource, RESOURCE_ERROR_DECISION, RESOURCE_NOT_FOUND_DECISION, type MissingResourceMode, type MissingResourceOptions, type MissingResourceRefusal, type ResourceExtractor, type ResourceOutcome, } from "./httpResource.helper.js";
16
16
  export type { HttpRequestBag, HttpMiddleware, HttpMiddlewareOutcome, HttpMiddlewareContext, HttpRequestContext, HttpResponseContext, HttpMiddlewareState, } from "./httpTypes.js";
17
- //# sourceMappingURL=index.d.ts.map
@@ -13,4 +13,3 @@
13
13
  export { createActorMiddleware, createRequirePermissionMiddleware, authorize, createRequirePermissionsMiddleware, ACTOR_STATE_KEY, DECISION_STATE_KEY, DECISIONS_STATE_KEY, } from "./httpMiddleware.core.js";
14
14
  export { createForbiddenResponse, createUnauthorizedResponse, createJsonResponse, createNotFoundResponse, } from "./httpHelpers.js";
15
15
  export { loadResource, refuseMissingResource, RESOURCE_ERROR_DECISION, RESOURCE_NOT_FOUND_DECISION, } from "./httpResource.helper.js";
16
- //# sourceMappingURL=index.js.map
package/dist/index.d.ts CHANGED
@@ -25,4 +25,3 @@ export * from "./observability/index.js";
25
25
  export * from "./utils/index.js";
26
26
  export * from "./http/index.js";
27
27
  export type { RoleSource, PolicySource, } from "./evaluator/authorizationEngine.js";
28
- //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -24,4 +24,3 @@ export * from "./cache/index.js";
24
24
  export * from "./observability/index.js";
25
25
  export * from "./utils/index.js";
26
26
  export * from "./http/index.js";
27
- //# sourceMappingURL=index.js.map
@@ -4,4 +4,3 @@
4
4
  * @module observability
5
5
  */
6
6
  export { createPermissionEventEmitter, withObservability, type PermissionCheckEvent, type PermissionEventHandler, type PermissionEventEmitter, type PermissionEventEmitterOptions, } from "./observability.core.js";
7
- //# sourceMappingURL=index.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * @module observability
5
5
  */
6
6
  export { createPermissionEventEmitter, withObservability, } from "./observability.core.js";
7
- //# sourceMappingURL=index.js.map
@@ -58,4 +58,3 @@ export declare function createPermissionEventEmitter(options?: PermissionEventEm
58
58
  * instruments every check the engine makes.
59
59
  */
60
60
  export declare function withObservability<TArgs extends readonly unknown[]>(emitter: PermissionEventEmitter, fn: (...args: TArgs) => Promise<PermissionDecision>): (...args: TArgs) => Promise<PermissionDecision>;
61
- //# sourceMappingURL=observability.core.d.ts.map
@@ -72,4 +72,3 @@ export function withObservability(emitter, fn) {
72
72
  }
73
73
  };
74
74
  }
75
- //# sourceMappingURL=observability.core.js.map
@@ -3,6 +3,5 @@
3
3
  *
4
4
  * @module permission
5
5
  */
6
- export { parsePermission, parsePermissionSafe, isValidPermission, matches, matchesPermission, permissionsOverlap, formatPermission, } from "./permission.core.js";
6
+ export { parsePermission, parsePermissionSafe, isValidPermission, toPermissionString, matches, matchesPermission, permissionsOverlap, formatPermission, } from "./permission.core.js";
7
7
  export { createPermissionRegistry, type PermissionRegistry, type PermissionRegistryOptions, type RegisteredPermission, } from "./permissionRegistry.js";
8
- //# sourceMappingURL=index.d.ts.map
@@ -3,6 +3,5 @@
3
3
  *
4
4
  * @module permission
5
5
  */
6
- export { parsePermission, parsePermissionSafe, isValidPermission, matches, matchesPermission, permissionsOverlap, formatPermission, } from "./permission.core.js";
6
+ export { parsePermission, parsePermissionSafe, isValidPermission, toPermissionString, matches, matchesPermission, permissionsOverlap, formatPermission, } from "./permission.core.js";
7
7
  export { createPermissionRegistry, } from "./permissionRegistry.js";
8
- //# sourceMappingURL=index.js.map
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @module permission/permission
5
5
  */
6
- import type { Permission } from "../permissionTypes/index.js";
6
+ import type { Permission, TypedPermissionString } from "../permissionTypes/index.js";
7
7
  /**
8
8
  * Parse a permission string into a structured Permission.
9
9
  *
@@ -14,8 +14,17 @@ import type { Permission } from "../permissionTypes/index.js";
14
14
  export declare function parsePermission(permission: string): Permission;
15
15
  /**
16
16
  * Check if a permission string is valid without throwing.
17
+ *
18
+ * Narrows to {@link TypedPermissionString} on success.
19
+ */
20
+ export declare function isValidPermission(permission: string): permission is TypedPermissionString;
21
+ /**
22
+ * Validate a runtime string and return it typed as a
23
+ * {@link TypedPermissionString}.
24
+ *
25
+ * @throws InvalidPermissionError if the string is not a valid permission
17
26
  */
18
- export declare function isValidPermission(permission: string): boolean;
27
+ export declare function toPermissionString(permission: string): TypedPermissionString;
19
28
  /**
20
29
  * Check if a permission pattern matches a target permission.
21
30
  *
@@ -50,4 +59,3 @@ export declare function permissionsOverlap(a: string, b: string): boolean;
50
59
  export declare function parsePermissionSafe(permission: string): Permission | null;
51
60
  /** Build a permission string from a resource and an action. */
52
61
  export declare function formatPermission(resource: string, action: string): string;
53
- //# sourceMappingURL=permission.core.d.ts.map
@@ -30,10 +30,24 @@ export function parsePermission(permission) {
30
30
  }
31
31
  /**
32
32
  * Check if a permission string is valid without throwing.
33
+ *
34
+ * Narrows to {@link TypedPermissionString} on success.
33
35
  */
34
36
  export function isValidPermission(permission) {
35
37
  return PERMISSION_REGEX.test(permission);
36
38
  }
39
+ /**
40
+ * Validate a runtime string and return it typed as a
41
+ * {@link TypedPermissionString}.
42
+ *
43
+ * @throws InvalidPermissionError if the string is not a valid permission
44
+ */
45
+ export function toPermissionString(permission) {
46
+ if (!isValidPermission(permission)) {
47
+ throw new InvalidPermissionError(permission);
48
+ }
49
+ return permission;
50
+ }
37
51
  /**
38
52
  * Check if a permission pattern matches a target permission.
39
53
  *
@@ -96,4 +110,3 @@ export function parsePermissionSafe(permission) {
96
110
  export function formatPermission(resource, action) {
97
111
  return `${resource}:${action}`;
98
112
  }
99
- //# sourceMappingURL=permission.core.js.map
@@ -67,4 +67,3 @@ export interface PermissionRegistry {
67
67
  * ```
68
68
  */
69
69
  export declare function createPermissionRegistry(options?: PermissionRegistryOptions): PermissionRegistry;
70
- //# sourceMappingURL=permissionRegistry.d.ts.map
@@ -116,4 +116,3 @@ export function createPermissionRegistry(options) {
116
116
  },
117
117
  };
118
118
  }
119
- //# sourceMappingURL=permissionRegistry.js.map
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { PermissionError } from "./permissionError.base.js";
7
7
  export { PermissionDeniedError, PermissionNotFoundError, DuplicatePermissionError, RoleNotFoundError, DuplicateRoleError, DuplicatePolicyError, InvalidPermissionError, InvalidRoleError, CircularRoleInheritanceError, PolicyError, PolicyTimeoutError, PermissionResolverError, AuthorizationAbortedError, } from "./permissionError.types.js";
8
- //# sourceMappingURL=index.d.ts.map
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { PermissionError } from "./permissionError.base.js";
7
7
  export { PermissionDeniedError, PermissionNotFoundError, DuplicatePermissionError, RoleNotFoundError, DuplicateRoleError, DuplicatePolicyError, InvalidPermissionError, InvalidRoleError, CircularRoleInheritanceError, PolicyError, PolicyTimeoutError, PermissionResolverError, AuthorizationAbortedError, } from "./permissionError.types.js";
8
- //# sourceMappingURL=index.js.map
@@ -60,4 +60,3 @@ export declare class DuplicateRoleError extends PermissionError {
60
60
  export declare class DuplicatePolicyError extends PermissionError {
61
61
  constructor(policy: string);
62
62
  }
63
- //# sourceMappingURL=permissionError.access.d.ts.map
@@ -82,4 +82,3 @@ export class DuplicatePolicyError extends PermissionError {
82
82
  });
83
83
  }
84
84
  }
85
- //# sourceMappingURL=permissionError.access.js.map
@@ -16,4 +16,3 @@ export declare class PermissionError extends AuthorizationError {
16
16
  readonly cause?: unknown;
17
17
  });
18
18
  }
19
- //# sourceMappingURL=permissionError.base.d.ts.map
@@ -18,4 +18,3 @@ export class PermissionError extends AuthorizationError {
18
18
  });
19
19
  }
20
20
  }
21
- //# sourceMappingURL=permissionError.base.js.map
@@ -3,4 +3,3 @@
3
3
  */
4
4
  export { PermissionDeniedError, PermissionNotFoundError, DuplicatePermissionError, RoleNotFoundError, DuplicateRoleError, DuplicatePolicyError, } from "./permissionError.access.js";
5
5
  export { InvalidPermissionError, InvalidRoleError, CircularRoleInheritanceError, PolicyError, PolicyTimeoutError, PermissionResolverError, AuthorizationAbortedError, } from "./permissionError.validation.js";
6
- //# sourceMappingURL=permissionError.types.d.ts.map
@@ -3,4 +3,3 @@
3
3
  */
4
4
  export { PermissionDeniedError, PermissionNotFoundError, DuplicatePermissionError, RoleNotFoundError, DuplicateRoleError, DuplicatePolicyError, } from "./permissionError.access.js";
5
5
  export { InvalidPermissionError, InvalidRoleError, CircularRoleInheritanceError, PolicyError, PolicyTimeoutError, PermissionResolverError, AuthorizationAbortedError, } from "./permissionError.validation.js";
6
- //# sourceMappingURL=permissionError.types.js.map
@@ -44,4 +44,3 @@ export declare class PermissionResolverError extends PermissionError {
44
44
  export declare class AuthorizationAbortedError extends PermissionError {
45
45
  constructor();
46
46
  }
47
- //# sourceMappingURL=permissionError.validation.d.ts.map
@@ -75,4 +75,3 @@ export class AuthorizationAbortedError extends PermissionError {
75
75
  super("Authorization aborted", { code: ErrorCode.OPERATION_CANCELLED });
76
76
  }
77
77
  }
78
- //# sourceMappingURL=permissionError.validation.js.map
@@ -3,7 +3,6 @@
3
3
  *
4
4
  * @module permissionTypes
5
5
  */
6
- export { type PermissionActor, type Permission, type PermissionString, } from "./permissionActor.js";
6
+ export { type PermissionActor, type Permission, type PermissionString, type TypedPermissionString, } from "./permissionActor.js";
7
7
  export { type RuleEffect, type RuleCombiningAlgorithm, type RuleEvaluation, type PermissionRule, type PermissionConditionFn, type PermissionContext, type PermissionDecision, } from "./ruleTypes.js";
8
8
  export { type RoleDefinition, type PermissionResolver, type RoleResolver, type PermissionCache, type PermissionPolicyDefinition, type PolicyEffect, type ExplainStep, type ExplainResult, type AuthorizationOptions, } from "./policyTypes.js";
9
- //# sourceMappingURL=index.d.ts.map
@@ -6,4 +6,3 @@
6
6
  export {} from "./permissionActor.js";
7
7
  export {} from "./ruleTypes.js";
8
8
  export {} from "./policyTypes.js";
9
- //# sourceMappingURL=index.js.map
@@ -23,6 +23,21 @@ export interface Permission {
23
23
  /** Action being performed (e.g. "read", "update", "*"). */
24
24
  readonly action: string;
25
25
  }
26
- /** Permission string format: "resource:action" or wildcards like "post:*", "*:*". */
26
+ /**
27
+ * Permission string format: "resource:action" or wildcards like "post:*",
28
+ * "*:*".
29
+ *
30
+ * Kept as a plain `string` so existing call sites (values read from
31
+ * configuration, databases or tokens) keep compiling. Use
32
+ * {@link TypedPermissionString} where you want the compiler to insist on the
33
+ * `resource:action` shape, and `toPermissionString()` / `isValidPermission()`
34
+ * to move a runtime string into it.
35
+ */
27
36
  export type PermissionString = string;
28
- //# sourceMappingURL=permissionActor.d.ts.map
37
+ /**
38
+ * A permission string whose `resource:action` shape is checked by the
39
+ * compiler: `"post:read"` and `"billing.*:refund"` are accepted,
40
+ * `"postread"` is a type error. The full grammar (segment alphabet, no
41
+ * partial wildcards) is still enforced at runtime by `parsePermission()`.
42
+ */
43
+ export type TypedPermissionString = `${string}:${string}`;
@@ -4,4 +4,3 @@
4
4
  * @module permissionTypes/permissionActor
5
5
  */
6
6
  export {};
7
- //# sourceMappingURL=permissionActor.js.map
@@ -116,4 +116,3 @@ export interface AuthorizationOptions {
116
116
  /** Identifies the resource for caching. Falls back to `resource.id`. */
117
117
  readonly resourceId?: string;
118
118
  }
119
- //# sourceMappingURL=policyTypes.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * @module permissionTypes/policyTypes
5
5
  */
6
6
  export {};
7
- //# sourceMappingURL=policyTypes.js.map
@@ -80,4 +80,3 @@ export interface RuleEvaluation {
80
80
  /** Rules that matched the target and whose condition passed. */
81
81
  readonly applicable: readonly PermissionRule[];
82
82
  }
83
- //# sourceMappingURL=ruleTypes.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * @module permissionTypes/ruleTypes
5
5
  */
6
6
  export {};
7
- //# sourceMappingURL=ruleTypes.js.map
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { createPolicyRegistry, type PolicyRegistry, type PolicyRegistryOptions, } from "./policyRegistry.js";
7
7
  export { DEFAULT_POLICY_EFFECT, policyGrants } from "./policyEffect.core.js";
8
- //# sourceMappingURL=index.d.ts.map
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { createPolicyRegistry, } from "./policyRegistry.js";
7
7
  export { DEFAULT_POLICY_EFFECT, policyGrants } from "./policyEffect.core.js";
8
- //# sourceMappingURL=index.js.map
@@ -39,4 +39,3 @@ export type ResolvedPolicyMode = "constrain" | "grant" | "legacyGrant";
39
39
  * @param defaultEffect - The engine's `defaultPolicyEffect`.
40
40
  */
41
41
  export declare function resolvePolicyMode(policy: PermissionPolicyDefinition, defaultEffect?: PolicyEffect): ResolvedPolicyMode;
42
- //# sourceMappingURL=policyEffect.core.d.ts.map
@@ -33,4 +33,3 @@ export function resolvePolicyMode(policy, defaultEffect = DEFAULT_POLICY_EFFECT)
33
33
  return "constrain";
34
34
  return defaultEffect === "grant" ? "legacyGrant" : "constrain";
35
35
  }
36
- //# sourceMappingURL=policyEffect.core.js.map
@@ -38,4 +38,3 @@ export interface PolicyRegistry {
38
38
  * Pass it straight to `createPermissionEngine({ policies: registry })`.
39
39
  */
40
40
  export declare function createPolicyRegistry(options?: PolicyRegistryOptions): PolicyRegistry;
41
- //# sourceMappingURL=policyRegistry.d.ts.map
@@ -78,4 +78,3 @@ export function createPolicyRegistry(options) {
78
78
  },
79
79
  };
80
80
  }
81
- //# sourceMappingURL=policyRegistry.js.map
@@ -4,4 +4,3 @@
4
4
  * @module resolvers
5
5
  */
6
6
  export { createMemoryPermissionResolver, createMemoryRoleResolver, createStaticPermissionResolver, createStaticRoleResolver, } from "./resolvers.core.js";
7
- //# sourceMappingURL=index.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * @module resolvers
5
5
  */
6
6
  export { createMemoryPermissionResolver, createMemoryRoleResolver, createStaticPermissionResolver, createStaticRoleResolver, } from "./resolvers.core.js";
7
- //# sourceMappingURL=index.js.map
@@ -20,4 +20,3 @@ export declare function createStaticPermissionResolver(rules: readonly Permissio
20
20
  * Static role resolver — always returns the same roles.
21
21
  */
22
22
  export declare function createStaticRoleResolver(roles: readonly string[]): RoleResolver;
23
- //# sourceMappingURL=resolvers.core.d.ts.map
@@ -43,4 +43,3 @@ export function createStaticRoleResolver(roles) {
43
43
  },
44
44
  };
45
45
  }
46
- //# sourceMappingURL=resolvers.core.js.map
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { createRoleRegistry, type RoleRegistry, type RoleRegistryOptions, } from "./roleRegistry.js";
7
7
  export { resolveRolePermissions, memoizeRoleLookup, type RoleResolution, type RoleResolutionOptions, } from "./roleHierarchy.js";
8
- //# sourceMappingURL=index.d.ts.map
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { createRoleRegistry, } from "./roleRegistry.js";
7
7
  export { resolveRolePermissions, memoizeRoleLookup, } from "./roleHierarchy.js";
8
- //# sourceMappingURL=index.js.map
@@ -42,4 +42,3 @@ export declare function memoizeRoleLookup(getRole: (name: string) => RoleDefinit
42
42
  readonly lookup: (name: string) => RoleDefinition | undefined;
43
43
  readonly invalidate: () => void;
44
44
  };
45
- //# sourceMappingURL=roleHierarchy.d.ts.map
@@ -70,4 +70,3 @@ export function memoizeRoleLookup(getRole) {
70
70
  invalidate: () => cache.clear(),
71
71
  };
72
72
  }
73
- //# sourceMappingURL=roleHierarchy.js.map
@@ -51,4 +51,3 @@ export declare function freezeRoleDefinition(definition: RoleDefinition): RoleDe
51
51
  * Pass it straight to `createPermissionEngine({ roles: registry })`.
52
52
  */
53
53
  export declare function createRoleRegistry(options?: RoleRegistryOptions): RoleRegistry;
54
- //# sourceMappingURL=roleRegistry.d.ts.map
@@ -104,4 +104,3 @@ export function createRoleRegistry(options) {
104
104
  },
105
105
  };
106
106
  }
107
- //# sourceMappingURL=roleRegistry.js.map
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { ruleMatches, patternStrMatches, evaluateRules, evaluateRulesSync, } from "./rule.core.js";
7
7
  export { compileRules, findMatchingRules, type RuleIndex, } from "./ruleCompiler.js";
8
- //# sourceMappingURL=index.d.ts.map
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { ruleMatches, patternStrMatches, evaluateRules, evaluateRulesSync, } from "./rule.core.js";
7
7
  export { compileRules, findMatchingRules, } from "./ruleCompiler.js";
8
- //# sourceMappingURL=index.js.map
@@ -42,4 +42,3 @@ export declare function evaluateRules(rules: readonly PermissionRule[], target:
42
42
  export declare function evaluateRulesSync(rules: readonly PermissionRule[], target: Permission, options?: {
43
43
  readonly algorithm?: RuleCombiningAlgorithm;
44
44
  }): RuleEvaluation;
45
- //# sourceMappingURL=rule.core.d.ts.map
@@ -96,4 +96,3 @@ export function evaluateRulesSync(rules, target, options) {
96
96
  (rule.condition === undefined || rule.effect === "deny"));
97
97
  return combineApplicable(applicable, algorithm);
98
98
  }
99
- //# sourceMappingURL=rule.core.js.map
@@ -41,4 +41,3 @@ export declare function ruleOverlaps(rule: PermissionRule, target: Permission):
41
41
  export declare function ruleBearsOn(rule: PermissionRule, target: Permission): boolean;
42
42
  /** Whether a permission names more than one concrete permission. */
43
43
  export declare function isWildcardTarget(target: Permission): boolean;
44
- //# sourceMappingURL=rule.pattern.d.ts.map
@@ -69,4 +69,3 @@ export function ruleBearsOn(rule, target) {
69
69
  export function isWildcardTarget(target) {
70
70
  return target.resource.includes("*") || target.action.includes("*");
71
71
  }
72
- //# sourceMappingURL=rule.pattern.js.map
@@ -33,4 +33,3 @@ export declare function compileRules(rules: readonly PermissionRule[]): RuleInde
33
33
  * count twice when the decision is combined.
34
34
  */
35
35
  export declare function findMatchingRules(index: RuleIndex, target: Permission): readonly PermissionRule[];
36
- //# sourceMappingURL=ruleCompiler.d.ts.map
@@ -89,4 +89,3 @@ export function findMatchingRules(index, target) {
89
89
  function normalizeToArray(value) {
90
90
  return Array.isArray(value) ? [...value] : [value];
91
91
  }
92
- //# sourceMappingURL=ruleCompiler.js.map
@@ -4,4 +4,3 @@
4
4
  * @module utils
5
5
  */
6
6
  export { createCacheKey, extractResource, extractAction, buildPermission, createActor, } from "./utils.helper.js";
7
- //# sourceMappingURL=index.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * @module utils
5
5
  */
6
6
  export { createCacheKey, extractResource, extractAction, buildPermission, createActor, } from "./utils.helper.js";
7
- //# sourceMappingURL=index.js.map
@@ -42,4 +42,3 @@ export declare function createActor(id: string, options?: {
42
42
  readonly permissions?: readonly string[];
43
43
  readonly deniedPermissions?: readonly string[];
44
44
  }): PermissionActor;
45
- //# sourceMappingURL=utils.helper.d.ts.map
@@ -49,4 +49,3 @@ export function buildPermission(resource, action) {
49
49
  export function createActor(id, options) {
50
50
  return createPermissionActor(id, options);
51
51
  }
52
- //# sourceMappingURL=utils.helper.js.map
@@ -16,4 +16,3 @@ export interface ChangeNotifier {
16
16
  }
17
17
  /** Create a {@link ChangeNotifier}. */
18
18
  export declare function createChangeNotifier(): ChangeNotifier;
19
- //# sourceMappingURL=utils.notifier.d.ts.map
@@ -28,4 +28,3 @@ export function createChangeNotifier() {
28
28
  },
29
29
  };
30
30
  }
31
- //# sourceMappingURL=utils.notifier.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zudojs/permissions",
3
- "version": "1.4.2",
3
+ "version": "1.5.0",
4
4
  "description": "Generic authorization engine with RBAC, ABAC, resource authorization, wildcards, role hierarchy, policies, and abilities.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -26,8 +26,8 @@
26
26
  "!dist/.tsbuildinfo"
27
27
  ],
28
28
  "dependencies": {
29
- "@zudojs/errors": "1.3.1",
30
- "@zudojs/middleware": "1.1.1"
29
+ "@zudojs/errors": "1.4.0",
30
+ "@zudojs/middleware": "1.1.3"
31
31
  },
32
32
  "engines": {
33
33
  "node": ">=24.0.0"