@stratal/framework 0.0.13 → 0.0.15

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 (290) hide show
  1. package/dist/auth/index.d.mts +202 -0
  2. package/dist/auth/index.d.mts.map +1 -0
  3. package/dist/auth/index.mjs +323 -0
  4. package/dist/auth/index.mjs.map +1 -0
  5. package/dist/auth-context-BD2ApWg1.d.mts +38 -0
  6. package/dist/auth-context-BD2ApWg1.d.mts.map +1 -0
  7. package/dist/auth-context-CV3Ko1ew.mjs +55 -0
  8. package/dist/auth-context-CV3Ko1ew.mjs.map +1 -0
  9. package/dist/context/index.d.mts +20 -0
  10. package/dist/context/index.d.mts.map +1 -0
  11. package/dist/context/index.mjs +3 -0
  12. package/dist/database/index.d.mts +3 -0
  13. package/dist/database/index.mjs +374 -0
  14. package/dist/database/index.mjs.map +1 -0
  15. package/dist/decorate-RSane8dy.mjs +9 -0
  16. package/dist/decorateMetadata-CETItPez.mjs +6 -0
  17. package/dist/decorateParam-CcTvpNsw.mjs +8 -0
  18. package/dist/errors-C_KIIU1v.mjs +25 -0
  19. package/dist/errors-C_KIIU1v.mjs.map +1 -0
  20. package/dist/factory/index.d.mts +99 -0
  21. package/dist/factory/index.d.mts.map +1 -0
  22. package/dist/factory/index.mjs +138 -0
  23. package/dist/factory/index.mjs.map +1 -0
  24. package/dist/guards/{auth.guard.d.ts → index.d.mts} +7 -3
  25. package/dist/guards/index.d.mts.map +1 -0
  26. package/dist/guards/index.mjs +93 -0
  27. package/dist/guards/index.mjs.map +1 -0
  28. package/dist/index-Dlg8mNjq.d.mts +386 -0
  29. package/dist/index-Dlg8mNjq.d.mts.map +1 -0
  30. package/dist/index.d.mts +3 -0
  31. package/dist/index.mjs +1 -0
  32. package/dist/rbac/index.d.mts +206 -0
  33. package/dist/rbac/index.d.mts.map +1 -0
  34. package/dist/rbac/index.mjs +346 -0
  35. package/dist/rbac/index.mjs.map +1 -0
  36. package/dist/tokens-Di1ofovy.mjs +32 -0
  37. package/dist/tokens-Di1ofovy.mjs.map +1 -0
  38. package/dist/{database/types.d.ts → types-Gjk0d2qB.d.mts} +18 -15
  39. package/dist/types-Gjk0d2qB.d.mts.map +1 -0
  40. package/package.json +25 -24
  41. package/dist/auth/auth.module.d.ts +0 -37
  42. package/dist/auth/auth.module.d.ts.map +0 -1
  43. package/dist/auth/auth.module.js +0 -74
  44. package/dist/auth/auth.module.js.map +0 -1
  45. package/dist/auth/auth.tokens.d.ts +0 -5
  46. package/dist/auth/auth.tokens.d.ts.map +0 -1
  47. package/dist/auth/auth.tokens.js +0 -5
  48. package/dist/auth/auth.tokens.js.map +0 -1
  49. package/dist/auth/errors/auth-errors.d.ts +0 -74
  50. package/dist/auth/errors/auth-errors.d.ts.map +0 -1
  51. package/dist/auth/errors/auth-errors.js +0 -122
  52. package/dist/auth/errors/auth-errors.js.map +0 -1
  53. package/dist/auth/errors/index.d.ts +0 -5
  54. package/dist/auth/errors/index.d.ts.map +0 -1
  55. package/dist/auth/errors/index.js +0 -5
  56. package/dist/auth/errors/index.js.map +0 -1
  57. package/dist/auth/errors/invalid-token.error.d.ts +0 -5
  58. package/dist/auth/errors/invalid-token.error.d.ts.map +0 -1
  59. package/dist/auth/errors/invalid-token.error.js +0 -7
  60. package/dist/auth/errors/invalid-token.error.js.map +0 -1
  61. package/dist/auth/errors/token-required.error.d.ts +0 -5
  62. package/dist/auth/errors/token-required.error.d.ts.map +0 -1
  63. package/dist/auth/errors/token-required.error.js +0 -7
  64. package/dist/auth/errors/token-required.error.js.map +0 -1
  65. package/dist/auth/errors/verification-failed.error.d.ts +0 -5
  66. package/dist/auth/errors/verification-failed.error.d.ts.map +0 -1
  67. package/dist/auth/errors/verification-failed.error.js +0 -7
  68. package/dist/auth/errors/verification-failed.error.js.map +0 -1
  69. package/dist/auth/index.d.ts +0 -7
  70. package/dist/auth/index.d.ts.map +0 -1
  71. package/dist/auth/index.js +0 -7
  72. package/dist/auth/index.js.map +0 -1
  73. package/dist/auth/middleware/auth-context.middleware.d.ts +0 -12
  74. package/dist/auth/middleware/auth-context.middleware.d.ts.map +0 -1
  75. package/dist/auth/middleware/auth-context.middleware.js +0 -28
  76. package/dist/auth/middleware/auth-context.middleware.js.map +0 -1
  77. package/dist/auth/middleware/index.d.ts +0 -3
  78. package/dist/auth/middleware/index.d.ts.map +0 -1
  79. package/dist/auth/middleware/index.js +0 -3
  80. package/dist/auth/middleware/index.js.map +0 -1
  81. package/dist/auth/middleware/session-verification.middleware.d.ts +0 -18
  82. package/dist/auth/middleware/session-verification.middleware.d.ts.map +0 -1
  83. package/dist/auth/middleware/session-verification.middleware.js +0 -48
  84. package/dist/auth/middleware/session-verification.middleware.js.map +0 -1
  85. package/dist/auth/services/auth.service.d.ts +0 -32
  86. package/dist/auth/services/auth.service.d.ts.map +0 -1
  87. package/dist/auth/services/auth.service.js +0 -62
  88. package/dist/auth/services/auth.service.js.map +0 -1
  89. package/dist/auth/services/index.d.ts +0 -2
  90. package/dist/auth/services/index.d.ts.map +0 -1
  91. package/dist/auth/services/index.js +0 -2
  92. package/dist/auth/services/index.js.map +0 -1
  93. package/dist/auth/utils/auth-helpers.d.ts +0 -11
  94. package/dist/auth/utils/auth-helpers.d.ts.map +0 -1
  95. package/dist/auth/utils/auth-helpers.js +0 -31
  96. package/dist/auth/utils/auth-helpers.js.map +0 -1
  97. package/dist/auth/utils/better-auth-error-handler.d.ts +0 -11
  98. package/dist/auth/utils/better-auth-error-handler.d.ts.map +0 -1
  99. package/dist/auth/utils/better-auth-error-handler.js +0 -95
  100. package/dist/auth/utils/better-auth-error-handler.js.map +0 -1
  101. package/dist/auth/utils/index.d.ts +0 -3
  102. package/dist/auth/utils/index.d.ts.map +0 -1
  103. package/dist/auth/utils/index.js +0 -3
  104. package/dist/auth/utils/index.js.map +0 -1
  105. package/dist/context/auth-context.d.ts +0 -35
  106. package/dist/context/auth-context.d.ts.map +0 -1
  107. package/dist/context/auth-context.js +0 -65
  108. package/dist/context/auth-context.js.map +0 -1
  109. package/dist/context/errors/context-not-initialized.error.d.ts +0 -5
  110. package/dist/context/errors/context-not-initialized.error.d.ts.map +0 -1
  111. package/dist/context/errors/context-not-initialized.error.js +0 -7
  112. package/dist/context/errors/context-not-initialized.error.js.map +0 -1
  113. package/dist/context/errors/index.d.ts +0 -4
  114. package/dist/context/errors/index.d.ts.map +0 -1
  115. package/dist/context/errors/index.js +0 -4
  116. package/dist/context/errors/index.js.map +0 -1
  117. package/dist/context/errors/user-not-authenticated.error.d.ts +0 -5
  118. package/dist/context/errors/user-not-authenticated.error.d.ts.map +0 -1
  119. package/dist/context/errors/user-not-authenticated.error.js +0 -7
  120. package/dist/context/errors/user-not-authenticated.error.js.map +0 -1
  121. package/dist/context/errors/user-not-authorized.error.d.ts +0 -5
  122. package/dist/context/errors/user-not-authorized.error.d.ts.map +0 -1
  123. package/dist/context/errors/user-not-authorized.error.js +0 -7
  124. package/dist/context/errors/user-not-authorized.error.js.map +0 -1
  125. package/dist/context/index.d.ts +0 -3
  126. package/dist/context/index.d.ts.map +0 -1
  127. package/dist/context/index.js +0 -3
  128. package/dist/context/index.js.map +0 -1
  129. package/dist/database/custom-pg-types.d.ts +0 -21
  130. package/dist/database/custom-pg-types.d.ts.map +0 -1
  131. package/dist/database/custom-pg-types.js +0 -41
  132. package/dist/database/custom-pg-types.js.map +0 -1
  133. package/dist/database/database.helpers.d.ts +0 -15
  134. package/dist/database/database.helpers.d.ts.map +0 -1
  135. package/dist/database/database.helpers.js +0 -47
  136. package/dist/database/database.helpers.js.map +0 -1
  137. package/dist/database/database.module.d.ts +0 -22
  138. package/dist/database/database.module.d.ts.map +0 -1
  139. package/dist/database/database.module.js +0 -54
  140. package/dist/database/database.module.js.map +0 -1
  141. package/dist/database/database.service.d.ts +0 -18
  142. package/dist/database/database.service.d.ts.map +0 -1
  143. package/dist/database/database.service.js +0 -2
  144. package/dist/database/database.service.js.map +0 -1
  145. package/dist/database/database.tokens.d.ts +0 -7
  146. package/dist/database/database.tokens.d.ts.map +0 -1
  147. package/dist/database/database.tokens.js +0 -8
  148. package/dist/database/database.tokens.js.map +0 -1
  149. package/dist/database/decorators/inject-db.decorator.d.ts +0 -3
  150. package/dist/database/decorators/inject-db.decorator.d.ts.map +0 -1
  151. package/dist/database/decorators/inject-db.decorator.js +0 -6
  152. package/dist/database/decorators/inject-db.decorator.js.map +0 -1
  153. package/dist/database/errors/database-config.error.d.ts +0 -5
  154. package/dist/database/errors/database-config.error.d.ts.map +0 -1
  155. package/dist/database/errors/database-config.error.js +0 -8
  156. package/dist/database/errors/database-config.error.js.map +0 -1
  157. package/dist/database/errors/database-error.d.ts +0 -14
  158. package/dist/database/errors/database-error.d.ts.map +0 -1
  159. package/dist/database/errors/database-error.js +0 -20
  160. package/dist/database/errors/database-error.js.map +0 -1
  161. package/dist/database/errors/foreign-key-constraint.error.d.ts +0 -14
  162. package/dist/database/errors/foreign-key-constraint.error.d.ts.map +0 -1
  163. package/dist/database/errors/foreign-key-constraint.error.js +0 -19
  164. package/dist/database/errors/foreign-key-constraint.error.js.map +0 -1
  165. package/dist/database/errors/from-zenstack-error.d.ts +0 -22
  166. package/dist/database/errors/from-zenstack-error.d.ts.map +0 -1
  167. package/dist/database/errors/from-zenstack-error.js +0 -114
  168. package/dist/database/errors/from-zenstack-error.js.map +0 -1
  169. package/dist/database/errors/index.d.ts +0 -8
  170. package/dist/database/errors/index.d.ts.map +0 -1
  171. package/dist/database/errors/index.js +0 -8
  172. package/dist/database/errors/index.js.map +0 -1
  173. package/dist/database/errors/invalid-error-code-range.error.d.ts +0 -12
  174. package/dist/database/errors/invalid-error-code-range.error.d.ts.map +0 -1
  175. package/dist/database/errors/invalid-error-code-range.error.js +0 -14
  176. package/dist/database/errors/invalid-error-code-range.error.js.map +0 -1
  177. package/dist/database/errors/record-not-found.error.d.ts +0 -15
  178. package/dist/database/errors/record-not-found.error.d.ts.map +0 -1
  179. package/dist/database/errors/record-not-found.error.js +0 -20
  180. package/dist/database/errors/record-not-found.error.js.map +0 -1
  181. package/dist/database/errors/unique-constraint.error.d.ts +0 -15
  182. package/dist/database/errors/unique-constraint.error.d.ts.map +0 -1
  183. package/dist/database/errors/unique-constraint.error.js +0 -20
  184. package/dist/database/errors/unique-constraint.error.js.map +0 -1
  185. package/dist/database/event-types.d.ts +0 -137
  186. package/dist/database/event-types.d.ts.map +0 -1
  187. package/dist/database/event-types.js +0 -13
  188. package/dist/database/event-types.js.map +0 -1
  189. package/dist/database/i18n/en.d.ts +0 -15
  190. package/dist/database/i18n/en.d.ts.map +0 -1
  191. package/dist/database/i18n/en.js +0 -10
  192. package/dist/database/i18n/en.js.map +0 -1
  193. package/dist/database/i18n/index.d.ts +0 -2
  194. package/dist/database/i18n/index.d.ts.map +0 -1
  195. package/dist/database/i18n/index.js +0 -2
  196. package/dist/database/i18n/index.js.map +0 -1
  197. package/dist/database/index.d.ts +0 -11
  198. package/dist/database/index.d.ts.map +0 -1
  199. package/dist/database/index.js +0 -11
  200. package/dist/database/index.js.map +0 -1
  201. package/dist/database/plugins/error-handler.plugin.d.ts +0 -21
  202. package/dist/database/plugins/error-handler.plugin.d.ts.map +0 -1
  203. package/dist/database/plugins/error-handler.plugin.js +0 -24
  204. package/dist/database/plugins/error-handler.plugin.js.map +0 -1
  205. package/dist/database/plugins/event-emitter.plugin.d.ts +0 -37
  206. package/dist/database/plugins/event-emitter.plugin.d.ts.map +0 -1
  207. package/dist/database/plugins/event-emitter.plugin.js +0 -43
  208. package/dist/database/plugins/event-emitter.plugin.js.map +0 -1
  209. package/dist/database/plugins/index.d.ts +0 -4
  210. package/dist/database/plugins/index.d.ts.map +0 -1
  211. package/dist/database/plugins/index.js +0 -4
  212. package/dist/database/plugins/index.js.map +0 -1
  213. package/dist/database/plugins/schema-switcher.plugin.d.ts +0 -32
  214. package/dist/database/plugins/schema-switcher.plugin.d.ts.map +0 -1
  215. package/dist/database/plugins/schema-switcher.plugin.js +0 -27
  216. package/dist/database/plugins/schema-switcher.plugin.js.map +0 -1
  217. package/dist/database/types.d.ts.map +0 -1
  218. package/dist/database/types.js +0 -2
  219. package/dist/database/types.js.map +0 -1
  220. package/dist/factory/factory.d.ts +0 -56
  221. package/dist/factory/factory.d.ts.map +0 -1
  222. package/dist/factory/factory.js +0 -86
  223. package/dist/factory/factory.js.map +0 -1
  224. package/dist/factory/index.d.ts +0 -3
  225. package/dist/factory/index.d.ts.map +0 -1
  226. package/dist/factory/index.js +0 -3
  227. package/dist/factory/index.js.map +0 -1
  228. package/dist/factory/sequence.d.ts +0 -38
  229. package/dist/factory/sequence.d.ts.map +0 -1
  230. package/dist/factory/sequence.js +0 -54
  231. package/dist/factory/sequence.js.map +0 -1
  232. package/dist/guards/auth.guard.d.ts.map +0 -1
  233. package/dist/guards/auth.guard.js +0 -99
  234. package/dist/guards/auth.guard.js.map +0 -1
  235. package/dist/guards/index.d.ts +0 -3
  236. package/dist/guards/index.d.ts.map +0 -1
  237. package/dist/guards/index.js +0 -5
  238. package/dist/guards/index.js.map +0 -1
  239. package/dist/index.d.ts +0 -3
  240. package/dist/index.d.ts.map +0 -1
  241. package/dist/index.js +0 -2
  242. package/dist/index.js.map +0 -1
  243. package/dist/rbac/adapters/custom-zenstack-adapter.d.ts +0 -61
  244. package/dist/rbac/adapters/custom-zenstack-adapter.d.ts.map +0 -1
  245. package/dist/rbac/adapters/custom-zenstack-adapter.js +0 -159
  246. package/dist/rbac/adapters/custom-zenstack-adapter.js.map +0 -1
  247. package/dist/rbac/adapters/index.d.ts +0 -2
  248. package/dist/rbac/adapters/index.d.ts.map +0 -1
  249. package/dist/rbac/adapters/index.js +0 -2
  250. package/dist/rbac/adapters/index.js.map +0 -1
  251. package/dist/rbac/constants.d.ts +0 -8
  252. package/dist/rbac/constants.d.ts.map +0 -1
  253. package/dist/rbac/constants.js +0 -8
  254. package/dist/rbac/constants.js.map +0 -1
  255. package/dist/rbac/errors/index.d.ts +0 -2
  256. package/dist/rbac/errors/index.d.ts.map +0 -1
  257. package/dist/rbac/errors/index.js +0 -2
  258. package/dist/rbac/errors/index.js.map +0 -1
  259. package/dist/rbac/errors/insufficient-permissions.error.d.ts +0 -14
  260. package/dist/rbac/errors/insufficient-permissions.error.d.ts.map +0 -1
  261. package/dist/rbac/errors/insufficient-permissions.error.js +0 -19
  262. package/dist/rbac/errors/insufficient-permissions.error.js.map +0 -1
  263. package/dist/rbac/index.d.ts +0 -9
  264. package/dist/rbac/index.d.ts.map +0 -1
  265. package/dist/rbac/index.js +0 -8
  266. package/dist/rbac/index.js.map +0 -1
  267. package/dist/rbac/rbac.module.d.ts +0 -26
  268. package/dist/rbac/rbac.module.d.ts.map +0 -1
  269. package/dist/rbac/rbac.module.js +0 -62
  270. package/dist/rbac/rbac.module.js.map +0 -1
  271. package/dist/rbac/services/casbin-enforcer.service.d.ts +0 -37
  272. package/dist/rbac/services/casbin-enforcer.service.d.ts.map +0 -1
  273. package/dist/rbac/services/casbin-enforcer.service.js +0 -86
  274. package/dist/rbac/services/casbin-enforcer.service.js.map +0 -1
  275. package/dist/rbac/services/casbin.service.d.ts +0 -37
  276. package/dist/rbac/services/casbin.service.d.ts.map +0 -1
  277. package/dist/rbac/services/casbin.service.js +0 -174
  278. package/dist/rbac/services/casbin.service.js.map +0 -1
  279. package/dist/rbac/services/index.d.ts +0 -3
  280. package/dist/rbac/services/index.d.ts.map +0 -1
  281. package/dist/rbac/services/index.js +0 -3
  282. package/dist/rbac/services/index.js.map +0 -1
  283. package/dist/rbac/tokens.d.ts +0 -10
  284. package/dist/rbac/tokens.d.ts.map +0 -1
  285. package/dist/rbac/tokens.js +0 -10
  286. package/dist/rbac/tokens.js.map +0 -1
  287. package/dist/rbac/types.d.ts +0 -12
  288. package/dist/rbac/types.d.ts.map +0 -1
  289. package/dist/rbac/types.js +0 -2
  290. package/dist/rbac/types.js.map +0 -1
