@awesome-lang-auth/node 1.10.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 (262) hide show
  1. package/LICENSE +21 -0
  2. package/README.detailed.md +4059 -0
  3. package/README.md +248 -0
  4. package/dist/abstract/base-auth-strategy.abstract.d.ts +7 -0
  5. package/dist/abstract/base-auth-strategy.abstract.d.ts.map +1 -0
  6. package/dist/abstract/base-auth-strategy.abstract.js +7 -0
  7. package/dist/abstract/base-auth-strategy.abstract.js.map +1 -0
  8. package/dist/abstract/base-oauth-strategy.abstract.d.ts +27 -0
  9. package/dist/abstract/base-oauth-strategy.abstract.d.ts.map +1 -0
  10. package/dist/abstract/base-oauth-strategy.abstract.js +11 -0
  11. package/dist/abstract/base-oauth-strategy.abstract.js.map +1 -0
  12. package/dist/adapters/express.d.ts +45 -0
  13. package/dist/adapters/express.d.ts.map +1 -0
  14. package/dist/adapters/express.js +49 -0
  15. package/dist/adapters/express.js.map +1 -0
  16. package/dist/adapters/fastify.d.ts +72 -0
  17. package/dist/adapters/fastify.d.ts.map +1 -0
  18. package/dist/adapters/fastify.js +63 -0
  19. package/dist/adapters/fastify.js.map +1 -0
  20. package/dist/auth-configurator.d.ts +65 -0
  21. package/dist/auth-configurator.d.ts.map +1 -0
  22. package/dist/auth-configurator.js +127 -0
  23. package/dist/auth-configurator.js.map +1 -0
  24. package/dist/events/auth-event-bus.d.ts +68 -0
  25. package/dist/events/auth-event-bus.d.ts.map +1 -0
  26. package/dist/events/auth-event-bus.js +60 -0
  27. package/dist/events/auth-event-bus.js.map +1 -0
  28. package/dist/events/auth-event-names.d.ts +34 -0
  29. package/dist/events/auth-event-names.d.ts.map +1 -0
  30. package/dist/events/auth-event-names.js +41 -0
  31. package/dist/events/auth-event-names.js.map +1 -0
  32. package/dist/http-types.d.ts +135 -0
  33. package/dist/http-types.d.ts.map +1 -0
  34. package/dist/http-types.js +18 -0
  35. package/dist/http-types.js.map +1 -0
  36. package/dist/index.d.ts +80 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +88 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/interfaces/api-key-store.interface.d.ts +94 -0
  41. package/dist/interfaces/api-key-store.interface.d.ts.map +1 -0
  42. package/dist/interfaces/api-key-store.interface.js +3 -0
  43. package/dist/interfaces/api-key-store.interface.js.map +1 -0
  44. package/dist/interfaces/auth-strategy.interface.d.ts +6 -0
  45. package/dist/interfaces/auth-strategy.interface.d.ts.map +1 -0
  46. package/dist/interfaces/auth-strategy.interface.js +3 -0
  47. package/dist/interfaces/auth-strategy.interface.js.map +1 -0
  48. package/dist/interfaces/linked-accounts-store.interface.d.ts +74 -0
  49. package/dist/interfaces/linked-accounts-store.interface.d.ts.map +1 -0
  50. package/dist/interfaces/linked-accounts-store.interface.js +3 -0
  51. package/dist/interfaces/linked-accounts-store.interface.js.map +1 -0
  52. package/dist/interfaces/pending-link-store.interface.d.ts +77 -0
  53. package/dist/interfaces/pending-link-store.interface.d.ts.map +1 -0
  54. package/dist/interfaces/pending-link-store.interface.js +3 -0
  55. package/dist/interfaces/pending-link-store.interface.js.map +1 -0
  56. package/dist/interfaces/roles-permissions-store.interface.d.ts +129 -0
  57. package/dist/interfaces/roles-permissions-store.interface.d.ts.map +1 -0
  58. package/dist/interfaces/roles-permissions-store.interface.js +3 -0
  59. package/dist/interfaces/roles-permissions-store.interface.js.map +1 -0
  60. package/dist/interfaces/session-store.interface.d.ts +92 -0
  61. package/dist/interfaces/session-store.interface.d.ts.map +1 -0
  62. package/dist/interfaces/session-store.interface.js +3 -0
  63. package/dist/interfaces/session-store.interface.js.map +1 -0
  64. package/dist/interfaces/settings-store.interface.d.ts +91 -0
  65. package/dist/interfaces/settings-store.interface.d.ts.map +1 -0
  66. package/dist/interfaces/settings-store.interface.js +3 -0
  67. package/dist/interfaces/settings-store.interface.js.map +1 -0
  68. package/dist/interfaces/sse-distributor.interface.d.ts +25 -0
  69. package/dist/interfaces/sse-distributor.interface.d.ts.map +1 -0
  70. package/dist/interfaces/sse-distributor.interface.js +3 -0
  71. package/dist/interfaces/sse-distributor.interface.js.map +1 -0
  72. package/dist/interfaces/telemetry-store.interface.d.ts +72 -0
  73. package/dist/interfaces/telemetry-store.interface.d.ts.map +1 -0
  74. package/dist/interfaces/telemetry-store.interface.js +3 -0
  75. package/dist/interfaces/telemetry-store.interface.js.map +1 -0
  76. package/dist/interfaces/template-store.interface.d.ts +37 -0
  77. package/dist/interfaces/template-store.interface.d.ts.map +1 -0
  78. package/dist/interfaces/template-store.interface.js +3 -0
  79. package/dist/interfaces/template-store.interface.js.map +1 -0
  80. package/dist/interfaces/tenant-store.interface.d.ts +97 -0
  81. package/dist/interfaces/tenant-store.interface.d.ts.map +1 -0
  82. package/dist/interfaces/tenant-store.interface.js +3 -0
  83. package/dist/interfaces/tenant-store.interface.js.map +1 -0
  84. package/dist/interfaces/token-store.interface.d.ts +10 -0
  85. package/dist/interfaces/token-store.interface.d.ts.map +1 -0
  86. package/dist/interfaces/token-store.interface.js +3 -0
  87. package/dist/interfaces/token-store.interface.js.map +1 -0
  88. package/dist/interfaces/user-metadata-store.interface.d.ts +50 -0
  89. package/dist/interfaces/user-metadata-store.interface.d.ts.map +1 -0
  90. package/dist/interfaces/user-metadata-store.interface.js +3 -0
  91. package/dist/interfaces/user-metadata-store.interface.js.map +1 -0
  92. package/dist/interfaces/user-store.interface.d.ts +113 -0
  93. package/dist/interfaces/user-store.interface.d.ts.map +1 -0
  94. package/dist/interfaces/user-store.interface.js +3 -0
  95. package/dist/interfaces/user-store.interface.js.map +1 -0
  96. package/dist/interfaces/webhook-store.interface.d.ts +139 -0
  97. package/dist/interfaces/webhook-store.interface.d.ts.map +1 -0
  98. package/dist/interfaces/webhook-store.interface.js +3 -0
  99. package/dist/interfaces/webhook-store.interface.js.map +1 -0
  100. package/dist/middleware/api-key.middleware.d.ts +35 -0
  101. package/dist/middleware/api-key.middleware.d.ts.map +1 -0
  102. package/dist/middleware/api-key.middleware.js +45 -0
  103. package/dist/middleware/api-key.middleware.js.map +1 -0
  104. package/dist/middleware/auth.middleware.d.ts +13 -0
  105. package/dist/middleware/auth.middleware.d.ts.map +1 -0
  106. package/dist/middleware/auth.middleware.js +55 -0
  107. package/dist/middleware/auth.middleware.js.map +1 -0
  108. package/dist/middleware/jwks-auth.middleware.d.ts +18 -0
  109. package/dist/middleware/jwks-auth.middleware.d.ts.map +1 -0
  110. package/dist/middleware/jwks-auth.middleware.js +77 -0
  111. package/dist/middleware/jwks-auth.middleware.js.map +1 -0
  112. package/dist/models/api-key.model.d.ts +66 -0
  113. package/dist/models/api-key.model.d.ts.map +1 -0
  114. package/dist/models/api-key.model.js +3 -0
  115. package/dist/models/api-key.model.js.map +1 -0
  116. package/dist/models/auth-config.model.d.ts +387 -0
  117. package/dist/models/auth-config.model.d.ts.map +1 -0
  118. package/dist/models/auth-config.model.js +3 -0
  119. package/dist/models/auth-config.model.js.map +1 -0
  120. package/dist/models/errors.d.ts +7 -0
  121. package/dist/models/errors.d.ts.map +1 -0
  122. package/dist/models/errors.js +14 -0
  123. package/dist/models/errors.js.map +1 -0
  124. package/dist/models/session.model.d.ts +28 -0
  125. package/dist/models/session.model.d.ts.map +1 -0
  126. package/dist/models/session.model.js +3 -0
  127. package/dist/models/session.model.js.map +1 -0
  128. package/dist/models/tenant.model.d.ts +20 -0
  129. package/dist/models/tenant.model.d.ts.map +1 -0
  130. package/dist/models/tenant.model.js +3 -0
  131. package/dist/models/tenant.model.js.map +1 -0
  132. package/dist/models/token.model.d.ts +21 -0
  133. package/dist/models/token.model.d.ts.map +1 -0
  134. package/dist/models/token.model.js +3 -0
  135. package/dist/models/token.model.js.map +1 -0
  136. package/dist/models/user.model.d.ts +92 -0
  137. package/dist/models/user.model.d.ts.map +1 -0
  138. package/dist/models/user.model.js +3 -0
  139. package/dist/models/user.model.js.map +1 -0
  140. package/dist/router/admin.router.d.ts +188 -0
  141. package/dist/router/admin.router.d.ts.map +1 -0
  142. package/dist/router/admin.router.js +1507 -0
  143. package/dist/router/admin.router.js.map +1 -0
  144. package/dist/router/auth.router.d.ts +199 -0
  145. package/dist/router/auth.router.d.ts.map +1 -0
  146. package/dist/router/auth.router.js +1636 -0
  147. package/dist/router/auth.router.js.map +1 -0
  148. package/dist/router/openapi.d.ts +98 -0
  149. package/dist/router/openapi.d.ts.map +1 -0
  150. package/dist/router/openapi.js +1518 -0
  151. package/dist/router/openapi.js.map +1 -0
  152. package/dist/router/router-events.d.ts +38 -0
  153. package/dist/router/router-events.d.ts.map +1 -0
  154. package/dist/router/router-events.js +74 -0
  155. package/dist/router/router-events.js.map +1 -0
  156. package/dist/router/tools.router.d.ts +104 -0
  157. package/dist/router/tools.router.d.ts.map +1 -0
  158. package/dist/router/tools.router.js +227 -0
  159. package/dist/router/tools.router.js.map +1 -0
  160. package/dist/router/ui.router.d.ts +49 -0
  161. package/dist/router/ui.router.d.ts.map +1 -0
  162. package/dist/router/ui.router.js +272 -0
  163. package/dist/router/ui.router.js.map +1 -0
  164. package/dist/services/api-key.service.d.ts +53 -0
  165. package/dist/services/api-key.service.d.ts.map +1 -0
  166. package/dist/services/api-key.service.js +66 -0
  167. package/dist/services/api-key.service.js.map +1 -0
  168. package/dist/services/jwks.service.d.ts +73 -0
  169. package/dist/services/jwks.service.d.ts.map +1 -0
  170. package/dist/services/jwks.service.js +174 -0
  171. package/dist/services/jwks.service.js.map +1 -0
  172. package/dist/services/mailer.service.d.ts +30 -0
  173. package/dist/services/mailer.service.d.ts.map +1 -0
  174. package/dist/services/mailer.service.js +248 -0
  175. package/dist/services/mailer.service.js.map +1 -0
  176. package/dist/services/notification.service.d.ts +110 -0
  177. package/dist/services/notification.service.d.ts.map +1 -0
  178. package/dist/services/notification.service.js +79 -0
  179. package/dist/services/notification.service.js.map +1 -0
  180. package/dist/services/password.service.d.ts +5 -0
  181. package/dist/services/password.service.d.ts.map +1 -0
  182. package/dist/services/password.service.js +17 -0
  183. package/dist/services/password.service.js.map +1 -0
  184. package/dist/services/sms.service.d.ts +14 -0
  185. package/dist/services/sms.service.d.ts.map +1 -0
  186. package/dist/services/sms.service.js +51 -0
  187. package/dist/services/sms.service.js.map +1 -0
  188. package/dist/services/token.service.d.ts +62 -0
  189. package/dist/services/token.service.d.ts.map +1 -0
  190. package/dist/services/token.service.js +354 -0
  191. package/dist/services/token.service.js.map +1 -0
  192. package/dist/stores/memory-template.store.d.ts +12 -0
  193. package/dist/stores/memory-template.store.d.ts.map +1 -0
  194. package/dist/stores/memory-template.store.js +35 -0
  195. package/dist/stores/memory-template.store.js.map +1 -0
  196. package/dist/strategies/api-key/api-key.strategy.d.ts +72 -0
  197. package/dist/strategies/api-key/api-key.strategy.d.ts.map +1 -0
  198. package/dist/strategies/api-key/api-key.strategy.js +182 -0
  199. package/dist/strategies/api-key/api-key.strategy.js.map +1 -0
  200. package/dist/strategies/local/local.strategy.d.ts +19 -0
  201. package/dist/strategies/local/local.strategy.d.ts.map +1 -0
  202. package/dist/strategies/local/local.strategy.js +45 -0
  203. package/dist/strategies/local/local.strategy.js.map +1 -0
  204. package/dist/strategies/magic-link/magic-link.strategy.d.ts +8 -0
  205. package/dist/strategies/magic-link/magic-link.strategy.d.ts.map +1 -0
  206. package/dist/strategies/magic-link/magic-link.strategy.js +53 -0
  207. package/dist/strategies/magic-link/magic-link.strategy.js.map +1 -0
  208. package/dist/strategies/oauth/generic-oauth.strategy.d.ts +120 -0
  209. package/dist/strategies/oauth/generic-oauth.strategy.d.ts.map +1 -0
  210. package/dist/strategies/oauth/generic-oauth.strategy.js +88 -0
  211. package/dist/strategies/oauth/generic-oauth.strategy.js.map +1 -0
  212. package/dist/strategies/oauth/github.strategy.d.ts +31 -0
  213. package/dist/strategies/oauth/github.strategy.d.ts.map +1 -0
  214. package/dist/strategies/oauth/github.strategy.js +72 -0
  215. package/dist/strategies/oauth/github.strategy.js.map +1 -0
  216. package/dist/strategies/oauth/google.strategy.d.ts +31 -0
  217. package/dist/strategies/oauth/google.strategy.d.ts.map +1 -0
  218. package/dist/strategies/oauth/google.strategy.js +61 -0
  219. package/dist/strategies/oauth/google.strategy.js.map +1 -0
  220. package/dist/strategies/sms/sms.strategy.d.ts +7 -0
  221. package/dist/strategies/sms/sms.strategy.d.ts.map +1 -0
  222. package/dist/strategies/sms/sms.strategy.js +39 -0
  223. package/dist/strategies/sms/sms.strategy.js.map +1 -0
  224. package/dist/strategies/two-factor/totp.strategy.d.ts +12 -0
  225. package/dist/strategies/two-factor/totp.strategy.d.ts.map +1 -0
  226. package/dist/strategies/two-factor/totp.strategy.js +32 -0
  227. package/dist/strategies/two-factor/totp.strategy.js.map +1 -0
  228. package/dist/tools/auth-tools.d.ts +200 -0
  229. package/dist/tools/auth-tools.d.ts.map +1 -0
  230. package/dist/tools/auth-tools.js +232 -0
  231. package/dist/tools/auth-tools.js.map +1 -0
  232. package/dist/tools/sse-manager.d.ts +118 -0
  233. package/dist/tools/sse-manager.d.ts.map +1 -0
  234. package/dist/tools/sse-manager.js +163 -0
  235. package/dist/tools/sse-manager.js.map +1 -0
  236. package/dist/tools/sse-notify.decorator.d.ts +74 -0
  237. package/dist/tools/sse-notify.decorator.d.ts.map +1 -0
  238. package/dist/tools/sse-notify.decorator.js +78 -0
  239. package/dist/tools/sse-notify.decorator.js.map +1 -0
  240. package/dist/tools/webhook-action.d.ts +130 -0
  241. package/dist/tools/webhook-action.d.ts.map +1 -0
  242. package/dist/tools/webhook-action.js +144 -0
  243. package/dist/tools/webhook-action.js.map +1 -0
  244. package/dist/tools/webhook-sender.d.ts +31 -0
  245. package/dist/tools/webhook-sender.d.ts.map +1 -0
  246. package/dist/tools/webhook-sender.js +80 -0
  247. package/dist/tools/webhook-sender.js.map +1 -0
  248. package/dist/ui-assets/2fa.html +115 -0
  249. package/dist/ui-assets/account-conflict.html +108 -0
  250. package/dist/ui-assets/admin.css +263 -0
  251. package/dist/ui-assets/admin.js +1927 -0
  252. package/dist/ui-assets/auth.js +725 -0
  253. package/dist/ui-assets/base.css +219 -0
  254. package/dist/ui-assets/forgot-password.html +93 -0
  255. package/dist/ui-assets/link-verify.html +74 -0
  256. package/dist/ui-assets/login.html +135 -0
  257. package/dist/ui-assets/magic-link.html +112 -0
  258. package/dist/ui-assets/register.html +122 -0
  259. package/dist/ui-assets/reset-password.html +103 -0
  260. package/dist/ui-assets/ui-i18n-keys.json +78 -0
  261. package/dist/ui-assets/verify-email.html +66 -0
  262. package/package.json +89 -0
