@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,3 @@
1
+ export * from './auth-context.middleware';
2
+ export * from './session-verification.middleware';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/middleware/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,mCAAmC,CAAA"}
@@ -0,0 +1,18 @@
1
+ import type { Middleware, RouterContext } from 'stratal/router';
2
+ import type { AuthService } from '../services/auth.service';
3
+ /**
4
+ * Session Verification Middleware
5
+ *
6
+ * Verifies user session via Better Auth and populates AuthContext with userId.
7
+ *
8
+ * **Responsibilities:**
9
+ * - Calls Better Auth's getSession() API
10
+ * - Populates AuthContext with userId if session is valid
11
+ * - Continues request chain regardless of session status
12
+ */
13
+ export declare class SessionVerificationMiddleware implements Middleware {
14
+ private readonly authService;
15
+ constructor(authService: AuthService);
16
+ handle(ctx: RouterContext, next: () => Promise<void>): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=session-verification.middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-verification.middleware.d.ts","sourceRoot":"","sources":["../../../src/auth/middleware/session-verification.middleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAG/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAE3D;;;;;;;;;GASG;AACH,qBACa,6BAA8B,YAAW,UAAU;IAG5D,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAGrC,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAY3E"}
@@ -0,0 +1,48 @@
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 { inject } from 'tsyringe';
14
+ import { Transient, DI_TOKENS } from 'stratal/di';
15
+ import { AUTH_SERVICE } from '../auth.tokens';
16
+ /**
17
+ * Session Verification Middleware
18
+ *
19
+ * Verifies user session via Better Auth and populates AuthContext with userId.
20
+ *
21
+ * **Responsibilities:**
22
+ * - Calls Better Auth's getSession() API
23
+ * - Populates AuthContext with userId if session is valid
24
+ * - Continues request chain regardless of session status
25
+ */
26
+ let SessionVerificationMiddleware = class SessionVerificationMiddleware {
27
+ authService;
28
+ constructor(authService) {
29
+ this.authService = authService;
30
+ }
31
+ async handle(ctx, next) {
32
+ const session = await this.authService.auth.api.getSession({
33
+ headers: ctx.c.req.raw.headers
34
+ });
35
+ if (session) {
36
+ const authContext = ctx.getContainer().resolve(DI_TOKENS.AuthContext);
37
+ authContext.setAuthContext({ userId: session.user.id });
38
+ }
39
+ await next();
40
+ }
41
+ };
42
+ SessionVerificationMiddleware = __decorate([
43
+ Transient(),
44
+ __param(0, inject(AUTH_SERVICE)),
45
+ __metadata("design:paramtypes", [Function])
46
+ ], SessionVerificationMiddleware);
47
+ export { SessionVerificationMiddleware };
48
+ //# sourceMappingURL=session-verification.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-verification.middleware.js","sourceRoot":"","sources":["../../../src/auth/middleware/session-verification.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C;;;;;;;;;GASG;AAEI,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IAGrB;IAFnB,YAEmB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IACxC,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,GAAkB,EAAE,IAAyB;QACxD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YACzD,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO;SAC/B,CAAC,CAAA;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,OAAO,CAAc,SAAS,CAAC,WAAW,CAAC,CAAA;YAClF,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QACzD,CAAC;QAED,MAAM,IAAI,EAAE,CAAA;IACd,CAAC;CACF,CAAA;AAlBY,6BAA6B;IADzC,SAAS,EAAE;IAGP,WAAA,MAAM,CAAC,YAAY,CAAC,CAAA;;GAFZ,6BAA6B,CAkBzC"}
@@ -0,0 +1,32 @@
1
+ import type { Auth, BetterAuthOptions } from 'better-auth';
2
+ /**
3
+ * AuthService
4
+ *
5
+ * Base authentication service using Better Auth.
6
+ * Configured via AuthModule.withRootAsync() from the application layer.
7
+ *
8
+ * **Extensibility:**
9
+ * Extend this class in application layer to add custom methods.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * @Transient(AUTH_SERVICE)
14
+ * export class AppAuthService extends AuthService<AuthOptions> {
15
+ * async signInMagicLink(email: string) {
16
+ * return wrapBetterAuth(async () => {
17
+ * return this.auth.api.signInMagicLink({ body: { email }, headers: new Headers() })
18
+ * })
19
+ * }
20
+ * }
21
+ * ```
22
+ */
23
+ export declare class AuthService<TOptions extends BetterAuthOptions = BetterAuthOptions> {
24
+ protected readonly options: TOptions;
25
+ private authInstance;
26
+ constructor(options: TOptions);
27
+ /**
28
+ * Get the Better Auth instance
29
+ */
30
+ get auth(): Auth<TOptions>;
31
+ }
32
+ //# sourceMappingURL=auth.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../../src/auth/services/auth.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAO1D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBACa,WAAW,CAAC,QAAQ,SAAS,iBAAiB,GAAG,iBAAiB;IAIrD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ;IAH5D,OAAO,CAAC,YAAY,CAAgB;gBAGO,OAAO,EAAE,QAAQ;IAQ5D;;OAEG;IACH,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAEzB;CACF"}
@@ -0,0 +1,62 @@
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 { betterAuth } from 'better-auth';
14
+ import { inject } from 'tsyringe';
15
+ import { Transient } from 'stratal/di';
16
+ import { AUTH_OPTIONS, AUTH_SERVICE } from '../auth.tokens';
17
+ import { getErrorHandlerConfig } from '../utils';
18
+ /**
19
+ * AuthService
20
+ *
21
+ * Base authentication service using Better Auth.
22
+ * Configured via AuthModule.withRootAsync() from the application layer.
23
+ *
24
+ * **Extensibility:**
25
+ * Extend this class in application layer to add custom methods.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * @Transient(AUTH_SERVICE)
30
+ * export class AppAuthService extends AuthService<AuthOptions> {
31
+ * async signInMagicLink(email: string) {
32
+ * return wrapBetterAuth(async () => {
33
+ * return this.auth.api.signInMagicLink({ body: { email }, headers: new Headers() })
34
+ * })
35
+ * }
36
+ * }
37
+ * ```
38
+ */
39
+ let AuthService = class AuthService {
40
+ options;
41
+ authInstance;
42
+ constructor(options) {
43
+ this.options = options;
44
+ this.authInstance = betterAuth({
45
+ ...this.options,
46
+ onAPIError: getErrorHandlerConfig()
47
+ });
48
+ }
49
+ /**
50
+ * Get the Better Auth instance
51
+ */
52
+ get auth() {
53
+ return this.authInstance;
54
+ }
55
+ };
56
+ AuthService = __decorate([
57
+ Transient(AUTH_SERVICE),
58
+ __param(0, inject(AUTH_OPTIONS)),
59
+ __metadata("design:paramtypes", [Object])
60
+ ], AuthService);
61
+ export { AuthService };
62
+ //# sourceMappingURL=auth.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../src/auth/services/auth.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;GAoBG;AAEI,IAAM,WAAW,GAAjB,MAAM,WAAW;IAIqB;IAHnC,YAAY,CAAgB;IAEpC,YAC2C,OAAiB;QAAjB,YAAO,GAAP,OAAO,CAAU;QAE1D,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;YAC7B,GAAG,IAAI,CAAC,OAAO;YACf,UAAU,EAAE,qBAAqB,EAAE;SACpC,CAAmB,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;CACF,CAAA;AAlBY,WAAW;IADvB,SAAS,CAAC,YAAY,CAAC;IAKnB,WAAA,MAAM,CAAC,YAAY,CAAC,CAAA;;GAJZ,WAAW,CAkBvB"}
@@ -0,0 +1,2 @@
1
+ export * from './auth.service';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './auth.service';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { BetterAuthOptions } from 'better-auth';
2
+ /**
3
+ * Get shared Better Auth error handler configuration.
4
+ * Use this in Better Auth config's onAPIError option.
5
+ */
6
+ export declare function getErrorHandlerConfig(): BetterAuthOptions['onAPIError'];
7
+ /**
8
+ * Wrap a Better Auth function in a try/catch block and map errors to ApplicationError.
9
+ */
10
+ export declare const wrapBetterAuth: <T>(fn: () => Promise<T>) => Promise<T>;
11
+ //# sourceMappingURL=auth-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-helpers.d.ts","sourceRoot":"","sources":["../../../src/auth/utils/auth-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGpD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAUvE;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,GAAU,CAAC,EAAE,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CASvE,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { isAPIError, mapBetterAuthError } from './better-auth-error-handler';
2
+ /**
3
+ * Get shared Better Auth error handler configuration.
4
+ * Use this in Better Auth config's onAPIError option.
5
+ */
6
+ export function getErrorHandlerConfig() {
7
+ return {
8
+ throw: false,
9
+ onError: (error) => {
10
+ if (isAPIError(error)) {
11
+ throw mapBetterAuthError(error);
12
+ }
13
+ throw error;
14
+ },
15
+ };
16
+ }
17
+ /**
18
+ * Wrap a Better Auth function in a try/catch block and map errors to ApplicationError.
19
+ */
20
+ export const wrapBetterAuth = async (fn) => {
21
+ try {
22
+ return await fn();
23
+ }
24
+ catch (error) {
25
+ if (isAPIError(error)) {
26
+ throw mapBetterAuthError(error);
27
+ }
28
+ throw error;
29
+ }
30
+ };
31
+ //# sourceMappingURL=auth-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-helpers.js","sourceRoot":"","sources":["../../../src/auth/utils/auth-helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAE5E;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAA;YACjC,CAAC;YACD,MAAM,KAAK,CAAA;QACb,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAK,EAAoB,EAAc,EAAE;IAC1E,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAA;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAA;QACjC,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { APIError } from 'better-auth/api';
2
+ import type { ApplicationError } from 'stratal/errors';
3
+ /**
4
+ * Maps Better Auth API error codes to ApplicationError instances.
5
+ */
6
+ export declare function mapBetterAuthError(error: APIError): ApplicationError;
7
+ /**
8
+ * Type guard to check if an error is a Better Auth APIError
9
+ */
10
+ export declare function isAPIError(error: unknown): error is APIError;
11
+ //# sourceMappingURL=better-auth-error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"better-auth-error-handler.d.ts","sourceRoot":"","sources":["../../../src/auth/utils/better-auth-error-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AA8BtD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,gBAAgB,CAuEpE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D"}
@@ -0,0 +1,95 @@
1
+ import { APIError } from 'better-auth/api';
2
+ import { InternalError } from 'stratal/errors';
3
+ import { AccountAlreadyExistsError, AccountNotFoundError, CannotUnlinkLastAccountError, CredentialAccountNotFoundError, EmailCannotBeUpdatedError, EmailNotVerifiedError, FailedToCreateSessionError, FailedToCreateUserError, FailedToGetSessionError, FailedToGetUserInfoError, FailedToUpdateUserError, IdTokenNotSupportedError, InvalidCredentialsError, InvalidEmailError, InvalidPasswordError, InvalidTokenError, PasswordTooLongError, PasswordTooShortError, ProviderNotFoundError, SessionExpiredError, SocialAccountLinkedError, TokenExpiredError, UserAlreadyHasPasswordError, UserEmailNotFoundError, UserNotFoundError, } from '../errors';
4
+ /**
5
+ * Maps Better Auth API error codes to ApplicationError instances.
6
+ */
7
+ export function mapBetterAuthError(error) {
8
+ const errorCode = error.body?.code;
9
+ if (error.status === 'FOUND') {
10
+ const headers = error.headers;
11
+ const hasInvalidToken = headers.get('location')?.includes('INVALID_TOKEN');
12
+ if (hasInvalidToken) {
13
+ return new InvalidTokenError();
14
+ }
15
+ }
16
+ if (!errorCode) {
17
+ return new InternalError({
18
+ originalError: `Better Auth error: ${error.message}`,
19
+ stack: error.stack,
20
+ });
21
+ }
22
+ // User errors
23
+ if (errorCode === 'USER_NOT_FOUND')
24
+ return new UserNotFoundError();
25
+ if (errorCode === 'USER_EMAIL_NOT_FOUND')
26
+ return new UserEmailNotFoundError();
27
+ // Credential errors
28
+ if (errorCode === 'INVALID_EMAIL_OR_PASSWORD')
29
+ return new InvalidCredentialsError();
30
+ if (errorCode === 'INVALID_PASSWORD')
31
+ return new InvalidPasswordError();
32
+ if (errorCode === 'INVALID_EMAIL')
33
+ return new InvalidEmailError();
34
+ // Session errors
35
+ if (errorCode === 'SESSION_EXPIRED')
36
+ return new SessionExpiredError();
37
+ if (errorCode === 'FAILED_TO_CREATE_SESSION')
38
+ return new FailedToCreateSessionError();
39
+ if (errorCode === 'FAILED_TO_GET_SESSION')
40
+ return new FailedToGetSessionError();
41
+ // Email verification
42
+ if (errorCode === 'EMAIL_NOT_VERIFIED')
43
+ return new EmailNotVerifiedError();
44
+ if (errorCode === 'EMAIL_CAN_NOT_BE_UPDATED')
45
+ return new EmailCannotBeUpdatedError();
46
+ // Password validation
47
+ if (errorCode === 'PASSWORD_TOO_SHORT')
48
+ return new PasswordTooShortError(8);
49
+ if (errorCode === 'PASSWORD_TOO_LONG')
50
+ return new PasswordTooLongError(128);
51
+ // Account errors
52
+ if (errorCode === 'USER_ALREADY_EXISTS' || errorCode === 'USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL') {
53
+ return new AccountAlreadyExistsError();
54
+ }
55
+ if (errorCode === 'ACCOUNT_NOT_FOUND')
56
+ return new AccountNotFoundError();
57
+ if (errorCode === 'CREDENTIAL_ACCOUNT_NOT_FOUND')
58
+ return new CredentialAccountNotFoundError();
59
+ if (errorCode === 'FAILED_TO_UNLINK_LAST_ACCOUNT')
60
+ return new CannotUnlinkLastAccountError();
61
+ // User creation/update errors
62
+ if (errorCode === 'FAILED_TO_CREATE_USER')
63
+ return new FailedToCreateUserError();
64
+ if (errorCode === 'FAILED_TO_UPDATE_USER')
65
+ return new FailedToUpdateUserError();
66
+ if (errorCode === 'FAILED_TO_GET_USER_INFO')
67
+ return new FailedToGetUserInfoError();
68
+ // Social account errors
69
+ if (errorCode === 'SOCIAL_ACCOUNT_ALREADY_LINKED')
70
+ return new SocialAccountLinkedError();
71
+ if (errorCode === 'PROVIDER_NOT_FOUND')
72
+ return new ProviderNotFoundError();
73
+ // Token errors
74
+ if (errorCode === 'ID_TOKEN_NOT_SUPPORTED')
75
+ return new IdTokenNotSupportedError();
76
+ if (errorCode === 'INVALID_TOKEN')
77
+ return new IdTokenNotSupportedError();
78
+ if (errorCode === 'TOKEN_EXPIRED')
79
+ return new TokenExpiredError();
80
+ // Password management
81
+ if (errorCode === 'USER_ALREADY_HAS_PASSWORD')
82
+ return new UserAlreadyHasPasswordError();
83
+ // Unknown error code
84
+ return new InternalError({
85
+ originalError: `Better Auth error [${errorCode}]: ${error.message}`,
86
+ stack: error.stack,
87
+ });
88
+ }
89
+ /**
90
+ * Type guard to check if an error is a Better Auth APIError
91
+ */
92
+ export function isAPIError(error) {
93
+ return error instanceof APIError;
94
+ }
95
+ //# sourceMappingURL=better-auth-error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"better-auth-error-handler.js","sourceRoot":"","sources":["../../../src/auth/utils/better-auth-error-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './auth-helpers';
2
+ export * from './better-auth-error-handler';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,6BAA6B,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './auth-helpers';
2
+ export * from './better-auth-error-handler';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,6BAA6B,CAAA"}
@@ -0,0 +1,35 @@
1
+ export interface AuthInfo {
2
+ userId?: string;
3
+ }
4
+ export declare class AuthContext {
5
+ protected userId?: string;
6
+ /**
7
+ * Set authentication context.
8
+ * This should be called once per request with user information.
9
+ */
10
+ setAuthContext(info: AuthInfo): void;
11
+ /**
12
+ * Get user ID if available.
13
+ * Returns undefined if no user is authenticated.
14
+ */
15
+ getUserId(): string | undefined;
16
+ /**
17
+ * Get user ID or throw if not authenticated.
18
+ * Use this when authentication is required.
19
+ */
20
+ requireUserId(): string;
21
+ /**
22
+ * Get full authentication context or throw if not initialized.
23
+ */
24
+ getAuthContext(): AuthInfo;
25
+ /**
26
+ * Check if user is authenticated.
27
+ */
28
+ isAuthenticated(): boolean;
29
+ /**
30
+ * Clear authentication context.
31
+ * Useful for testing or cleanup.
32
+ */
33
+ clearAuthContext(): void;
34
+ }
35
+ //# sourceMappingURL=auth-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-context.d.ts","sourceRoot":"","sources":["../../src/context/auth-context.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBACa,WAAW;IACtB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAIpC;;;OAGG;IACH,SAAS,IAAI,MAAM,GAAG,SAAS;IAI/B;;;OAGG;IACH,aAAa,IAAI,MAAM;IAQvB;;OAEG;IACH,cAAc,IAAI,QAAQ;IAS1B;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;;OAGG;IACH,gBAAgB,IAAI,IAAI;CAGzB"}
@@ -0,0 +1,65 @@
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
+ import { Transient, DI_TOKENS } from 'stratal/di';
8
+ import { ContextNotInitializedError, UserNotAuthenticatedError } from './errors';
9
+ let AuthContext = class AuthContext {
10
+ userId;
11
+ /**
12
+ * Set authentication context.
13
+ * This should be called once per request with user information.
14
+ */
15
+ setAuthContext(info) {
16
+ this.userId = info.userId;
17
+ }
18
+ /**
19
+ * Get user ID if available.
20
+ * Returns undefined if no user is authenticated.
21
+ */
22
+ getUserId() {
23
+ return this.userId;
24
+ }
25
+ /**
26
+ * Get user ID or throw if not authenticated.
27
+ * Use this when authentication is required.
28
+ */
29
+ requireUserId() {
30
+ const userId = this.getUserId();
31
+ if (!userId) {
32
+ throw new UserNotAuthenticatedError();
33
+ }
34
+ return userId;
35
+ }
36
+ /**
37
+ * Get full authentication context or throw if not initialized.
38
+ */
39
+ getAuthContext() {
40
+ if (!this.userId) {
41
+ throw new ContextNotInitializedError('Authentication');
42
+ }
43
+ return {
44
+ userId: this.userId
45
+ };
46
+ }
47
+ /**
48
+ * Check if user is authenticated.
49
+ */
50
+ isAuthenticated() {
51
+ return !!this.userId;
52
+ }
53
+ /**
54
+ * Clear authentication context.
55
+ * Useful for testing or cleanup.
56
+ */
57
+ clearAuthContext() {
58
+ this.userId = undefined;
59
+ }
60
+ };
61
+ AuthContext = __decorate([
62
+ Transient(DI_TOKENS.AuthContext)
63
+ ], AuthContext);
64
+ export { AuthContext };
65
+ //# sourceMappingURL=auth-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-context.js","sourceRoot":"","sources":["../../src/context/auth-context.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,UAAU,CAAA;AAOV,IAAM,WAAW,GAAjB,MAAM,WAAW;IACZ,MAAM,CAAS;IAEzB;;;OAGG;IACH,cAAc,CAAC,IAAc;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC3B,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,yBAAyB,EAAE,CAAA;QACvC,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,0BAA0B,CAAC,gBAAgB,CAAC,CAAA;QACxD,CAAC;QACD,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAA;IACH,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;IACtB,CAAC;IAED;;;OAGG;IACH,gBAAgB;QACd,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;IACzB,CAAC;CACF,CAAA;AAzDY,WAAW;IADvB,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC;GACpB,WAAW,CAyDvB"}
@@ -0,0 +1,5 @@
1
+ import { ApplicationError } from 'stratal/errors';
2
+ export declare class ContextNotInitializedError extends ApplicationError {
3
+ constructor(contextType?: string);
4
+ }
5
+ //# sourceMappingURL=context-not-initialized.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-not-initialized.error.d.ts","sourceRoot":"","sources":["../../../src/context/errors/context-not-initialized.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAe,MAAM,gBAAgB,CAAA;AAE9D,qBAAa,0BAA2B,SAAQ,gBAAgB;gBAClD,WAAW,SAAY;CAOpC"}
@@ -0,0 +1,7 @@
1
+ import { ApplicationError, ERROR_CODES } from 'stratal/errors';
2
+ export class ContextNotInitializedError extends ApplicationError {
3
+ constructor(contextType = 'Context') {
4
+ super('errors.contextNotInitialized', ERROR_CODES.AUTH.CONTEXT_NOT_INITIALIZED, { contextType });
5
+ }
6
+ }
7
+ //# sourceMappingURL=context-not-initialized.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-not-initialized.error.js","sourceRoot":"","sources":["../../../src/context/errors/context-not-initialized.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE9D,MAAM,OAAO,0BAA2B,SAAQ,gBAAgB;IAC9D,YAAY,WAAW,GAAG,SAAS;QACjC,KAAK,CACH,8BAA8B,EAC9B,WAAW,CAAC,IAAI,CAAC,uBAAuB,EACxC,EAAE,WAAW,EAAE,CAChB,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export { ContextNotInitializedError } from './context-not-initialized.error';
2
+ export { UserNotAuthenticatedError } from './user-not-authenticated.error';
3
+ export { UserNotAuthorizedError } from './user-not-authorized.error';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/context/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { ContextNotInitializedError } from './context-not-initialized.error';
2
+ export { UserNotAuthenticatedError } from './user-not-authenticated.error';
3
+ export { UserNotAuthorizedError } from './user-not-authorized.error';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/context/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { ApplicationError } from 'stratal/errors';
2
+ export declare class UserNotAuthenticatedError extends ApplicationError {
3
+ constructor();
4
+ }
5
+ //# sourceMappingURL=user-not-authenticated.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-not-authenticated.error.d.ts","sourceRoot":"","sources":["../../../src/context/errors/user-not-authenticated.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAe,MAAM,gBAAgB,CAAA;AAE9D,qBAAa,yBAA0B,SAAQ,gBAAgB;;CAO9D"}
@@ -0,0 +1,7 @@
1
+ import { ApplicationError, ERROR_CODES } from 'stratal/errors';
2
+ export class UserNotAuthenticatedError extends ApplicationError {
3
+ constructor() {
4
+ super('errors.userNotAuthenticated', ERROR_CODES.AUTH.USER_NOT_AUTHENTICATED);
5
+ }
6
+ }
7
+ //# sourceMappingURL=user-not-authenticated.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-not-authenticated.error.js","sourceRoot":"","sources":["../../../src/context/errors/user-not-authenticated.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE9D,MAAM,OAAO,yBAA0B,SAAQ,gBAAgB;IAC7D;QACE,KAAK,CACH,6BAA6B,EAC7B,WAAW,CAAC,IAAI,CAAC,sBAAsB,CACxC,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ import { ApplicationError } from 'stratal/errors';
2
+ export declare class UserNotAuthorizedError extends ApplicationError {
3
+ constructor();
4
+ }
5
+ //# sourceMappingURL=user-not-authorized.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-not-authorized.error.d.ts","sourceRoot":"","sources":["../../../src/context/errors/user-not-authorized.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAe,MAAM,gBAAgB,CAAA;AAE9D,qBAAa,sBAAuB,SAAQ,gBAAgB;;CAO3D"}
@@ -0,0 +1,7 @@
1
+ import { ApplicationError, ERROR_CODES } from 'stratal/errors';
2
+ export class UserNotAuthorizedError extends ApplicationError {
3
+ constructor() {
4
+ super('errors.unauthorized', ERROR_CODES.AUTHZ.FORBIDDEN);
5
+ }
6
+ }
7
+ //# sourceMappingURL=user-not-authorized.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-not-authorized.error.js","sourceRoot":"","sources":["../../../src/context/errors/user-not-authorized.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE9D,MAAM,OAAO,sBAAuB,SAAQ,gBAAgB;IAC1D;QACE,KAAK,CACH,qBAAqB,EACrB,WAAW,CAAC,KAAK,CAAC,SAAS,CAC5B,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export * from './auth-context';
2
+ export * from './errors';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './auth-context';
2
+ export * from './errors';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA"}