@stratal/framework 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 (247) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +88 -0
  3. package/dist/auth/auth.module.d.ts +37 -0
  4. package/dist/auth/auth.module.d.ts.map +1 -0
  5. package/dist/auth/auth.module.js +74 -0
  6. package/dist/auth/auth.module.js.map +1 -0
  7. package/dist/auth/auth.tokens.d.ts +5 -0
  8. package/dist/auth/auth.tokens.d.ts.map +1 -0
  9. package/dist/auth/auth.tokens.js +5 -0
  10. package/dist/auth/auth.tokens.js.map +1 -0
  11. package/dist/auth/errors/auth-errors.d.ts +74 -0
  12. package/dist/auth/errors/auth-errors.d.ts.map +1 -0
  13. package/dist/auth/errors/auth-errors.js +122 -0
  14. package/dist/auth/errors/auth-errors.js.map +1 -0
  15. package/dist/auth/errors/index.d.ts +5 -0
  16. package/dist/auth/errors/index.d.ts.map +1 -0
  17. package/dist/auth/errors/index.js +5 -0
  18. package/dist/auth/errors/index.js.map +1 -0
  19. package/dist/auth/errors/invalid-token.error.d.ts +5 -0
  20. package/dist/auth/errors/invalid-token.error.d.ts.map +1 -0
  21. package/dist/auth/errors/invalid-token.error.js +7 -0
  22. package/dist/auth/errors/invalid-token.error.js.map +1 -0
  23. package/dist/auth/errors/token-required.error.d.ts +5 -0
  24. package/dist/auth/errors/token-required.error.d.ts.map +1 -0
  25. package/dist/auth/errors/token-required.error.js +7 -0
  26. package/dist/auth/errors/token-required.error.js.map +1 -0
  27. package/dist/auth/errors/verification-failed.error.d.ts +5 -0
  28. package/dist/auth/errors/verification-failed.error.d.ts.map +1 -0
  29. package/dist/auth/errors/verification-failed.error.js +7 -0
  30. package/dist/auth/errors/verification-failed.error.js.map +1 -0
  31. package/dist/auth/index.d.ts +7 -0
  32. package/dist/auth/index.d.ts.map +1 -0
  33. package/dist/auth/index.js +7 -0
  34. package/dist/auth/index.js.map +1 -0
  35. package/dist/auth/middleware/auth-context.middleware.d.ts +12 -0
  36. package/dist/auth/middleware/auth-context.middleware.d.ts.map +1 -0
  37. package/dist/auth/middleware/auth-context.middleware.js +28 -0
  38. package/dist/auth/middleware/auth-context.middleware.js.map +1 -0
  39. package/dist/auth/middleware/index.d.ts +3 -0
  40. package/dist/auth/middleware/index.d.ts.map +1 -0
  41. package/dist/auth/middleware/index.js +3 -0
  42. package/dist/auth/middleware/index.js.map +1 -0
  43. package/dist/auth/middleware/session-verification.middleware.d.ts +18 -0
  44. package/dist/auth/middleware/session-verification.middleware.d.ts.map +1 -0
  45. package/dist/auth/middleware/session-verification.middleware.js +48 -0
  46. package/dist/auth/middleware/session-verification.middleware.js.map +1 -0
  47. package/dist/auth/services/auth.service.d.ts +32 -0
  48. package/dist/auth/services/auth.service.d.ts.map +1 -0
  49. package/dist/auth/services/auth.service.js +62 -0
  50. package/dist/auth/services/auth.service.js.map +1 -0
  51. package/dist/auth/services/index.d.ts +2 -0
  52. package/dist/auth/services/index.d.ts.map +1 -0
  53. package/dist/auth/services/index.js +2 -0
  54. package/dist/auth/services/index.js.map +1 -0
  55. package/dist/auth/utils/auth-helpers.d.ts +11 -0
  56. package/dist/auth/utils/auth-helpers.d.ts.map +1 -0
  57. package/dist/auth/utils/auth-helpers.js +31 -0
  58. package/dist/auth/utils/auth-helpers.js.map +1 -0
  59. package/dist/auth/utils/better-auth-error-handler.d.ts +11 -0
  60. package/dist/auth/utils/better-auth-error-handler.d.ts.map +1 -0
  61. package/dist/auth/utils/better-auth-error-handler.js +95 -0
  62. package/dist/auth/utils/better-auth-error-handler.js.map +1 -0
  63. package/dist/auth/utils/index.d.ts +3 -0
  64. package/dist/auth/utils/index.d.ts.map +1 -0
  65. package/dist/auth/utils/index.js +3 -0
  66. package/dist/auth/utils/index.js.map +1 -0
  67. package/dist/context/auth-context.d.ts +35 -0
  68. package/dist/context/auth-context.d.ts.map +1 -0
  69. package/dist/context/auth-context.js +65 -0
  70. package/dist/context/auth-context.js.map +1 -0
  71. package/dist/context/errors/context-not-initialized.error.d.ts +5 -0
  72. package/dist/context/errors/context-not-initialized.error.d.ts.map +1 -0
  73. package/dist/context/errors/context-not-initialized.error.js +7 -0
  74. package/dist/context/errors/context-not-initialized.error.js.map +1 -0
  75. package/dist/context/errors/index.d.ts +4 -0
  76. package/dist/context/errors/index.d.ts.map +1 -0
  77. package/dist/context/errors/index.js +4 -0
  78. package/dist/context/errors/index.js.map +1 -0
  79. package/dist/context/errors/user-not-authenticated.error.d.ts +5 -0
  80. package/dist/context/errors/user-not-authenticated.error.d.ts.map +1 -0
  81. package/dist/context/errors/user-not-authenticated.error.js +7 -0
  82. package/dist/context/errors/user-not-authenticated.error.js.map +1 -0
  83. package/dist/context/errors/user-not-authorized.error.d.ts +5 -0
  84. package/dist/context/errors/user-not-authorized.error.d.ts.map +1 -0
  85. package/dist/context/errors/user-not-authorized.error.js +7 -0
  86. package/dist/context/errors/user-not-authorized.error.js.map +1 -0
  87. package/dist/context/index.d.ts +3 -0
  88. package/dist/context/index.d.ts.map +1 -0
  89. package/dist/context/index.js +3 -0
  90. package/dist/context/index.js.map +1 -0
  91. package/dist/database/custom-pg-types.d.ts +21 -0
  92. package/dist/database/custom-pg-types.d.ts.map +1 -0
  93. package/dist/database/custom-pg-types.js +41 -0
  94. package/dist/database/custom-pg-types.js.map +1 -0
  95. package/dist/database/database.helpers.d.ts +18 -0
  96. package/dist/database/database.helpers.d.ts.map +1 -0
  97. package/dist/database/database.helpers.js +27 -0
  98. package/dist/database/database.helpers.js.map +1 -0
  99. package/dist/database/database.module.d.ts +21 -0
  100. package/dist/database/database.module.d.ts.map +1 -0
  101. package/dist/database/database.module.js +62 -0
  102. package/dist/database/database.module.js.map +1 -0
  103. package/dist/database/database.service.d.ts +18 -0
  104. package/dist/database/database.service.d.ts.map +1 -0
  105. package/dist/database/database.service.js +2 -0
  106. package/dist/database/database.service.js.map +1 -0
  107. package/dist/database/database.tokens.d.ts +6 -0
  108. package/dist/database/database.tokens.d.ts.map +1 -0
  109. package/dist/database/database.tokens.js +8 -0
  110. package/dist/database/database.tokens.js.map +1 -0
  111. package/dist/database/decorators/inject-db.decorator.d.ts +3 -0
  112. package/dist/database/decorators/inject-db.decorator.d.ts.map +1 -0
  113. package/dist/database/decorators/inject-db.decorator.js +6 -0
  114. package/dist/database/decorators/inject-db.decorator.js.map +1 -0
  115. package/dist/database/errors/database-config.error.d.ts +5 -0
  116. package/dist/database/errors/database-config.error.d.ts.map +1 -0
  117. package/dist/database/errors/database-config.error.js +8 -0
  118. package/dist/database/errors/database-config.error.js.map +1 -0
  119. package/dist/database/errors/database-error.d.ts +14 -0
  120. package/dist/database/errors/database-error.d.ts.map +1 -0
  121. package/dist/database/errors/database-error.js +20 -0
  122. package/dist/database/errors/database-error.js.map +1 -0
  123. package/dist/database/errors/foreign-key-constraint.error.d.ts +14 -0
  124. package/dist/database/errors/foreign-key-constraint.error.d.ts.map +1 -0
  125. package/dist/database/errors/foreign-key-constraint.error.js +19 -0
  126. package/dist/database/errors/foreign-key-constraint.error.js.map +1 -0
  127. package/dist/database/errors/from-zenstack-error.d.ts +22 -0
  128. package/dist/database/errors/from-zenstack-error.d.ts.map +1 -0
  129. package/dist/database/errors/from-zenstack-error.js +114 -0
  130. package/dist/database/errors/from-zenstack-error.js.map +1 -0
  131. package/dist/database/errors/index.d.ts +8 -0
  132. package/dist/database/errors/index.d.ts.map +1 -0
  133. package/dist/database/errors/index.js +8 -0
  134. package/dist/database/errors/index.js.map +1 -0
  135. package/dist/database/errors/invalid-error-code-range.error.d.ts +12 -0
  136. package/dist/database/errors/invalid-error-code-range.error.d.ts.map +1 -0
  137. package/dist/database/errors/invalid-error-code-range.error.js +14 -0
  138. package/dist/database/errors/invalid-error-code-range.error.js.map +1 -0
  139. package/dist/database/errors/record-not-found.error.d.ts +15 -0
  140. package/dist/database/errors/record-not-found.error.d.ts.map +1 -0
  141. package/dist/database/errors/record-not-found.error.js +20 -0
  142. package/dist/database/errors/record-not-found.error.js.map +1 -0
  143. package/dist/database/errors/unique-constraint.error.d.ts +15 -0
  144. package/dist/database/errors/unique-constraint.error.d.ts.map +1 -0
  145. package/dist/database/errors/unique-constraint.error.js +20 -0
  146. package/dist/database/errors/unique-constraint.error.js.map +1 -0
  147. package/dist/database/event-types.d.ts +144 -0
  148. package/dist/database/event-types.d.ts.map +1 -0
  149. package/dist/database/event-types.js +13 -0
  150. package/dist/database/event-types.js.map +1 -0
  151. package/dist/database/index.d.ts +10 -0
  152. package/dist/database/index.d.ts.map +1 -0
  153. package/dist/database/index.js +10 -0
  154. package/dist/database/index.js.map +1 -0
  155. package/dist/database/plugins/error-handler.plugin.d.ts +21 -0
  156. package/dist/database/plugins/error-handler.plugin.d.ts.map +1 -0
  157. package/dist/database/plugins/error-handler.plugin.js +24 -0
  158. package/dist/database/plugins/error-handler.plugin.js.map +1 -0
  159. package/dist/database/plugins/event-emitter.plugin.d.ts +37 -0
  160. package/dist/database/plugins/event-emitter.plugin.d.ts.map +1 -0
  161. package/dist/database/plugins/event-emitter.plugin.js +43 -0
  162. package/dist/database/plugins/event-emitter.plugin.js.map +1 -0
  163. package/dist/database/plugins/index.d.ts +4 -0
  164. package/dist/database/plugins/index.d.ts.map +1 -0
  165. package/dist/database/plugins/index.js +4 -0
  166. package/dist/database/plugins/index.js.map +1 -0
  167. package/dist/database/plugins/schema-switcher.plugin.d.ts +32 -0
  168. package/dist/database/plugins/schema-switcher.plugin.d.ts.map +1 -0
  169. package/dist/database/plugins/schema-switcher.plugin.js +27 -0
  170. package/dist/database/plugins/schema-switcher.plugin.js.map +1 -0
  171. package/dist/database/types.d.ts +51 -0
  172. package/dist/database/types.d.ts.map +1 -0
  173. package/dist/database/types.js +2 -0
  174. package/dist/database/types.js.map +1 -0
  175. package/dist/factory/factory.d.ts +56 -0
  176. package/dist/factory/factory.d.ts.map +1 -0
  177. package/dist/factory/factory.js +86 -0
  178. package/dist/factory/factory.js.map +1 -0
  179. package/dist/factory/index.d.ts +3 -0
  180. package/dist/factory/index.d.ts.map +1 -0
  181. package/dist/factory/index.js +3 -0
  182. package/dist/factory/index.js.map +1 -0
  183. package/dist/factory/sequence.d.ts +38 -0
  184. package/dist/factory/sequence.d.ts.map +1 -0
  185. package/dist/factory/sequence.js +54 -0
  186. package/dist/factory/sequence.js.map +1 -0
  187. package/dist/guards/auth.guard.d.ts +33 -0
  188. package/dist/guards/auth.guard.d.ts.map +1 -0
  189. package/dist/guards/auth.guard.js +99 -0
  190. package/dist/guards/auth.guard.js.map +1 -0
  191. package/dist/guards/index.d.ts +3 -0
  192. package/dist/guards/index.d.ts.map +1 -0
  193. package/dist/guards/index.js +5 -0
  194. package/dist/guards/index.js.map +1 -0
  195. package/dist/index.d.ts +3 -0
  196. package/dist/index.d.ts.map +1 -0
  197. package/dist/index.js +2 -0
  198. package/dist/index.js.map +1 -0
  199. package/dist/rbac/adapters/custom-zenstack-adapter.d.ts +61 -0
  200. package/dist/rbac/adapters/custom-zenstack-adapter.d.ts.map +1 -0
  201. package/dist/rbac/adapters/custom-zenstack-adapter.js +159 -0
  202. package/dist/rbac/adapters/custom-zenstack-adapter.js.map +1 -0
  203. package/dist/rbac/adapters/index.d.ts +2 -0
  204. package/dist/rbac/adapters/index.d.ts.map +1 -0
  205. package/dist/rbac/adapters/index.js +2 -0
  206. package/dist/rbac/adapters/index.js.map +1 -0
  207. package/dist/rbac/constants.d.ts +8 -0
  208. package/dist/rbac/constants.d.ts.map +1 -0
  209. package/dist/rbac/constants.js +8 -0
  210. package/dist/rbac/constants.js.map +1 -0
  211. package/dist/rbac/errors/index.d.ts +2 -0
  212. package/dist/rbac/errors/index.d.ts.map +1 -0
  213. package/dist/rbac/errors/index.js +2 -0
  214. package/dist/rbac/errors/index.js.map +1 -0
  215. package/dist/rbac/errors/insufficient-permissions.error.d.ts +14 -0
  216. package/dist/rbac/errors/insufficient-permissions.error.d.ts.map +1 -0
  217. package/dist/rbac/errors/insufficient-permissions.error.js +19 -0
  218. package/dist/rbac/errors/insufficient-permissions.error.js.map +1 -0
  219. package/dist/rbac/index.d.ts +9 -0
  220. package/dist/rbac/index.d.ts.map +1 -0
  221. package/dist/rbac/index.js +8 -0
  222. package/dist/rbac/index.js.map +1 -0
  223. package/dist/rbac/rbac.module.d.ts +26 -0
  224. package/dist/rbac/rbac.module.d.ts.map +1 -0
  225. package/dist/rbac/rbac.module.js +62 -0
  226. package/dist/rbac/rbac.module.js.map +1 -0
  227. package/dist/rbac/services/casbin-enforcer.service.d.ts +37 -0
  228. package/dist/rbac/services/casbin-enforcer.service.d.ts.map +1 -0
  229. package/dist/rbac/services/casbin-enforcer.service.js +86 -0
  230. package/dist/rbac/services/casbin-enforcer.service.js.map +1 -0
  231. package/dist/rbac/services/casbin.service.d.ts +37 -0
  232. package/dist/rbac/services/casbin.service.d.ts.map +1 -0
  233. package/dist/rbac/services/casbin.service.js +174 -0
  234. package/dist/rbac/services/casbin.service.js.map +1 -0
  235. package/dist/rbac/services/index.d.ts +3 -0
  236. package/dist/rbac/services/index.d.ts.map +1 -0
  237. package/dist/rbac/services/index.js +3 -0
  238. package/dist/rbac/services/index.js.map +1 -0
  239. package/dist/rbac/tokens.d.ts +10 -0
  240. package/dist/rbac/tokens.d.ts.map +1 -0
  241. package/dist/rbac/tokens.js +10 -0
  242. package/dist/rbac/tokens.js.map +1 -0
  243. package/dist/rbac/types.d.ts +12 -0
  244. package/dist/rbac/types.d.ts.map +1 -0
  245. package/dist/rbac/types.js +2 -0
  246. package/dist/rbac/types.js.map +1 -0
  247. package/package.json +118 -0
