@zudojs/permissions 0.0.1

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 (179) hide show
  1. package/README.md +41 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/ability/ability.core.d.ts +29 -0
  4. package/dist/ability/ability.core.d.ts.map +1 -0
  5. package/dist/ability/ability.core.js +38 -0
  6. package/dist/ability/ability.core.js.map +1 -0
  7. package/dist/ability/index.d.ts +7 -0
  8. package/dist/ability/index.d.ts.map +1 -0
  9. package/dist/ability/index.js +7 -0
  10. package/dist/ability/index.js.map +1 -0
  11. package/dist/actor/actor.core.d.ts +28 -0
  12. package/dist/actor/actor.core.d.ts.map +1 -0
  13. package/dist/actor/actor.core.js +40 -0
  14. package/dist/actor/actor.core.js.map +1 -0
  15. package/dist/actor/index.d.ts +7 -0
  16. package/dist/actor/index.d.ts.map +1 -0
  17. package/dist/actor/index.js +7 -0
  18. package/dist/actor/index.js.map +1 -0
  19. package/dist/cache/cache.core.d.ts +17 -0
  20. package/dist/cache/cache.core.d.ts.map +1 -0
  21. package/dist/cache/cache.core.js +51 -0
  22. package/dist/cache/cache.core.js.map +1 -0
  23. package/dist/cache/index.d.ts +7 -0
  24. package/dist/cache/index.d.ts.map +1 -0
  25. package/dist/cache/index.js +7 -0
  26. package/dist/cache/index.js.map +1 -0
  27. package/dist/conditions/conditions.core.d.ts +40 -0
  28. package/dist/conditions/conditions.core.d.ts.map +1 -0
  29. package/dist/conditions/conditions.core.js +78 -0
  30. package/dist/conditions/conditions.core.js.map +1 -0
  31. package/dist/conditions/index.d.ts +7 -0
  32. package/dist/conditions/index.d.ts.map +1 -0
  33. package/dist/conditions/index.js +7 -0
  34. package/dist/conditions/index.js.map +1 -0
  35. package/dist/evaluator/authorizationEngine.d.ts +47 -0
  36. package/dist/evaluator/authorizationEngine.d.ts.map +1 -0
  37. package/dist/evaluator/authorizationEngine.js +49 -0
  38. package/dist/evaluator/authorizationEngine.js.map +1 -0
  39. package/dist/evaluator/evaluator.core.d.ts +11 -0
  40. package/dist/evaluator/evaluator.core.d.ts.map +1 -0
  41. package/dist/evaluator/evaluator.core.js +57 -0
  42. package/dist/evaluator/evaluator.core.js.map +1 -0
  43. package/dist/evaluator/evaluator.explain.d.ts +12 -0
  44. package/dist/evaluator/evaluator.explain.d.ts.map +1 -0
  45. package/dist/evaluator/evaluator.explain.js +79 -0
  46. package/dist/evaluator/evaluator.explain.js.map +1 -0
  47. package/dist/evaluator/evaluator.pipeline.d.ts +28 -0
  48. package/dist/evaluator/evaluator.pipeline.d.ts.map +1 -0
  49. package/dist/evaluator/evaluator.pipeline.js +83 -0
  50. package/dist/evaluator/evaluator.pipeline.js.map +1 -0
  51. package/dist/evaluator/index.d.ts +8 -0
  52. package/dist/evaluator/index.d.ts.map +1 -0
  53. package/dist/evaluator/index.js +7 -0
  54. package/dist/evaluator/index.js.map +1 -0
  55. package/dist/http/httpHelpers.d.ts +28 -0
  56. package/dist/http/httpHelpers.d.ts.map +1 -0
  57. package/dist/http/httpHelpers.js +29 -0
  58. package/dist/http/httpHelpers.js.map +1 -0
  59. package/dist/http/httpMiddleware.core.d.ts +48 -0
  60. package/dist/http/httpMiddleware.core.d.ts.map +1 -0
  61. package/dist/http/httpMiddleware.core.js +81 -0
  62. package/dist/http/httpMiddleware.core.js.map +1 -0
  63. package/dist/http/httpTypes.d.ts +40 -0
  64. package/dist/http/httpTypes.d.ts.map +1 -0
  65. package/dist/http/httpTypes.js +10 -0
  66. package/dist/http/httpTypes.js.map +1 -0
  67. package/dist/http/index.d.ts +11 -0
  68. package/dist/http/index.d.ts.map +1 -0
  69. package/dist/http/index.js +10 -0
  70. package/dist/http/index.js.map +1 -0
  71. package/dist/index.d.ts +27 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +27 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/observability/index.d.ts +7 -0
  76. package/dist/observability/index.d.ts.map +1 -0
  77. package/dist/observability/index.js +7 -0
  78. package/dist/observability/index.js.map +1 -0
  79. package/dist/observability/observability.core.d.ts +41 -0
  80. package/dist/observability/observability.core.d.ts.map +1 -0
  81. package/dist/observability/observability.core.js +54 -0
  82. package/dist/observability/observability.core.js.map +1 -0
  83. package/dist/permission/index.d.ts +8 -0
  84. package/dist/permission/index.d.ts.map +1 -0
  85. package/dist/permission/index.js +8 -0
  86. package/dist/permission/index.js.map +1 -0
  87. package/dist/permission/permission.core.d.ts +30 -0
  88. package/dist/permission/permission.core.d.ts.map +1 -0
  89. package/dist/permission/permission.core.js +72 -0
  90. package/dist/permission/permission.core.js.map +1 -0
  91. package/dist/permission/permissionRegistry.d.ts +63 -0
  92. package/dist/permission/permissionRegistry.d.ts.map +1 -0
  93. package/dist/permission/permissionRegistry.js +88 -0
  94. package/dist/permission/permissionRegistry.js.map +1 -0
  95. package/dist/permissionErrors/index.d.ts +8 -0
  96. package/dist/permissionErrors/index.d.ts.map +1 -0
  97. package/dist/permissionErrors/index.js +8 -0
  98. package/dist/permissionErrors/index.js.map +1 -0
  99. package/dist/permissionErrors/permissionError.access.d.ts +39 -0
  100. package/dist/permissionErrors/permissionError.access.d.ts.map +1 -0
  101. package/dist/permissionErrors/permissionError.access.js +65 -0
  102. package/dist/permissionErrors/permissionError.access.js.map +1 -0
  103. package/dist/permissionErrors/permissionError.base.d.ts +19 -0
  104. package/dist/permissionErrors/permissionError.base.d.ts.map +1 -0
  105. package/dist/permissionErrors/permissionError.base.js +21 -0
  106. package/dist/permissionErrors/permissionError.base.js.map +1 -0
  107. package/dist/permissionErrors/permissionError.types.d.ts +6 -0
  108. package/dist/permissionErrors/permissionError.types.d.ts.map +1 -0
  109. package/dist/permissionErrors/permissionError.types.js +6 -0
  110. package/dist/permissionErrors/permissionError.types.js.map +1 -0
  111. package/dist/permissionErrors/permissionError.validation.d.ts +47 -0
  112. package/dist/permissionErrors/permissionError.validation.d.ts.map +1 -0
  113. package/dist/permissionErrors/permissionError.validation.js +78 -0
  114. package/dist/permissionErrors/permissionError.validation.js.map +1 -0
  115. package/dist/permissionTypes/index.d.ts +9 -0
  116. package/dist/permissionTypes/index.d.ts.map +1 -0
  117. package/dist/permissionTypes/index.js +9 -0
  118. package/dist/permissionTypes/index.js.map +1 -0
  119. package/dist/permissionTypes/permissionActor.d.ts +28 -0
  120. package/dist/permissionTypes/permissionActor.d.ts.map +1 -0
  121. package/dist/permissionTypes/permissionActor.js +7 -0
  122. package/dist/permissionTypes/permissionActor.js.map +1 -0
  123. package/dist/permissionTypes/policyTypes.d.ts +62 -0
  124. package/dist/permissionTypes/policyTypes.d.ts.map +1 -0
  125. package/dist/permissionTypes/policyTypes.js +7 -0
  126. package/dist/permissionTypes/policyTypes.js.map +1 -0
  127. package/dist/permissionTypes/ruleTypes.d.ts +50 -0
  128. package/dist/permissionTypes/ruleTypes.d.ts.map +1 -0
  129. package/dist/permissionTypes/ruleTypes.js +7 -0
  130. package/dist/permissionTypes/ruleTypes.js.map +1 -0
  131. package/dist/policy/index.d.ts +7 -0
  132. package/dist/policy/index.d.ts.map +1 -0
  133. package/dist/policy/index.js +7 -0
  134. package/dist/policy/index.js.map +1 -0
  135. package/dist/policy/policyRegistry.d.ts +36 -0
  136. package/dist/policy/policyRegistry.d.ts.map +1 -0
  137. package/dist/policy/policyRegistry.js +57 -0
  138. package/dist/policy/policyRegistry.js.map +1 -0
  139. package/dist/resolvers/index.d.ts +7 -0
  140. package/dist/resolvers/index.d.ts.map +1 -0
  141. package/dist/resolvers/index.js +7 -0
  142. package/dist/resolvers/index.js.map +1 -0
  143. package/dist/resolvers/resolvers.core.d.ts +23 -0
  144. package/dist/resolvers/resolvers.core.d.ts.map +1 -0
  145. package/dist/resolvers/resolvers.core.js +46 -0
  146. package/dist/resolvers/resolvers.core.js.map +1 -0
  147. package/dist/role/index.d.ts +8 -0
  148. package/dist/role/index.d.ts.map +1 -0
  149. package/dist/role/index.js +8 -0
  150. package/dist/role/index.js.map +1 -0
  151. package/dist/role/roleHierarchy.d.ts +15 -0
  152. package/dist/role/roleHierarchy.d.ts.map +1 -0
  153. package/dist/role/roleHierarchy.js +48 -0
  154. package/dist/role/roleHierarchy.js.map +1 -0
  155. package/dist/role/roleRegistry.d.ts +45 -0
  156. package/dist/role/roleRegistry.d.ts.map +1 -0
  157. package/dist/role/roleRegistry.js +67 -0
  158. package/dist/role/roleRegistry.js.map +1 -0
  159. package/dist/rule/index.d.ts +8 -0
  160. package/dist/rule/index.d.ts.map +1 -0
  161. package/dist/rule/index.js +8 -0
  162. package/dist/rule/index.js.map +1 -0
  163. package/dist/rule/rule.core.d.ts +24 -0
  164. package/dist/rule/rule.core.d.ts.map +1 -0
  165. package/dist/rule/rule.core.js +79 -0
  166. package/dist/rule/rule.core.js.map +1 -0
  167. package/dist/rule/ruleCompiler.d.ts +27 -0
  168. package/dist/rule/ruleCompiler.d.ts.map +1 -0
  169. package/dist/rule/ruleCompiler.js +76 -0
  170. package/dist/rule/ruleCompiler.js.map +1 -0
  171. package/dist/utils/index.d.ts +7 -0
  172. package/dist/utils/index.d.ts.map +1 -0
  173. package/dist/utils/index.js +7 -0
  174. package/dist/utils/index.js.map +1 -0
  175. package/dist/utils/utils.helper.d.ts +37 -0
  176. package/dist/utils/utils.helper.d.ts.map +1 -0
  177. package/dist/utils/utils.helper.js +50 -0
  178. package/dist/utils/utils.helper.js.map +1 -0
  179. package/package.json +61 -0
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Central registry for role definitions.
3
+ *
4
+ * @module role/roleRegistry
5
+ */
6
+ import type { RoleDefinition } from "../permissionTypes/index.js";
7
+ /** Options for the role registry. */
8
+ export interface RoleRegistryOptions {
9
+ /** Allow overwriting existing roles. Defaults to false. */
10
+ readonly allowOverride?: boolean;
11
+ }
12
+ /**
13
+ * Create a role registry.
14
+ */
15
+ export declare function createRoleRegistry(options?: RoleRegistryOptions): {
16
+ /**
17
+ * Register a role definition.
18
+ */
19
+ define(definition: RoleDefinition): void;
20
+ /**
21
+ * Get a role by name.
22
+ */
23
+ get(name: string): RoleDefinition | undefined;
24
+ /**
25
+ * Check if a role exists.
26
+ */
27
+ has(name: string): boolean;
28
+ /**
29
+ * Get all registered role names.
30
+ */
31
+ names(): readonly string[];
32
+ /**
33
+ * Get all registered role definitions.
34
+ */
35
+ all(): readonly RoleDefinition[];
36
+ /**
37
+ * Remove a role from the registry.
38
+ */
39
+ remove(name: string): boolean;
40
+ /**
41
+ * Clear all registered roles.
42
+ */
43
+ clear(): void;
44
+ };
45
+ //# sourceMappingURL=roleRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roleRegistry.d.ts","sourceRoot":"","sources":["../../src/role/roleRegistry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAMlE,qCAAqC;AACrC,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB;IAK5D;;OAEG;IACH,MAAM,aAAa,cAAc,GAAG,IAAI;IAiBxC;;OAEG;IACH,GAAG,OAAO,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C;;OAEG;IACH,GAAG,OAAO,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,KAAK,IAAI,SAAS,MAAM,EAAE;IAI1B;;OAEG;IACH,GAAG,IAAI,SAAS,cAAc,EAAE;IAIhC;;OAEG;IACH,MAAM,OAAO,MAAM,GAAG,OAAO;IAI7B;;OAEG;IACH,KAAK,IAAI,IAAI;EAIhB"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Central registry for role definitions.
3
+ *
4
+ * @module role/roleRegistry
5
+ */
6
+ import { DuplicateRoleError, InvalidRoleError, } from "../permissionErrors/index.js";
7
+ /**
8
+ * Create a role registry.
9
+ */
10
+ export function createRoleRegistry(options) {
11
+ const roles = new Map();
12
+ const allowOverride = options?.allowOverride ?? false;
13
+ return {
14
+ /**
15
+ * Register a role definition.
16
+ */
17
+ define(definition) {
18
+ if (!definition.name || definition.name.trim() === "") {
19
+ throw new InvalidRoleError("Role name cannot be empty");
20
+ }
21
+ if (!definition.permissions || definition.permissions.length === 0) {
22
+ throw new InvalidRoleError(`Role "${definition.name}" must have at least one permission`);
23
+ }
24
+ if (roles.has(definition.name) && !allowOverride) {
25
+ throw new DuplicateRoleError(definition.name);
26
+ }
27
+ roles.set(definition.name, Object.freeze({ ...definition }));
28
+ },
29
+ /**
30
+ * Get a role by name.
31
+ */
32
+ get(name) {
33
+ return roles.get(name);
34
+ },
35
+ /**
36
+ * Check if a role exists.
37
+ */
38
+ has(name) {
39
+ return roles.has(name);
40
+ },
41
+ /**
42
+ * Get all registered role names.
43
+ */
44
+ names() {
45
+ return Array.from(roles.keys());
46
+ },
47
+ /**
48
+ * Get all registered role definitions.
49
+ */
50
+ all() {
51
+ return Array.from(roles.values());
52
+ },
53
+ /**
54
+ * Remove a role from the registry.
55
+ */
56
+ remove(name) {
57
+ return roles.delete(name);
58
+ },
59
+ /**
60
+ * Clear all registered roles.
61
+ */
62
+ clear() {
63
+ roles.clear();
64
+ },
65
+ };
66
+ }
67
+ //# sourceMappingURL=roleRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roleRegistry.js","sourceRoot":"","sources":["../../src/role/roleRegistry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,8BAA8B,CAAC;AAQtC;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA6B;IAC9D,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAChD,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,KAAK,CAAC;IAEtD,OAAO;QACL;;WAEG;QACH,MAAM,CAAC,UAA0B;YAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACtD,MAAM,IAAI,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,gBAAgB,CACxB,SAAS,UAAU,CAAC,IAAI,qCAAqC,CAC9D,CAAC;YACJ,CAAC;YAED,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjD,MAAM,IAAI,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC;YAED,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED;;WAEG;QACH,GAAG,CAAC,IAAY;YACd,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAED;;WAEG;QACH,GAAG,CAAC,IAAY;YACd,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAED;;WAEG;QACH,KAAK;YACH,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAED;;WAEG;QACH,GAAG;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACpC,CAAC;QAED;;WAEG;QACH,MAAM,CAAC,IAAY;YACjB,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED;;WAEG;QACH,KAAK;YACH,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Rule matching, evaluation, and compilation for permission decisions.
3
+ *
4
+ * @module rule
5
+ */
6
+ export { ruleMatches, evaluateRules } from "./rule.core.js";
7
+ export { compileRules, findMatchingRules } from "./ruleCompiler.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rule/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Rule matching, evaluation, and compilation for permission decisions.
3
+ *
4
+ * @module rule
5
+ */
6
+ export { ruleMatches, evaluateRules } from "./rule.core.js";
7
+ export { compileRules, findMatchingRules } from "./ruleCompiler.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rule/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Rule matching and compilation for permission evaluation.
3
+ *
4
+ * @module rule/rule
5
+ */
6
+ import type { PermissionRule, Permission } from "../permissionTypes/index.js";
7
+ /**
8
+ * Check if a rule matches a target permission.
9
+ *
10
+ * A rule matches if its resource and action patterns match the target,
11
+ * considering wildcard support.
12
+ */
13
+ export declare function ruleMatches(rule: PermissionRule, target: Permission): boolean;
14
+ /**
15
+ * Evaluate a set of rules against a target permission.
16
+ *
17
+ * Returns the effective decision after applying deny-overrides and priority.
18
+ * Default: deny.
19
+ */
20
+ export declare function evaluateRules(rules: readonly PermissionRule[], target: Permission): {
21
+ readonly allowed: boolean;
22
+ readonly matchedRule?: PermissionRule;
23
+ };
24
+ //# sourceMappingURL=rule.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.core.d.ts","sourceRoot":"","sources":["../../src/rule/rule.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9E;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAK7E;AA4CD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,MAAM,EAAE,UAAU,GACjB;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,CAAA;CAAE,CAuBtE"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Rule matching and compilation for permission evaluation.
3
+ *
4
+ * @module rule/rule
5
+ */
6
+ /**
7
+ * Check if a rule matches a target permission.
8
+ *
9
+ * A rule matches if its resource and action patterns match the target,
10
+ * considering wildcard support.
11
+ */
12
+ export function ruleMatches(rule, target) {
13
+ return (resourceMatches(rule.resource, target.resource) &&
14
+ actionMatches(rule.action, target.action));
15
+ }
16
+ /**
17
+ * Check if a rule's resource pattern matches a target resource.
18
+ */
19
+ function resourceMatches(pattern, target) {
20
+ if (Array.isArray(pattern)) {
21
+ return pattern.some((p) => patternStrMatches(p, target));
22
+ }
23
+ return patternStrMatches(pattern, target);
24
+ }
25
+ /**
26
+ * Check if a rule's action pattern matches a target action.
27
+ */
28
+ function actionMatches(pattern, target) {
29
+ if (Array.isArray(pattern)) {
30
+ return pattern.some((p) => patternStrMatches(p, target));
31
+ }
32
+ return patternStrMatches(pattern, target);
33
+ }
34
+ /**
35
+ * Check if a single pattern string matches a target, supporting wildcards.
36
+ */
37
+ function patternStrMatches(pattern, target) {
38
+ if (pattern === "*")
39
+ return true;
40
+ if (pattern === target)
41
+ return true;
42
+ // Namespace wildcard: "billing.*" matches "billing.invoice"
43
+ if (pattern.endsWith(".*")) {
44
+ const prefix = pattern.slice(0, -2);
45
+ return target === prefix || target.startsWith(`${prefix}.`);
46
+ }
47
+ return false;
48
+ }
49
+ /**
50
+ * Evaluate a set of rules against a target permission.
51
+ *
52
+ * Returns the effective decision after applying deny-overrides and priority.
53
+ * Default: deny.
54
+ */
55
+ export function evaluateRules(rules, target) {
56
+ const matching = rules.filter((r) => ruleMatches(r, target));
57
+ if (matching.length === 0) {
58
+ return { allowed: false };
59
+ }
60
+ // Sort by priority descending; same priority: deny wins (deny has higher effective priority)
61
+ const sorted = [...matching].sort((a, b) => {
62
+ const priA = a.priority ?? 0;
63
+ const priB = b.priority ?? 0;
64
+ if (priA !== priB)
65
+ return priB - priA;
66
+ // Same priority: deny wins
67
+ if (a.effect === "deny" && b.effect !== "deny")
68
+ return -1;
69
+ if (b.effect === "deny" && a.effect !== "deny")
70
+ return 1;
71
+ return 0;
72
+ });
73
+ const top = sorted[0];
74
+ return {
75
+ allowed: top.effect === "allow",
76
+ matchedRule: top,
77
+ };
78
+ }
79
+ //# sourceMappingURL=rule.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.core.js","sourceRoot":"","sources":["../../src/rule/rule.core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Rule compiler — indexes rules for fast lookup during authorization.
3
+ *
4
+ * @module rule/ruleCompiler
5
+ */
6
+ import type { PermissionRule, Permission } from "../permissionTypes/index.js";
7
+ /** Compiled rule index for O(1) lookup by resource:action. */
8
+ interface RuleIndex {
9
+ /** Exact matches: "post:update" → rules. */
10
+ readonly exact: ReadonlyMap<string, readonly PermissionRule[]>;
11
+ /** Resource wildcards: "post:*" → rules. */
12
+ readonly resourceWildcard: ReadonlyMap<string, readonly PermissionRule[]>;
13
+ /** Action wildcards: "*:read" → rules. */
14
+ readonly actionWildcard: ReadonlyMap<string, readonly PermissionRule[]>;
15
+ /** Global wildcards: "*:*" → rules. */
16
+ readonly globalWildcard: readonly PermissionRule[];
17
+ }
18
+ /**
19
+ * Compile a set of rules into an optimized index.
20
+ */
21
+ export declare function compileRules(rules: readonly PermissionRule[]): RuleIndex;
22
+ /**
23
+ * Find all rules from the compiled index that match a target permission.
24
+ */
25
+ export declare function findMatchingRules(index: RuleIndex, target: Permission): readonly PermissionRule[];
26
+ export {};
27
+ //# sourceMappingURL=ruleCompiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruleCompiler.d.ts","sourceRoot":"","sources":["../../src/rule/ruleCompiler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9E,8DAA8D;AAC9D,UAAU,SAAS;IACjB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC,CAAC;IAC/D,4CAA4C;IAC5C,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC,CAAC;IAC1E,0CAA0C;IAC1C,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC,CAAC;IACxE,uCAAuC;IACvC,QAAQ,CAAC,cAAc,EAAE,SAAS,cAAc,EAAE,CAAC;CACpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,CAsCxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,UAAU,GACjB,SAAS,cAAc,EAAE,CAoB3B"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Rule compiler — indexes rules for fast lookup during authorization.
3
+ *
4
+ * @module rule/ruleCompiler
5
+ */
6
+ /**
7
+ * Compile a set of rules into an optimized index.
8
+ */
9
+ export function compileRules(rules) {
10
+ const exact = new Map();
11
+ const resourceWildcard = new Map();
12
+ const actionWildcard = new Map();
13
+ const globalWildcard = [];
14
+ for (const rule of rules) {
15
+ const resources = normalizeToArray(rule.resource);
16
+ const actions = normalizeToArray(rule.action);
17
+ for (const resource of resources) {
18
+ for (const action of actions) {
19
+ if (resource === "*" && action === "*") {
20
+ globalWildcard.push(rule);
21
+ }
22
+ else if (resource === "*") {
23
+ const key = action;
24
+ if (!actionWildcard.has(key))
25
+ actionWildcard.set(key, []);
26
+ actionWildcard.get(key).push(rule);
27
+ }
28
+ else if (action === "*") {
29
+ const key = resource;
30
+ if (!resourceWildcard.has(key))
31
+ resourceWildcard.set(key, []);
32
+ resourceWildcard.get(key).push(rule);
33
+ }
34
+ else {
35
+ const key = `${resource}:${action}`;
36
+ if (!exact.has(key))
37
+ exact.set(key, []);
38
+ exact.get(key).push(rule);
39
+ }
40
+ }
41
+ }
42
+ }
43
+ const index = {
44
+ exact,
45
+ resourceWildcard,
46
+ actionWildcard,
47
+ globalWildcard,
48
+ };
49
+ return index;
50
+ }
51
+ /**
52
+ * Find all rules from the compiled index that match a target permission.
53
+ */
54
+ export function findMatchingRules(index, target) {
55
+ const results = [];
56
+ const key = `${target.resource}:${target.action}`;
57
+ // 1. Exact matches
58
+ const exactRules = index.exact.get(key);
59
+ if (exactRules)
60
+ results.push(...exactRules);
61
+ // 2. Resource wildcard: "post:*" matches "post:update"
62
+ const resWildcard = index.resourceWildcard.get(target.resource);
63
+ if (resWildcard)
64
+ results.push(...resWildcard);
65
+ // 3. Action wildcard: "*:read" matches "post:read"
66
+ const actWildcard = index.actionWildcard.get(target.action);
67
+ if (actWildcard)
68
+ results.push(...actWildcard);
69
+ // 4. Global wildcard: "*:*"
70
+ results.push(...index.globalWildcard);
71
+ return results;
72
+ }
73
+ function normalizeToArray(value) {
74
+ return Array.isArray(value) ? [...value] : [value];
75
+ }
76
+ //# sourceMappingURL=ruleCompiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruleCompiler.js","sourceRoot":"","sources":["../../src/rule/ruleCompiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Utility helpers for the permissions package.
3
+ *
4
+ * @module utils
5
+ */
6
+ export { createCacheKey, extractResource, extractAction, buildPermission, createActor, } from "./utils.helper.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,cAAc,EACd,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,GACZ,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Utility helpers for the permissions package.
3
+ *
4
+ * @module utils
5
+ */
6
+ export { createCacheKey, extractResource, extractAction, buildPermission, createActor, } from "./utils.helper.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,cAAc,EACd,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,GACZ,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Utility helpers for the permissions package.
3
+ *
4
+ * @module utils/utils
5
+ */
6
+ import type { PermissionActor } from "../permissionTypes/index.js";
7
+ /**
8
+ * Create a permission check cache key.
9
+ */
10
+ export declare function createCacheKey(actorId: string, permission: string, resourceId?: string): string;
11
+ /**
12
+ * Extract the resource type from a permission string.
13
+ *
14
+ * @example extractResource("post:update") → "post"
15
+ * @example extractResource("billing.invoice:refund") → "billing.invoice"
16
+ */
17
+ export declare function extractResource(permission: string): string;
18
+ /**
19
+ * Extract the action from a permission string.
20
+ *
21
+ * @example extractAction("post:update") → "update"
22
+ */
23
+ export declare function extractAction(permission: string): string;
24
+ /**
25
+ * Build a permission string from resource and action.
26
+ */
27
+ export declare function buildPermission(resource: string, action: string): string;
28
+ /**
29
+ * Create a quick actor object.
30
+ */
31
+ export declare function createActor(id: string, options?: {
32
+ readonly type?: string;
33
+ readonly roles?: readonly string[];
34
+ readonly permissions?: readonly string[];
35
+ readonly deniedPermissions?: readonly string[];
36
+ }): PermissionActor;
37
+ //# sourceMappingURL=utils.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.helper.d.ts","sourceRoot":"","sources":["../../src/utils/utils.helper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAGR;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChD,GACA,eAAe,CAQjB"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Utility helpers for the permissions package.
3
+ *
4
+ * @module utils/utils
5
+ */
6
+ /**
7
+ * Create a permission check cache key.
8
+ */
9
+ export function createCacheKey(actorId, permission, resourceId) {
10
+ const base = `${actorId}:${permission}`;
11
+ return resourceId ? `${base}:${resourceId}` : base;
12
+ }
13
+ /**
14
+ * Extract the resource type from a permission string.
15
+ *
16
+ * @example extractResource("post:update") → "post"
17
+ * @example extractResource("billing.invoice:refund") → "billing.invoice"
18
+ */
19
+ export function extractResource(permission) {
20
+ const lastColon = permission.lastIndexOf(":");
21
+ return lastColon > 0 ? permission.slice(0, lastColon) : permission;
22
+ }
23
+ /**
24
+ * Extract the action from a permission string.
25
+ *
26
+ * @example extractAction("post:update") → "update"
27
+ */
28
+ export function extractAction(permission) {
29
+ const lastColon = permission.lastIndexOf(":");
30
+ return lastColon > 0 ? permission.slice(lastColon + 1) : "";
31
+ }
32
+ /**
33
+ * Build a permission string from resource and action.
34
+ */
35
+ export function buildPermission(resource, action) {
36
+ return `${resource}:${action}`;
37
+ }
38
+ /**
39
+ * Create a quick actor object.
40
+ */
41
+ export function createActor(id, options) {
42
+ return Object.freeze({
43
+ id,
44
+ type: options?.type,
45
+ roles: options?.roles,
46
+ permissions: options?.permissions,
47
+ deniedPermissions: options?.deniedPermissions,
48
+ });
49
+ }
50
+ //# sourceMappingURL=utils.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.helper.js","sourceRoot":"","sources":["../../src/utils/utils.helper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,UAAkB,EAClB,UAAmB;IAEnB,MAAM,IAAI,GAAG,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC;IACxC,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AACrE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,MAAc;IAC9D,OAAO,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,EAAU,EACV,OAKC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE;QACF,IAAI,EAAE,OAAO,EAAE,IAAI;QACnB,KAAK,EAAE,OAAO,EAAE,KAAK;QACrB,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,iBAAiB,EAAE,OAAO,EAAE,iBAAiB;KAC9C,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@zudojs/permissions",
3
+ "version": "0.0.1",
4
+ "description": "Generic authorization engine with RBAC, ABAC, resource authorization, wildcards, role hierarchy, policies, and abilities.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js",
14
+ "default": "./dist/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc -p tsconfig.json",
22
+ "typecheck": "tsc -p tsconfig.json --noEmit",
23
+ "clean": "rm -rf dist",
24
+ "test": "vitest run",
25
+ "test:watch": "vitest"
26
+ },
27
+ "dependencies": {
28
+ "@zudojs/errors": "workspace:*",
29
+ "@zudojs/constants": "workspace:*"
30
+ },
31
+ "peerDependencies": {
32
+ "@zudojs/http": "workspace:*"
33
+ },
34
+ "peerDependenciesMeta": {
35
+ "@zudojs/http": {
36
+ "optional": true
37
+ }
38
+ },
39
+ "engines": {
40
+ "node": ">=24.0.0"
41
+ },
42
+ "devDependencies": {
43
+ "typescript": "^7.0.2",
44
+ "vitest": "^4.1.11"
45
+ },
46
+ "publishConfig": {
47
+ "access": "public"
48
+ },
49
+ "keywords": [
50
+ "zudojs",
51
+ "rbac",
52
+ "abac",
53
+ "authorization",
54
+ "permissions"
55
+ ],
56
+ "homepage": "https://github.com/oyinlola-tech/zudo#readme",
57
+ "repository": {
58
+ "type": "git",
59
+ "url": "https://github.com/oyinlola-tech/zudo"
60
+ }
61
+ }