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.
- package/README.md +1 -1
- package/dist/api.d.ts +5 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +25 -9
- package/dist/api.js.map +1 -1
- package/dist/auth/AuthManager.d.ts +68 -0
- package/dist/auth/AuthManager.d.ts.map +1 -0
- package/dist/auth/AuthManager.js +239 -0
- package/dist/auth/AuthManager.js.map +1 -0
- package/dist/auth/examples/basic-usage.d.ts +30 -0
- package/dist/auth/examples/basic-usage.d.ts.map +1 -0
- package/dist/auth/examples/basic-usage.js +391 -0
- package/dist/auth/examples/basic-usage.js.map +1 -0
- package/dist/auth/index.d.ts +70 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +118 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware/AuthMiddleware.d.ts +110 -0
- package/dist/auth/middleware/AuthMiddleware.d.ts.map +1 -0
- package/dist/auth/middleware/AuthMiddleware.js +336 -0
- package/dist/auth/middleware/AuthMiddleware.js.map +1 -0
- package/dist/auth/storage/RedisTokenStorage.d.ts +92 -0
- package/dist/auth/storage/RedisTokenStorage.d.ts.map +1 -0
- package/dist/auth/storage/RedisTokenStorage.js +207 -0
- package/dist/auth/storage/RedisTokenStorage.js.map +1 -0
- package/dist/auth/strategies/ApiKeyStrategy.d.ts +64 -0
- package/dist/auth/strategies/ApiKeyStrategy.d.ts.map +1 -0
- package/dist/auth/strategies/ApiKeyStrategy.js +391 -0
- package/dist/auth/strategies/ApiKeyStrategy.js.map +1 -0
- package/dist/auth/strategies/JwtStrategy.d.ts +46 -0
- package/dist/auth/strategies/JwtStrategy.d.ts.map +1 -0
- package/dist/auth/strategies/JwtStrategy.js +310 -0
- package/dist/auth/strategies/JwtStrategy.js.map +1 -0
- package/dist/auth/types.d.ts +130 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +50 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cache/bootstrap.js +1 -1
- package/dist/cache/bootstrap.js.map +1 -1
- package/dist/cache/index.d.ts +2 -1
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +4 -1
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/{in-memory-cache.store.d.ts → stores/in-memory-cache.store.d.ts} +1 -1
- package/dist/cache/stores/in-memory-cache.store.d.ts.map +1 -0
- package/dist/cache/{in-memory-cache.store.js → stores/in-memory-cache.store.js} +1 -1
- package/dist/cache/stores/in-memory-cache.store.js.map +1 -0
- package/dist/cache/stores/index.d.ts +3 -0
- package/dist/cache/stores/index.d.ts.map +1 -0
- package/dist/cache/stores/index.js +20 -0
- package/dist/cache/stores/index.js.map +1 -0
- package/dist/cache/stores/redis-cache.store.d.ts +8 -0
- package/dist/cache/stores/redis-cache.store.d.ts.map +1 -0
- package/dist/cache/stores/redis-cache.store.js +39 -0
- package/dist/cache/stores/redis-cache.store.js.map +1 -0
- package/dist/config/AppConfig.d.ts +3 -3
- package/dist/config/AppConfig.d.ts.map +1 -1
- package/dist/config/AppConfig.js +9 -2
- package/dist/config/AppConfig.js.map +1 -1
- package/dist/constants/index.d.ts +61 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +75 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/core/decorators.d.ts +7 -7
- package/dist/core/decorators.d.ts.map +1 -1
- package/dist/core/decorators.js +8 -7
- package/dist/core/decorators.js.map +1 -1
- package/dist/core/di-container.d.ts +1 -1
- package/dist/core/di-container.d.ts.map +1 -1
- package/dist/core/di-container.js +3 -3
- package/dist/core/di-container.js.map +1 -1
- package/dist/core/router.d.ts.map +1 -1
- package/dist/core/router.js +3 -3
- package/dist/core/router.js.map +1 -1
- package/dist/events/bootstrap.d.ts +13 -1
- package/dist/events/bootstrap.d.ts.map +1 -1
- package/dist/events/bootstrap.js +30 -2
- package/dist/events/bootstrap.js.map +1 -1
- package/dist/events/buffered-event-bus.service.d.ts +135 -0
- package/dist/events/buffered-event-bus.service.d.ts.map +1 -0
- package/dist/events/buffered-event-bus.service.js +420 -0
- package/dist/events/buffered-event-bus.service.js.map +1 -0
- package/dist/events/config/buffered-event-config.d.ts +153 -0
- package/dist/events/config/buffered-event-config.d.ts.map +1 -0
- package/dist/events/config/buffered-event-config.js +181 -0
- package/dist/events/config/buffered-event-config.js.map +1 -0
- package/dist/events/event-bus.service.d.ts.map +1 -1
- package/dist/events/event-bus.service.js +2 -0
- package/dist/events/event-bus.service.js.map +1 -1
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +3 -0
- package/dist/events/index.js.map +1 -1
- package/dist/events/metrics/event-metrics.d.ts +175 -0
- package/dist/events/metrics/event-metrics.d.ts.map +1 -0
- package/dist/events/metrics/event-metrics.js +235 -0
- package/dist/events/metrics/event-metrics.js.map +1 -0
- package/dist/events/monitoring/health-monitor.d.ts +142 -0
- package/dist/events/monitoring/health-monitor.d.ts.map +1 -0
- package/dist/events/monitoring/health-monitor.js +492 -0
- package/dist/events/monitoring/health-monitor.js.map +1 -0
- package/dist/events/retry/retry-handler.d.ts +112 -0
- package/dist/events/retry/retry-handler.d.ts.map +1 -0
- package/dist/events/retry/retry-handler.js +218 -0
- package/dist/events/retry/retry-handler.js.map +1 -0
- package/dist/events/shared-buffer.d.ts +92 -0
- package/dist/events/shared-buffer.d.ts.map +1 -0
- package/dist/events/shared-buffer.js +179 -0
- package/dist/events/shared-buffer.js.map +1 -0
- package/dist/events/worker/event-processor.worker.d.ts +75 -0
- package/dist/events/worker/event-processor.worker.d.ts.map +1 -0
- package/dist/events/worker/event-processor.worker.js +293 -0
- package/dist/events/worker/event-processor.worker.js.map +1 -0
- package/dist/events/worker/worker-manager.d.ts +132 -0
- package/dist/events/worker/worker-manager.d.ts.map +1 -0
- package/dist/events/worker/worker-manager.js +436 -0
- package/dist/events/worker/worker-manager.js.map +1 -0
- package/dist/examples/auth/auth.middleware.d.ts +1 -0
- package/dist/examples/auth/auth.middleware.d.ts.map +1 -0
- package/dist/examples/auth/auth.middleware.js +2 -0
- package/dist/examples/auth/auth.middleware.js.map +1 -0
- package/dist/examples/auth/authorization.middleware.d.ts +1 -0
- package/dist/examples/auth/authorization.middleware.d.ts.map +1 -0
- package/dist/examples/auth/authorization.middleware.js +2 -0
- package/dist/examples/auth/authorization.middleware.js.map +1 -0
- package/dist/examples/auth/context.extractor.d.ts +1 -0
- package/dist/examples/auth/context.extractor.d.ts.map +1 -0
- package/dist/examples/auth/context.extractor.js +2 -0
- package/dist/examples/auth/context.extractor.js.map +1 -0
- package/dist/examples/auth/example.d.ts +1 -0
- package/dist/examples/auth/example.d.ts.map +1 -0
- package/dist/examples/auth/example.js +2 -0
- package/dist/examples/auth/example.js.map +1 -0
- package/dist/examples/auth/provider.d.ts +1 -0
- package/dist/examples/auth/provider.d.ts.map +1 -0
- package/dist/examples/auth/provider.js +2 -0
- package/dist/examples/auth/provider.js.map +1 -0
- package/dist/examples/auth/users.d.ts +1 -0
- package/dist/examples/auth/users.d.ts.map +1 -0
- package/dist/examples/auth/users.js +2 -0
- package/dist/examples/auth/users.js.map +1 -0
- package/dist/examples/controllers/auth.controller.d.ts +1 -0
- package/dist/examples/controllers/auth.controller.d.ts.map +1 -0
- package/dist/examples/controllers/auth.controller.js +249 -0
- package/dist/examples/controllers/auth.controller.js.map +1 -0
- package/dist/examples/controllers/health.controller.d.ts +1 -0
- package/dist/examples/controllers/health.controller.d.ts.map +1 -1
- package/dist/examples/controllers/health.controller.js +6 -0
- package/dist/examples/controllers/health.controller.js.map +1 -1
- package/dist/examples/controllers/todo.controller.d.ts +4 -2
- package/dist/examples/controllers/todo.controller.d.ts.map +1 -1
- package/dist/examples/controllers/todo.controller.js +44 -18
- package/dist/examples/controllers/todo.controller.js.map +1 -1
- package/dist/examples/events/TodoEventHandler.d.ts +4 -1
- package/dist/examples/events/TodoEventHandler.d.ts.map +1 -1
- package/dist/examples/events/TodoEventHandler.js +8 -4
- package/dist/examples/events/TodoEventHandler.js.map +1 -1
- package/dist/examples/events/buffered-event-example.d.ts +71 -0
- package/dist/examples/events/buffered-event-example.d.ts.map +1 -0
- package/dist/examples/events/buffered-event-example.js +182 -0
- package/dist/examples/events/buffered-event-example.js.map +1 -0
- package/dist/examples/events/integration-test.d.ts +10 -0
- package/dist/examples/events/integration-test.d.ts.map +1 -0
- package/dist/examples/events/integration-test.js +147 -0
- package/dist/examples/events/integration-test.js.map +1 -0
- package/dist/examples/global-middleware-example.d.ts +2 -0
- package/dist/examples/global-middleware-example.d.ts.map +1 -0
- package/dist/examples/global-middleware-example.js +94 -0
- package/dist/examples/global-middleware-example.js.map +1 -0
- package/dist/examples/index.d.ts +1 -0
- package/dist/examples/index.d.ts.map +1 -1
- package/dist/examples/index.js +86 -27
- package/dist/examples/index.js.map +1 -1
- package/dist/examples/services/todo.service.d.ts +3 -2
- package/dist/examples/services/todo.service.d.ts.map +1 -1
- package/dist/examples/services/todo.service.js +12 -2
- package/dist/examples/services/todo.service.js.map +1 -1
- package/dist/examples/simple-auth-example.d.ts +7 -0
- package/dist/examples/simple-auth-example.d.ts.map +1 -0
- package/dist/examples/simple-auth-example.js +106 -0
- package/dist/examples/simple-auth-example.js.map +1 -0
- package/dist/examples/todos/schema.d.ts +4 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/logging/config/logging.config.d.ts +0 -32
- package/dist/logging/config/logging.config.d.ts.map +1 -1
- package/dist/logging/config/logging.config.js +43 -49
- package/dist/logging/config/logging.config.js.map +1 -1
- package/dist/logging/core/logger.d.ts +1 -0
- package/dist/logging/core/logger.d.ts.map +1 -1
- package/dist/logging/core/logger.js +3 -0
- package/dist/logging/core/logger.js.map +1 -1
- package/dist/logging/core/logger.provider.d.ts.map +1 -1
- package/dist/logging/core/logger.provider.js +24 -12
- package/dist/logging/core/logger.provider.js.map +1 -1
- package/dist/logging/core/startup.logger.d.ts +1 -1
- package/dist/logging/core/startup.logger.d.ts.map +1 -1
- package/dist/logging/core/startup.logger.js +6 -3
- package/dist/logging/core/startup.logger.js.map +1 -1
- package/dist/logging/core/tracing.service.d.ts +32 -0
- package/dist/logging/core/tracing.service.d.ts.map +1 -0
- package/dist/logging/core/tracing.service.js +165 -0
- package/dist/logging/core/tracing.service.js.map +1 -0
- package/dist/logging/index.d.ts +1 -1
- package/dist/logging/index.d.ts.map +1 -1
- package/dist/logging/index.js +3 -2
- package/dist/logging/index.js.map +1 -1
- package/dist/middleware/auth-context.extractor.d.ts +5 -0
- package/dist/middleware/auth-context.extractor.d.ts.map +1 -0
- package/dist/middleware/auth-context.extractor.js +114 -0
- package/dist/middleware/auth-context.extractor.js.map +1 -0
- package/dist/middleware/auth.middleware.d.ts +16 -2
- package/dist/middleware/auth.middleware.d.ts.map +1 -1
- package/dist/middleware/auth.middleware.js +110 -13
- package/dist/middleware/auth.middleware.js.map +1 -1
- package/dist/middleware/authorization.middleware.d.ts +21 -0
- package/dist/middleware/authorization.middleware.d.ts.map +1 -0
- package/dist/middleware/authorization.middleware.js +55 -0
- package/dist/middleware/authorization.middleware.js.map +1 -0
- package/dist/middleware/context.middleware.d.ts +12 -2
- package/dist/middleware/context.middleware.d.ts.map +1 -1
- package/dist/middleware/context.middleware.js +43 -17
- package/dist/middleware/context.middleware.js.map +1 -1
- package/dist/middleware/index.d.ts +1 -0
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/tracing.middleware.d.ts +15 -0
- package/dist/middleware/tracing.middleware.d.ts.map +1 -0
- package/dist/middleware/tracing.middleware.js +36 -0
- package/dist/middleware/tracing.middleware.js.map +1 -0
- package/package.json +5 -1
- package/dist/cache/in-memory-cache.store.d.ts.map +0 -1
- 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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE;QACX,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC;QAClC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC;KACrC,CAAC;CACH;AAED,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,UAAU,CAGhB;gBAEU,MAAM,EAAE,uBAAuB;IAU3C;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBjE;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAgBpC;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxC;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW3C;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrD;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAU1C;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB1F;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAmB5D;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhD;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA+BnF;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,SAAS,GAAG,WAAW,CAAC;KAC3C,CAAC;CASH"}
|