@venizia/ignis 0.0.9-2 → 0.0.9-21

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 (204) hide show
  1. package/README.md +2 -2
  2. package/dist/base/metadata/persistents.d.ts.map +1 -1
  3. package/dist/base/metadata/persistents.js +6 -0
  4. package/dist/base/metadata/persistents.js.map +1 -1
  5. package/dist/base/middlewares/app-error/app-error.middleware.d.ts +15 -0
  6. package/dist/base/middlewares/app-error/app-error.middleware.d.ts.map +1 -0
  7. package/dist/base/middlewares/app-error/app-error.middleware.js +81 -0
  8. package/dist/base/middlewares/app-error/app-error.middleware.js.map +1 -0
  9. package/dist/base/middlewares/app-error/database.handler.d.ts +20 -0
  10. package/dist/base/middlewares/app-error/database.handler.d.ts.map +1 -0
  11. package/dist/base/middlewares/app-error/database.handler.js +55 -0
  12. package/dist/base/middlewares/app-error/database.handler.js.map +1 -0
  13. package/dist/base/middlewares/app-error/definition.d.ts +59 -0
  14. package/dist/base/middlewares/app-error/definition.d.ts.map +1 -0
  15. package/dist/base/middlewares/app-error/definition.js +98 -0
  16. package/dist/base/middlewares/app-error/definition.js.map +1 -0
  17. package/dist/base/middlewares/app-error/index.d.ts +2 -0
  18. package/dist/base/middlewares/app-error/index.d.ts.map +1 -0
  19. package/dist/{components/auth/authorize/models/abilities → base/middlewares/app-error}/index.js +1 -2
  20. package/dist/base/middlewares/app-error/index.js.map +1 -0
  21. package/dist/base/middlewares/app-error/types.d.ts +18 -0
  22. package/dist/base/middlewares/app-error/types.d.ts.map +1 -0
  23. package/dist/base/middlewares/app-error/types.js +3 -0
  24. package/dist/base/middlewares/app-error/types.js.map +1 -0
  25. package/dist/base/middlewares/app-error/zod.handler.d.ts +28 -0
  26. package/dist/base/middlewares/app-error/zod.handler.d.ts.map +1 -0
  27. package/dist/base/middlewares/app-error/zod.handler.js +64 -0
  28. package/dist/base/middlewares/app-error/zod.handler.js.map +1 -0
  29. package/dist/base/middlewares/emoji-favicon/emoji-favicon.middleware.d.ts.map +1 -0
  30. package/dist/base/middlewares/emoji-favicon/emoji-favicon.middleware.js.map +1 -0
  31. package/dist/base/middlewares/emoji-favicon/index.d.ts +2 -0
  32. package/dist/base/middlewares/emoji-favicon/index.d.ts.map +1 -0
  33. package/dist/base/middlewares/emoji-favicon/index.js +18 -0
  34. package/dist/base/middlewares/emoji-favicon/index.js.map +1 -0
  35. package/dist/base/middlewares/index.d.ts +4 -4
  36. package/dist/base/middlewares/index.d.ts.map +1 -1
  37. package/dist/base/middlewares/index.js +4 -4
  38. package/dist/base/middlewares/index.js.map +1 -1
  39. package/dist/base/middlewares/not-found/index.d.ts +2 -0
  40. package/dist/base/middlewares/not-found/index.d.ts.map +1 -0
  41. package/dist/base/middlewares/not-found/index.js +18 -0
  42. package/dist/base/middlewares/not-found/index.js.map +1 -0
  43. package/dist/base/middlewares/{not-found.middleware.d.ts → not-found/not-found.middleware.d.ts} +0 -1
  44. package/dist/base/middlewares/not-found/not-found.middleware.d.ts.map +1 -0
  45. package/dist/base/middlewares/{not-found.middleware.js → not-found/not-found.middleware.js} +2 -3
  46. package/dist/base/middlewares/{not-found.middleware.js.map → not-found/not-found.middleware.js.map} +1 -1
  47. package/dist/base/middlewares/request-spy/index.d.ts +2 -0
  48. package/dist/base/middlewares/request-spy/index.d.ts.map +1 -0
  49. package/dist/base/middlewares/request-spy/index.js +18 -0
  50. package/dist/base/middlewares/request-spy/index.js.map +1 -0
  51. package/dist/base/middlewares/{request-spy.middleware.d.ts → request-spy/request-spy.middleware.d.ts} +1 -1
  52. package/dist/base/middlewares/request-spy/request-spy.middleware.d.ts.map +1 -0
  53. package/dist/base/middlewares/{request-spy.middleware.js → request-spy/request-spy.middleware.js} +1 -1
  54. package/dist/base/middlewares/request-spy/request-spy.middleware.js.map +1 -0
  55. package/dist/base/models/common/columns.d.ts +22 -0
  56. package/dist/base/models/common/columns.d.ts.map +1 -0
  57. package/dist/base/models/common/columns.js +43 -0
  58. package/dist/base/models/common/columns.js.map +1 -0
  59. package/dist/base/models/common/index.d.ts +1 -0
  60. package/dist/base/models/common/index.d.ts.map +1 -1
  61. package/dist/base/models/common/index.js +1 -0
  62. package/dist/base/models/common/index.js.map +1 -1
  63. package/dist/base/models/enrichers/principal.enricher.d.ts +6 -5
  64. package/dist/base/models/enrichers/principal.enricher.d.ts.map +1 -1
  65. package/dist/base/models/enrichers/principal.enricher.js +8 -3
  66. package/dist/base/models/enrichers/principal.enricher.js.map +1 -1
  67. package/dist/base/models/enrichers/tz.enricher.d.ts +9 -8
  68. package/dist/base/models/enrichers/tz.enricher.d.ts.map +1 -1
  69. package/dist/base/models/enrichers/tz.enricher.js +10 -10
  70. package/dist/base/models/enrichers/tz.enricher.js.map +1 -1
  71. package/dist/base/repositories/common/types.d.ts +6 -2
  72. package/dist/base/repositories/common/types.d.ts.map +1 -1
  73. package/dist/base/repositories/common/types.js +6 -4
  74. package/dist/base/repositories/common/types.js.map +1 -1
  75. package/dist/base/repositories/core/abstract.d.ts +2 -0
  76. package/dist/base/repositories/core/abstract.d.ts.map +1 -1
  77. package/dist/base/repositories/core/persistable.d.ts +6 -1
  78. package/dist/base/repositories/core/persistable.d.ts.map +1 -1
  79. package/dist/base/repositories/core/persistable.js +18 -6
  80. package/dist/base/repositories/core/persistable.js.map +1 -1
  81. package/dist/base/repositories/core/readable.d.ts.map +1 -1
  82. package/dist/base/repositories/core/readable.js +21 -5
  83. package/dist/base/repositories/core/readable.js.map +1 -1
  84. package/dist/base/repositories/core/soft-deletable.d.ts +1 -1
  85. package/dist/base/repositories/core/soft-deletable.d.ts.map +1 -1
  86. package/dist/base/repositories/mixins/default-filter.d.ts +3 -0
  87. package/dist/base/repositories/mixins/default-filter.d.ts.map +1 -1
  88. package/dist/base/repositories/mixins/default-filter.js +11 -0
  89. package/dist/base/repositories/mixins/default-filter.js.map +1 -1
  90. package/dist/base/repositories/operators/filter.d.ts +4 -0
  91. package/dist/base/repositories/operators/filter.d.ts.map +1 -1
  92. package/dist/base/repositories/operators/filter.js +23 -2
  93. package/dist/base/repositories/operators/filter.js.map +1 -1
  94. package/dist/components/auth/authorize/adapters/base-filtered.d.ts +26 -56
  95. package/dist/components/auth/authorize/adapters/base-filtered.d.ts.map +1 -1
  96. package/dist/components/auth/authorize/adapters/base-filtered.js +23 -70
  97. package/dist/components/auth/authorize/adapters/base-filtered.js.map +1 -1
  98. package/dist/components/auth/authorize/adapters/index.d.ts +2 -1
  99. package/dist/components/auth/authorize/adapters/index.d.ts.map +1 -1
  100. package/dist/components/auth/authorize/adapters/index.js +2 -1
  101. package/dist/components/auth/authorize/adapters/index.js.map +1 -1
  102. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.d.ts +138 -0
  103. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.d.ts.map +1 -0
  104. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.js +300 -0
  105. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.js.map +1 -0
  106. package/dist/components/auth/authorize/adapters/types.d.ts +31 -0
  107. package/dist/components/auth/authorize/adapters/types.d.ts.map +1 -0
  108. package/dist/components/auth/authorize/adapters/types.js +3 -0
  109. package/dist/components/auth/authorize/adapters/types.js.map +1 -0
  110. package/dist/components/auth/authorize/common/constants.d.ts +144 -8
  111. package/dist/components/auth/authorize/common/constants.d.ts.map +1 -1
  112. package/dist/components/auth/authorize/common/constants.js +171 -13
  113. package/dist/components/auth/authorize/common/constants.js.map +1 -1
  114. package/dist/components/auth/authorize/common/index.d.ts +4 -0
  115. package/dist/components/auth/authorize/common/index.d.ts.map +1 -1
  116. package/dist/components/auth/authorize/common/index.js +4 -0
  117. package/dist/components/auth/authorize/common/index.js.map +1 -1
  118. package/dist/components/auth/authorize/common/object-match.d.ts +21 -0
  119. package/dist/components/auth/authorize/common/object-match.d.ts.map +1 -0
  120. package/dist/components/auth/authorize/common/object-match.js +33 -0
  121. package/dist/components/auth/authorize/common/object-match.js.map +1 -0
  122. package/dist/components/auth/authorize/common/permission-builder.d.ts +92 -0
  123. package/dist/components/auth/authorize/common/permission-builder.d.ts.map +1 -0
  124. package/dist/components/auth/authorize/common/permission-builder.js +99 -0
  125. package/dist/components/auth/authorize/common/permission-builder.js.map +1 -0
  126. package/dist/components/auth/authorize/common/policy-builder.d.ts +183 -0
  127. package/dist/components/auth/authorize/common/policy-builder.d.ts.map +1 -0
  128. package/dist/components/auth/authorize/common/policy-builder.js +130 -0
  129. package/dist/components/auth/authorize/common/policy-builder.js.map +1 -0
  130. package/dist/components/auth/authorize/common/resolve-request-domain.d.ts +20 -0
  131. package/dist/components/auth/authorize/common/resolve-request-domain.d.ts.map +1 -0
  132. package/dist/components/auth/authorize/common/resolve-request-domain.js +59 -0
  133. package/dist/components/auth/authorize/common/resolve-request-domain.js.map +1 -0
  134. package/dist/components/auth/authorize/common/types.d.ts +70 -23
  135. package/dist/components/auth/authorize/common/types.d.ts.map +1 -1
  136. package/dist/components/auth/authorize/enforcers/casbin.enforcer.d.ts +120 -28
  137. package/dist/components/auth/authorize/enforcers/casbin.enforcer.d.ts.map +1 -1
  138. package/dist/components/auth/authorize/enforcers/casbin.enforcer.js +324 -124
  139. package/dist/components/auth/authorize/enforcers/casbin.enforcer.js.map +1 -1
  140. package/dist/components/auth/authorize/enforcers/enforcer-registry.d.ts +19 -1
  141. package/dist/components/auth/authorize/enforcers/enforcer-registry.d.ts.map +1 -1
  142. package/dist/components/auth/authorize/enforcers/enforcer-registry.js +23 -0
  143. package/dist/components/auth/authorize/enforcers/enforcer-registry.js.map +1 -1
  144. package/dist/components/auth/authorize/enforcers/index.d.ts +1 -0
  145. package/dist/components/auth/authorize/enforcers/index.d.ts.map +1 -1
  146. package/dist/components/auth/authorize/enforcers/index.js +1 -0
  147. package/dist/components/auth/authorize/enforcers/index.js.map +1 -1
  148. package/dist/components/auth/authorize/enforcers/models/index.d.ts +2 -0
  149. package/dist/components/auth/authorize/enforcers/models/index.d.ts.map +1 -0
  150. package/dist/components/auth/authorize/enforcers/models/index.js +18 -0
  151. package/dist/components/auth/authorize/enforcers/models/index.js.map +1 -0
  152. package/dist/components/auth/authorize/enforcers/models/rbac-domain.model.d.ts +32 -0
  153. package/dist/components/auth/authorize/enforcers/models/rbac-domain.model.d.ts.map +1 -0
  154. package/dist/components/auth/authorize/enforcers/models/rbac-domain.model.js +54 -0
  155. package/dist/components/auth/authorize/enforcers/models/rbac-domain.model.js.map +1 -0
  156. package/dist/components/auth/authorize/models/index.d.ts +0 -1
  157. package/dist/components/auth/authorize/models/index.d.ts.map +1 -1
  158. package/dist/components/auth/authorize/models/index.js +0 -1
  159. package/dist/components/auth/authorize/models/index.js.map +1 -1
  160. package/dist/components/auth/authorize/providers/authorization.provider.d.ts.map +1 -1
  161. package/dist/components/auth/authorize/providers/authorization.provider.js +12 -0
  162. package/dist/components/auth/authorize/providers/authorization.provider.js.map +1 -1
  163. package/dist/components/auth/models/entities/permission.model.d.ts +2 -0
  164. package/dist/components/auth/models/entities/permission.model.d.ts.map +1 -1
  165. package/dist/components/auth/models/entities/permission.model.js +4 -0
  166. package/dist/components/auth/models/entities/permission.model.js.map +1 -1
  167. package/dist/components/auth/models/entities/user.model.d.ts +16 -2
  168. package/dist/components/auth/models/entities/user.model.d.ts.map +1 -1
  169. package/dist/components/auth/models/entities/user.model.js +3 -2
  170. package/dist/components/auth/models/entities/user.model.js.map +1 -1
  171. package/dist/components/mail/helpers/executors/internal-queue-executor.helper.d.ts.map +1 -1
  172. package/dist/components/mail/helpers/executors/internal-queue-executor.helper.js +1 -1
  173. package/dist/components/mail/helpers/executors/internal-queue-executor.helper.js.map +1 -1
  174. package/dist/components/static-asset/models/base.model.d.ts +24 -16
  175. package/dist/components/static-asset/models/base.model.d.ts.map +1 -1
  176. package/dist/helpers/inversion/common/types.d.ts +2 -0
  177. package/dist/helpers/inversion/common/types.d.ts.map +1 -1
  178. package/package.json +28 -27
  179. package/dist/base/middlewares/app-error.middleware.d.ts +0 -8
  180. package/dist/base/middlewares/app-error.middleware.d.ts.map +0 -1
  181. package/dist/base/middlewares/app-error.middleware.js +0 -138
  182. package/dist/base/middlewares/app-error.middleware.js.map +0 -1
  183. package/dist/base/middlewares/emoji-favicon.middleware.d.ts.map +0 -1
  184. package/dist/base/middlewares/emoji-favicon.middleware.js.map +0 -1
  185. package/dist/base/middlewares/not-found.middleware.d.ts.map +0 -1
  186. package/dist/base/middlewares/request-spy.middleware.d.ts.map +0 -1
  187. package/dist/base/middlewares/request-spy.middleware.js.map +0 -1
  188. package/dist/components/auth/authorize/adapters/drizzle-casbin.d.ts +0 -40
  189. package/dist/components/auth/authorize/adapters/drizzle-casbin.d.ts.map +0 -1
  190. package/dist/components/auth/authorize/adapters/drizzle-casbin.js +0 -99
  191. package/dist/components/auth/authorize/adapters/drizzle-casbin.js.map +0 -1
  192. package/dist/components/auth/authorize/models/abilities/index.d.ts +0 -3
  193. package/dist/components/auth/authorize/models/abilities/index.d.ts.map +0 -1
  194. package/dist/components/auth/authorize/models/abilities/index.js.map +0 -1
  195. package/dist/components/auth/authorize/models/abilities/string-action.model.d.ts +0 -14
  196. package/dist/components/auth/authorize/models/abilities/string-action.model.d.ts.map +0 -1
  197. package/dist/components/auth/authorize/models/abilities/string-action.model.js +0 -23
  198. package/dist/components/auth/authorize/models/abilities/string-action.model.js.map +0 -1
  199. package/dist/components/auth/authorize/models/abilities/string-resource.model.d.ts +0 -13
  200. package/dist/components/auth/authorize/models/abilities/string-resource.model.d.ts.map +0 -1
  201. package/dist/components/auth/authorize/models/abilities/string-resource.model.js +0 -19
  202. package/dist/components/auth/authorize/models/abilities/string-resource.model.js.map +0 -1
  203. /package/dist/base/middlewares/{emoji-favicon.middleware.d.ts → emoji-favicon/emoji-favicon.middleware.d.ts} +0 -0
  204. /package/dist/base/middlewares/{emoji-favicon.middleware.js → emoji-favicon/emoji-favicon.middleware.js} +0 -0