@@ -0,0 +1,56 @@
1
+ import { type Faker } from '@faker-js/faker';
2
+ import type { DatabaseService } from '../database';
3
+ /**
4
+ * Factory
5
+ *
6
+ * Abstract base class for creating test data.
7
+ * Integrates with Faker.js for data generation.
8
+ *
9
+ * @example Define a factory
10
+ * ```typescript
11
+ * import { Factory } from '@stratal/framework/factory'
12
+ * import type { User, UserCreateInput } from '@your-app/db'
13
+ *
14
+ * export class UserFactory extends Factory<User, UserCreateInput> {
15
+ * protected model = 'user'
16
+ *
17
+ * protected definition(): UserCreateInput {
18
+ * return {
19
+ * email: this.faker.internet.email(),
20
+ * firstName: this.faker.person.firstName(),
21
+ * lastName: this.faker.person.lastName(),
22
+ * emailVerified: true,
23
+ * }
24
+ * }
25
+ *
26
+ * admin() {
27
+ * return this.state(attrs => ({ ...attrs, role: 'admin' }))
28
+ * }
29
+ * }
30
+ * ```
31
+ *
32
+ * @example Usage
33
+ * ```typescript
34
+ * const user = await new UserFactory().create(ctx.db)
35
+ * const admin = await new UserFactory().admin().create(ctx.db)
36
+ * const users = await new UserFactory().count(10).createManyAndReturn(ctx.db)
37
+ * ```
38
+ */
39
+ export declare abstract class Factory<TModel, TCreateInput> {
40
+ protected readonly faker: Faker;
41
+ protected abstract model: string;
42
+ protected abstract definition(): TCreateInput;
43
+ private states;
44
+ private _count;
45
+ state(modifier: (attrs: TCreateInput) => Partial<TCreateInput>): this;
46
+ count(n: number): this;
47
+ make(): TCreateInput;
48
+ makeMany(count?: number): TCreateInput[];
49
+ create(db: DatabaseService): Promise<TModel>;
50
+ createMany(db: DatabaseService, count?: number): Promise<{
51
+ count: number;
52
+ }>;
53
+ createManyAndReturn(db: DatabaseService, count?: number): Promise<TModel[]>;
54
+ protected clone(): this;
55
+ }
56
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/factory/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,8BAAsB,OAAO,CAAC,MAAM,EAAE,YAAY;IAChD,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAQ;IACvC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IAChC,SAAS,CAAC,QAAQ,CAAC,UAAU,IAAI,YAAY;IAE7C,OAAO,CAAC,MAAM,CAAyD;IACvE,OAAO,CAAC,MAAM,CAAI;IAElB,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAMrE,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAMtB,IAAI,IAAI,YAAY;IAQpB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAKlC,MAAM,CAAC,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAM5C,UAAU,CAAC,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAM3E,mBAAmB,CAAC,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAMjF,SAAS,CAAC,KAAK,IAAI,IAAI;CAOxB"}
@@ -0,0 +1,86 @@
1
+ import { faker } from '@faker-js/faker';
2
+ /**
3
+ * Factory
4
+ *
5
+ * Abstract base class for creating test data.
6
+ * Integrates with Faker.js for data generation.
7
+ *
8
+ * @example Define a factory
9
+ * ```typescript
10
+ * import { Factory } from '@stratal/framework/factory'
11
+ * import type { User, UserCreateInput } from '@your-app/db'
12
+ *
13
+ * export class UserFactory extends Factory<User, UserCreateInput> {
14
+ * protected model = 'user'
15
+ *
16
+ * protected definition(): UserCreateInput {
17
+ * return {
18
+ * email: this.faker.internet.email(),
19
+ * firstName: this.faker.person.firstName(),
20
+ * lastName: this.faker.person.lastName(),
21
+ * emailVerified: true,
22
+ * }
23
+ * }
24
+ *
25
+ * admin() {
26
+ * return this.state(attrs => ({ ...attrs, role: 'admin' }))
27
+ * }
28
+ * }
29
+ * ```
30
+ *
31
+ * @example Usage
32
+ * ```typescript
33
+ * const user = await new UserFactory().create(ctx.db)
34
+ * const admin = await new UserFactory().admin().create(ctx.db)
35
+ * const users = await new UserFactory().count(10).createManyAndReturn(ctx.db)
36
+ * ```
37
+ */
38
+ export class Factory {
39
+ faker = faker;
40
+ states = [];
41
+ _count = 1;
42
+ state(modifier) {
43
+ const clone = this.clone();
44
+ clone.states.push(modifier);
45
+ return clone;
46
+ }
47
+ count(n) {
48
+ const clone = this.clone();
49
+ clone._count = n;
50
+ return clone;
51
+ }
52
+ make() {
53
+ let attrs = this.definition();
54
+ for (const modifier of this.states) {
55
+ attrs = { ...attrs, ...modifier(attrs) };
56
+ }
57
+ return attrs;
58
+ }
59
+ makeMany(count) {
60
+ const n = count ?? this._count;
61
+ return Array.from({ length: n }, () => this.make());
62
+ }
63
+ async create(db) {
64
+ const data = this.make();
65
+ const model = db[this.model];
66
+ return model.create({ data });
67
+ }
68
+ async createMany(db, count) {
69
+ const data = this.makeMany(count);
70
+ const model = db[this.model];
71
+ return model.createMany({ data });
72
+ }
73
+ async createManyAndReturn(db, count) {
74
+ const data = this.makeMany(count);
75
+ const model = db[this.model];
76
+ return model.createManyAndReturn({ data });
77
+ }
78
+ clone() {
79
+ const FactoryClass = this.constructor;
80
+ const clone = new FactoryClass();
81
+ clone.states = [...this.states];
82
+ clone._count = this._count;
83
+ return clone;
84
+ }
85
+ }
86
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/factory/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,iBAAiB,CAAA;AAGnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,OAAgB,OAAO;IACR,KAAK,GAAU,KAAK,CAAA;IAI/B,MAAM,GAAuD,EAAE,CAAA;IAC/D,MAAM,GAAG,CAAC,CAAA;IAElB,KAAK,CAAC,QAAwD;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;QAC1B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,CAAS;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;QAC1B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;QAChB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI;QACF,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QAC7B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAA;QAC1C,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,QAAQ,CAAC,KAAc;QACrB,MAAM,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,CAAA;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAmB;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QACxB,MAAM,KAAK,GAAI,EAA+F,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC1H,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAmB,EAAE,KAAc;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACjC,MAAM,KAAK,GAAI,EAAgH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC3I,OAAO,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,EAAmB,EAAE,KAAc;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACjC,MAAM,KAAK,GAAI,EAAgH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC3I,OAAO,KAAK,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,CAAC;IAES,KAAK;QACb,MAAM,YAAY,GAAG,IAAI,CAAC,WAA6B,CAAA;QACvD,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAA;QAChC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;QAC/B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export { Factory } from './factory';
2
+ export { Sequence } from './sequence';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { Factory } from './factory';
2
+ export { Sequence } from './sequence';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Sequence
3
+ *
4
+ * Auto-incrementing sequence generator for creating unique values.
5
+ *
6
+ * @example Basic usage
7
+ * ```typescript
8
+ * const emailSeq = new Sequence((n) => `user${n}@example.com`)
9
+ *
10
+ * emailSeq.next() // 'user1@example.com'
11
+ * emailSeq.next() // 'user2@example.com'
12
+ * emailSeq.reset()
13
+ * emailSeq.next() // 'user1@example.com'
14
+ * ```
15
+ *
16
+ * @example With factory
17
+ * ```typescript
18
+ * const orderSeq = new Sequence((n) => `ORD-${String(n).padStart(6, '0')}`)
19
+ *
20
+ * export class OrderFactory extends Factory<Order, OrderCreateInput> {
21
+ * protected definition() {
22
+ * return {
23
+ * orderNumber: orderSeq.next(),
24
+ * // ...
25
+ * }
26
+ * }
27
+ * }
28
+ * ```
29
+ */
30
+ export declare class Sequence<T = number> {
31
+ private readonly generator?;
32
+ private current;
33
+ constructor(generator?: ((n: number) => T) | undefined);
34
+ next(): T;
35
+ peek(): T;
36
+ reset(): void;
37
+ }
38
+ //# sourceMappingURL=sequence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../../src/factory/sequence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,QAAQ,CAAC,CAAC,GAAG,MAAM;IAGlB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAFvC,OAAO,CAAC,OAAO,CAAI;gBAEU,SAAS,CAAC,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,aAAA;IAEzD,IAAI,IAAI,CAAC;IAQT,IAAI,IAAI,CAAC;IAQT,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Sequence
3
+ *
4
+ * Auto-incrementing sequence generator for creating unique values.
5
+ *
6
+ * @example Basic usage
7
+ * ```typescript
8
+ * const emailSeq = new Sequence((n) => `user${n}@example.com`)
9
+ *
10
+ * emailSeq.next() // 'user1@example.com'
11
+ * emailSeq.next() // 'user2@example.com'
12
+ * emailSeq.reset()
13
+ * emailSeq.next() // 'user1@example.com'
14
+ * ```
15
+ *
16
+ * @example With factory
17
+ * ```typescript
18
+ * const orderSeq = new Sequence((n) => `ORD-${String(n).padStart(6, '0')}`)
19
+ *
20
+ * export class OrderFactory extends Factory<Order, OrderCreateInput> {
21
+ * protected definition() {
22
+ * return {
23
+ * orderNumber: orderSeq.next(),
24
+ * // ...
25
+ * }
26
+ * }
27
+ * }
28
+ * ```
29
+ */
30
+ export class Sequence {
31
+ generator;
32
+ current = 0;
33
+ constructor(generator) {
34
+ this.generator = generator;
35
+ }
36
+ next() {
37
+ this.current++;
38
+ if (this.generator) {
39
+ return this.generator(this.current);
40
+ }
41
+ return this.current;
42
+ }
43
+ peek() {
44
+ const value = this.current + 1;
45
+ if (this.generator) {
46
+ return this.generator(value);
47
+ }
48
+ return value;
49
+ }
50
+ reset() {
51
+ this.current = 0;
52
+ }
53
+ }
54
+ //# sourceMappingURL=sequence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../../src/factory/sequence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,OAAO,QAAQ;IAGU;IAFrB,OAAO,GAAG,CAAC,CAAA;IAEnB,YAA6B,SAA4B;QAA5B,cAAS,GAAT,SAAS,CAAmB;IAAG,CAAC;IAE7D,IAAI;QACF,IAAI,CAAC,OAAO,EAAE,CAAA;QACd,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACrC,CAAC;QACD,OAAO,IAAI,CAAC,OAAY,CAAA;IAC1B,CAAC;IAED,IAAI;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;QAC9B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC9B,CAAC;QACD,OAAO,KAAU,CAAA;IACnB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;IAClB,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ import type { AuthGuardOptions, GuardClass } from 'stratal/guards';
2
+ /**
3
+ * AuthGuard Factory
4
+ *
5
+ * Creates a guard class that enforces authentication and optional authorization.
6
+ *
7
+ * **Authentication (no scopes):**
8
+ * - Checks if user is authenticated via AuthContext.isAuthenticated()
9
+ * - Throws UserNotAuthenticatedError (401) if not authenticated
10
+ *
11
+ * **Authorization (with scopes):**
12
+ * - First verifies authentication
13
+ * - Then checks permissions via CasbinService
14
+ * - Throws InsufficientPermissionsError (403) if unauthorized
15
+ *
16
+ * @param options - Configuration options
17
+ * @param options.scopes - Required permissions for authorization
18
+ * @returns Guard class for use with @UseGuards decorator
19
+ *
20
+ * @example Authentication only
21
+ * ```typescript
22
+ * @UseGuards(AuthGuard())
23
+ * export class ProfileController { }
24
+ * ```
25
+ *
26
+ * @example Authentication with permissions
27
+ * ```typescript
28
+ * @UseGuards(AuthGuard({ scopes: ['students:read'] }))
29
+ * export class StudentsController { }
30
+ * ```
31
+ */
32
+ export declare function AuthGuard(options?: AuthGuardOptions): GuardClass;
33
+ //# sourceMappingURL=auth.guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.guard.d.ts","sourceRoot":"","sources":["../../src/guards/auth.guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAe,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAU/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAsDhE"}
@@ -0,0 +1,99 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { DI_TOKENS, Transient } from 'stratal/di';
14
+ import { LOGGER_TOKENS } from 'stratal/logger';
15
+ import { inject } from 'tsyringe';
16
+ import { UserNotAuthenticatedError } from '../context/errors';
17
+ import { InsufficientPermissionsError } from '../rbac/errors/insufficient-permissions.error';
18
+ import { RBAC_TOKENS } from '../rbac/tokens';
19
+ /**
20
+ * AuthGuard Factory
21
+ *
22
+ * Creates a guard class that enforces authentication and optional authorization.
23
+ *
24
+ * **Authentication (no scopes):**
25
+ * - Checks if user is authenticated via AuthContext.isAuthenticated()
26
+ * - Throws UserNotAuthenticatedError (401) if not authenticated
27
+ *
28
+ * **Authorization (with scopes):**
29
+ * - First verifies authentication
30
+ * - Then checks permissions via CasbinService
31
+ * - Throws InsufficientPermissionsError (403) if unauthorized
32
+ *
33
+ * @param options - Configuration options
34
+ * @param options.scopes - Required permissions for authorization
35
+ * @returns Guard class for use with @UseGuards decorator
36
+ *
37
+ * @example Authentication only
38
+ * ```typescript
39
+ * @UseGuards(AuthGuard())
40
+ * export class ProfileController { }
41
+ * ```
42
+ *
43
+ * @example Authentication with permissions
44
+ * ```typescript
45
+ * @UseGuards(AuthGuard({ scopes: ['students:read'] }))
46
+ * export class StudentsController { }
47
+ * ```
48
+ */
49
+ export function AuthGuard(options) {
50
+ const scopes = options?.scopes;
51
+ let ConfiguredAuthGuard = class ConfiguredAuthGuard {
52
+ authContext;
53
+ logger;
54
+ casbinService;
55
+ constructor(authContext, logger, casbinService) {
56
+ this.authContext = authContext;
57
+ this.logger = logger;
58
+ this.casbinService = casbinService;
59
+ }
60
+ async canActivate(context) {
61
+ if (!this.authContext.isAuthenticated()) {
62
+ this.logger.debug('Auth guard: User not authenticated');
63
+ throw new UserNotAuthenticatedError();
64
+ }
65
+ if (!scopes || scopes.length === 0) {
66
+ this.logger.debug('Auth guard: Authentication passed (no scopes required)');
67
+ return true;
68
+ }
69
+ const userId = this.authContext.getUserId();
70
+ if (!userId) {
71
+ this.logger.debug('Auth guard: No user ID in context');
72
+ throw new InsufficientPermissionsError(scopes, undefined);
73
+ }
74
+ const httpMethod = context.c.req.method.toLowerCase();
75
+ if (this.casbinService) {
76
+ const hasPermission = await this.casbinService.hasAnyPermission(userId, scopes, httpMethod);
77
+ this.logger.debug('Auth guard: Authorization check', {
78
+ userId,
79
+ scopes,
80
+ httpMethod,
81
+ hasPermission,
82
+ });
83
+ if (!hasPermission) {
84
+ throw new InsufficientPermissionsError(scopes, userId);
85
+ }
86
+ }
87
+ return true;
88
+ }
89
+ };
90
+ ConfiguredAuthGuard = __decorate([
91
+ Transient(),
92
+ __param(0, inject(DI_TOKENS.AuthContext)),
93
+ __param(1, inject(LOGGER_TOKENS.LoggerService)),
94
+ __param(2, inject(RBAC_TOKENS.CasbinService, { isOptional: true })),
95
+ __metadata("design:paramtypes", [Function, Function, Function])
96
+ ], ConfiguredAuthGuard);
97
+ return ConfiguredAuthGuard;
98
+ }
99
+ //# sourceMappingURL=auth.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.guard.js","sourceRoot":"","sources":["../../src/guards/auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAsB,MAAM,gBAAgB,CAAA;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAA;AAE5F,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,SAAS,CAAC,OAA0B;IAClD,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAA;IAE9B,IACM,mBAAmB,GADzB,MACM,mBAAmB;QAE2B;QACM;QACoB;QAH5E,YACkD,WAAwB,EAClB,MAAqB,EACD,aAA6B;YAFvD,gBAAW,GAAX,WAAW,CAAa;YAClB,WAAM,GAAN,MAAM,CAAe;YACD,kBAAa,GAAb,aAAa,CAAgB;QACrG,CAAC;QAEL,KAAK,CAAC,WAAW,CAAC,OAAsB;YACtC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,CAAC;gBACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;gBACvD,MAAM,IAAI,yBAAyB,EAAE,CAAA;YACvC,CAAC;YAED,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;gBAC3E,OAAO,IAAI,CAAA;YACb,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAA;YAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;gBACtD,MAAM,IAAI,4BAA4B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAC3D,CAAC;YAED,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;YAErD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAC7D,MAAM,EACN,MAAM,EACN,UAAU,CACX,CAAA;gBAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE;oBACnD,MAAM;oBACN,MAAM;oBACN,UAAU;oBACV,aAAa;iBACd,CAAC,CAAA;gBAEF,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,MAAM,IAAI,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;gBACxD,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAA;IA/CK,mBAAmB;QADxB,SAAS,EAAE;QAGP,WAAA,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QAC7B,WAAA,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA;QACnC,WAAA,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;;OAJtD,mBAAmB,CA+CxB;IAED,OAAO,mBAAmB,CAAA;AAC5B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { UseGuards, getControllerGuards, getMethodGuards, GuardExecutionService, GUARD_METADATA_KEY, type CanActivate, type Guard, type GuardClass, type GuardMetadata, type AuthGuardOptions, } from 'stratal/guards';
2
+ export { AuthGuard } from './auth.guard';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,5 @@
1
+ // Re-export guard utilities from stratal core
2
+ export { UseGuards, getControllerGuards, getMethodGuards, GuardExecutionService, GUARD_METADATA_KEY, } from 'stratal/guards';
3
+ // Export framework-specific guards
4
+ export { AuthGuard } from './auth.guard';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,GAMnB,MAAM,gBAAgB,CAAA;AAEvB,mCAAmC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,3 @@
1
+ export type { DatabaseSchemaRegistry, DefaultDatabaseConnection, ConnectionName, DefaultConnectionName, InferConnectionSchema, InferDatabaseSchema } from './database/types';
2
+ export type { CustomEventRegistry, EventName } from 'stratal/events';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,cAAc,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC5K,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ import type { Adapter, Model } from 'casbin';
2
+ /**
3
+ * Minimal interface for the database client used by the adapter.
4
+ * The actual DatabaseService extends ZenStackClient which provides these methods
5
+ * when the schema includes a `casbinRule` model.
6
+ */
7
+ export interface CasbinDbClient {
8
+ casbinRule: {
9
+ findMany(args?: {
10
+ where?: Record<string, unknown>;
11
+ }): Promise<unknown[]>;
12
+ create(args: {
13
+ data: CasbinRuleCreateInput;
14
+ }): Promise<unknown>;
15
+ createMany(args: {
16
+ data: CasbinRuleCreateInput[];
17
+ }): Promise<unknown>;
18
+ deleteMany(args: {
19
+ where: CasbinRuleCreateInput;
20
+ }): Promise<{
21
+ count: number;
22
+ }>;
23
+ };
24
+ $executeRawUnsafe(query: string, ...values: unknown[]): Promise<unknown>;
25
+ }
26
+ interface CasbinRuleCreateInput {
27
+ ptype: string;
28
+ v0?: string | null;
29
+ v1?: string | null;
30
+ v2?: string | null;
31
+ v3?: string | null;
32
+ v4?: string | null;
33
+ v5?: string | null;
34
+ }
35
+ /**
36
+ * Custom ZenStack adapter for Casbin that works with Cloudflare Workers.
37
+ *
38
+ * Based on the original casbin-prisma-adapter but modified to:
39
+ * - Work with ZenStack v3 ORM clients
40
+ * - Avoid bundling errors in Cloudflare Workers
41
+ * - Accept pre-connected ZenStack clients (request-scoped)
42
+ */
43
+ export declare class CustomZenStackAdapter implements Adapter {
44
+ #private;
45
+ filtered: boolean;
46
+ isFiltered(): boolean;
47
+ enableFiltered(enabled: boolean): void;
48
+ constructor(db: CasbinDbClient);
49
+ loadPolicy(model: Model): Promise<void>;
50
+ loadFilteredPolicy(model: Model, filter: Record<string, string[][]>): Promise<void>;
51
+ savePolicy(model: Model): Promise<boolean>;
52
+ addPolicy(_sec: string, ptype: string, rule: string[]): Promise<void>;
53
+ addPolicies(_sec: string, ptype: string, rules: string[][]): Promise<void>;
54
+ removePolicy(_sec: string, ptype: string, rule: string[]): Promise<void>;
55
+ removePolicies(_sec: string, ptype: string, rules: string[][]): Promise<void>;
56
+ removeFilteredPolicy(_sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise<void>;
57
+ close(): Promise<void>;
58
+ static newAdapter(db: CasbinDbClient): CustomZenStackAdapter;
59
+ }
60
+ export {};
61
+ //# sourceMappingURL=custom-zenstack-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-zenstack-adapter.d.ts","sourceRoot":"","sources":["../../../src/rbac/adapters/custom-zenstack-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAI5C;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE;QACV,QAAQ,CAAC,IAAI,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;QACxE,MAAM,CAAC,IAAI,EAAE;YAAE,IAAI,EAAE,qBAAqB,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/D,UAAU,CAAC,IAAI,EAAE;YAAE,IAAI,EAAE,qBAAqB,EAAE,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QACrE,UAAU,CAAC,IAAI,EAAE;YAAE,KAAK,EAAE,qBAAqB,CAAA;SAAE,GAAG,OAAO,CAAC;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAC/E,CAAA;IACD,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACzE;AAED,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACnB;AAaD;;;;;;;GAOG;AACH,qBAAa,qBAAsB,YAAW,OAAO;;IAGnD,QAAQ,UAAQ;IAET,UAAU,IAAI,OAAO;IAIrB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;gBAIjC,EAAE,EAAE,cAAc;IAIxB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvC,kBAAkB,CACtB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA0BV,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB1C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE,WAAW,CACf,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EAAE,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC;IAWV,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,IAAI,CAAC;IAKV,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EAAE,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC;IAWV,oBAAoB,CACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,GAAG,WAAW,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;IA0BV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,cAAc,GAAG,qBAAqB;CA0C7D"}