@@ -0,0 +1,202 @@
1
+ import { AsyncModuleOptions, DynamicModule } from "stratal/module";
2
+ import { ApplicationError } from "stratal/errors";
3
+ import { Auth, BetterAuthOptions } from "better-auth";
4
+ import { APIError } from "better-auth/api";
5
+ import { MiddlewareConfigurable, MiddlewareConsumer } from "stratal/middleware";
6
+ import { Middleware, RouterContext } from "stratal/router";
7
+
8
+ //#region src/auth/auth.module.d.ts
9
+ declare class AuthModule implements MiddlewareConfigurable {
10
+ /**
11
+ * Configure auth middleware.
12
+ *
13
+ * Registers middlewares in order:
14
+ * 1. AuthContextMiddleware - Creates and registers AuthContext in request container
15
+ * 2. SessionVerificationMiddleware - Verifies session and populates AuthContext with userId
16
+ */
17
+ configure(consumer: MiddlewareConsumer): void;
18
+ /**
19
+ * Configure AuthModule with async options factory
20
+ */
21
+ static forRootAsync<TOptions extends BetterAuthOptions>(options: AsyncModuleOptions<TOptions>): DynamicModule;
22
+ }
23
+ //#endregion
24
+ //#region src/auth/auth.tokens.d.ts
25
+ /** Token for AuthService - core authentication service */
26
+ declare const AUTH_SERVICE: unique symbol;
27
+ /** Token for Better Auth options configuration */
28
+ declare const AUTH_OPTIONS: unique symbol;
29
+ //#endregion
30
+ //#region src/auth/errors/auth-errors.d.ts
31
+ declare class UserNotFoundError extends ApplicationError {
32
+ constructor(email?: string);
33
+ }
34
+ declare class InvalidCredentialsError extends ApplicationError {
35
+ constructor();
36
+ }
37
+ declare class InvalidPasswordError extends ApplicationError {
38
+ constructor();
39
+ }
40
+ declare class InvalidEmailError extends ApplicationError {
41
+ constructor(email?: string);
42
+ }
43
+ declare class SessionExpiredError extends ApplicationError {
44
+ constructor();
45
+ }
46
+ declare class EmailNotVerifiedError extends ApplicationError {
47
+ constructor(email?: string);
48
+ }
49
+ declare class PasswordTooShortError extends ApplicationError {
50
+ constructor(minLength: number);
51
+ }
52
+ declare class PasswordTooLongError extends ApplicationError {
53
+ constructor(maxLength: number);
54
+ }
55
+ declare class AccountAlreadyExistsError extends ApplicationError {
56
+ constructor(email?: string);
57
+ }
58
+ declare class FailedToCreateUserError extends ApplicationError {
59
+ constructor(reason?: string);
60
+ }
61
+ declare class FailedToCreateSessionError extends ApplicationError {
62
+ constructor(reason?: string);
63
+ }
64
+ declare class FailedToUpdateUserError extends ApplicationError {
65
+ constructor(reason?: string);
66
+ }
67
+ declare class SocialAccountLinkedError extends ApplicationError {
68
+ constructor(provider?: string);
69
+ }
70
+ declare class CannotUnlinkLastAccountError extends ApplicationError {
71
+ constructor();
72
+ }
73
+ declare class ProviderNotFoundError extends ApplicationError {
74
+ constructor(provider?: string);
75
+ }
76
+ declare class UserEmailNotFoundError extends ApplicationError {
77
+ constructor();
78
+ }
79
+ declare class AccountNotFoundError extends ApplicationError {
80
+ constructor();
81
+ }
82
+ declare class CredentialAccountNotFoundError extends ApplicationError {
83
+ constructor();
84
+ }
85
+ declare class UserAlreadyHasPasswordError extends ApplicationError {
86
+ constructor();
87
+ }
88
+ declare class EmailCannotBeUpdatedError extends ApplicationError {
89
+ constructor(reason?: string);
90
+ }
91
+ declare class FailedToGetSessionError extends ApplicationError {
92
+ constructor(reason?: string);
93
+ }
94
+ declare class FailedToGetUserInfoError extends ApplicationError {
95
+ constructor(reason?: string);
96
+ }
97
+ declare class IdTokenNotSupportedError extends ApplicationError {
98
+ constructor();
99
+ }
100
+ declare class TokenExpiredError extends ApplicationError {
101
+ constructor();
102
+ }
103
+ //#endregion
104
+ //#region src/auth/errors/invalid-token.error.d.ts
105
+ declare class InvalidTokenError extends ApplicationError {
106
+ constructor();
107
+ }
108
+ //#endregion
109
+ //#region src/auth/errors/token-required.error.d.ts
110
+ declare class TokenRequiredError extends ApplicationError {
111
+ constructor();
112
+ }
113
+ //#endregion
114
+ //#region src/auth/errors/verification-failed.error.d.ts
115
+ declare class VerificationFailedError extends ApplicationError {
116
+ constructor();
117
+ }
118
+ //#endregion
119
+ //#region src/auth/middleware/auth-context.middleware.d.ts
120
+ /**
121
+ * Auth Context Middleware
122
+ *
123
+ * Registers AuthContext in the request container at the start of each request.
124
+ * This MUST run before SessionVerificationMiddleware and any other middleware
125
+ * that depends on AuthContext.
126
+ */
127
+ declare class AuthContextMiddleware implements Middleware {
128
+ handle(ctx: RouterContext, next: () => Promise<void>): Promise<void>;
129
+ }
130
+ //#endregion
131
+ //#region src/auth/services/auth.service.d.ts
132
+ /**
133
+ * AuthService
134
+ *
135
+ * Base authentication service using Better Auth.
136
+ * Configured via AuthModule.forRootAsync() from the application layer.
137
+ *
138
+ * **Extensibility:**
139
+ * Extend this class in application layer to add custom methods.
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * @Transient(AUTH_SERVICE)
144
+ * export class AppAuthService extends AuthService<AuthOptions> {
145
+ * async signInMagicLink(email: string) {
146
+ * return wrapBetterAuth(async () => {
147
+ * return this.auth.api.signInMagicLink({ body: { email }, headers: new Headers() })
148
+ * })
149
+ * }
150
+ * }
151
+ * ```
152
+ */
153
+ declare class AuthService<TOptions extends BetterAuthOptions = BetterAuthOptions> {
154
+ protected readonly options: TOptions;
155
+ private authInstance;
156
+ constructor(options: TOptions);
157
+ /**
158
+ * Get the Better Auth instance
159
+ */
160
+ get auth(): Auth<TOptions>;
161
+ }
162
+ //#endregion
163
+ //#region src/auth/middleware/session-verification.middleware.d.ts
164
+ /**
165
+ * Session Verification Middleware
166
+ *
167
+ * Verifies user session via Better Auth and populates AuthContext with userId.
168
+ *
169
+ * **Responsibilities:**
170
+ * - Calls Better Auth's getSession() API
171
+ * - Populates AuthContext with userId if session is valid
172
+ * - Continues request chain regardless of session status
173
+ */
174
+ declare class SessionVerificationMiddleware implements Middleware {
175
+ private readonly authService;
176
+ constructor(authService: AuthService);
177
+ handle(ctx: RouterContext, next: () => Promise<void>): Promise<void>;
178
+ }
179
+ //#endregion
180
+ //#region src/auth/utils/auth-helpers.d.ts
181
+ /**
182
+ * Get shared Better Auth error handler configuration.
183
+ * Use this in Better Auth config's onAPIError option.
184
+ */
185
+ declare function getErrorHandlerConfig(): BetterAuthOptions['onAPIError'];
186
+ /**
187
+ * Wrap a Better Auth function in a try/catch block and map errors to ApplicationError.
188
+ */
189
+ declare const wrapBetterAuth: <T>(fn: () => Promise<T>) => Promise<T>;
190
+ //#endregion
191
+ //#region src/auth/utils/better-auth-error-handler.d.ts
192
+ /**
193
+ * Maps Better Auth API error codes to ApplicationError instances.
194
+ */
195
+ declare function mapBetterAuthError(error: APIError): ApplicationError;
196
+ /**
197
+ * Type guard to check if an error is a Better Auth APIError
198
+ */
199
+ declare function isAPIError(error: unknown): error is APIError;
200
+ //#endregion
201
+ export { AUTH_OPTIONS, AUTH_SERVICE, AccountAlreadyExistsError, AccountNotFoundError, AuthContextMiddleware, AuthModule, AuthService, CannotUnlinkLastAccountError, CredentialAccountNotFoundError, EmailCannotBeUpdatedError, EmailNotVerifiedError, FailedToCreateSessionError, FailedToCreateUserError, FailedToGetSessionError, FailedToGetUserInfoError, FailedToUpdateUserError, IdTokenNotSupportedError, InvalidCredentialsError, InvalidEmailError, InvalidPasswordError, InvalidTokenError, PasswordTooLongError, PasswordTooShortError, ProviderNotFoundError, SessionExpiredError, SessionVerificationMiddleware, SocialAccountLinkedError, TokenExpiredError, TokenRequiredError, UserAlreadyHasPasswordError, UserEmailNotFoundError, UserNotFoundError, VerificationFailedError, getErrorHandlerConfig, isAPIError, mapBetterAuthError, wrapBetterAuth };
202
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/auth/auth.module.ts","../../src/auth/auth.tokens.ts","../../src/auth/errors/auth-errors.ts","../../src/auth/errors/invalid-token.error.ts","../../src/auth/errors/token-required.error.ts","../../src/auth/errors/verification-failed.error.ts","../../src/auth/middleware/auth-context.middleware.ts","../../src/auth/services/auth.service.ts","../../src/auth/middleware/session-verification.middleware.ts","../../src/auth/utils/auth-helpers.ts","../../src/auth/utils/better-auth-error-handler.ts"],"mappings":"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"}
@@ -0,0 +1,323 @@
1
+ import "../errors-C_KIIU1v.mjs";
2
+ import { t as __decorate } from "../decorate-RSane8dy.mjs";
3
+ import { t as AuthContext } from "../auth-context-CV3Ko1ew.mjs";
4
+ import { t as __decorateMetadata } from "../decorateMetadata-CETItPez.mjs";
5
+ import { t as __decorateParam } from "../decorateParam-CcTvpNsw.mjs";
6
+ import { Module } from "stratal/module";
7
+ import { DI_TOKENS, Transient } from "stratal/di";
8
+ import { ApplicationError, ERROR_CODES, InternalError } from "stratal/errors";
9
+ import { inject } from "tsyringe";
10
+ import { betterAuth } from "better-auth";
11
+ import { APIError } from "better-auth/api";
12
+ //#region src/auth/auth.tokens.ts
13
+ /** Token for AuthService - core authentication service */
14
+ const AUTH_SERVICE = Symbol.for("stratal:auth:service");
15
+ /** Token for Better Auth options configuration */
16
+ const AUTH_OPTIONS = Symbol.for("stratal:auth:options");
17
+ //#endregion
18
+ //#region src/auth/middleware/auth-context.middleware.ts
19
+ let AuthContextMiddleware = class AuthContextMiddleware {
20
+ async handle(ctx, next) {
21
+ const requestContainer = ctx.getContainer();
22
+ const authContext = new AuthContext();
23
+ requestContainer.registerValue(DI_TOKENS.AuthContext, authContext);
24
+ await next();
25
+ }
26
+ };
27
+ AuthContextMiddleware = __decorate([Transient()], AuthContextMiddleware);
28
+ //#endregion
29
+ //#region src/auth/middleware/session-verification.middleware.ts
30
+ let SessionVerificationMiddleware = class SessionVerificationMiddleware {
31
+ constructor(authService) {
32
+ this.authService = authService;
33
+ }
34
+ async handle(ctx, next) {
35
+ const session = await this.authService.auth.api.getSession({ headers: ctx.c.req.raw.headers });
36
+ if (session) ctx.getContainer().resolve(DI_TOKENS.AuthContext).setAuthContext({ userId: session.user.id });
37
+ await next();
38
+ }
39
+ };
40
+ SessionVerificationMiddleware = __decorate([
41
+ Transient(),
42
+ __decorateParam(0, inject(AUTH_SERVICE)),
43
+ __decorateMetadata("design:paramtypes", [Object])
44
+ ], SessionVerificationMiddleware);
45
+ //#endregion
46
+ //#region src/auth/errors/auth-errors.ts
47
+ var UserNotFoundError = class extends ApplicationError {
48
+ constructor(email) {
49
+ super("errors.auth.userNotFound", ERROR_CODES.RESOURCE.NOT_FOUND, email ? { email } : void 0);
50
+ }
51
+ };
52
+ var InvalidCredentialsError = class extends ApplicationError {
53
+ constructor() {
54
+ super("errors.auth.invalidCredentials", ERROR_CODES.AUTH.INVALID_CREDENTIALS);
55
+ }
56
+ };
57
+ var InvalidPasswordError = class extends ApplicationError {
58
+ constructor() {
59
+ super("errors.auth.invalidPassword", ERROR_CODES.AUTH.INVALID_CREDENTIALS);
60
+ }
61
+ };
62
+ var InvalidEmailError = class extends ApplicationError {
63
+ constructor(email) {
64
+ super("errors.auth.invalidEmail", ERROR_CODES.VALIDATION.INVALID_FORMAT, email ? { email } : void 0);
65
+ }
66
+ };
67
+ var SessionExpiredError = class extends ApplicationError {
68
+ constructor() {
69
+ super("errors.auth.sessionExpired", ERROR_CODES.AUTH.SESSION_EXPIRED);
70
+ }
71
+ };
72
+ var EmailNotVerifiedError = class extends ApplicationError {
73
+ constructor(email) {
74
+ super("errors.auth.emailNotVerified", ERROR_CODES.AUTH.EMAIL_NOT_VERIFIED, email ? { email } : void 0);
75
+ }
76
+ };
77
+ var PasswordTooShortError = class extends ApplicationError {
78
+ constructor(minLength) {
79
+ super("errors.auth.passwordTooShort", ERROR_CODES.AUTH.PASSWORD_TOO_SHORT, { minLength });
80
+ }
81
+ };
82
+ var PasswordTooLongError = class extends ApplicationError {
83
+ constructor(maxLength) {
84
+ super("errors.auth.passwordTooLong", ERROR_CODES.AUTH.PASSWORD_TOO_LONG, { maxLength });
85
+ }
86
+ };
87
+ var AccountAlreadyExistsError = class extends ApplicationError {
88
+ constructor(email) {
89
+ super("errors.auth.accountAlreadyExists", ERROR_CODES.AUTH.ACCOUNT_ALREADY_EXISTS, email ? { email } : void 0);
90
+ }
91
+ };
92
+ var FailedToCreateUserError = class extends ApplicationError {
93
+ constructor(reason) {
94
+ super("errors.auth.failedToCreateUser", ERROR_CODES.AUTH.FAILED_TO_CREATE_USER, reason ? { reason } : void 0);
95
+ }
96
+ };
97
+ var FailedToCreateSessionError = class extends ApplicationError {
98
+ constructor(reason) {
99
+ super("errors.auth.failedToCreateSession", ERROR_CODES.AUTH.FAILED_TO_CREATE_SESSION, reason ? { reason } : void 0);
100
+ }
101
+ };
102
+ var FailedToUpdateUserError = class extends ApplicationError {
103
+ constructor(reason) {
104
+ super("errors.auth.failedToUpdateUser", ERROR_CODES.AUTH.FAILED_TO_UPDATE_USER, reason ? { reason } : void 0);
105
+ }
106
+ };
107
+ var SocialAccountLinkedError = class extends ApplicationError {
108
+ constructor(provider) {
109
+ super("errors.auth.socialAccountLinked", ERROR_CODES.AUTH.SOCIAL_ACCOUNT_LINKED, provider ? { provider } : void 0);
110
+ }
111
+ };
112
+ var CannotUnlinkLastAccountError = class extends ApplicationError {
113
+ constructor() {
114
+ super("errors.auth.cannotUnlinkLastAccount", ERROR_CODES.AUTH.CANNOT_UNLINK_LAST_ACCOUNT);
115
+ }
116
+ };
117
+ var ProviderNotFoundError = class extends ApplicationError {
118
+ constructor(provider) {
119
+ super("errors.auth.providerNotFound", ERROR_CODES.RESOURCE.NOT_FOUND, provider ? { provider } : void 0);
120
+ }
121
+ };
122
+ var UserEmailNotFoundError = class extends ApplicationError {
123
+ constructor() {
124
+ super("errors.auth.userEmailNotFound", ERROR_CODES.RESOURCE.NOT_FOUND);
125
+ }
126
+ };
127
+ var AccountNotFoundError = class extends ApplicationError {
128
+ constructor() {
129
+ super("errors.auth.accountNotFound", ERROR_CODES.RESOURCE.NOT_FOUND);
130
+ }
131
+ };
132
+ var CredentialAccountNotFoundError = class extends ApplicationError {
133
+ constructor() {
134
+ super("errors.auth.credentialAccountNotFound", ERROR_CODES.RESOURCE.NOT_FOUND);
135
+ }
136
+ };
137
+ var UserAlreadyHasPasswordError = class extends ApplicationError {
138
+ constructor() {
139
+ super("errors.auth.userAlreadyHasPassword", ERROR_CODES.RESOURCE.CONFLICT);
140
+ }
141
+ };
142
+ var EmailCannotBeUpdatedError = class extends ApplicationError {
143
+ constructor(reason) {
144
+ super("errors.auth.emailCannotBeUpdated", ERROR_CODES.VALIDATION.GENERIC, reason ? { reason } : void 0);
145
+ }
146
+ };
147
+ var FailedToGetSessionError = class extends ApplicationError {
148
+ constructor(reason) {
149
+ super("errors.auth.failedToGetSession", ERROR_CODES.SYSTEM.INTERNAL_ERROR, reason ? { reason } : void 0);
150
+ }
151
+ };
152
+ var FailedToGetUserInfoError = class extends ApplicationError {
153
+ constructor(reason) {
154
+ super("errors.auth.failedToGetUserInfo", ERROR_CODES.SYSTEM.INTERNAL_ERROR, reason ? { reason } : void 0);
155
+ }
156
+ };
157
+ var IdTokenNotSupportedError = class extends ApplicationError {
158
+ constructor() {
159
+ super("errors.auth.invalidToken", ERROR_CODES.VALIDATION.GENERIC);
160
+ }
161
+ };
162
+ var TokenExpiredError = class extends ApplicationError {
163
+ constructor() {
164
+ super("errors.auth.tokenExpired", ERROR_CODES.VALIDATION.GENERIC);
165
+ }
166
+ };
167
+ //#endregion
168
+ //#region src/auth/errors/invalid-token.error.ts
169
+ var InvalidTokenError = class extends ApplicationError {
170
+ constructor() {
171
+ super("errors.auth.invalidToken", ERROR_CODES.AUTH.INVALID_TOKEN);
172
+ }
173
+ };
174
+ //#endregion
175
+ //#region src/auth/errors/token-required.error.ts
176
+ var TokenRequiredError = class extends ApplicationError {
177
+ constructor() {
178
+ super("errors.auth.tokenRequired", ERROR_CODES.VALIDATION.REQUIRED_FIELD, { field: "token" });
179
+ }
180
+ };
181
+ //#endregion
182
+ //#region src/auth/errors/verification-failed.error.ts
183
+ var VerificationFailedError = class extends ApplicationError {
184
+ constructor() {
185
+ super("errors.auth.verificationFailed", ERROR_CODES.AUTH.INVALID_CREDENTIALS);
186
+ }
187
+ };
188
+ //#endregion
189
+ //#region src/auth/utils/better-auth-error-handler.ts
190
+ /**
191
+ * Maps Better Auth API error codes to ApplicationError instances.
192
+ */
193
+ function mapBetterAuthError(error) {
194
+ const errorCode = error.body?.code;
195
+ if (error.status === "FOUND") {
196
+ if (error.headers.get("location")?.includes("INVALID_TOKEN")) return new InvalidTokenError();
197
+ }
198
+ if (!errorCode) return new InternalError({
199
+ originalError: `Better Auth error: ${error.message}`,
200
+ stack: error.stack
201
+ });
202
+ if (errorCode === "USER_NOT_FOUND") return new UserNotFoundError();
203
+ if (errorCode === "USER_EMAIL_NOT_FOUND") return new UserEmailNotFoundError();
204
+ if (errorCode === "INVALID_EMAIL_OR_PASSWORD") return new InvalidCredentialsError();
205
+ if (errorCode === "INVALID_PASSWORD") return new InvalidPasswordError();
206
+ if (errorCode === "INVALID_EMAIL") return new InvalidEmailError();
207
+ if (errorCode === "SESSION_EXPIRED") return new SessionExpiredError();
208
+ if (errorCode === "FAILED_TO_CREATE_SESSION") return new FailedToCreateSessionError();
209
+ if (errorCode === "FAILED_TO_GET_SESSION") return new FailedToGetSessionError();
210
+ if (errorCode === "EMAIL_NOT_VERIFIED") return new EmailNotVerifiedError();
211
+ if (errorCode === "EMAIL_CAN_NOT_BE_UPDATED") return new EmailCannotBeUpdatedError();
212
+ if (errorCode === "PASSWORD_TOO_SHORT") return new PasswordTooShortError(8);
213
+ if (errorCode === "PASSWORD_TOO_LONG") return new PasswordTooLongError(128);
214
+ if (errorCode === "USER_ALREADY_EXISTS" || errorCode === "USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL") return new AccountAlreadyExistsError();
215
+ if (errorCode === "ACCOUNT_NOT_FOUND") return new AccountNotFoundError();
216
+ if (errorCode === "CREDENTIAL_ACCOUNT_NOT_FOUND") return new CredentialAccountNotFoundError();
217
+ if (errorCode === "FAILED_TO_UNLINK_LAST_ACCOUNT") return new CannotUnlinkLastAccountError();
218
+ if (errorCode === "FAILED_TO_CREATE_USER") return new FailedToCreateUserError();
219
+ if (errorCode === "FAILED_TO_UPDATE_USER") return new FailedToUpdateUserError();
220
+ if (errorCode === "FAILED_TO_GET_USER_INFO") return new FailedToGetUserInfoError();
221
+ if (errorCode === "SOCIAL_ACCOUNT_ALREADY_LINKED") return new SocialAccountLinkedError();
222
+ if (errorCode === "PROVIDER_NOT_FOUND") return new ProviderNotFoundError();
223
+ if (errorCode === "ID_TOKEN_NOT_SUPPORTED") return new IdTokenNotSupportedError();
224
+ if (errorCode === "INVALID_TOKEN") return new IdTokenNotSupportedError();
225
+ if (errorCode === "TOKEN_EXPIRED") return new TokenExpiredError();
226
+ if (errorCode === "USER_ALREADY_HAS_PASSWORD") return new UserAlreadyHasPasswordError();
227
+ return new InternalError({
228
+ originalError: `Better Auth error [${errorCode}]: ${error.message}`,
229
+ stack: error.stack
230
+ });
231
+ }
232
+ /**
233
+ * Type guard to check if an error is a Better Auth APIError
234
+ */
235
+ function isAPIError(error) {
236
+ return error instanceof APIError;
237
+ }
238
+ //#endregion
239
+ //#region src/auth/utils/auth-helpers.ts
240
+ /**
241
+ * Get shared Better Auth error handler configuration.
242
+ * Use this in Better Auth config's onAPIError option.
243
+ */
244
+ function getErrorHandlerConfig() {
245
+ return {
246
+ throw: false,
247
+ onError: (error) => {
248
+ if (isAPIError(error)) throw mapBetterAuthError(error);
249
+ throw error;
250
+ }
251
+ };
252
+ }
253
+ /**
254
+ * Wrap a Better Auth function in a try/catch block and map errors to ApplicationError.
255
+ */
256
+ const wrapBetterAuth = async (fn) => {
257
+ try {
258
+ return await fn();
259
+ } catch (error) {
260
+ if (isAPIError(error)) throw mapBetterAuthError(error);
261
+ throw error;
262
+ }
263
+ };
264
+ //#endregion
265
+ //#region src/auth/services/auth.service.ts
266
+ let AuthService = class AuthService {
267
+ authInstance;
268
+ constructor(options) {
269
+ this.options = options;
270
+ this.authInstance = betterAuth({
271
+ ...this.options,
272
+ onAPIError: getErrorHandlerConfig()
273
+ });
274
+ }
275
+ /**
276
+ * Get the Better Auth instance
277
+ */
278
+ get auth() {
279
+ return this.authInstance;
280
+ }
281
+ };
282
+ AuthService = __decorate([
283
+ Transient(AUTH_SERVICE),
284
+ __decorateParam(0, inject(AUTH_OPTIONS)),
285
+ __decorateMetadata("design:paramtypes", [Object])
286
+ ], AuthService);
287
+ //#endregion
288
+ //#region src/auth/auth.module.ts
289
+ var _AuthModule;
290
+ let AuthModule = _AuthModule = class AuthModule {
291
+ /**
292
+ * Configure auth middleware.
293
+ *
294
+ * Registers middlewares in order:
295
+ * 1. AuthContextMiddleware - Creates and registers AuthContext in request container
296
+ * 2. SessionVerificationMiddleware - Verifies session and populates AuthContext with userId
297
+ */
298
+ configure(consumer) {
299
+ consumer.apply(AuthContextMiddleware).forRoutes("*");
300
+ consumer.apply(SessionVerificationMiddleware).forRoutes("*");
301
+ }
302
+ /**
303
+ * Configure AuthModule with async options factory
304
+ */
305
+ static forRootAsync(options) {
306
+ return {
307
+ module: _AuthModule,
308
+ providers: [{
309
+ provide: AUTH_OPTIONS,
310
+ useFactory: options.useFactory,
311
+ inject: options.inject
312
+ }, {
313
+ provide: AUTH_SERVICE,
314
+ useClass: AuthService
315
+ }]
316
+ };
317
+ }
318
+ };
319
+ AuthModule = _AuthModule = __decorate([Module({ providers: [] })], AuthModule);
320
+ //#endregion
321
+ export { AUTH_OPTIONS, AUTH_SERVICE, AccountAlreadyExistsError, AccountNotFoundError, AuthContextMiddleware, AuthModule, AuthService, CannotUnlinkLastAccountError, CredentialAccountNotFoundError, EmailCannotBeUpdatedError, EmailNotVerifiedError, FailedToCreateSessionError, FailedToCreateUserError, FailedToGetSessionError, FailedToGetUserInfoError, FailedToUpdateUserError, IdTokenNotSupportedError, InvalidCredentialsError, InvalidEmailError, InvalidPasswordError, InvalidTokenError, PasswordTooLongError, PasswordTooShortError, ProviderNotFoundError, SessionExpiredError, SessionVerificationMiddleware, SocialAccountLinkedError, TokenExpiredError, TokenRequiredError, UserAlreadyHasPasswordError, UserEmailNotFoundError, UserNotFoundError, VerificationFailedError, getErrorHandlerConfig, isAPIError, mapBetterAuthError, wrapBetterAuth };
322
+
323
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/auth/auth.tokens.ts","../../src/auth/middleware/auth-context.middleware.ts","../../src/auth/middleware/session-verification.middleware.ts","../../src/auth/errors/auth-errors.ts","../../src/auth/errors/invalid-token.error.ts","../../src/auth/errors/token-required.error.ts","../../src/auth/errors/verification-failed.error.ts","../../src/auth/utils/better-auth-error-handler.ts","../../src/auth/utils/auth-helpers.ts","../../src/auth/services/auth.service.ts","../../src/auth/auth.module.ts"],"sourcesContent":["/** Token for AuthService - core authentication service */\nexport const AUTH_SERVICE = Symbol.for('stratal:auth:service')\n\n/** Token for Better Auth options configuration */\nexport const AUTH_OPTIONS = Symbol.for('stratal:auth:options')\n","import { Transient, DI_TOKENS } from 'stratal/di'\nimport type { Middleware, RouterContext } from 'stratal/router'\nimport { AuthContext } from '../../context/auth-context'\n\n/**\n * Auth Context Middleware\n *\n * Registers AuthContext in the request container at the start of each request.\n * This MUST run before SessionVerificationMiddleware and any other middleware\n * that depends on AuthContext.\n */\n@Transient()\nexport class AuthContextMiddleware implements Middleware {\n async handle(ctx: RouterContext, next: () => Promise<void>): Promise<void> {\n const requestContainer = ctx.getContainer()\n\n const authContext = new AuthContext()\n requestContainer.registerValue(DI_TOKENS.AuthContext, authContext)\n\n await next()\n }\n}\n","import { inject } from 'tsyringe'\nimport { Transient, DI_TOKENS } from 'stratal/di'\nimport type { Middleware, RouterContext } from 'stratal/router'\nimport { AuthContext } from '../../context/auth-context'\nimport { AUTH_SERVICE } from '../auth.tokens'\nimport type { AuthService } from '../services/auth.service'\n\n/**\n * Session Verification Middleware\n *\n * Verifies user session via Better Auth and populates AuthContext with userId.\n *\n * **Responsibilities:**\n * - Calls Better Auth's getSession() API\n * - Populates AuthContext with userId if session is valid\n * - Continues request chain regardless of session status\n */\n@Transient()\nexport class SessionVerificationMiddleware implements Middleware {\n constructor(\n @inject(AUTH_SERVICE)\n private readonly authService: AuthService\n ) {}\n\n async handle(ctx: RouterContext, next: () => Promise<void>): Promise<void> {\n const session = await this.authService.auth.api.getSession({\n headers: ctx.c.req.raw.headers\n })\n\n if (session) {\n const authContext = ctx.getContainer().resolve<AuthContext>(DI_TOKENS.AuthContext)\n authContext.setAuthContext({ userId: session.user.id })\n }\n\n await next()\n }\n}\n","import { ApplicationError, ERROR_CODES } from 'stratal/errors'\n\nexport class UserNotFoundError extends ApplicationError {\n constructor(email?: string) {\n super('errors.auth.userNotFound', ERROR_CODES.RESOURCE.NOT_FOUND, email ? { email } : undefined)\n }\n}\n\nexport class InvalidCredentialsError extends ApplicationError {\n constructor() {\n super('errors.auth.invalidCredentials', ERROR_CODES.AUTH.INVALID_CREDENTIALS)\n }\n}\n\nexport class InvalidPasswordError extends ApplicationError {\n constructor() {\n super('errors.auth.invalidPassword', ERROR_CODES.AUTH.INVALID_CREDENTIALS)\n }\n}\n\nexport class InvalidEmailError extends ApplicationError {\n constructor(email?: string) {\n super('errors.auth.invalidEmail', ERROR_CODES.VALIDATION.INVALID_FORMAT, email ? { email } : undefined)\n }\n}\n\nexport class SessionExpiredError extends ApplicationError {\n constructor() {\n super('errors.auth.sessionExpired', ERROR_CODES.AUTH.SESSION_EXPIRED)\n }\n}\n\nexport class EmailNotVerifiedError extends ApplicationError {\n constructor(email?: string) {\n super('errors.auth.emailNotVerified', ERROR_CODES.AUTH.EMAIL_NOT_VERIFIED, email ? { email } : undefined)\n }\n}\n\nexport class PasswordTooShortError extends ApplicationError {\n constructor(minLength: number) {\n super('errors.auth.passwordTooShort', ERROR_CODES.AUTH.PASSWORD_TOO_SHORT, { minLength })\n }\n}\n\nexport class PasswordTooLongError extends ApplicationError {\n constructor(maxLength: number) {\n super('errors.auth.passwordTooLong', ERROR_CODES.AUTH.PASSWORD_TOO_LONG, { maxLength })\n }\n}\n\nexport class AccountAlreadyExistsError extends ApplicationError {\n constructor(email?: string) {\n super('errors.auth.accountAlreadyExists', ERROR_CODES.AUTH.ACCOUNT_ALREADY_EXISTS, email ? { email } : undefined)\n }\n}\n\nexport class FailedToCreateUserError extends ApplicationError {\n constructor(reason?: string) {\n super('errors.auth.failedToCreateUser', ERROR_CODES.AUTH.FAILED_TO_CREATE_USER, reason ? { reason } : undefined)\n }\n}\n\nexport class FailedToCreateSessionError extends ApplicationError {\n constructor(reason?: string) {\n super('errors.auth.failedToCreateSession', ERROR_CODES.AUTH.FAILED_TO_CREATE_SESSION, reason ? { reason } : undefined)\n }\n}\n\nexport class FailedToUpdateUserError extends ApplicationError {\n constructor(reason?: string) {\n super('errors.auth.failedToUpdateUser', ERROR_CODES.AUTH.FAILED_TO_UPDATE_USER, reason ? { reason } : undefined)\n }\n}\n\nexport class SocialAccountLinkedError extends ApplicationError {\n constructor(provider?: string) {\n super('errors.auth.socialAccountLinked', ERROR_CODES.AUTH.SOCIAL_ACCOUNT_LINKED, provider ? { provider } : undefined)\n }\n}\n\nexport class CannotUnlinkLastAccountError extends ApplicationError {\n constructor() {\n super('errors.auth.cannotUnlinkLastAccount', ERROR_CODES.AUTH.CANNOT_UNLINK_LAST_ACCOUNT)\n }\n}\n\nexport class ProviderNotFoundError extends ApplicationError {\n constructor(provider?: string) {\n super('errors.auth.providerNotFound', ERROR_CODES.RESOURCE.NOT_FOUND, provider ? { provider } : undefined)\n }\n}\n\nexport class UserEmailNotFoundError extends ApplicationError {\n constructor() {\n super('errors.auth.userEmailNotFound', ERROR_CODES.RESOURCE.NOT_FOUND)\n }\n}\n\nexport class AccountNotFoundError extends ApplicationError {\n constructor() {\n super('errors.auth.accountNotFound', ERROR_CODES.RESOURCE.NOT_FOUND)\n }\n}\n\nexport class CredentialAccountNotFoundError extends ApplicationError {\n constructor() {\n super('errors.auth.credentialAccountNotFound', ERROR_CODES.RESOURCE.NOT_FOUND)\n }\n}\n\nexport class UserAlreadyHasPasswordError extends ApplicationError {\n constructor() {\n super('errors.auth.userAlreadyHasPassword', ERROR_CODES.RESOURCE.CONFLICT)\n }\n}\n\nexport class EmailCannotBeUpdatedError extends ApplicationError {\n constructor(reason?: string) {\n super('errors.auth.emailCannotBeUpdated', ERROR_CODES.VALIDATION.GENERIC, reason ? { reason } : undefined)\n }\n}\n\nexport class FailedToGetSessionError extends ApplicationError {\n constructor(reason?: string) {\n super('errors.auth.failedToGetSession', ERROR_CODES.SYSTEM.INTERNAL_ERROR, reason ? { reason } : undefined)\n }\n}\n\nexport class FailedToGetUserInfoError extends ApplicationError {\n constructor(reason?: string) {\n super('errors.auth.failedToGetUserInfo', ERROR_CODES.SYSTEM.INTERNAL_ERROR, reason ? { reason } : undefined)\n }\n}\n\nexport class IdTokenNotSupportedError extends ApplicationError {\n constructor() {\n super('errors.auth.invalidToken', ERROR_CODES.VALIDATION.GENERIC)\n }\n}\n\nexport class TokenExpiredError extends ApplicationError {\n constructor() {\n super('errors.auth.tokenExpired', ERROR_CODES.VALIDATION.GENERIC)\n }\n}\n","import { ApplicationError, ERROR_CODES } from 'stratal/errors'\n\nexport class InvalidTokenError extends ApplicationError {\n constructor() {\n super('errors.auth.invalidToken', ERROR_CODES.AUTH.INVALID_TOKEN)\n }\n}\n","import { ApplicationError, ERROR_CODES } from 'stratal/errors'\n\nexport class TokenRequiredError extends ApplicationError {\n constructor() {\n super('errors.auth.tokenRequired', ERROR_CODES.VALIDATION.REQUIRED_FIELD, { field: 'token' })\n }\n}\n","import { ApplicationError, ERROR_CODES } from 'stratal/errors'\n\nexport class VerificationFailedError extends ApplicationError {\n constructor() {\n super('errors.auth.verificationFailed', ERROR_CODES.AUTH.INVALID_CREDENTIALS)\n }\n}\n","import { type BASE_ERROR_CODES } from '@better-auth/core/error'\nimport { APIError } from 'better-auth/api'\nimport type { ApplicationError } from 'stratal/errors'\nimport { InternalError } from 'stratal/errors'\nimport {\n AccountAlreadyExistsError,\n AccountNotFoundError,\n CannotUnlinkLastAccountError,\n CredentialAccountNotFoundError,\n EmailCannotBeUpdatedError,\n EmailNotVerifiedError,\n FailedToCreateSessionError,\n FailedToCreateUserError,\n FailedToGetSessionError,\n FailedToGetUserInfoError,\n FailedToUpdateUserError,\n IdTokenNotSupportedError,\n InvalidCredentialsError,\n InvalidEmailError,\n InvalidPasswordError,\n InvalidTokenError,\n PasswordTooLongError,\n PasswordTooShortError,\n ProviderNotFoundError,\n SessionExpiredError,\n SocialAccountLinkedError,\n TokenExpiredError,\n UserAlreadyHasPasswordError,\n UserEmailNotFoundError,\n UserNotFoundError,\n} from '../errors'\n\n/**\n * Maps Better Auth API error codes to ApplicationError instances.\n */\nexport function mapBetterAuthError(error: APIError): ApplicationError {\n const errorCode = error.body?.code as keyof typeof BASE_ERROR_CODES | 'TOKEN_EXPIRED' | undefined\n\n if (error.status === 'FOUND') {\n const headers = error.headers as Headers\n const hasInvalidToken = headers.get('location')?.includes('INVALID_TOKEN')\n\n if (hasInvalidToken) {\n return new InvalidTokenError()\n }\n }\n\n if (!errorCode) {\n return new InternalError({\n originalError: `Better Auth error: ${error.message}`,\n stack: error.stack,\n })\n }\n\n // User errors\n if (errorCode === 'USER_NOT_FOUND') return new UserNotFoundError()\n if (errorCode === 'USER_EMAIL_NOT_FOUND') return new UserEmailNotFoundError()\n\n // Credential errors\n if (errorCode === 'INVALID_EMAIL_OR_PASSWORD') return new InvalidCredentialsError()\n if (errorCode === 'INVALID_PASSWORD') return new InvalidPasswordError()\n if (errorCode === 'INVALID_EMAIL') return new InvalidEmailError()\n\n // Session errors\n if (errorCode === 'SESSION_EXPIRED') return new SessionExpiredError()\n if (errorCode === 'FAILED_TO_CREATE_SESSION') return new FailedToCreateSessionError()\n if (errorCode === 'FAILED_TO_GET_SESSION') return new FailedToGetSessionError()\n\n // Email verification\n if (errorCode === 'EMAIL_NOT_VERIFIED') return new EmailNotVerifiedError()\n if (errorCode === 'EMAIL_CAN_NOT_BE_UPDATED') return new EmailCannotBeUpdatedError()\n\n // Password validation\n if (errorCode === 'PASSWORD_TOO_SHORT') return new PasswordTooShortError(8)\n if (errorCode === 'PASSWORD_TOO_LONG') return new PasswordTooLongError(128)\n\n // Account errors\n if (errorCode === 'USER_ALREADY_EXISTS' || errorCode === 'USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL') {\n return new AccountAlreadyExistsError()\n }\n if (errorCode === 'ACCOUNT_NOT_FOUND') return new AccountNotFoundError()\n if (errorCode === 'CREDENTIAL_ACCOUNT_NOT_FOUND') return new CredentialAccountNotFoundError()\n if (errorCode === 'FAILED_TO_UNLINK_LAST_ACCOUNT') return new CannotUnlinkLastAccountError()\n\n // User creation/update errors\n if (errorCode === 'FAILED_TO_CREATE_USER') return new FailedToCreateUserError()\n if (errorCode === 'FAILED_TO_UPDATE_USER') return new FailedToUpdateUserError()\n if (errorCode === 'FAILED_TO_GET_USER_INFO') return new FailedToGetUserInfoError()\n\n // Social account errors\n if (errorCode === 'SOCIAL_ACCOUNT_ALREADY_LINKED') return new SocialAccountLinkedError()\n if (errorCode === 'PROVIDER_NOT_FOUND') return new ProviderNotFoundError()\n\n // Token errors\n if (errorCode === 'ID_TOKEN_NOT_SUPPORTED') return new IdTokenNotSupportedError()\n if (errorCode === 'INVALID_TOKEN') return new IdTokenNotSupportedError()\n if (errorCode === 'TOKEN_EXPIRED') return new TokenExpiredError()\n\n // Password management\n if (errorCode === 'USER_ALREADY_HAS_PASSWORD') return new UserAlreadyHasPasswordError()\n\n // Unknown error code\n return new InternalError({\n originalError: `Better Auth error [${errorCode}]: ${error.message}`,\n stack: error.stack,\n })\n}\n\n/**\n * Type guard to check if an error is a Better Auth APIError\n */\nexport function isAPIError(error: unknown): error is APIError {\n return error instanceof APIError\n}\n","import type { BetterAuthOptions } from 'better-auth'\nimport { isAPIError, mapBetterAuthError } from './better-auth-error-handler'\n\n/**\n * Get shared Better Auth error handler configuration.\n * Use this in Better Auth config's onAPIError option.\n */\nexport function getErrorHandlerConfig(): BetterAuthOptions['onAPIError'] {\n return {\n throw: false,\n onError: (error) => {\n if (isAPIError(error)) {\n throw mapBetterAuthError(error)\n }\n throw error\n },\n }\n}\n\n/**\n * Wrap a Better Auth function in a try/catch block and map errors to ApplicationError.\n */\nexport const wrapBetterAuth = async <T>(fn: () => Promise<T>): Promise<T> => {\n try {\n return await fn()\n } catch (error) {\n if (isAPIError(error)) {\n throw mapBetterAuthError(error)\n }\n throw error\n }\n}\n","import type { Auth, BetterAuthOptions } from 'better-auth'\nimport { betterAuth } from 'better-auth'\nimport { inject } from 'tsyringe'\nimport { Transient } from 'stratal/di'\nimport { AUTH_OPTIONS, AUTH_SERVICE } from '../auth.tokens'\nimport { getErrorHandlerConfig } from '../utils'\n\n/**\n * AuthService\n *\n * Base authentication service using Better Auth.\n * Configured via AuthModule.forRootAsync() from the application layer.\n *\n * **Extensibility:**\n * Extend this class in application layer to add custom methods.\n *\n * @example\n * ```typescript\n * @Transient(AUTH_SERVICE)\n * export class AppAuthService extends AuthService<AuthOptions> {\n * async signInMagicLink(email: string) {\n * return wrapBetterAuth(async () => {\n * return this.auth.api.signInMagicLink({ body: { email }, headers: new Headers() })\n * })\n * }\n * }\n * ```\n */\n@Transient(AUTH_SERVICE)\nexport class AuthService<TOptions extends BetterAuthOptions = BetterAuthOptions> {\n private authInstance: Auth<TOptions>\n\n constructor(\n @inject(AUTH_OPTIONS) protected readonly options: TOptions\n ) {\n this.authInstance = betterAuth({\n ...this.options,\n onAPIError: getErrorHandlerConfig()\n }) as Auth<TOptions>\n }\n\n /**\n * Get the Better Auth instance\n */\n get auth(): Auth<TOptions> {\n return this.authInstance\n }\n}\n","/**\n * Auth Module\n *\n * Provides configurable authentication using Better Auth.\n * Use `forRootAsync` to configure Better Auth options from the application layer.\n *\n * @example\n * ```typescript\n * @Module({\n * imports: [\n * AuthModule.forRootAsync({\n * inject: [DI_TOKENS.Database, CONFIG_TOKENS.ConfigService],\n * useFactory: (db, config) => createAuthOptions(db, config)\n * })\n * ]\n * })\n * export class AppModule {}\n * ```\n */\n\nimport type { BetterAuthOptions } from 'better-auth'\nimport type { MiddlewareConfigurable, MiddlewareConsumer } from 'stratal/middleware'\nimport { Module } from 'stratal/module'\nimport type { AsyncModuleOptions, DynamicModule } from 'stratal/module'\nimport { AUTH_OPTIONS, AUTH_SERVICE } from './auth.tokens'\nimport { AuthContextMiddleware } from './middleware/auth-context.middleware'\nimport { SessionVerificationMiddleware } from './middleware/session-verification.middleware'\nimport { AuthService } from './services/auth.service'\n\n@Module({\n providers: []\n})\nexport class AuthModule implements MiddlewareConfigurable {\n /**\n * Configure auth middleware.\n *\n * Registers middlewares in order:\n * 1. AuthContextMiddleware - Creates and registers AuthContext in request container\n * 2. SessionVerificationMiddleware - Verifies session and populates AuthContext with userId\n */\n configure(consumer: MiddlewareConsumer): void {\n consumer\n .apply(AuthContextMiddleware)\n .forRoutes('*')\n\n consumer\n .apply(SessionVerificationMiddleware)\n .forRoutes('*')\n }\n\n /**\n * Configure AuthModule with async options factory\n */\n static forRootAsync<TOptions extends BetterAuthOptions>(\n options: AsyncModuleOptions<TOptions>\n ): DynamicModule {\n return {\n module: AuthModule,\n providers: [\n {\n provide: AUTH_OPTIONS,\n useFactory: options.useFactory,\n inject: options.inject\n },\n {\n provide: AUTH_SERVICE,\n useClass: AuthService\n }\n ]\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ //#region src/context/auth-context.d.ts
2
+ interface AuthInfo {
3
+ userId?: string;
4
+ }
5
+ declare class AuthContext {
6
+ protected userId?: string;
7
+ /**
8
+ * Set authentication context.
9
+ * This should be called once per request with user information.
10
+ */
11
+ setAuthContext(info: AuthInfo): void;
12
+ /**
13
+ * Get user ID if available.
14
+ * Returns undefined if no user is authenticated.
15
+ */
16
+ getUserId(): string | undefined;
17
+ /**
18
+ * Get user ID or throw if not authenticated.
19
+ * Use this when authentication is required.
20
+ */
21
+ requireUserId(): string;
22
+ /**
23
+ * Get full authentication context or throw if not initialized.
24
+ */
25
+ getAuthContext(): AuthInfo;
26
+ /**
27
+ * Check if user is authenticated.
28
+ */
29
+ isAuthenticated(): boolean;
30
+ /**
31
+ * Clear authentication context.
32
+ * Useful for testing or cleanup.
33
+ */
34
+ clearAuthContext(): void;
35
+ }
36
+ //#endregion
37
+ export { AuthInfo as n, AuthContext as t };
38
+ //# sourceMappingURL=auth-context-BD2ApWg1.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-context-BD2ApWg1.d.mts","names":[],"sources":["../src/context/auth-context.ts"],"mappings":";UAMiB,QAAA;EACf,MAAA;AAAA;AAAA,cAIW,WAAA;EAAA,UACD,MAAA;EALJ;AAGR;;;EAQE,cAAA,CAAe,IAAA,EAAM,QAAA;EANX;;;;EAcV,SAAA,CAAA;EAQA;;;;EAAA,aAAA,CAAA;EA+BgB;;;EApBhB,cAAA,CAAA,GAAkB,QAAA;;;;EAYlB,eAAA,CAAA;;;;;EAQA,gBAAA,CAAA;AAAA"}