@@ -0,0 +1,387 @@
1
+ import { BaseUser } from './user.model';
2
+ import { ITemplateStore } from '../interfaces/template-store.interface';
3
+ /**
4
+ * Configuration for the built-in HTTP-based mailer transport.
5
+ *
6
+ * The mailer makes a POST request to `endpoint` with a JSON body:
7
+ * ```
8
+ * POST {endpoint}
9
+ * X-API-Key: {apiKey}
10
+ * Content-Type: application/json
11
+ *
12
+ * { "to": "...", "subject": "...", "html": "...", "text": "...", "from": "...", "fromName": "...", "provider": "..." }
13
+ * ```
14
+ *
15
+ * If you prefer to control email sending yourself, omit `mailer` and use
16
+ * the `sendMagicLink`, `sendPasswordReset`, and `sendWelcome` callbacks instead.
17
+ */
18
+ export interface MailerConfig {
19
+ /** Full URL of the HTTP mailer endpoint (receives a POST with JSON body). */
20
+ endpoint: string;
21
+ /** API key sent as the `X-API-Key` header. */
22
+ apiKey: string;
23
+ /** Sender email address. */
24
+ from: string;
25
+ /** Sender display name (optional). */
26
+ fromName?: string;
27
+ /** Sender Provider (optional). */
28
+ provider?: string;
29
+ /**
30
+ * Default language for built-in email templates.
31
+ * Supported: `'en'` (default) | `'it'`.
32
+ * Can be overridden per-request via `emailLang` in the request body.
33
+ */
34
+ defaultLang?: 'en' | 'it';
35
+ }
36
+ /**
37
+ * Identity Provider (IdP) mode configuration block.
38
+ *
39
+ * When `enabled`, this instance acts as a central Identity Provider:
40
+ * - Generates/loads an RSA-2048 keypair and signs JWTs with RS256
41
+ * - Exposes a public JWKS endpoint so downstream Resource Servers can
42
+ * verify tokens without sharing a secret
43
+ *
44
+ * All existing HS256 behaviour is preserved and the two modes can coexist.
45
+ */
46
+ export interface IdProviderConfig {
47
+ /**
48
+ * Enable IdP mode. When true (or when `privateKey` is set), `TokenService.generateIdProviderTokenPair()`
49
+ * signs with RS256 and a JWKS endpoint is auto-registered.
50
+ * Presence of `privateKey` is sufficient — `enabled: true` is not required.
51
+ * @default false
52
+ */
53
+ enabled?: boolean;
54
+ /**
55
+ * PEM-encoded RSA private key. If omitted a keypair is auto-generated
56
+ * at startup and stored in memory (ephemeral — for dev only).
57
+ * In production inject via environment variable.
58
+ */
59
+ privateKey?: string;
60
+ /**
61
+ * PEM-encoded RSA public key. Auto-derived from `privateKey` if omitted.
62
+ */
63
+ publicKey?: string;
64
+ /**
65
+ * Path at which the JWKS endpoint is exposed.
66
+ * @default '/.well-known/jwks.json'
67
+ */
68
+ jwksPath?: string;
69
+ /**
70
+ * `iss` (issuer) claim embedded in every IdP-issued JWT.
71
+ * Resource Servers validate this claim.
72
+ * When omitted, no `iss` claim is embedded in the JWT.
73
+ * Example: `'https://auth.myplatform.com'`
74
+ */
75
+ issuer?: string;
76
+ /**
77
+ * Default token expiry for IdP-issued tokens.
78
+ * Overrides `accessTokenExpiresIn` when IdP mode is enabled.
79
+ * @default '30d'
80
+ */
81
+ tokenExpiry?: string;
82
+ /**
83
+ * Refresh token expiry for IdP-issued tokens.
84
+ * In IdP mode the refresh token is also signed with RS256 using the same private key.
85
+ * Falls back to `AuthConfig.refreshTokenExpiresIn` when omitted.
86
+ * @default '90d'
87
+ */
88
+ refreshTokenExpiry?: string;
89
+ /**
90
+ * CORS origins allowed to fetch the JWKS endpoint.
91
+ * @default '*'
92
+ */
93
+ jwksCorsOrigins?: string | string[];
94
+ }
95
+ /**
96
+ * Resource Server mode configuration block.
97
+ *
98
+ * When `enabled`, this instance validates incoming Bearer tokens against a
99
+ * remote JWKS endpoint (issued by a central IdP) instead of a local secret.
100
+ * Login/register routes are not registered.
101
+ */
102
+ export interface ResourceServerConfig {
103
+ /**
104
+ * Enable Resource Server mode. When true, the auth middleware switches to
105
+ * JWKS-based verification for Bearer tokens.
106
+ * @default false
107
+ */
108
+ enabled: boolean;
109
+ /**
110
+ * Full URL of the IdP's JWKS endpoint.
111
+ * Example: `'https://auth.myplatform.com/.well-known/jwks.json'`
112
+ */
113
+ jwksUrl: string;
114
+ /**
115
+ * Expected `iss` claim. Tokens with a different issuer are rejected.
116
+ * When omitted, the `iss` claim on incoming tokens is not validated.
117
+ */
118
+ issuer?: string;
119
+ /**
120
+ * JWKS public key cache TTL in milliseconds.
121
+ * The key is re-fetched once per TTL to support key rotation.
122
+ * @default 3_600_000 (1 hour)
123
+ */
124
+ jwksCacheTtl?: number;
125
+ /**
126
+ * Timeout in ms for the JWKS fetch request.
127
+ * @default 5000
128
+ */
129
+ jwksFetchTimeout?: number;
130
+ }
131
+ export interface AuthConfig {
132
+ accessTokenSecret: string;
133
+ refreshTokenSecret: string;
134
+ accessTokenExpiresIn?: string;
135
+ refreshTokenExpiresIn?: string;
136
+ /**
137
+ * The global base path where the auth router is mounted in your Express app
138
+ * (e.g. `'/api/auth'` or `'/auth'`).
139
+ *
140
+ * This acts as the single source of truth for email links, cookie paths, and
141
+ * redirects. It can be overridden per-router instance by passing a local
142
+ * `apiPrefix` via the `RouterOptions`.
143
+ */
144
+ apiPrefix?: string;
145
+ cookieOptions?: {
146
+ secure?: boolean;
147
+ sameSite?: 'strict' | 'lax' | 'none';
148
+ domain?: string;
149
+ path?: string;
150
+ /**
151
+ * Path for the refresh-token cookie.
152
+ * Defaults to `'/'` so the cookie is sent on every request and the
153
+ * router can be mounted at any prefix.
154
+ * For extra security you can restrict it to your refresh endpoint path
155
+ * (e.g. `'/auth/refresh'`).
156
+ */
157
+ refreshTokenPath?: string;
158
+ };
159
+ /**
160
+ * Anti-CSRF protection using the double-submit cookie pattern.
161
+ *
162
+ * When enabled the library sets a non-HttpOnly `csrf-token` cookie alongside
163
+ * the JWT cookies. Client-side JavaScript must read this cookie and include
164
+ * its value in the `X-CSRF-Token` header on every authenticated request.
165
+ * The `createAuthMiddleware` middleware will then verify the header matches
166
+ * the cookie.
167
+ *
168
+ * Recommended when `cookieOptions.sameSite` is `'none'` or when you need
169
+ * defence-in-depth beyond `sameSite: 'lax'`.
170
+ */
171
+ csrf?: {
172
+ /** @default false */
173
+ enabled?: boolean;
174
+ };
175
+ bcryptSaltRounds?: number;
176
+ sms?: {
177
+ endpoint: string;
178
+ apiKey: string;
179
+ username: string;
180
+ password: string;
181
+ codeExpiresInMinutes?: number;
182
+ };
183
+ email?: {
184
+ /**
185
+ * Base URL of your site, used to build reset / magic-link URLs and as the
186
+ * post-OAuth login redirect destination.
187
+ *
188
+ * - **Single string** (`'https://yourapp.com'`): used as-is for all email
189
+ * links and OAuth redirects.
190
+ * - **Array of strings** (`['https://app.example.com', 'https://admin.example.com']`):
191
+ * the router dynamically picks the entry that matches the `Origin` (or
192
+ * `Referer`) header of the incoming request. For email links the first
193
+ * entry in the array is used as the default. Any picked URL is also
194
+ * validated against this allowlist before being used in a redirect, so
195
+ * only pre-approved origins can receive tokens.
196
+ *
197
+ * When used with OAuth, the resolved URL is encoded into the OAuth `state`
198
+ * parameter during the initiation request, so the callback can redirect the
199
+ * browser back to the exact origin that started the flow.
200
+ *
201
+ * Example: `'https://yourapp.com'`
202
+ */
203
+ siteUrl?: string | string[];
204
+ /**
205
+ * Concrete HTTP mailer transport configuration.
206
+ * When set, the library sends emails automatically using the built-in
207
+ * templates (password reset, magic link, welcome) via HTTP POST.
208
+ * Callback overrides below always take precedence over the mailer transport.
209
+ */
210
+ mailer?: MailerConfig;
211
+ /**
212
+ * Override: custom magic-link email sender.
213
+ * When provided, this callback is used instead of `mailer`.
214
+ */
215
+ sendMagicLink?: (to: string, token: string, link: string, lang?: string) => Promise<void>;
216
+ /**
217
+ * Override: custom password-reset email sender.
218
+ * When provided, this callback is used instead of `mailer`.
219
+ */
220
+ sendPasswordReset?: (to: string, token: string, link: string, lang?: string) => Promise<void>;
221
+ /**
222
+ * Override: custom welcome email sender.
223
+ * When provided, this callback is used instead of `mailer`.
224
+ */
225
+ sendWelcome?: (to: string, data: Record<string, unknown>, lang?: string) => Promise<void>;
226
+ /**
227
+ * Override: custom email-verification sender.
228
+ * When provided, this callback is used instead of `mailer`.
229
+ */
230
+ sendVerificationEmail?: (to: string, token: string, link: string, lang?: string) => Promise<void>;
231
+ /**
232
+ * Override: custom email-changed notification sender.
233
+ * Called after the change-email flow completes.
234
+ * When provided, this callback is used instead of `mailer`.
235
+ */
236
+ sendEmailChanged?: (to: string, newEmail: string, lang?: string) => Promise<void>;
237
+ };
238
+ oauth?: {
239
+ google?: {
240
+ clientId: string;
241
+ clientSecret: string;
242
+ callbackUrl: string;
243
+ projectId?: string;
244
+ };
245
+ github?: {
246
+ clientId: string;
247
+ clientSecret: string;
248
+ callbackUrl: string;
249
+ };
250
+ };
251
+ twoFactor?: {
252
+ appName?: string;
253
+ };
254
+ /**
255
+ * Controls how strictly the server enforces email verification on login.
256
+ *
257
+ * - `'none'` — email verification is never required (default).
258
+ * - `'lazy'` — the user may log in while their email is unverified, but
259
+ * only until `BaseUser.emailVerificationDeadline` is reached.
260
+ * After the deadline the login is blocked until the email is
261
+ * confirmed. Set the deadline field when creating the user
262
+ * (e.g. `createdAt + lazyGracePeriodDays`).
263
+ * - `'strict'` — the login is blocked immediately if the email is not
264
+ * verified (`isEmailVerified !== true`).
265
+ *
266
+ * When not set, falls back to the legacy `requireEmailVerification` boolean:
267
+ * `true` → `'strict'`, `false` / `undefined` → `'none'`.
268
+ */
269
+ emailVerificationMode?: 'none' | 'lazy' | 'strict';
270
+ /**
271
+ * @deprecated Use `emailVerificationMode: 'strict'` instead.
272
+ *
273
+ * When `true`, equivalent to `emailVerificationMode: 'strict'`.
274
+ * Ignored when `emailVerificationMode` is explicitly set.
275
+ */
276
+ requireEmailVerification?: boolean;
277
+ /**
278
+ * Optional callback to inject custom claims into both the access and refresh JWTs.
279
+ *
280
+ * Called with the authenticated/resolved `user` object every time a token pair is
281
+ * generated. The object returned by this callback is **merged** on top of the
282
+ * standard `{ sub, email, role }` claims, so you can add roles, permissions, tenant
283
+ * IDs, or any other project-specific data.
284
+ *
285
+ * Do not return a `purpose` claim: it marks tokens that are not sessions
286
+ * (`purpose: '2fa'` on the 2FA step-up token, `purpose: 'admin'` on the
287
+ * admin console token), so the library drops it from session tokens.
288
+ *
289
+ * @example
290
+ * ```ts
291
+ * buildTokenPayload: (user) => ({
292
+ * permissions: user.permissions,
293
+ * tenantId: user.tenantId,
294
+ * }),
295
+ * ```
296
+ */
297
+ buildTokenPayload?: (user: BaseUser) => Record<string, unknown>;
298
+ /**
299
+ * Optional built-in static UI configuration.
300
+ */
301
+ ui?: {
302
+ /** Whether to enable and serve the static UI. Default is false. */
303
+ enabled?: boolean;
304
+ /**
305
+ * Headless UI mode.
306
+ *
307
+ * When `true`, the UI router:
308
+ * - Still serves `auth.js` and other static assets (CSS, JS) at `/ui/assets/*`
309
+ * so they can be loaded from a remote SPA via a `<script>` tag.
310
+ * - Still exposes the `/ui/config` endpoint.
311
+ * - Returns **404** for all HTML page routes (`/login`, `/register`, …) because
312
+ * the hosting SPA provides its own login pages.
313
+ *
314
+ * `auth.js` automatically detects this flag from the `/ui/config` response and
315
+ * disables any `window.location.href` redirects on session expiry or refresh
316
+ * failure — preventing the library from navigating away from the external SPA.
317
+ *
318
+ * Typical use case: a Docusaurus documentation site or any React/Vue/Angular SPA
319
+ * that shares the same auth backend but handles its own login flow.
320
+ *
321
+ * @default false
322
+ */
323
+ headless?: boolean;
324
+ /** The URL where the login page is served (used for redirects). Default: `/auth/ui/login` */
325
+ loginUrl?: string;
326
+ /** Optional URL where the register page is served. Default: `/auth/ui/register` */
327
+ registerUrl?: string;
328
+ /**
329
+ * Optional raw CSS string injected into every UI page via a `<style>` tag.
330
+ * Use this to override any CSS variable or rule without providing a full stylesheet.
331
+ * See the Built-in UI documentation for the full list of overridable CSS variables.
332
+ */
333
+ customCss?: string;
334
+ /** Optional URL to a custom logo image displayed in the UI forms. */
335
+ customLogo?: string;
336
+ primaryColor?: string;
337
+ secondaryColor?: string;
338
+ logoUrl?: string;
339
+ siteName?: string;
340
+ /**
341
+ * Background color for the entire page (sets the `--bg-color` CSS variable).
342
+ * Accepts any valid CSS color value, e.g. `'#f0f4ff'` or `'rgba(240,244,255,1)'`.
343
+ */
344
+ bgColor?: string;
345
+ /**
346
+ * URL of a background image for the entire page (sets the `--bg-image` CSS variable).
347
+ * The image is rendered with `background-size: cover; background-position: center`.
348
+ * Example: `'https://example.com/auth-bg.jpg'`
349
+ */
350
+ bgImage?: string;
351
+ /**
352
+ * Background color for the form/card container (sets the `--card-bg` CSS variable).
353
+ * Accepts any valid CSS color value. Default is `#ffffff`.
354
+ */
355
+ cardBg?: string;
356
+ };
357
+ /**
358
+ * Session management configuration.
359
+ */
360
+ session?: {
361
+ /**
362
+ * Controls how strictly the library verifies session validity against the `sessionStore`.
363
+ *
364
+ * - `allcalls`: Verify the session on every single request. Maximum security, requires a low-latency store (Redis).
365
+ * - `refresh`: Verify the session only during token refresh. High performance with good security.
366
+ * - `none`: Sessions are created and tracked in the store but never verified during requests.
367
+ *
368
+ * @default 'refresh'
369
+ */
370
+ checkOn?: 'allcalls' | 'refresh' | 'none';
371
+ };
372
+ /**
373
+ * Optional template store for custom email and UI translations.
374
+ */
375
+ templateStore?: ITemplateStore;
376
+ /**
377
+ * Identity Provider (IdP) mode configuration.
378
+ * See {@link IdProviderConfig} for full field documentation.
379
+ */
380
+ idProvider?: IdProviderConfig;
381
+ /**
382
+ * Resource Server mode configuration.
383
+ * See {@link ResourceServerConfig} for full field documentation.
384
+ */
385
+ resourceServer?: ResourceServerConfig;
386
+ }
387
+ //# sourceMappingURL=auth-config.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-config.model.d.ts","sourceRoot":"","sources":["../../src/models/auth-config.model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=auth-config.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-config.model.js","sourceRoot":"","sources":["../../src/models/auth-config.model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export declare class AuthError extends Error {
2
+ readonly code: string;
3
+ readonly statusCode: number;
4
+ readonly data?: Record<string, unknown> | undefined;
5
+ constructor(message: string, code: string, statusCode?: number, data?: Record<string, unknown> | undefined);
6
+ }
7
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/models/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;aAGhB,IAAI,EAAE,MAAM;aACZ,UAAU,EAAE,MAAM;aAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAH9C,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,MAAY,EACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKjD"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthError = void 0;
4
+ class AuthError extends Error {
5
+ constructor(message, code, statusCode = 401, data) {
6
+ super(message);
7
+ this.code = code;
8
+ this.statusCode = statusCode;
9
+ this.data = data;
10
+ this.name = 'AuthError';
11
+ }
12
+ }
13
+ exports.AuthError = AuthError;
14
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/models/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAU,SAAQ,KAAK;IAClC,YACE,OAAe,EACC,IAAY,EACZ,aAAqB,GAAG,EACxB,IAA8B;QAE9C,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAQ;QACZ,eAAU,GAAV,UAAU,CAAc;QACxB,SAAI,GAAJ,IAAI,CAA0B;QAG9C,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAVD,8BAUC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Represents an active user session with optional device/context metadata.
3
+ *
4
+ * Implementations of `ISessionStore` use this shape to persist and retrieve
5
+ * session records. All fields beyond `sessionHandle`, `userId`, `createdAt`,
6
+ * and `expiresAt` are optional so you only store what you actually need.
7
+ */
8
+ export interface SessionInfo {
9
+ /** Unique opaque identifier for this session (e.g. a UUID or a hex token). */
10
+ sessionHandle: string;
11
+ /** ID of the user who owns this session. */
12
+ userId: string;
13
+ /** Tenant ID — set when multi-tenancy is enabled. */
14
+ tenantId?: string;
15
+ /** When the session was created. */
16
+ createdAt: Date;
17
+ /** When the session expires. */
18
+ expiresAt: Date;
19
+ /** When the session was last used (updated on each authenticated request). */
20
+ lastActiveAt?: Date;
21
+ /** User-Agent header from the client that created the session. */
22
+ userAgent?: string;
23
+ /** IP address that created the session. */
24
+ ipAddress?: string;
25
+ /** Arbitrary session-level data (e.g. device name, geo-location, etc.). */
26
+ data?: Record<string, unknown>;
27
+ }
28
+ //# sourceMappingURL=session.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.model.d.ts","sourceRoot":"","sources":["../../src/models/session.model.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,aAAa,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,SAAS,EAAE,IAAI,CAAC;IAChB,gCAAgC;IAChC,SAAS,EAAE,IAAI,CAAC;IAChB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=session.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.model.js","sourceRoot":"","sources":["../../src/models/session.model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Represents a tenant in a multi-tenant application.
3
+ *
4
+ * `ITenantStore` implementations use this shape to create and query tenants.
5
+ * The `config` field can hold arbitrary per-tenant settings (e.g. allowed
6
+ * OAuth providers, custom branding, feature flags).
7
+ */
8
+ export interface Tenant {
9
+ /** Unique identifier for the tenant (e.g. slug, UUID, or subdomain). */
10
+ id: string;
11
+ /** Human-readable display name. */
12
+ name: string;
13
+ /** Whether the tenant is currently active. Defaults to `true`. */
14
+ isActive?: boolean;
15
+ /** Arbitrary per-tenant configuration (allowed auth methods, branding, etc.). */
16
+ config?: Record<string, unknown>;
17
+ /** When the tenant was created. */
18
+ createdAt?: Date;
19
+ }
20
+ //# sourceMappingURL=tenant.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.model.d.ts","sourceRoot":"","sources":["../../src/models/tenant.model.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACrB,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,mCAAmC;IACnC,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=tenant.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.model.js","sourceRoot":"","sources":["../../src/models/tenant.model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ export interface TokenPair {
2
+ accessToken: string;
3
+ refreshToken: string;
4
+ }
5
+ export interface AccessTokenPayload {
6
+ sub: string;
7
+ email: string;
8
+ role?: string;
9
+ loginProvider?: string;
10
+ isEmailVerified?: boolean;
11
+ isTotpEnabled?: boolean;
12
+ /** Session ID (Handle) for stateful session validation. */
13
+ sid?: string;
14
+ iat?: number;
15
+ exp?: number;
16
+ /** Issuer claim — populated when IdP mode is enabled. */
17
+ iss?: string;
18
+ /** Any additional custom claims embedded in the JWT. */
19
+ [key: string]: unknown;
20
+ }
21
+ //# sourceMappingURL=token.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.model.d.ts","sourceRoot":"","sources":["../../src/models/token.model.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IAGb,wDAAwD;IACxD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=token.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.model.js","sourceRoot":"","sources":["../../src/models/token.model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,92 @@
1
+ export interface BaseUser {
2
+ id: string;
3
+ email: string;
4
+ password?: string;
5
+ role?: string;
6
+ /** First name of the user (optional). */
7
+ firstName?: string | null;
8
+ /** Last name / surname of the user (optional). */
9
+ lastName?: string | null;
10
+ /**
11
+ * Authentication provider used to create/link this account.
12
+ * Examples: `'local'`, `'google'`, `'github'`, `'magic-link'`, `'sms'`.
13
+ * Defaults to `'local'` when not set.
14
+ */
15
+ loginProvider?: string | null;
16
+ refreshToken?: string | null;
17
+ refreshTokenExpiry?: Date | null;
18
+ resetToken?: string | null;
19
+ resetTokenExpiry?: Date | null;
20
+ /**
21
+ * TOTP secret stored after the user completes the 2FA setup flow
22
+ * (`POST /auth/2fa/verify-setup`). When `null` the user has not paired an
23
+ * authenticator app yet.
24
+ */
25
+ totpSecret?: string | null;
26
+ isEmailVerified?: boolean;
27
+ /**
28
+ * Whether the user has successfully completed the TOTP setup flow.
29
+ * Set to `true` by `POST /auth/2fa/verify-setup`, set to `false` by
30
+ * `POST /auth/2fa/disable`.
31
+ */
32
+ isTotpEnabled?: boolean;
33
+ magicLinkToken?: string | null;
34
+ magicLinkTokenExpiry?: Date | null;
35
+ smsCode?: string | null;
36
+ smsCodeExpiry?: Date | null;
37
+ phoneNumber?: string | null;
38
+ /** When `true` this user must have 2FA active to complete login. */
39
+ require2FA?: boolean;
40
+ /** Token sent in the email-verification link. */
41
+ emailVerificationToken?: string | null;
42
+ /** Expiry for the email-verification token. */
43
+ emailVerificationTokenExpiry?: Date | null;
44
+ /**
45
+ * Deadline by which the user must verify their email address when
46
+ * `emailVerificationMode` is set to `'lazy'`. After this date the login
47
+ * is blocked until the email is confirmed. Set this field (e.g. to
48
+ * `createdAt + gracePeriodDays`) when creating a new user; leave `null` to
49
+ * keep the user in a permanent grace period.
50
+ */
51
+ emailVerificationDeadline?: Date | null;
52
+ /** New email address awaiting confirmation in the change-email flow. */
53
+ pendingEmail?: string | null;
54
+ /** Token sent to the new address in the change-email flow. */
55
+ emailChangeToken?: string | null;
56
+ /** Expiry for the email-change token. */
57
+ emailChangeTokenExpiry?: Date | null;
58
+ /** Email address being linked in the account-link flow. */
59
+ accountLinkPendingEmail?: string | null;
60
+ /** Provider name being linked in the account-link flow (defaults to `'email'`). */
61
+ accountLinkPendingProvider?: string | null;
62
+ /** Token sent to the target email in the account-link flow. */
63
+ accountLinkToken?: string | null;
64
+ /** Expiry for the account-link token. */
65
+ accountLinkTokenExpiry?: Date | null;
66
+ /**
67
+ * The unique user identifier returned by the OAuth provider (e.g. Google's
68
+ * `sub` claim, GitHub's numeric user id). Used with `loginProvider` to look
69
+ * up existing OAuth accounts without relying on email matching, which is
70
+ * vulnerable to account-takeover attacks.
71
+ *
72
+ * Store this alongside `loginProvider` so that `IUserStore.findByProviderAccount`
73
+ * can perform a precise (`provider` + `providerAccountId`) lookup.
74
+ */
75
+ providerAccountId?: string | null;
76
+ /**
77
+ * Timestamp of the user's last successful login. Useful for purging inactive
78
+ * users or for auditing purposes.
79
+ */
80
+ lastLogin?: Date | null;
81
+ /**
82
+ * When `true` this user has administrator privileges.
83
+ *
84
+ * Used by the `'is-admin-flag'` access policy on `createAdminRouter()`.
85
+ * For more granular RBAC control use `IRolesPermissionsStore` and a custom
86
+ * `accessPolicy` function instead.
87
+ *
88
+ * @since 1.8.0
89
+ */
90
+ isAdmin?: boolean;
91
+ }
92
+ //# sourceMappingURL=user.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.model.d.ts","sourceRoot":"","sources":["../../src/models/user.model.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kBAAkB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC/B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oBAAoB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,+CAA+C;IAC/C,4BAA4B,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3C;;;;;;OAMG;IACH,yBAAyB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxC,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,yCAAyC;IACzC,sBAAsB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACrC,2DAA2D;IAC3D,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,mFAAmF;IACnF,0BAA0B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,yCAAyC;IACzC,sBAAsB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACrC;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;;OAGG;IACH,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=user.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.model.js","sourceRoot":"","sources":["../../src/models/user.model.ts"],"names":[],"mappings":""}