@veloxts/auth 0.3.3 → 0.3.4

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 (54) hide show
  1. package/README.md +755 -30
  2. package/dist/adapter.d.ts +710 -0
  3. package/dist/adapter.d.ts.map +1 -0
  4. package/dist/adapter.js +581 -0
  5. package/dist/adapter.js.map +1 -0
  6. package/dist/adapters/better-auth.d.ts +271 -0
  7. package/dist/adapters/better-auth.d.ts.map +1 -0
  8. package/dist/adapters/better-auth.js +341 -0
  9. package/dist/adapters/better-auth.js.map +1 -0
  10. package/dist/adapters/index.d.ts +28 -0
  11. package/dist/adapters/index.d.ts.map +1 -0
  12. package/dist/adapters/index.js +28 -0
  13. package/dist/adapters/index.js.map +1 -0
  14. package/dist/csrf.d.ts +294 -0
  15. package/dist/csrf.d.ts.map +1 -0
  16. package/dist/csrf.js +396 -0
  17. package/dist/csrf.js.map +1 -0
  18. package/dist/guards.d.ts +139 -0
  19. package/dist/guards.d.ts.map +1 -0
  20. package/dist/guards.js +247 -0
  21. package/dist/guards.js.map +1 -0
  22. package/dist/hash.d.ts +85 -0
  23. package/dist/hash.d.ts.map +1 -0
  24. package/dist/hash.js +220 -0
  25. package/dist/hash.js.map +1 -0
  26. package/dist/index.d.ts +25 -32
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +63 -36
  29. package/dist/index.js.map +1 -1
  30. package/dist/jwt.d.ts +128 -0
  31. package/dist/jwt.d.ts.map +1 -0
  32. package/dist/jwt.js +363 -0
  33. package/dist/jwt.js.map +1 -0
  34. package/dist/middleware.d.ts +87 -0
  35. package/dist/middleware.d.ts.map +1 -0
  36. package/dist/middleware.js +241 -0
  37. package/dist/middleware.js.map +1 -0
  38. package/dist/plugin.d.ts +107 -0
  39. package/dist/plugin.d.ts.map +1 -0
  40. package/dist/plugin.js +174 -0
  41. package/dist/plugin.js.map +1 -0
  42. package/dist/policies.d.ts +137 -0
  43. package/dist/policies.d.ts.map +1 -0
  44. package/dist/policies.js +240 -0
  45. package/dist/policies.js.map +1 -0
  46. package/dist/session.d.ts +494 -0
  47. package/dist/session.d.ts.map +1 -0
  48. package/dist/session.js +795 -0
  49. package/dist/session.js.map +1 -0
  50. package/dist/types.d.ts +251 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +33 -0
  53. package/dist/types.js.map +1 -0
  54. package/package.json +38 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEjG,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAMvC;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B,qBAAqB,GACrB,uBAAuB,GACvB,qBAAqB,GACrB,wBAAwB,GACxB,8BAA8B,GAC9B,wBAAwB,GACxB,wBAAwB,CAAC;AAE7B;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAEvB,kCAAkC;IAClC,SAAkB,IAAI,EAAE,oBAAoB,CAAC;gBAEjC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,KAAK;CAO3F;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAElB,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IAEf,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAElB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IAEX,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IAEd,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,gCAAgC;IAChC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,kCAAkC;IAClC,IAAI,EAAE,WAAW,CAAC;IAElB,qCAAqC;IACrC,OAAO,EAAE,cAAc,CAAC;CACzB;AAMD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjG;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;;OAOG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAE9B;;;;;OAKG;IACH,OAAO,EAAE,kBAAkB,CAAC;IAE5B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;IAEnD;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CACR,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,KAChB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,MAAM,WAAW,WAAW,CAAC,OAAO,SAAS,iBAAiB,GAAG,iBAAiB;IAChF;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;;;;;;;;OAUG;IACH,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiDG;IACH,UAAU,CACR,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,oBAAoB,GAAG,IAAI,CAAC;IAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,SAAS,IAAI,YAAY,EAAE,CAAC;IAE5B;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,CACb,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAE9B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEjC;;;;;;;;OAQG;IACH,eAAe,CAAC,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAE5E;;;;;;;;OAQG;IACH,cAAc,CAAC,CACb,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,oBAAoB,GAAG,IAAI,CAAC;CACvE;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,iBAAiB,GAAG,iBAAiB,EACrF,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,GAC5B,WAAW,CAAC,OAAO,CAAC,CAItB;AAoDD;;GAEG;AACH,MAAM,WAAW,wBAAwB,CAAC,OAAO,SAAS,iBAAiB,GAAG,iBAAiB;IAC7F;;OAEG;IACH,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAE9B;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;CACjB;AAgDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,SAAS,iBAAiB,EACvE,OAAO,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACzC,WAAW,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAwMhD;AAMD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,2CAA2C;IAC3C,eAAe,EAAE,OAAO,CAAC;IAEzB,gCAAgC;IAChC,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,2BAA2B;iBAIrB,MAAM,EAAE,QAAQ,SAAS,WAAW,EAAE,OAAO,YACtD,wBAAwB,KAChC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,kBAAkB,EAAE,OAAO,CAAC;kBA6C1D,MAAM,EAAE,QAAQ,SAAS,WAAW,EAAE,OAAO,OAAK,kBAAkB,CACvF,MAAM,EACN,QAAQ,EACR,QAAQ,GAAG;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,eAAe,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,WAAW,CAAA;KAAE,EACnE,OAAO,CACR;mBAYqB,MAAM,EAAE,QAAQ,SAAS,WAAW,EAAE,OAAO,OAAK,kBAAkB,CACxF,MAAM,EACN,QAAQ,EACR,QAAQ,GAAG;QAAE,IAAI,CAAC,EAAE,IAAI,CAAC;QAAC,eAAe,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,WAAW,CAAA;KAAE,EACvE,OAAO,CACR;EASF;AAMD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE/E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAiBlE;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,8BAAsB,eAAe,CAAC,OAAO,SAAS,iBAAiB,GAAG,iBAAiB,CACzF,YAAW,WAAW,CAAC,OAAO,CAAC;IAE/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAQ;IACjD,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAQ;gBAE5B,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAKzC;;;;;OAKG;IACG,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1E;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,oBAAoB,GAAG,IAAI;IAErE;;;;;OAKG;IACH,SAAS,IAAI,YAAY,EAAE;IAI3B;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;OAEG;IACH,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMtC;;OAEG;IACH,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMrC;;OAEG;IACH,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;CAQtD"}