@@ -18,14 +18,27 @@ const injectors_1 = require("../../../../base/metadata/injectors");
18
18
  const ignis_helpers_1 = require("@venizia/ignis-helpers");
19
19
  const common_1 = require("../common");
20
20
  // Casbin Authorization Enforcer — wraps casbin (optional peer dep)
21
+ //
22
+ // Each request evaluates on its OWN enforcer borrowed from a BasePoolHelper<Enforcer>. This kills the
23
+ // shared-model concurrency race: a borrowed enforcer is clearPolicy'd + loaded with THIS user's lines +
24
+ // buildRoleLinks'd + enforceSync'd atomically inside the same pool.use callback, and the pool destroys
25
+ // the enforcer on any error (fail-closed). Pooled enforcers are created WITHOUT an adapter (no DB load at
26
+ // warmup); the adapter is only used by the isolated throwaway extractor (extractUserLines).
21
27
  let CasbinAuthorizationEnforcer = CasbinAuthorizationEnforcer_1 = class CasbinAuthorizationEnforcer extends ignis_helpers_1.BaseHelper {
22
28
  constructor(options) {
23
29
  super({ scope: CasbinAuthorizationEnforcer_1.name });
24
30
  this.options = options;
25
31
  this.name = CasbinAuthorizationEnforcer_1.name;
26
32
  this.MIN_EXPIRES_IN = 10_000;
27
- this.enforcer = null;
28
- this.inMemoryInvalidationTimer = null;
33
+ this.pool = null;
34
+ this.helper = null;
35
+ // cacheKey → the in-progress line-fetch for that key. Lets concurrent misses for the SAME user
36
+ // share one extraction instead of all hitting the DB (see fetchLinesWithRedisCache).
37
+ this.pendingLineFetches = new Map();
38
+ // Resolved once in configure(): options.normalizePayloadFn / scoped are fixed after configure, so
39
+ // we memoize the payload normalizer instead of rebuilding a closure on every evaluate() (hot path).
40
+ // Stays `null` until configure() runs; resolves to `undefined` when not scoped + no custom fn (3-arg path).
41
+ this.resolvedPayloadFn = null;
29
42
  }
30
43
  // Lifecycle
31
44
  async configure() {
@@ -43,121 +56,249 @@ let CasbinAuthorizationEnforcer = CasbinAuthorizationEnforcer_1 = class CasbinAu
43
56
  message: '[CasbinAuthorizationEnforcer] options.model is required.',
44
57
  });
