bootifyjs 1.1.9 → 1.2.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 (234) hide show
  1. package/README.md +1 -1
  2. package/dist/api.d.ts +5 -0
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +25 -9
  5. package/dist/api.js.map +1 -1
  6. package/dist/auth/AuthManager.d.ts +68 -0
  7. package/dist/auth/AuthManager.d.ts.map +1 -0
  8. package/dist/auth/AuthManager.js +239 -0
  9. package/dist/auth/AuthManager.js.map +1 -0
  10. package/dist/auth/examples/basic-usage.d.ts +30 -0
  11. package/dist/auth/examples/basic-usage.d.ts.map +1 -0
  12. package/dist/auth/examples/basic-usage.js +391 -0
  13. package/dist/auth/examples/basic-usage.js.map +1 -0
  14. package/dist/auth/index.d.ts +70 -0
  15. package/dist/auth/index.d.ts.map +1 -0
  16. package/dist/auth/index.js +118 -0
  17. package/dist/auth/index.js.map +1 -0
  18. package/dist/auth/middleware/AuthMiddleware.d.ts +110 -0
  19. package/dist/auth/middleware/AuthMiddleware.d.ts.map +1 -0
  20. package/dist/auth/middleware/AuthMiddleware.js +336 -0
  21. package/dist/auth/middleware/AuthMiddleware.js.map +1 -0
  22. package/dist/auth/storage/RedisTokenStorage.d.ts +92 -0
  23. package/dist/auth/storage/RedisTokenStorage.d.ts.map +1 -0
  24. package/dist/auth/storage/RedisTokenStorage.js +207 -0
  25. package/dist/auth/storage/RedisTokenStorage.js.map +1 -0
  26. package/dist/auth/strategies/ApiKeyStrategy.d.ts +64 -0
  27. package/dist/auth/strategies/ApiKeyStrategy.d.ts.map +1 -0
  28. package/dist/auth/strategies/ApiKeyStrategy.js +391 -0
  29. package/dist/auth/strategies/ApiKeyStrategy.js.map +1 -0
  30. package/dist/auth/strategies/JwtStrategy.d.ts +46 -0
  31. package/dist/auth/strategies/JwtStrategy.d.ts.map +1 -0
  32. package/dist/auth/strategies/JwtStrategy.js +310 -0
  33. package/dist/auth/strategies/JwtStrategy.js.map +1 -0
  34. package/dist/auth/types.d.ts +130 -0
  35. package/dist/auth/types.d.ts.map +1 -0
  36. package/dist/auth/types.js +50 -0
  37. package/dist/auth/types.js.map +1 -0
  38. package/dist/cache/bootstrap.js +1 -1
  39. package/dist/cache/bootstrap.js.map +1 -1
  40. package/dist/cache/index.d.ts +2 -1
  41. package/dist/cache/index.d.ts.map +1 -1
  42. package/dist/cache/index.js +4 -1
  43. package/dist/cache/index.js.map +1 -1
  44. package/dist/cache/{in-memory-cache.store.d.ts → stores/in-memory-cache.store.d.ts} +1 -1
  45. package/dist/cache/stores/in-memory-cache.store.d.ts.map +1 -0
  46. package/dist/cache/{in-memory-cache.store.js → stores/in-memory-cache.store.js} +1 -1
  47. package/dist/cache/stores/in-memory-cache.store.js.map +1 -0
  48. package/dist/cache/stores/index.d.ts +3 -0
  49. package/dist/cache/stores/index.d.ts.map +1 -0
  50. package/dist/cache/stores/index.js +20 -0
  51. package/dist/cache/stores/index.js.map +1 -0
  52. package/dist/cache/stores/redis-cache.store.d.ts +8 -0
  53. package/dist/cache/stores/redis-cache.store.d.ts.map +1 -0
  54. package/dist/cache/stores/redis-cache.store.js +39 -0
  55. package/dist/cache/stores/redis-cache.store.js.map +1 -0
  56. package/dist/config/AppConfig.d.ts +3 -3
  57. package/dist/config/AppConfig.d.ts.map +1 -1
  58. package/dist/config/AppConfig.js +9 -2
  59. package/dist/config/AppConfig.js.map +1 -1
  60. package/dist/constants/index.d.ts +61 -0
  61. package/dist/constants/index.d.ts.map +1 -0
  62. package/dist/constants/index.js +75 -0
  63. package/dist/constants/index.js.map +1 -0
  64. package/dist/core/decorators.d.ts +7 -7
  65. package/dist/core/decorators.d.ts.map +1 -1
  66. package/dist/core/decorators.js +8 -7
  67. package/dist/core/decorators.js.map +1 -1
  68. package/dist/core/di-container.d.ts +1 -1
  69. package/dist/core/di-container.d.ts.map +1 -1
  70. package/dist/core/di-container.js +3 -3
  71. package/dist/core/di-container.js.map +1 -1
  72. package/dist/core/router.d.ts.map +1 -1
  73. package/dist/core/router.js +3 -3
  74. package/dist/core/router.js.map +1 -1
  75. package/dist/events/bootstrap.d.ts +13 -1
  76. package/dist/events/bootstrap.d.ts.map +1 -1
  77. package/dist/events/bootstrap.js +30 -2
  78. package/dist/events/bootstrap.js.map +1 -1
  79. package/dist/events/buffered-event-bus.service.d.ts +135 -0
  80. package/dist/events/buffered-event-bus.service.d.ts.map +1 -0
  81. package/dist/events/buffered-event-bus.service.js +420 -0
  82. package/dist/events/buffered-event-bus.service.js.map +1 -0
  83. package/dist/events/config/buffered-event-config.d.ts +153 -0
  84. package/dist/events/config/buffered-event-config.d.ts.map +1 -0
  85. package/dist/events/config/buffered-event-config.js +181 -0
  86. package/dist/events/config/buffered-event-config.js.map +1 -0
  87. package/dist/events/event-bus.service.d.ts.map +1 -1
  88. package/dist/events/event-bus.service.js +2 -0
  89. package/dist/events/event-bus.service.js.map +1 -1
  90. package/dist/events/index.d.ts +3 -0
  91. package/dist/events/index.d.ts.map +1 -1
  92. package/dist/events/index.js +3 -0
  93. package/dist/events/index.js.map +1 -1
  94. package/dist/events/metrics/event-metrics.d.ts +175 -0
  95. package/dist/events/metrics/event-metrics.d.ts.map +1 -0
  96. package/dist/events/metrics/event-metrics.js +235 -0
  97. package/dist/events/metrics/event-metrics.js.map +1 -0
  98. package/dist/events/monitoring/health-monitor.d.ts +142 -0
  99. package/dist/events/monitoring/health-monitor.d.ts.map +1 -0
  100. package/dist/events/monitoring/health-monitor.js +492 -0
  101. package/dist/events/monitoring/health-monitor.js.map +1 -0
  102. package/dist/events/retry/retry-handler.d.ts +112 -0
  103. package/dist/events/retry/retry-handler.d.ts.map +1 -0
  104. package/dist/events/retry/retry-handler.js +218 -0
  105. package/dist/events/retry/retry-handler.js.map +1 -0
  106. package/dist/events/shared-buffer.d.ts +92 -0
  107. package/dist/events/shared-buffer.d.ts.map +1 -0
  108. package/dist/events/shared-buffer.js +179 -0
  109. package/dist/events/shared-buffer.js.map +1 -0
  110. package/dist/events/worker/event-processor.worker.d.ts +75 -0
  111. package/dist/events/worker/event-processor.worker.d.ts.map +1 -0
  112. package/dist/events/worker/event-processor.worker.js +293 -0
  113. package/dist/events/worker/event-processor.worker.js.map +1 -0
  114. package/dist/events/worker/worker-manager.d.ts +132 -0
  115. package/dist/events/worker/worker-manager.d.ts.map +1 -0
  116. package/dist/events/worker/worker-manager.js +436 -0
  117. package/dist/events/worker/worker-manager.js.map +1 -0
  118. package/dist/examples/auth/auth.middleware.d.ts +1 -0
  119. package/dist/examples/auth/auth.middleware.d.ts.map +1 -0
  120. package/dist/examples/auth/auth.middleware.js +2 -0
  121. package/dist/examples/auth/auth.middleware.js.map +1 -0
  122. package/dist/examples/auth/authorization.middleware.d.ts +1 -0
  123. package/dist/examples/auth/authorization.middleware.d.ts.map +1 -0
  124. package/dist/examples/auth/authorization.middleware.js +2 -0
  125. package/dist/examples/auth/authorization.middleware.js.map +1 -0
  126. package/dist/examples/auth/context.extractor.d.ts +1 -0
  127. package/dist/examples/auth/context.extractor.d.ts.map +1 -0
  128. package/dist/examples/auth/context.extractor.js +2 -0
  129. package/dist/examples/auth/context.extractor.js.map +1 -0
  130. package/dist/examples/auth/example.d.ts +1 -0
  131. package/dist/examples/auth/example.d.ts.map +1 -0
  132. package/dist/examples/auth/example.js +2 -0
  133. package/dist/examples/auth/example.js.map +1 -0
  134. package/dist/examples/auth/provider.d.ts +1 -0
  135. package/dist/examples/auth/provider.d.ts.map +1 -0
  136. package/dist/examples/auth/provider.js +2 -0
  137. package/dist/examples/auth/provider.js.map +1 -0
  138. package/dist/examples/auth/users.d.ts +1 -0
  139. package/dist/examples/auth/users.d.ts.map +1 -0
  140. package/dist/examples/auth/users.js +2 -0
  141. package/dist/examples/auth/users.js.map +1 -0
  142. package/dist/examples/controllers/auth.controller.d.ts +1 -0
  143. package/dist/examples/controllers/auth.controller.d.ts.map +1 -0
  144. package/dist/examples/controllers/auth.controller.js +249 -0
  145. package/dist/examples/controllers/auth.controller.js.map +1 -0
  146. package/dist/examples/controllers/health.controller.d.ts +1 -0
  147. package/dist/examples/controllers/health.controller.d.ts.map +1 -1
  148. package/dist/examples/controllers/health.controller.js +6 -0
  149. package/dist/examples/controllers/health.controller.js.map +1 -1
  150. package/dist/examples/controllers/todo.controller.d.ts +4 -2
  151. package/dist/examples/controllers/todo.controller.d.ts.map +1 -1
  152. package/dist/examples/controllers/todo.controller.js +44 -18
  153. package/dist/examples/controllers/todo.controller.js.map +1 -1
  154. package/dist/examples/events/TodoEventHandler.d.ts +4 -1
  155. package/dist/examples/events/TodoEventHandler.d.ts.map +1 -1
  156. package/dist/examples/events/TodoEventHandler.js +8 -4
  157. package/dist/examples/events/TodoEventHandler.js.map +1 -1
  158. package/dist/examples/events/buffered-event-example.d.ts +71 -0
  159. package/dist/examples/events/buffered-event-example.d.ts.map +1 -0
  160. package/dist/examples/events/buffered-event-example.js +182 -0
  161. package/dist/examples/events/buffered-event-example.js.map +1 -0
  162. package/dist/examples/events/integration-test.d.ts +10 -0
  163. package/dist/examples/events/integration-test.d.ts.map +1 -0
  164. package/dist/examples/events/integration-test.js +147 -0
  165. package/dist/examples/events/integration-test.js.map +1 -0
  166. package/dist/examples/global-middleware-example.d.ts +2 -0
  167. package/dist/examples/global-middleware-example.d.ts.map +1 -0
  168. package/dist/examples/global-middleware-example.js +94 -0
  169. package/dist/examples/global-middleware-example.js.map +1 -0
  170. package/dist/examples/index.d.ts +1 -0
  171. package/dist/examples/index.d.ts.map +1 -1
  172. package/dist/examples/index.js +86 -27
  173. package/dist/examples/index.js.map +1 -1
  174. package/dist/examples/services/todo.service.d.ts +3 -2
  175. package/dist/examples/services/todo.service.d.ts.map +1 -1
  176. package/dist/examples/services/todo.service.js +12 -2
  177. package/dist/examples/services/todo.service.js.map +1 -1
  178. package/dist/examples/simple-auth-example.d.ts +7 -0
  179. package/dist/examples/simple-auth-example.d.ts.map +1 -0
  180. package/dist/examples/simple-auth-example.js +106 -0
  181. package/dist/examples/simple-auth-example.js.map +1 -0
  182. package/dist/examples/todos/schema.d.ts +4 -4
  183. package/dist/index.d.ts +1 -0
  184. package/dist/index.d.ts.map +1 -1
  185. package/dist/index.js +1 -0
  186. package/dist/index.js.map +1 -1
  187. package/dist/logging/config/logging.config.d.ts +0 -32
  188. package/dist/logging/config/logging.config.d.ts.map +1 -1
  189. package/dist/logging/config/logging.config.js +43 -49
  190. package/dist/logging/config/logging.config.js.map +1 -1
  191. package/dist/logging/core/logger.d.ts +1 -0
  192. package/dist/logging/core/logger.d.ts.map +1 -1
  193. package/dist/logging/core/logger.js +3 -0
  194. package/dist/logging/core/logger.js.map +1 -1
  195. package/dist/logging/core/logger.provider.d.ts.map +1 -1
  196. package/dist/logging/core/logger.provider.js +24 -12
  197. package/dist/logging/core/logger.provider.js.map +1 -1
  198. package/dist/logging/core/startup.logger.d.ts +1 -1
  199. package/dist/logging/core/startup.logger.d.ts.map +1 -1
  200. package/dist/logging/core/startup.logger.js +6 -3
  201. package/dist/logging/core/startup.logger.js.map +1 -1
  202. package/dist/logging/core/tracing.service.d.ts +32 -0
  203. package/dist/logging/core/tracing.service.d.ts.map +1 -0
  204. package/dist/logging/core/tracing.service.js +165 -0
  205. package/dist/logging/core/tracing.service.js.map +1 -0
  206. package/dist/logging/index.d.ts +1 -1
  207. package/dist/logging/index.d.ts.map +1 -1
  208. package/dist/logging/index.js +3 -2
  209. package/dist/logging/index.js.map +1 -1
  210. package/dist/middleware/auth-context.extractor.d.ts +5 -0
  211. package/dist/middleware/auth-context.extractor.d.ts.map +1 -0
  212. package/dist/middleware/auth-context.extractor.js +114 -0
  213. package/dist/middleware/auth-context.extractor.js.map +1 -0
  214. package/dist/middleware/auth.middleware.d.ts +16 -2
  215. package/dist/middleware/auth.middleware.d.ts.map +1 -1
  216. package/dist/middleware/auth.middleware.js +110 -13
  217. package/dist/middleware/auth.middleware.js.map +1 -1
  218. package/dist/middleware/authorization.middleware.d.ts +21 -0
  219. package/dist/middleware/authorization.middleware.d.ts.map +1 -0
  220. package/dist/middleware/authorization.middleware.js +55 -0
  221. package/dist/middleware/authorization.middleware.js.map +1 -0
  222. package/dist/middleware/context.middleware.d.ts +12 -2
  223. package/dist/middleware/context.middleware.d.ts.map +1 -1
  224. package/dist/middleware/context.middleware.js +43 -17
  225. package/dist/middleware/context.middleware.js.map +1 -1
  226. package/dist/middleware/index.d.ts +1 -0
  227. package/dist/middleware/index.d.ts.map +1 -1
  228. package/dist/middleware/tracing.middleware.d.ts +15 -0
  229. package/dist/middleware/tracing.middleware.d.ts.map +1 -0
  230. package/dist/middleware/tracing.middleware.js +36 -0
  231. package/dist/middleware/tracing.middleware.js.map +1 -0
  232. package/package.json +5 -1
  233. package/dist/cache/in-memory-cache.store.d.ts.map +0 -1
  234. package/dist/cache/in-memory-cache.store.js.map +0 -1
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Unified Authentication Middleware Factory
3
+ * Provides Fastify middleware for multi-strategy authentication
4
+ */
5
+ import { FastifyReply, FastifyRequest } from 'fastify';
6
+ import { AuthManager } from '../AuthManager';
7
+ import { AuthMiddlewareOptions } from '../types';
8
+ declare module 'fastify' {
9
+ interface FastifyRequest {
10
+ user?: {
11
+ id: string;
12
+ username?: string;
13
+ email?: string;
14
+ roles: string[];
15
+ permissions: string[];
16
+ } | null;
17
+ authStrategy?: string;
18
+ authMetadata?: Record<string, any>;
19
+ isAuthenticated?: boolean;
20
+ auth?: {
21
+ strategy: string;
22
+ token: string;
23
+ };
24
+ }
25
+ }
26
+ export declare class AuthMiddleware {
27
+ private authManager;
28
+ constructor(authManager: AuthManager);
29
+ /**
30
+ * Create authentication middleware with flexible options
31
+ */
32
+ authenticate(options?: AuthMiddlewareOptions): (req: FastifyRequest, reply: FastifyReply) => Promise<void>;
33
+ /**
34
+ * Create middleware that requires authentication
35
+ */
36
+ requireAuth(strategies?: string[], roles?: string[], permissions?: string[]): (req: FastifyRequest, reply: FastifyReply) => Promise<void>;
37
+ /**
38
+ * Create middleware for optional authentication
39
+ */
40
+ optionalAuth(strategies?: string[]): (req: FastifyRequest, reply: FastifyReply) => Promise<void>;
41
+ /**
42
+ * Create role-based authorization middleware
43
+ */
44
+ requireRoles(roles: string[], strategies?: string[]): (req: FastifyRequest, reply: FastifyReply) => Promise<void>;
45
+ /**
46
+ * Create permission-based authorization middleware
47
+ */
48
+ requirePermissions(permissions: string[], strategies?: string[]): (req: FastifyRequest, reply: FastifyReply) => Promise<void>;
49
+ /**
50
+ * Create middleware for specific strategy
51
+ */
52
+ requireStrategy(strategy: string, roles?: string[], permissions?: string[]): (req: FastifyRequest, reply: FastifyReply) => Promise<void>;
53
+ /**
54
+ * Token refresh middleware
55
+ */
56
+ refreshToken(strategy?: string): (req: FastifyRequest, reply: FastifyReply) => Promise<undefined>;
57
+ /**
58
+ * Logout middleware
59
+ */
60
+ logout(strategy?: string): (req: FastifyRequest, reply: FastifyReply) => Promise<undefined>;
61
+ /**
62
+ * Extract authentication context from request
63
+ */
64
+ private extractAuthContext;
65
+ /**
66
+ * Try authentication with multiple strategies
67
+ */
68
+ private tryAuthentication;
69
+ /**
70
+ * Extract token from request based on strategy
71
+ */
72
+ private extractTokenForStrategy;
73
+ /**
74
+ * Extract general token from request
75
+ */
76
+ private extractToken;
77
+ /**
78
+ * Extract Bearer token from Authorization header
79
+ */
80
+ private extractBearerToken;
81
+ /**
82
+ * Extract API key from headers
83
+ */
84
+ private extractApiKey;
85
+ /**
86
+ * Extract refresh token from request
87
+ */
88
+ private extractRefreshToken;
89
+ /**
90
+ * Detect strategy based on request
91
+ */
92
+ private detectStrategy;
93
+ /**
94
+ * Check if user has required roles
95
+ */
96
+ private hasRequiredRoles;
97
+ /**
98
+ * Check if user has required permissions
99
+ */
100
+ private hasRequiredPermissions;
101
+ /**
102
+ * Check if path should be skipped
103
+ */
104
+ private shouldSkipPath;
105
+ /**
106
+ * Handle authentication errors
107
+ */
108
+ private handleAuthError;
109
+ }
110
+ //# sourceMappingURL=AuthMiddleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthMiddleware.d.ts","sourceRoot":"","sources":["../../../src/auth/middleware/AuthMiddleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAGL,qBAAqB,EAItB,MAAM,UAAU,CAAC;AAGlB,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,cAAc;QACtB,IAAI,CAAC,EAAE;YACL,EAAE,EAAE,MAAM,CAAC;YACX,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,WAAW,EAAE,MAAM,EAAE,CAAC;SACvB,GAAG,IAAI,CAAC;QACT,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACnC,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH;CACF;AAED,qBAAa,cAAc;IACb,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAE5C;;OAEG;IACH,YAAY,CAAC,OAAO,GAAE,qBAA0C,IAChD,KAAK,cAAc,EAAE,OAAO,YAAY;IA6DxD;;OAEG;IACH,WAAW,CAAC,UAAU,GAAE,MAAM,EAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,SAhE1D,cAAc,SAAS,YAAY;IAyExD;;OAEG;IACH,YAAY,CAAC,UAAU,GAAE,MAAM,EAAO,SA5EjB,cAAc,SAAS,YAAY;IAmFxD;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,GAAE,MAAM,EAAO,SAtFlC,cAAc,SAAS,YAAY;IA8FxD;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,UAAU,GAAE,MAAM,EAAO,SAjG9C,cAAc,SAAS,YAAY;IAyGxD;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,SA5GrD,cAAc,SAAS,YAAY;IAqHxD;;OAEG;IACH,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,IACd,KAAK,cAAc,EAAE,OAAO,YAAY;IA4BxD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,IACR,KAAK,cAAc,EAAE,OAAO,YAAY;IAsBxD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;YACW,iBAAiB;IA2B/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAW/B;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAQ9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,eAAe;CA6BxB"}
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+ /**
3
+ * Unified Authentication Middleware Factory
4
+ * Provides Fastify middleware for multi-strategy authentication
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AuthMiddleware = void 0;
8
+ const core_1 = require("../../core");
9
+ const types_1 = require("../types");
10
+ class AuthMiddleware {
11
+ constructor(authManager) {
12
+ this.authManager = authManager;
13
+ }
14
+ /**
15
+ * Create authentication middleware with flexible options
16
+ */
17
+ authenticate(options = { strategies: [] }) {
18
+ return async (req, reply) => {
19
+ try {
20
+ // Skip authentication for specified paths
21
+ if (options.skipPaths && this.shouldSkipPath(req.url || '', options.skipPaths)) {
22
+ return;
23
+ }
24
+ // Extract authentication context from request
25
+ const context = this.extractAuthContext(req, options.strategies);
26
+ // Try to authenticate using available strategies
27
+ const authResult = await this.tryAuthentication(context, options.strategies);
28
+ if (authResult.success && authResult.user) {
29
+ // Set user data on request
30
+ req.user = {
31
+ id: authResult.user.id,
32
+ username: authResult.user.username,
33
+ email: authResult.user.email,
34
+ roles: authResult.user.roles || [],
35
+ permissions: authResult.user.permissions || []
36
+ };
37
+ req.authStrategy = context.strategy;
38
+ req.authMetadata = authResult.metadata;
39
+ req.isAuthenticated = true;
40
+ // Add context to request - use existing context from context middleware
41
+ const contextService = new core_1.RequestContextService();
42
+ contextService.set('user', { id: authResult.user.id, username: authResult.user.username });
43
+ // Check role-based authorization if specified
44
+ if (options.roles && !this.hasRequiredRoles(authResult.user, options.roles)) {
45
+ throw new types_1.ForbiddenError(`Required roles: ${options.roles.join(', ')}`);
46
+ }
47
+ // Check permission-based authorization if specified
48
+ if (options.permissions && !this.hasRequiredPermissions(authResult.user, options.permissions)) {
49
+ throw new types_1.ForbiddenError(`Required permissions: ${options.permissions.join(', ')}`);
50
+ }
51
+ return;
52
+ }
53
+ // Handle authentication failure
54
+ if (options.required !== false) {
55
+ throw new types_1.UnauthorizedError(authResult.error || 'Authentication required');
56
+ }
57
+ // Authentication not required, continue without user
58
+ req.isAuthenticated = false;
59
+ //add context also to the request
60
+ }
61
+ catch (error) {
62
+ this.handleAuthError(error, req, reply, options.errorHandler);
63
+ }
64
+ };
65
+ }
66
+ /**
67
+ * Create middleware that requires authentication
68
+ */
69
+ requireAuth(strategies = [], roles, permissions) {
70
+ return this.authenticate({
71
+ strategies,
72
+ required: true,
73
+ roles,
74
+ permissions
75
+ });
76
+ }
77
+ /**
78
+ * Create middleware for optional authentication
79
+ */
80
+ optionalAuth(strategies = []) {
81
+ return this.authenticate({
82
+ strategies,
83
+ required: false
84
+ });
85
+ }
86
+ /**
87
+ * Create role-based authorization middleware
88
+ */
89
+ requireRoles(roles, strategies = []) {
90
+ return this.authenticate({
91
+ strategies,
92
+ required: true,
93
+ roles
94
+ });
95
+ }
96
+ /**
97
+ * Create permission-based authorization middleware
98
+ */
99
+ requirePermissions(permissions, strategies = []) {
100
+ return this.authenticate({
101
+ strategies,
102
+ required: true,
103
+ permissions
104
+ });
105
+ }
106
+ /**
107
+ * Create middleware for specific strategy
108
+ */
109
+ requireStrategy(strategy, roles, permissions) {
110
+ return this.authenticate({
111
+ strategies: [strategy],
112
+ required: true,
113
+ roles,
114
+ permissions
115
+ });
116
+ }
117
+ /**
118
+ * Token refresh middleware
119
+ */
120
+ refreshToken(strategy) {
121
+ return async (req, reply) => {
122
+ try {
123
+ const refreshToken = this.extractRefreshToken(req);
124
+ if (!refreshToken) {
125
+ throw new types_1.UnauthorizedError('Refresh token required');
126
+ }
127
+ const context = this.extractAuthContext(req, strategy ? [strategy] : []);
128
+ const refreshResult = await this.authManager.refresh(refreshToken, context, strategy);
129
+ if (refreshResult.success && refreshResult.tokens) {
130
+ // Return new tokens
131
+ return reply.send({
132
+ success: true,
133
+ tokens: refreshResult.tokens,
134
+ user: refreshResult.user,
135
+ metadata: refreshResult.metadata
136
+ });
137
+ }
138
+ else {
139
+ throw new types_1.UnauthorizedError(refreshResult.error || 'Token refresh failed');
140
+ }
141
+ }
142
+ catch (error) {
143
+ this.handleAuthError(error, req, reply);
144
+ }
145
+ };
146
+ }
147
+ /**
148
+ * Logout middleware
149
+ */
150
+ logout(strategy) {
151
+ return async (req, reply) => {
152
+ try {
153
+ const token = this.extractToken(req);
154
+ if (token) {
155
+ const context = this.extractAuthContext(req, strategy ? [strategy] : []);
156
+ await this.authManager.revoke(token, context, strategy);
157
+ }
158
+ // Clear request auth data
159
+ req.user = undefined;
160
+ req.authStrategy = undefined;
161
+ req.authMetadata = undefined;
162
+ req.isAuthenticated = false;
163
+ return reply.send({ success: true, message: 'Logged out successfully' });
164
+ }
165
+ catch (error) {
166
+ this.handleAuthError(error, req, reply);
167
+ }
168
+ };
169
+ }
170
+ /**
171
+ * Extract authentication context from request
172
+ */
173
+ extractAuthContext(req, strategies) {
174
+ return {
175
+ type: 'validate',
176
+ strategy: this.detectStrategy(req, strategies),
177
+ request: req,
178
+ headers: req.headers,
179
+ body: req.body,
180
+ query: req.query
181
+ };
182
+ }
183
+ /**
184
+ * Try authentication with multiple strategies
185
+ */
186
+ async tryAuthentication(context, strategies) {
187
+ // If specific strategies are provided, try them in order
188
+ if (strategies.length > 0) {
189
+ for (const strategy of strategies) {
190
+ const token = this.extractTokenForStrategy(context.request, strategy);
191
+ if (token) {
192
+ const result = await this.authManager.validate(token, {
193
+ ...context,
194
+ strategy
195
+ }, strategy);
196
+ if (result.success) {
197
+ return result;
198
+ }
199
+ }
200
+ }
201
+ }
202
+ // Try auto-detection
203
+ const token = this.extractToken(context.request);
204
+ if (token) {
205
+ return await this.authManager.validate(token, context);
206
+ }
207
+ return { success: false, error: 'No valid authentication found' };
208
+ }
209
+ /**
210
+ * Extract token from request based on strategy
211
+ */
212
+ extractTokenForStrategy(req, strategy) {
213
+ switch (strategy) {
214
+ case 'jwt':
215
+ return this.extractBearerToken(req);
216
+ case 'api-key':
217
+ return this.extractApiKey(req);
218
+ default:
219
+ return this.extractToken(req);
220
+ }
221
+ }
222
+ /**
223
+ * Extract general token from request
224
+ */
225
+ extractToken(req) {
226
+ // Try Bearer token first
227
+ const bearerToken = this.extractBearerToken(req);
228
+ if (bearerToken)
229
+ return bearerToken;
230
+ // Try API key
231
+ const apiKey = this.extractApiKey(req);
232
+ if (apiKey)
233
+ return apiKey;
234
+ return null;
235
+ }
236
+ /**
237
+ * Extract Bearer token from Authorization header
238
+ */
239
+ extractBearerToken(req) {
240
+ const authHeader = req.headers.authorization;
241
+ if (authHeader && authHeader.startsWith('Bearer ')) {
242
+ return authHeader.substring(7);
243
+ }
244
+ return null;
245
+ }
246
+ /**
247
+ * Extract API key from headers
248
+ */
249
+ extractApiKey(req) {
250
+ // Check various API key header formats
251
+ return req.headers['x-api-key'] ||
252
+ req.headers['api-key'] ||
253
+ req.headers['apikey'] ||
254
+ null;
255
+ }
256
+ /**
257
+ * Extract refresh token from request
258
+ */
259
+ extractRefreshToken(req) {
260
+ // Check body first
261
+ const body = req.body;
262
+ if (body && body.refreshToken) {
263
+ return body.refreshToken;
264
+ }
265
+ // Check headers
266
+ return req.headers['x-refresh-token'] || null;
267
+ }
268
+ /**
269
+ * Detect strategy based on request
270
+ */
271
+ detectStrategy(req, preferredStrategies) {
272
+ // Use first preferred strategy if available
273
+ if (preferredStrategies.length > 0) {
274
+ return preferredStrategies[0];
275
+ }
276
+ // Auto-detect based on headers
277
+ if (req.headers['x-api-key'] || req.headers['api-key']) {
278
+ return 'api-key';
279
+ }
280
+ if (req.headers.authorization?.startsWith('Bearer ')) {
281
+ return 'jwt';
282
+ }
283
+ return 'jwt'; // Default fallback
284
+ }
285
+ /**
286
+ * Check if user has required roles
287
+ */
288
+ hasRequiredRoles(user, requiredRoles) {
289
+ return requiredRoles.every(role => user.roles.includes(role));
290
+ }
291
+ /**
292
+ * Check if user has required permissions
293
+ */
294
+ hasRequiredPermissions(user, requiredPermissions) {
295
+ return requiredPermissions.every(permission => user.permissions.some(userPerm => userPerm === permission || userPerm.startsWith(permission + ':')));
296
+ }
297
+ /**
298
+ * Check if path should be skipped
299
+ */
300
+ shouldSkipPath(path, skipPaths) {
301
+ return skipPaths.some(skipPath => {
302
+ if (skipPath.includes('*')) {
303
+ const regex = new RegExp(skipPath.replace(/\*/g, '.*'));
304
+ return regex.test(path);
305
+ }
306
+ return path === skipPath || path.startsWith(skipPath);
307
+ });
308
+ }
309
+ /**
310
+ * Handle authentication errors
311
+ */
312
+ handleAuthError(error, req, reply, customErrorHandler) {
313
+ // Use custom error handler if provided
314
+ if (customErrorHandler) {
315
+ return customErrorHandler(error, req, reply);
316
+ }
317
+ // Default error handling
318
+ if (error instanceof types_1.AuthError) {
319
+ return reply.status(error.statusCode).send({
320
+ success: false,
321
+ error: error.message,
322
+ code: error.code,
323
+ metadata: error.metadata
324
+ });
325
+ }
326
+ // Generic error
327
+ const errorMessage = error instanceof Error ? error.message : String(error);
328
+ return reply.status(500).send({
329
+ success: false,
330
+ error: 'Internal authentication error',
331
+ details: errorMessage
332
+ });
333
+ }
334
+ }
335
+ exports.AuthMiddleware = AuthMiddleware;
336
+ //# sourceMappingURL=AuthMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthMiddleware.js","sourceRoot":"","sources":["../../../src/auth/middleware/AuthMiddleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Redis-based Token Storage Implementation
3
+ * Provides persistent, scalable storage for authentication tokens and sessions
4
+ */
5
+ import { TokenStorage } from '../types';
6
+ export interface RedisClient {
7
+ get(key: string): Promise<string | null>;
8
+ set(key: string, value: string, options?: {
9
+ EX?: number;
10
+ PX?: number;
11
+ }): Promise<string | null>;
12
+ del(key: string): Promise<number>;
13
+ exists(key: string): Promise<number>;
14
+ expire(key: string, seconds: number): Promise<number>;
15
+ ttl(key: string): Promise<number>;
16
+ }
17
+ export interface RedisTokenStorageConfig {
18
+ client: RedisClient;
19
+ keyPrefix?: string;
20
+ defaultTTL?: number;
21
+ serializer?: {
22
+ serialize: (value: any) => string;
23
+ deserialize: (value: string) => any;
24
+ };
25
+ }
26
+ export declare class RedisTokenStorage implements TokenStorage {
27
+ private client;
28
+ private keyPrefix;
29
+ private defaultTTL?;
30
+ private serializer;
31
+ constructor(config: RedisTokenStorageConfig);
32
+ /**
33
+ * Store a value with optional TTL
34
+ */
35
+ store(key: string, value: any, ttl?: number): Promise<void>;
36
+ /**
37
+ * Retrieve a value by key
38
+ */
39
+ get(key: string): Promise<any>;
40
+ /**
41
+ * Delete a value by key
42
+ */
43
+ delete(key: string): Promise<void>;
44
+ /**
45
+ * Check if a key exists
46
+ */
47
+ exists(key: string): Promise<boolean>;
48
+ /**
49
+ * Set TTL for an existing key
50
+ */
51
+ setTTL(key: string, ttl: number): Promise<void>;
52
+ /**
53
+ * Get TTL for a key
54
+ */
55
+ getTTL(key: string): Promise<number>;
56
+ /**
57
+ * Store multiple values in a batch operation
58
+ */
59
+ storeBatch(entries: Array<{
60
+ key: string;
61
+ value: any;
62
+ ttl?: number;
63
+ }>): Promise<void>;
64
+ /**
65
+ * Get multiple values by keys
66
+ */
67
+ getBatch(keys: string[]): Promise<Record<string, any>>;
68
+ /**
69
+ * Delete multiple keys
70
+ */
71
+ deleteBatch(keys: string[]): Promise<void>;
72
+ /**
73
+ * Get the full Redis key with prefix
74
+ */
75
+ private getFullKey;
76
+ /**
77
+ * Health check for Redis connection
78
+ */
79
+ healthCheck(): Promise<{
80
+ status: 'healthy' | 'unhealthy';
81
+ details?: string;
82
+ }>;
83
+ /**
84
+ * Get storage statistics
85
+ */
86
+ getStats(): Promise<{
87
+ keyPrefix: string;
88
+ defaultTTL?: number;
89
+ connectionStatus: 'healthy' | 'unhealthy';
90
+ }>;
91
+ }
92
+ //# sourceMappingURL=RedisTokenStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisTokenStorage.d.ts","sourceRoot":"","sources":["../../../src/auth/storage/RedisTokenStorage.ts"],"names":[],"mappings":"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"}