@@ -0,0 +1,581 @@
1
+ /**
2
+ * Pluggable Authentication Adapter System for @veloxts/auth
3
+ *
4
+ * This module provides a flexible adapter interface for integrating external
5
+ * authentication providers (BetterAuth, Clerk, Auth0, etc.) with VeloxTS.
6
+ *
7
+ * The adapter system abstracts provider-specific logic while maintaining
8
+ * full type safety and integration with VeloxTS's existing auth infrastructure.
9
+ *
10
+ * @module auth/adapter
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { createAuthAdapterPlugin, defineAuthAdapter } from '@veloxts/auth';
15
+ * import { betterAuth } from 'better-auth';
16
+ *
17
+ * // Create a BetterAuth adapter
18
+ * const betterAuthAdapter = defineBetterAuthAdapter({
19
+ * auth: betterAuth({ database, trustedOrigins: [...] }),
20
+ * });
21
+ *
22
+ * // Create the plugin
23
+ * const authPlugin = createAuthAdapterPlugin(betterAuthAdapter);
24
+ *
25
+ * // Register with VeloxApp
26
+ * app.use(authPlugin);
27
+ * ```
28
+ */
29
+ import { AuthError } from './types.js';
30
+ /**
31
+ * Authentication adapter error
32
+ *
33
+ * Extends AuthError with adapter-specific error codes for
34
+ * better error handling and debugging.
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * throw new AuthAdapterError(
39
+ * 'Failed to initialize BetterAuth adapter',
40
+ * 500,
41
+ * 'ADAPTER_INIT_FAILED',
42
+ * originalError
43
+ * );
44
+ * ```
45
+ */
46
+ export class AuthAdapterError extends AuthError {
47
+ /** Original error from the auth provider (if available) */
48
+ cause;
49
+ /** Adapter-specific error code */
50
+ code;
51
+ constructor(message, statusCode, code, cause) {
52
+ super(message, statusCode, code);
53
+ this.name = 'AuthAdapterError';
54
+ this.code = code;
55
+ this.cause = cause;
56
+ Error.captureStackTrace?.(this, AuthAdapterError);
57
+ }
58
+ }
59
+ // ============================================================================
60
+ // Adapter Factory
61
+ // ============================================================================
62
+ /**
63
+ * Defines an auth adapter with proper typing
64
+ *
65
+ * This is a helper function that provides better TypeScript inference
66
+ * and validates adapter implementation at definition time.
67
+ *
68
+ * @template TConfig - Adapter-specific configuration type
69
+ * @param adapter - Adapter implementation
70
+ * @returns The same adapter with proper types
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * interface BetterAuthConfig extends AuthAdapterConfig {
75
+ * auth: BetterAuthInstance;
76
+ * }
77
+ *
78
+ * export const betterAuthAdapter = defineAuthAdapter<BetterAuthConfig>({
79
+ * name: 'better-auth',
80
+ * version: '1.0.0',
81
+ *
82
+ * async initialize(fastify, config) {
83
+ * // Store auth instance for later use
84
+ * },
85
+ *
86
+ * async getSession(request) {
87
+ * // Load session using BetterAuth
88
+ * },
89
+ *
90
+ * getRoutes() {
91
+ * return [{ path: '/api/auth/*', handler: ... }];
92
+ * },
93
+ * });
94
+ * ```
95
+ */
96
+ export function defineAuthAdapter(adapter) {
97
+ // Validate adapter at definition time
98
+ validateAdapter(adapter);
99
+ return adapter;
100
+ }
101
+ /**
102
+ * Validates an adapter implementation
103
+ *
104
+ * @param adapter - Adapter to validate
105
+ * @throws {AuthAdapterError} If adapter is invalid
106
+ *
107
+ * @internal
108
+ */
109
+ function validateAdapter(adapter) {
110
+ if (!adapter.name || typeof adapter.name !== 'string') {
111
+ throw new AuthAdapterError('Adapter must have a name', 500, 'ADAPTER_NOT_CONFIGURED');
112
+ }
113
+ if (!adapter.version || typeof adapter.version !== 'string') {
114
+ throw new AuthAdapterError(`Adapter "${adapter.name}" must have a version`, 500, 'ADAPTER_NOT_CONFIGURED');
115
+ }
116
+ if (typeof adapter.initialize !== 'function') {
117
+ throw new AuthAdapterError(`Adapter "${adapter.name}" must implement initialize()`, 500, 'ADAPTER_NOT_CONFIGURED');
118
+ }
119
+ if (typeof adapter.getSession !== 'function') {
120
+ throw new AuthAdapterError(`Adapter "${adapter.name}" must implement getSession()`, 500, 'ADAPTER_NOT_CONFIGURED');
121
+ }
122
+ if (typeof adapter.getRoutes !== 'function') {
123
+ throw new AuthAdapterError(`Adapter "${adapter.name}" must implement getRoutes()`, 500, 'ADAPTER_NOT_CONFIGURED');
124
+ }
125
+ }
126
+ /**
127
+ * Default user transformer
128
+ *
129
+ * Transforms AdapterUser to VeloxTS User with basic mapping.
130
+ * Override via config.transformUser for custom behavior.
131
+ */
132
+ function defaultTransformUser(adapterUser) {
133
+ return {
134
+ id: adapterUser.id,
135
+ email: adapterUser.email,
136
+ // Include optional fields if present
137
+ ...(adapterUser.name !== undefined && { name: adapterUser.name }),
138
+ ...(adapterUser.emailVerified !== undefined && { emailVerified: adapterUser.emailVerified }),
139
+ ...(adapterUser.image !== undefined && { image: adapterUser.image }),
140
+ // Spread provider data (users can access via declaration merging)
141
+ ...adapterUser.providerData,
142
+ };
143
+ }
144
+ /**
145
+ * Check if a path matches any exclude pattern
146
+ *
147
+ * Supports:
148
+ * - Exact matches: `/api/health`
149
+ * - Wildcard suffixes: `/api/public/*`
150
+ *
151
+ * @param path - Request path to check
152
+ * @param patterns - Patterns to match against
153
+ * @returns true if path matches any pattern
154
+ *
155
+ * @internal
156
+ */
157
+ function matchesExcludePattern(path, patterns) {
158
+ for (const pattern of patterns) {
159
+ if (pattern.endsWith('/*')) {
160
+ const prefix = pattern.slice(0, -1); // Remove trailing *
161
+ if (path.startsWith(prefix)) {
162
+ return true;
163
+ }
164
+ }
165
+ else if (path === pattern) {
166
+ return true;
167
+ }
168
+ }
169
+ return false;
170
+ }
171
+ /**
172
+ * Creates a VeloxTS plugin from an auth adapter
173
+ *
174
+ * This factory function wraps an auth adapter in a Fastify plugin
175
+ * that integrates with VeloxTS's plugin system. It handles:
176
+ *
177
+ * - Adapter initialization
178
+ * - Route mounting
179
+ * - Session loading via preHandler hook
180
+ * - Request decoration with auth context
181
+ * - Cleanup on shutdown
182
+ *
183
+ * @template TConfig - Adapter-specific configuration type
184
+ * @param options - Plugin options with adapter and config
185
+ * @returns VeloxTS plugin ready for registration
186
+ *
187
+ * @example
188
+ * ```typescript
189
+ * import { createAuthAdapterPlugin } from '@veloxts/auth';
190
+ * import { betterAuthAdapter } from './adapters/better-auth';
191
+ *
192
+ * const authPlugin = createAuthAdapterPlugin({
193
+ * adapter: betterAuthAdapter,
194
+ * config: {
195
+ * name: 'better-auth',
196
+ * auth: betterAuth({
197
+ * database: db,
198
+ * trustedOrigins: ['http://localhost:3000'],
199
+ * }),
200
+ * debug: process.env.NODE_ENV === 'development',
201
+ * },
202
+ * });
203
+ *
204
+ * // Register with VeloxApp
205
+ * app.use(authPlugin);
206
+ * ```
207
+ */
208
+ export function createAuthAdapterPlugin(options) {
209
+ const { adapter, config } = options;
210
+ const debug = config.debug ?? false;
211
+ const excludeRoutes = config.excludeRoutes ?? [];
212
+ const transformUser = config.transformUser ?? defaultTransformUser;
213
+ return {
214
+ name: `@veloxts/auth-adapter:${adapter.name}`,
215
+ version: adapter.version,
216
+ dependencies: ['@veloxts/core'],
217
+ async register(server, _opts) {
218
+ const mergedConfig = { ...config, ..._opts.config };
219
+ if (debug) {
220
+ server.log.info(`Registering auth adapter: ${adapter.name}`);
221
+ }
222
+ // Initialize adapter
223
+ try {
224
+ await adapter.initialize(server, mergedConfig);
225
+ if (debug) {
226
+ server.log.info(`Auth adapter "${adapter.name}" initialized`);
227
+ }
228
+ }
229
+ catch (error) {
230
+ const adapterError = new AuthAdapterError(`Failed to initialize adapter "${adapter.name}"`, 500, 'ADAPTER_INIT_FAILED', error instanceof Error ? error : undefined);
231
+ server.log.error(adapterError);
232
+ throw adapterError;
233
+ }
234
+ // Decorate requests with auth context
235
+ server.decorateRequest('auth', undefined);
236
+ server.decorateRequest('user', undefined);
237
+ // Mount adapter routes
238
+ const routes = adapter.getRoutes();
239
+ for (const route of routes) {
240
+ const methods = route.methods ?? [
241
+ 'GET',
242
+ 'POST',
243
+ 'PUT',
244
+ 'PATCH',
245
+ 'DELETE',
246
+ 'OPTIONS',
247
+ 'HEAD',
248
+ ];
249
+ for (const method of methods) {
250
+ const routeOptions = {
251
+ method: method,
252
+ url: route.path,
253
+ handler: route.handler,
254
+ };
255
+ server.route(routeOptions);
256
+ if (debug) {
257
+ server.log.debug(`Mounted adapter route: ${method} ${route.path}`);
258
+ }
259
+ }
260
+ }
261
+ // Add preHandler hook for session loading
262
+ server.addHook('preHandler', async (request, reply) => {
263
+ // Skip excluded routes
264
+ if (matchesExcludePattern(request.url, excludeRoutes)) {
265
+ return;
266
+ }
267
+ // Skip adapter's own routes (they handle auth internally)
268
+ for (const route of routes) {
269
+ if (route.path.endsWith('/*')) {
270
+ const prefix = route.path.slice(0, -1);
271
+ if (request.url.startsWith(prefix)) {
272
+ return;
273
+ }
274
+ }
275
+ else if (request.url === route.path) {
276
+ return;
277
+ }
278
+ }
279
+ try {
280
+ const sessionResult = await adapter.getSession(request);
281
+ if (sessionResult) {
282
+ // Validate session if adapter provides validation
283
+ if (adapter.validateSession) {
284
+ const isValid = await adapter.validateSession(sessionResult);
285
+ if (!isValid) {
286
+ if (debug) {
287
+ server.log.debug('Session validation failed');
288
+ }
289
+ return;
290
+ }
291
+ }
292
+ // Check session expiration
293
+ if (sessionResult.session.expiresAt) {
294
+ if (sessionResult.session.expiresAt < Date.now()) {
295
+ if (debug) {
296
+ server.log.debug('Session has expired');
297
+ }
298
+ return;
299
+ }
300
+ }
301
+ // Check if session is active
302
+ if (!sessionResult.session.isActive) {
303
+ if (debug) {
304
+ server.log.debug('Session is not active');
305
+ }
306
+ return;
307
+ }
308
+ // Transform user to VeloxTS User
309
+ let user;
310
+ try {
311
+ user = transformUser(sessionResult.user);
312
+ }
313
+ catch (error) {
314
+ throw new AuthAdapterError('Failed to transform user', 500, 'ADAPTER_USER_TRANSFORM_ERROR', error instanceof Error ? error : undefined);
315
+ }
316
+ // Set auth context on request
317
+ const authContext = {
318
+ user,
319
+ isAuthenticated: true,
320
+ // Token payload is not available from adapters
321
+ // (they use sessions, not JWTs internally)
322
+ };
323
+ request.auth = authContext;
324
+ request.user = user;
325
+ }
326
+ }
327
+ catch (error) {
328
+ // Handle adapter errors
329
+ if (error instanceof AuthAdapterError) {
330
+ if (mergedConfig.onError) {
331
+ await mergedConfig.onError(error, request, reply);
332
+ return;
333
+ }
334
+ throw error;
335
+ }
336
+ // Wrap unknown errors
337
+ const adapterError = new AuthAdapterError('Session loading failed', 500, 'ADAPTER_SESSION_ERROR', error instanceof Error ? error : undefined);
338
+ if (mergedConfig.onError) {
339
+ await mergedConfig.onError(adapterError, request, reply);
340
+ return;
341
+ }
342
+ if (debug) {
343
+ server.log.error(adapterError);
344
+ }
345
+ // Don't throw - allow request to continue unauthenticated
346
+ }
347
+ });
348
+ // Add cleanup hook
349
+ server.addHook('onClose', async () => {
350
+ if (debug) {
351
+ server.log.info(`Cleaning up auth adapter: ${adapter.name}`);
352
+ }
353
+ try {
354
+ await adapter.cleanup?.();
355
+ }
356
+ catch (error) {
357
+ server.log.error(new AuthAdapterError(`Failed to cleanup adapter "${adapter.name}"`, 500, 'ADAPTER_INIT_FAILED', error instanceof Error ? error : undefined));
358
+ }
359
+ });
360
+ if (debug) {
361
+ server.log.info(`Auth adapter "${adapter.name}" registered successfully`);
362
+ }
363
+ },
364
+ };
365
+ }
366
+ /**
367
+ * Creates middleware for adapter-based authentication
368
+ *
369
+ * Use this middleware in procedures to require or optionally
370
+ * check authentication via the adapter.
371
+ *
372
+ * @returns Middleware factory functions
373
+ *
374
+ * @example
375
+ * ```typescript
376
+ * const auth = createAdapterAuthMiddleware();
377
+ *
378
+ * // Require authentication
379
+ * const getProfile = procedure()
380
+ * .use(auth.requireAuth())
381
+ * .query(async ({ ctx }) => {
382
+ * return ctx.user; // User is guaranteed to exist
383
+ * });
384
+ *
385
+ * // Optional authentication
386
+ * const getPosts = procedure()
387
+ * .use(auth.optionalAuth())
388
+ * .query(async ({ ctx }) => {
389
+ * // ctx.user may be undefined
390
+ * return fetchPosts(ctx.user?.id);
391
+ * });
392
+ * ```
393
+ */
394
+ export function createAdapterAuthMiddleware() {
395
+ /**
396
+ * Creates the middleware function
397
+ */
398
+ function middleware(options = {}) {
399
+ return async ({ ctx, next }) => {
400
+ const request = ctx.request;
401
+ // Check if auth was already loaded by preHandler hook
402
+ const auth = request.auth;
403
+ const user = request.user;
404
+ if (!user || !auth?.isAuthenticated) {
405
+ if (options.optional) {
406
+ // Optional auth - continue without user
407
+ const authContext = {
408
+ user: undefined,
409
+ isAuthenticated: false,
410
+ };
411
+ return next({
412
+ ctx: {
413
+ ...ctx,
414
+ auth: authContext,
415
+ user: undefined,
416
+ isAuthenticated: false,
417
+ },
418
+ });
419
+ }
420
+ // Required auth - reject
421
+ throw new AuthError('Authentication required', 401, 'UNAUTHORIZED');
422
+ }
423
+ // Continue with authenticated context
424
+ return next({
425
+ ctx: {
426
+ ...ctx,
427
+ auth,
428
+ user,
429
+ isAuthenticated: true,
430
+ },
431
+ });
432
+ };
433
+ }
434
+ /**
435
+ * Shorthand for required authentication
436
+ */
437
+ function requireAuth() {
438
+ return middleware({ optional: false });
439
+ }
440
+ /**
441
+ * Shorthand for optional authentication
442
+ */
443
+ function optionalAuth() {
444
+ return middleware({ optional: true });
445
+ }
446
+ return {
447
+ middleware,
448
+ requireAuth,
449
+ optionalAuth,
450
+ };
451
+ }
452
+ /**
453
+ * Type guard to check if a value is a valid AuthAdapter
454
+ *
455
+ * @param value - Value to check
456
+ * @returns true if value is a valid AuthAdapter
457
+ *
458
+ * @example
459
+ * ```typescript
460
+ * if (isAuthAdapter(maybeAdapter)) {
461
+ * const plugin = createAuthAdapterPlugin({
462
+ * adapter: maybeAdapter,
463
+ * config: { name: 'test' },
464
+ * });
465
+ * }
466
+ * ```
467
+ */
468
+ export function isAuthAdapter(value) {
469
+ if (typeof value !== 'object' || value === null) {
470
+ return false;
471
+ }
472
+ return ('name' in value &&
473
+ 'version' in value &&
474
+ 'initialize' in value &&
475
+ 'getSession' in value &&
476
+ 'getRoutes' in value &&
477
+ typeof value.name === 'string' &&
478
+ typeof value.version === 'string' &&
479
+ typeof value.initialize === 'function' &&
480
+ typeof value.getSession === 'function' &&
481
+ typeof value.getRoutes === 'function');
482
+ }
483
+ // ============================================================================
484
+ // Abstract Base Adapter
485
+ // ============================================================================
486
+ /**
487
+ * Abstract base class for auth adapters
488
+ *
489
+ * Provides common functionality that most adapters need,
490
+ * reducing boilerplate in adapter implementations.
491
+ *
492
+ * @template TConfig - Adapter-specific configuration type
493
+ *
494
+ * @example
495
+ * ```typescript
496
+ * class MyAdapter extends BaseAuthAdapter<MyConfig> {
497
+ * constructor() {
498
+ * super('my-adapter', '1.0.0');
499
+ * }
500
+ *
501
+ * async initialize(fastify: FastifyInstance, config: MyConfig) {
502
+ * // Custom initialization
503
+ * }
504
+ *
505
+ * async getSession(request: FastifyRequest) {
506
+ * // Custom session loading
507
+ * }
508
+ *
509
+ * getRoutes() {
510
+ * return []; // Or custom routes
511
+ * }
512
+ * }
513
+ * ```
514
+ */
515
+ export class BaseAuthAdapter {
516
+ name;
517
+ version;
518
+ fastify = null;
519
+ config = null;
520
+ constructor(name, version) {
521
+ this.name = name;
522
+ this.version = version;
523
+ }
524
+ /**
525
+ * Initialize the adapter
526
+ *
527
+ * Stores fastify and config references for subclass use.
528
+ * Override in subclass but call super.initialize() first.
529
+ */
530
+ async initialize(fastify, config) {
531
+ this.fastify = fastify;
532
+ this.config = config;
533
+ }
534
+ /**
535
+ * Get routes to mount
536
+ *
537
+ * Default implementation returns empty array.
538
+ * Override to provide adapter-specific routes.
539
+ */
540
+ getRoutes() {
541
+ return [];
542
+ }
543
+ /**
544
+ * Clean up adapter resources
545
+ *
546
+ * Default implementation does nothing.
547
+ * Override to clean up provider resources.
548
+ */
549
+ async cleanup() {
550
+ this.fastify = null;
551
+ this.config = null;
552
+ }
553
+ /**
554
+ * Log a debug message (if debug is enabled)
555
+ */
556
+ debug(message) {
557
+ if (this.config?.debug && this.fastify) {
558
+ this.fastify.log.debug(`[${this.name}] ${message}`);
559
+ }
560
+ }
561
+ /**
562
+ * Log an info message
563
+ */
564
+ info(message) {
565
+ if (this.fastify) {
566
+ this.fastify.log.info(`[${this.name}] ${message}`);
567
+ }
568
+ }
569
+ /**
570
+ * Log an error
571
+ */
572
+ error(message, cause) {
573
+ if (this.fastify) {
574
+ const errorMessage = cause
575
+ ? `[${this.name}] ${message}: ${cause.message}`
576
+ : `[${this.name}] ${message}`;
577
+ this.fastify.log.error(errorMessage);
578
+ }
579
+ }
580
+ }
581
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}