45
58
  }
46
- const model = this.resolveModel({ casbin, model: this.options.model });
59
+ this.helper = casbin.Helper;
60
+ // Memoize the payload normalizer once — options.{normalizePayloadFn,scoped} are fixed after configure(),
61
+ // so evaluate() reads this field instead of rebuilding a closure per request (hot path).
62
+ this.resolvedPayloadFn = this.options.normalizePayloadFn ?? this.defaultScopedPayloadFn();
47
63
  const { cached } = this.options;
48
- this.enforcer = await this.resolveCasbinEnforcer({
49
- casbin,
50
- model,
51
- adapter: this.options.adapter,
52
- cached,
64
+ if (cached.use) {
65
+ this.validateExpiresIn({ expiresIn: cached.options.expiresIn });
66
+ }
67
+ this.pool = new ignis_helpers_1.BasePoolHelper({
68
+ scope: `${CasbinAuthorizationEnforcer_1.name}.Pool`,
69
+ size: this.options.poolSize ?? 16,
70
+ acquireTimeoutMs: this.options.poolAcquireTimeoutMs ?? 5000,
71
+ create: async () => {
72
+ const model = this.resolveModel({ casbin, model: this.options.model });
73
+ // NO adapter → no DB load at warmup. Policies are loaded per-request in evaluate().
74
+ const enforcer = await casbin.newEnforcer(model);
75
+ await this.registerMatchers({ enforcer, casbin });
76
+ this.assertMatcherCompilesSync({ enforcer });
77
+ return enforcer;
78
+ },
53
79
  });
80
+ await this.pool.warmup();
54
81
  this.logger
55
82
  .for(this.configure.name)
56
- .info('Casbin enforcer initialized (cached: %s, driver: %s)', cached.use, cached.use ? cached.driver : 'none');
83
+ .info('Casbin enforcer pool ready (size: %s, cached: %s)', this.options.poolSize ?? 16, cached.use ? cached.driver : 'none');
57
84
  }
58
85
  destroy() {
59
- if (!this.inMemoryInvalidationTimer) {
60
- return;
86
+ this.pool?.destroy().catch(error => {
87
+ this.logger.for(this.destroy.name).warn('Pool destroy failed: %s', error);
88
+ });
89
+ }
90
+ /**
91
+ * Boot-time smoke test for the matcher. casbin compiles the matcher expression LAZILY — not in
92
+ * newEnforcer() or buildRoleLinks(), but on the first enforce — so a broken matcher would otherwise
93
+ * only surface on the first real request (a 500 for a real user). Running one dummy enforceSync here
94
+ * forces that compile at warmup, turning these into a fail-at-boot for an authz component:
95
+ * - matcher syntax errors in the model,
96
+ * - references to functions that registerMatchers() didn't register (e.g. a renamed g-relation),
97
+ * - request arity mismatch (4-token scoped model vs the 3/4 args we pass).
98
+ * Bonus: enforceSync also throws if a matcher func is async — but every func we register is a sync
99
+ * built-in, so that branch is effectively unreachable; the real value is the compile/wiring check above.
100
+ */
101
+ assertMatcherCompilesSync(opts) {
102
+ try {
103
+ if (this.options.isScoped || this.options.normalizePayloadFn) {
104
+ opts.enforcer.enforceSync('::warmup', '::warmup', '::warmup', '::warmup');
105
+ return;
106
+ }
107
+ opts.enforcer.enforceSync('::warmup', '::warmup', '::warmup');
108
+ }
109
+ catch (error) {
110
+ throw (0, ignis_helpers_1.getError)({
111
+ message: `[CasbinAuthorizationEnforcer] Matcher smoke test failed at warmup — the model matcher did not compile (check matcher syntax, that every referenced function is registered, and the request arity). ${String(error)}`,
112
+ });
61
113
  }
62
- clearInterval(this.inMemoryInvalidationTimer);
63
- this.inMemoryInvalidationTimer = null;
64
114
  }
65
115
  // IAuthorizationEnforcer — public API
66
116
  async buildRules(opts) {
67
117
  const { user } = opts;
68
- if (!this.enforcer) {
118
+ const cached = this.options.cached;
119
+ const lines = cached.use
120
+ ? await this.fetchLinesWithRedisCache({ user, cached })
121
+ : await this.extractUserLines({ user });
122
+ return { user, lines };
123
+ }
124
+ async evaluate(opts) {
125
+ if (!this.pool) {
69
126
  throw (0, ignis_helpers_1.getError)({
70
- message: '[CasbinAuthorizationEnforcer] Enforcer not initialized. Call configure() first.',
127
+ message: '[CasbinAuthorizationEnforcer] Not configured. Call configure() first.',
71
128
  });
72
129
  }
73
- if (!this.enforcer.loadFilteredPolicy) {
130
+ if (!opts.request?.action || !opts.request?.resource) {
74
131
  throw (0, ignis_helpers_1.getError)({
75
- message: '[CasbinAuthorizationEnforcer] Adapter does not support loadFilteredPolicy.',
132
+ message: '[CasbinAuthorizationEnforcer] request.action and request.resource are required.',
76
133
  });
77
134
  }
78
- const cached = this.options.cached;
79
- if (!cached.use) {
80
- await this.loadPoliciesFromAdapter({ user });
81
- return user;
82
- }
83
- switch (cached.driver) {
84
- case common_1.CasbinEnforcerCachedDrivers.IN_MEMORY: {
85
- await this.loadPoliciesFromAdapter({ user });
86
- break;
87
- }
88
- case common_1.CasbinEnforcerCachedDrivers.REDIS: {
89
- await this.loadPoliciesWithRedisCache({ user, cached });
90
- break;
91
- }
92
- default: {
93
- throw (0, ignis_helpers_1.getError)({
94
- message: `[buildRules] Invalid cached.driver | Valids: [${common_1.CasbinEnforcerCachedDrivers.IN_MEMORY}, ${common_1.CasbinEnforcerCachedDrivers.REDIS}]`,
135
+ const { rules, request, context } = opts;
136
+ const { user, lines } = rules;
137
+ return this.pool.use({
138
+ fn: async (enforcer) => {
139
+ // Load THIS user's lines + buildRoleLinks BEFORE any enforceSync on the borrowed enforcer.
140
+ await this.loadPolicyLinesIntoModel({ enforcer, lines });
141
+ const normalizePayloadFn = this.resolvedPayloadFn;
142
+ if (!normalizePayloadFn) {
143
+ const subject = `${user.principalType}_${user.userId}`;
144
+ const isAllowed = this.enforceWithExplain({
145
+ enforcer,
146
+ vals: [subject, String(request.resource), String(request.action)],
147
+ });
148
+ return isAllowed ? common_1.AuthorizationDecisions.ALLOW : common_1.AuthorizationDecisions.DENY;
149
+ }
150
+ const normalized = normalizePayloadFn({
151
+ user,
152
+ action: request.action,
153
+ resource: request.resource,
154
+ context,
95
155
  });
96
- }
156
+ // Domain-aware enforcement: enforceSync(sub, dom, obj, act).
157
+ // In scoped mode the model is 4-token (r = sub, dom, obj, act); a request with no resolvable
158
+ // domain MUST still enforce with a domain — default to SYSTEM_WIDE, never fall through to the
159
+ // 3-arg path (which would shift args against the scoped model and silently misjudge).
160
+ const domain = normalized.domain ??
161
+ request.domain ??
162
+ (this.options.isScoped ? common_1.AuthorizationDomainScopes.SYSTEM_WIDE : undefined);
163
+ const vals = domain
164
+ ? [normalized.subject, domain, normalized.resource, normalized.action]
165
+ : [normalized.subject, normalized.resource, normalized.action];
166
+ const isAllowed = this.enforceWithExplain({ enforcer, vals });
167
+ return isAllowed ? common_1.AuthorizationDecisions.ALLOW : common_1.AuthorizationDecisions.DENY;
168
+ },
169
+ });
170
+ }
171
+ /**
172
+ * Run the matcher synchronously and, on DENY, log WHICH policy rule decided it. enforceExSync returns
173
+ * `[isAllowed, matchedPolicy]` where matchedPolicy is the deciding rule (or `[]` when nothing matched →
174
+ * default-deny). The explain index is computed by the effector regardless of this call, so capturing it
175
+ * carries no meaningful cost over enforceSync — it just surfaces the reason for a denial to the logs.
176
+ */
177
+ enforceWithExplain(opts) {
178
+ const [isAllowed, matchedPolicy] = opts.enforcer.enforceExSync(...opts.vals);
179
+ if (!isAllowed) {
180
+ this.logger
181
+ .for(this.evaluate.name)
182
+ .info('DENY | request: [%s] | matchedPolicy: %s', opts.vals.join(', '), matchedPolicy.length ? matchedPolicy.join(', ') : '<none — default-deny>');
97
183
  }
98
- return user;
184
+ return isAllowed;
99
185
  }
100
- async evaluate(opts) {
101
- if (!this.enforcer) {
186
+ // Cache management — optional IAuthorizationEnforcer members (on-demand)
187
+ async invalidateUserCache(opts) {
188
+ const cached = this.requireRedisCache();
189
+ const cacheKey = await this.resolveCacheKey({ user: opts.user, cached });
190
+ const invalidatedKeys = await cached.options.connection.client.del(cacheKey);
191
+ this.logger
192
+ .for(this.invalidateUserCache.name)
193
+ .info('Invalidated authz cache | user: %s | key: %s | deleted: %s', opts.user.userId, cacheKey, invalidatedKeys);
194
+ return { invalidatedKeys };
195
+ }
196
+ async rebuildUserCache(opts) {
197
+ const cached = this.requireRedisCache();
198
+ // Resolve the key once: drop the stale entry, then re-cache warm. Extraction runs on an ISOLATED
199
+ // throwaway enforcer (not a serving model), so a concurrent request cannot make us cache another
200
+ // user's policies under this key.
201
+ const cacheKey = await this.resolveCacheKey({ user: opts.user, cached });
202
+ await cached.options.connection.client.del(cacheKey);
203
+ const lines = await this.extractUserLines({ user: opts.user });
204
+ await this.writeCachedPolicyLines({ cacheKey, lines, options: cached.options });
205
+ this.logger
206
+ .for(this.rebuildUserCache.name)
207
+ .info('Rebuilt authz cache | user: %s | key: %s | lines: %s', opts.user.userId, cacheKey, lines.length);
208
+ return { cacheKey, lineCount: lines.length };
209
+ }
210
+ /** Compute the user's cache key and reject an empty result — consistent with the read path. */
211
+ async resolveCacheKey(opts) {
212
+ const cacheKey = await opts.cached.options.keyFn({ user: opts.user });
213
+ if (!cacheKey) {
102
214
  throw (0, ignis_helpers_1.getError)({
103
- message: '[CasbinAuthorizationEnforcer] Enforcer not initialized. Call configure() first.',
215
+ statusCode: ignis_helpers_1.HTTP.ResultCodes.RS_4.BadRequest,
216
+ message: '[CasbinAuthorizationEnforcer] keyFn returned an empty cache key.',
104
217
  });
105
218
  }
106
- if (!opts.request?.action || !opts.request?.resource) {
219
+ return cacheKey;
220
+ }
221
+ /** Narrow `options.cached` to the redis variant; cache management is redis-only. */
222
+ requireRedisCache() {
223
+ const { cached } = this.options;
224
+ if (!cached.use) {
107
225
  throw (0, ignis_helpers_1.getError)({
108
- message: '[CasbinAuthorizationEnforcer] request.action and request.resource are required.',
226
+ message: '[CasbinAuthorizationEnforcer] Cache management requires the redis cache driver, but caching is disabled.',
109
227
  });
110
228
  }
111
- const { rules: user, request, context } = opts;
112
- const normalizePayloadFn = this.options.normalizePayloadFn;
113
- let isAllowed;
114
- if (!normalizePayloadFn) {
115
- const subject = `${user.principalType}_${user.userId}`;
116
- isAllowed = this.enforcer.enforceSync(subject, request.resource, request.action);
117
- return isAllowed ? common_1.AuthorizationDecisions.ALLOW : common_1.AuthorizationDecisions.DENY;
118
- }
119
- const normalized = normalizePayloadFn({
120
- user,
121
- action: request.action,
122
- resource: request.resource,
123
- context,
124
- });
125
- // Domain-aware enforcement: enforceSync(sub, dom, obj, act)
126
- if (normalized.domain) {
127
- isAllowed = this.enforcer.enforceSync(normalized.subject, normalized.domain, normalized.resource, normalized.action);
229
+ return cached;
230
+ }
231
+ // Matchers & model resolvers
232
+ async registerMatchers(opts) {
233
+ const { enforcer, casbin } = opts;
234
+ const { domainMatching, isScoped } = this.options;
235
+ if (domainMatching) {
236
+ if (!enforcer.getNamedRoleManager(domainMatching.roleDefinition)) {
237
+ throw (0, ignis_helpers_1.getError)({
238
+ message: `[registerMatchers] Role definition "${domainMatching.roleDefinition}" is not declared in the Casbin model. Declare it under [role_definition] (e.g. \`g = _, _, _\`) before enabling domainMatching.`,
239
+ });
240
+ }
241
+ const matchFn = this.resolveDomainMatchingFn({ casbin, name: domainMatching.fn });
242
+ await enforcer.addNamedDomainMatchingFunc(domainMatching.roleDefinition, matchFn);
128
243
  }
129
- else {
130
- isAllowed = this.enforcer.enforceSync(normalized.subject, normalized.resource, normalized.action);
244
+ if (isScoped) {
245
+ await enforcer.addNamedDomainMatchingFunc(common_1.CasbinRuleVariants.G, casbin.Util.keyMatchFunc);
246
+ await enforcer.addFunction('objectMatch', common_1.objectMatch);
247
+ // objectMatch is the matching func for the resource hierarchy relation (g4 under the
248
+ // request-tuple numbering); reference the constant so it tracks any future renumber.
249
+ await enforcer.addNamedMatchingFunc(common_1.AuthorizationPolicyVariants.RESOURCE_INHERITS.rule, common_1.objectMatch);
131
250
  }
132
- return isAllowed ? common_1.AuthorizationDecisions.ALLOW : common_1.AuthorizationDecisions.DENY;
251
+ await enforcer.buildRoleLinks();
133
252
  }
134
- // Enforcer & model resolvers
135
- async resolveCasbinEnforcer(opts) {
136
- const { casbin, model, adapter, cached } = opts;
137
- if (!cached.use) {
138
- return casbin.newEnforcer(model, adapter);
139
- }
140
- switch (cached.driver) {
141
- case common_1.CasbinEnforcerCachedDrivers.IN_MEMORY: {
142
- this.validateExpiresIn({ expiresIn: cached.options.expiresIn });
143
- const enforcer = await casbin.newCachedEnforcer(model, adapter);
144
- this.inMemoryInvalidationTimer = setInterval(() => {
145
- enforcer.invalidateCache();
146
- this.logger.info('[resolveCasbinEnforcer] Enforcer cache INVALIDATED | name: %s', this.name);
147
- }, cached.options.expiresIn);
148
- return enforcer;
253
+ /** Map a CasbinDomainMatchingFunctions value to casbin's Util.*Func matcher. */
254
+ resolveDomainMatchingFn(opts) {
255
+ // `Util` is casbin's bag of built-in comparison functions. Each `*Func` takes two strings
256
+ // (the request value, the stored/policy value) and returns whether they "match":
257
+ // keyMatchFunc — `*` is the only wildcard. keyMatch("anything","*")=true; exact otherwise.
258
+ // (Best for domains: only treats `*` specially, never splits on `/` or `:`,
259
+ // so it can never accidentally pattern-match a `Merchant_<uuid>`.)
260
+ // keyMatch2Func — adds URL-path `:param` segments (e.g. "/u/:id" matches "/u/1").
261
+ // keyMatch3Func — adds `{param}` segments (e.g. "/u/{id}").
262
+ // keyMatch4Func — `{param}` with repeated-name equality checks.
263
+ // regexMatchFunc treats the stored value as a full regular expression.
264
+ const { Util } = opts.casbin;
265
+ switch (opts.name) {
266
+ case common_1.CasbinDomainMatchingFunctions.KEY_MATCH: {
267
+ return Util.keyMatchFunc;
149
268
  }
150
- case common_1.CasbinEnforcerCachedDrivers.REDIS: {
151
- this.validateExpiresIn({ expiresIn: cached.options.expiresIn });
152
- return casbin.newEnforcer(model, adapter);
269
+ case common_1.CasbinDomainMatchingFunctions.KEY_MATCH_2: {
270
+ return Util.keyMatch2Func;
271
+ }
272
+ case common_1.CasbinDomainMatchingFunctions.KEY_MATCH_3: {
273
+ return Util.keyMatch3Func;
274
+ }
275
+ case common_1.CasbinDomainMatchingFunctions.KEY_MATCH_4: {
276
+ return Util.keyMatch4Func;
277
+ }
278
+ case common_1.CasbinDomainMatchingFunctions.REGEX_MATCH: {
279
+ return Util.regexMatchFunc;
153
280
  }
154
281
  default: {
155
282
  throw (0, ignis_helpers_1.getError)({
156
- message: `[resolveCasbinEnforcer] Invalid cached.driver | Valids: [${common_1.CasbinEnforcerCachedDrivers.IN_MEMORY}, ${common_1.CasbinEnforcerCachedDrivers.REDIS}]`,
283
+ message: `[resolveDomainMatchingFn] Unsupported func: ${opts.name} | Valids: [${[...common_1.CasbinDomainMatchingFunctions.SCHEME_SET].join(', ')}]`,
157
284
  });
158
285
  }
159
286
  }
160
287
  }
288
+ /** Default (sub,dom,obj,act) payload for the scoped model; domain comes from request.domain. */
289
+ defaultScopedPayloadFn() {
290
+ if (!this.options.isScoped) {
291
+ return undefined;
292
+ }
293
+ return (opts) => {
294
+ // No domain here — evaluate() fills it from request.domain (set by the provider).
295
+ return {
296
+ subject: `${opts.user.principalType}_${opts.user.userId}`,
297
+ resource: String(opts.resource),
298
+ action: String(opts.action),
299
+ };
300
+ };
301
+ }
161
302
  resolveModel(opts) {
162
303
  const { casbin, model } = opts;
163
304
  switch (model.driver) {
@@ -183,67 +324,126 @@ let CasbinAuthorizationEnforcer = CasbinAuthorizationEnforcer_1 = class CasbinAu
183
324
  });
184
325
  }
185
326
  // Policy loading internals
186
- async loadPoliciesFromAdapter(opts) {
187
- if (!this.enforcer) {
188
- throw (0, ignis_helpers_1.getError)({
189
- message: '[loadPoliciesFromAdapter] Invalid state of enforcer | Enforcer is not initialized!',
190
- });
327
+ /**
328
+ * Fetch the user's policy lines, collapsing concurrent cache misses for the same key onto a single
329
+ * extraction (via `pendingLineFetches`) instead of letting every request hit the DB at once.
330
+ * Note: best-effort two misses can both get past the cache read before either records its fetch
331
+ * in the map, so both extract once (benign: per-user lines are identical). It collapses the common
332
+ * case; the fast cache-hit path stays OUTSIDE the map to avoid needless contention.
333
+ */
334
+ async fetchLinesWithRedisCache(opts) {
335
+ const { user, cached } = opts;
336
+ const cacheKey = await this.resolveCacheKey({ user, cached });
337
+ const redisClient = cached.options.connection.client;
338
+ // Cache hit — Redis owns expiry (PX on write), so a present key is fresh by definition.
339
+ // A corrupted/legacy entry must NOT 500 the request: discard it and fall through to refetch.
340
+ const raw = await redisClient.get(cacheKey);
341
+ if (raw) {
342
+ const lines = this.parseCachedPolicyLines({ raw, cacheKey });
343
+ if (lines) {
344
+ return lines;
345
+ }
346
+ }
347
+ const existing = this.pendingLineFetches.get(cacheKey);
348
+ if (existing) {
349
+ return existing;
191
350
  }
192
- await this.enforcer.loadFilteredPolicy({
193
- principalType: opts.user.principalType,
194
- principalValue: opts.user.userId,
351
+ // Cache miss (or discarded corrupt entry) — extract from an ISOLATED enforcer so a concurrent
352
+ // load cannot contaminate the cache, persist it, then return the lines for THIS request.
353
+ const task = async () => {
354
+ const lines = await this.extractUserLines({ user });
355
+ await this.writeCachedPolicyLines({ cacheKey, lines, options: cached.options });
356
+ return lines;
357
+ };
358
+ const promise = task().finally(() => {
359
+ this.pendingLineFetches.delete(cacheKey);
195
360
  });
361
+ this.pendingLineFetches.set(cacheKey, promise);
362
+ return promise;
196
363
  }
197
- async loadPoliciesWithRedisCache(opts) {
198
- const logger = this.logger.for(this.loadPoliciesWithRedisCache.name);
199
- const { user, cached: { options }, } = opts;
200
- const cacheKey = await options.keyFn({ user });
201
- if (!cacheKey) {
202
- throw (0, ignis_helpers_1.getError)({
203
- statusCode: ignis_helpers_1.HTTP.ResultCodes.RS_4.BadRequest,
204
- message: '[loadPoliciesWithRedisCache] Invalid cachedKey to start validate user authorization!',
205
- });
364
+ /** Single source of truth for the Redis cache encoding. Used by miss-path and rebuild. */
365
+ async writeCachedPolicyLines(opts) {
366
+ await opts.options.connection.client.set(opts.cacheKey, JSON.stringify(opts.lines), 'PX', opts.options.expiresIn);
367
+ }
368
+ /** Decode cached policy lines; on any corruption, log and return null so the caller refetches. */
369
+ parseCachedPolicyLines(opts) {
370
+ try {
371
+ const parsed = JSON.parse(opts.raw);
372
+ if (!Array.isArray(parsed) || parsed.some(line => typeof line !== 'string')) {
373
+ throw (0, ignis_helpers_1.getError)({
374
+ message: '[CasbinAuthorizationEnforcer] Cached payload is not an array of policy lines.',
375
+ });
376
+ }
377
+ return parsed;
206
378
  }
207
- const redisClient = options.connection.client;
208
- // Cache hit — load lines directly into model
209
- const cachedData = await redisClient.get(cacheKey);
210
- if (cachedData) {
211
- const lines = JSON.parse(cachedData);
212
- await this.loadPolicyLinesIntoModel({ lines });
213
- logger.info('Loaded CACHED Policies into model | user: %s', user.userId);
214
- return;
379
+ catch (error) {
380
+ this.logger
381
+ .for(this.parseCachedPolicyLines.name)
382
+ .warn('Discarding corrupted authz cache entry | key: %s | error: %s', opts.cacheKey, error);
383
+ return null;
215
384
  }
216
- // Cache miss — load from adapter, extract lines, cache in Redis
217
- await this.loadPoliciesFromAdapter({ user });
218
- const lines = await this.extractPolicyLines();
219
- await redisClient.set(cacheKey, JSON.stringify(lines), 'PX', options.expiresIn);
220
- logger.info('Loaded ADAPTER + CACHED Policies into model | user: %s', user.userId);
221
385
  }
222
- async extractPolicyLines() {
223
- if (!this.enforcer) {
386
+ /**
387
+ * Extract a user's policy lines from an ISOLATED throwaway enforcer (its own model + the adapter),
388
+ * never a pooled serving enforcer. This is the core of the anti-poisoning design: concurrent requests
389
+ * on pooled enforcers can't change what we cache for this user. Used by buildRules + rebuild.
390
+ */
391
+ async extractUserLines(opts) {
392
+ const casbin = await import('casbin');
393
+ const model = this.resolveModel({ casbin, model: this.options.model });
394
+ const loader = await casbin.newEnforcer(model, this.options.adapter);
395
+ if (!loader.loadFilteredPolicy) {
224
396
  throw (0, ignis_helpers_1.getError)({
225
- message: '[extractPolicyLines] Invalid state of enforcer | Enforcer is not initialized!',
397
+ message: '[extractUserLines] Adapter does not support loadFilteredPolicy.',
226
398
  });
227
399
  }
228
- const pRules = await this.enforcer.getPolicy();
229
- const ps = pRules.map(r => [common_1.CasbinRuleVariants.P, ...r].join(', '));
230
- const gRules = await this.enforcer.getGroupingPolicy();
231
- const gs = gRules.map(r => [common_1.CasbinRuleVariants.G, ...r].join(', '));
232
- return [...ps, ...gs];
400
+ await loader.loadFilteredPolicy({
401
+ principal: { type: opts.user.principalType, id: opts.user.userId },
402
+ });
403
+ return this.extractLinesFrom(loader);
404
+ }
405
+ /**
406
+ * Serialize ALL policy + grouping rule types of an enforcer's model back into casbin lines.
407
+ * Covers every p-type (p, p2, …) and g-type (g, g2, g3, g4, g5, …) — not just `p`/`g` — so the
408
+ * cached payload is complete for the scoped model (resource/action/domain hierarchies + membership).
409
+ * Reads stored rules (independent of role-link matching funcs), so the loader needs none registered.
410
+ */
411
+ async extractLinesFrom(enforcer) {
412
+ const model = enforcer.getModel();
413
+ const lines = [];
414
+ const policyTypes = model.model.get(common_1.CasbinRuleVariants.P);
415
+ if (policyTypes) {
416
+ for (const ptype of policyTypes.keys()) {
417
+ const rules = await enforcer.getNamedPolicy(ptype);
418
+ for (const rule of rules) {
419
+ lines.push([ptype, ...rule].join(', '));
420
+ }
421
+ }
422
+ }
423
+ const groupingTypes = model.model.get(common_1.CasbinRuleVariants.G);
424
+ if (groupingTypes) {
425
+ for (const gtype of groupingTypes.keys()) {
426
+ const rules = await enforcer.getNamedGroupingPolicy(gtype);
427
+ for (const rule of rules) {
428
+ lines.push([gtype, ...rule].join(', '));
429
+ }
430
+ }
431
+ }
432
+ return lines;
233
433
  }
434
+ /** Atomically reset a borrowed enforcer's model to exactly `lines` + rebuild role links. */
234
435
  async loadPolicyLinesIntoModel(opts) {
235
- if (!this.enforcer) {
436
+ if (!this.helper) {
236
437
  throw (0, ignis_helpers_1.getError)({
237
- message: '[loadPolicyLinesIntoModel] Enforcer not initialized. Call configure() first.',
438
+ message: '[loadPolicyLinesIntoModel] Not configured. Call configure() first.',
238
439
  });
239
440
  }
240
- const { Helper } = await import('casbin');
241
- const model = this.enforcer.getModel();
441
+ const model = opts.enforcer.getModel();
242
442
  model.clearPolicy();
243
443
  for (const line of opts.lines) {
244
- Helper.loadPolicyLine(line, model);
444
+ this.helper.loadPolicyLine(line, model);
245
445
  }
246
- await this.enforcer.buildRoleLinks();
446
+ await opts.enforcer.buildRoleLinks();
247
447
  }
248
448
  };
249
449
  exports.CasbinAuthorizationEnforcer = CasbinAuthorizationEnforcer;
@@ -1 +1 @@
1
- {"version":3,"file":"casbin.enforcer.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/enforcers/casbin.enforcer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"casbin.enforcer.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/enforcers/casbin.enforcer.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { Container } from '../../../../helpers/inversion/container';
2
2
  import { TClass } from '@venizia/ignis-helpers';
3
+ import { IAuthUser } from '../../authenticate';
3
4
  import { AbstractAuthRegistry } from '../../base';
4
- import { AuthorizationEnforcerTypes, IAuthorizationEnforcer, IAuthorizeOptions, ICasbinEnforcerOptions } from '../common';
5
+ import { AuthorizationEnforcerTypes, IAuthorizationEnforcer, IAuthorizationUser, IAuthorizeOptions, ICasbinEnforcerOptions } from '../common';
5
6
  export declare class AuthorizationEnforcerRegistry extends AbstractAuthRegistry<IAuthorizationEnforcer> {
6
7
  private static instance;
7
8
  private configuredEnforcers;
@@ -28,6 +29,23 @@ export declare class AuthorizationEnforcerRegistry extends AbstractAuthRegistry<
28
29
  resolveEnforcer(opts: {
29
30
  name: string;
30
31
  }): Promise<IAuthorizationEnforcer>;
32
+ /** Drop a user's cached policies on the resolved enforcer. Lazy — next request rebuilds. */
33
+ invalidateUserCache(opts: {
34
+ user: IAuthorizationUser;
35
+ enforcerName?: string;
36
+ }): Promise<{
37
+ invalidatedKeys: number;
38
+ }>;
39
+ /** Drop then immediately rebuild + re-cache a user's policies on the resolved enforcer. */
40
+ rebuildUserCache(opts: {
41
+ user: {
42
+ principalType: string;
43
+ } & IAuthUser;
44
+ enforcerName?: string;
45
+ }): Promise<{
46
+ cacheKey: string;
47
+ lineCount: number;
48
+ }>;
31
49
  resolveOptions(): IAuthorizeOptions | undefined;
32
50
  }
33
51
  //# sourceMappingURL=enforcer-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"enforcer-registry.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/enforcers/enforcer-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAY,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAEL,0BAA0B,EAE1B,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,WAAW,CAAC;AAInB,qBAAa,6BAA8B,SAAQ,oBAAoB,CAAC,sBAAsB,CAAC;IAC7F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgC;IAEvD,OAAO,CAAC,mBAAmB,CAAc;;IAOzC,MAAM,CAAC,WAAW;IAQT,KAAK,IAAI,IAAI;IAKtB,SAAS,CAAC,gBAAgB,IAAI,MAAM;IAIpC,QAAQ,CAAC,IAAI,EAAE;QACb,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,EAAE,KAAK,CACZ;YACE,QAAQ,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC;YACzC,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,OAAO,0BAA0B,CAAC,MAAM,CAAC;YAC/C,OAAO,CAAC,EAAE,sBAAsB,CAAC;SAClC,GACD;YACE,QAAQ,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC;YACzC,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,OAAO,0BAA0B,CAAC,MAAM,CAAC;YAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;SACnB,CACJ,CAAC;KACH;IA8BD,YAAY,IAAI,OAAO;IAIvB,sBAAsB,IAAI,MAAM;IAI1B,eAAe,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAW9E,cAAc,IAAI,iBAAiB,GAAG,SAAS;CAahD"}
1
+ {"version":3,"file":"enforcer-registry.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/enforcers/enforcer-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAY,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAEL,0BAA0B,EAE1B,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,WAAW,CAAC;AAInB,qBAAa,6BAA8B,SAAQ,oBAAoB,CAAC,sBAAsB,CAAC;IAC7F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgC;IAEvD,OAAO,CAAC,mBAAmB,CAAc;;IAOzC,MAAM,CAAC,WAAW;IAQT,KAAK,IAAI,IAAI;IAKtB,SAAS,CAAC,gBAAgB,IAAI,MAAM;IAIpC,QAAQ,CAAC,IAAI,EAAE;QACb,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,EAAE,KAAK,CACZ;YACE,QAAQ,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC;YACzC,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,OAAO,0BAA0B,CAAC,MAAM,CAAC;YAC/C,OAAO,CAAC,EAAE,sBAAsB,CAAC;SAClC,GACD;YACE,QAAQ,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC;YACzC,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,OAAO,0BAA0B,CAAC,MAAM,CAAC;YAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;SACnB,CACJ,CAAC;KACH;IA8BD,YAAY,IAAI,OAAO;IAIvB,sBAAsB,IAAI,MAAM;IAI1B,eAAe,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAW9E,4FAA4F;IACtF,mBAAmB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,kBAAkB,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IAcxC,2FAA2F;IACrF,gBAAgB,CAAC,IAAI,EAAE;QAC3B,IAAI,EAAE;YAAE,aAAa,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAC;QAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAapD,cAAc,IAAI,iBAAiB,GAAG,SAAS;CAahD"}