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
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Our goal is to make building complex, scalable, and maintainable backend applica
|
|
|
8
8
|
|
|
9
9
|
- **Declarative & Decorator-Driven:** Write clean, readable, and self-documenting code using a rich set of decorators for controllers, services, dependency injection, and more.
|
|
10
10
|
- **Powerful Dependency Injection:** A full-featured DI container that supports constructor and property injection, interface binding, scopes, and eager loading.
|
|
11
|
-
- **Event-Driven Architecture:** A built-in, asynchronous event bus with automatic retries and a dead-letter queue,
|
|
11
|
+
- **Event-Driven Architecture:** A built-in, asynchronous event bus with automatic retries and a dead-letter queue, plus high-performance buffered event processing with worker threads, priority queues, and advanced monitoring.
|
|
12
12
|
- **Pluggable Caching:** A decorator-driven caching system that works out-of-the-box with an in-memory store and can be seamlessly extended to use Redis or other backends.
|
|
13
13
|
- **Type-Safe Configuration:** A schema-driven configuration system that validates your environment at startup, catching errors early and providing fully typed config objects.
|
|
14
14
|
- **Built on Fastify:** Leverage the incredible performance and rich plugin ecosystem of one of the fastest web frameworks for Node.js.
|
package/dist/api.d.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import { FastifyInstance } from 'fastify';
|
|
2
2
|
import { ZodObject } from 'zod';
|
|
3
|
+
import { FastifyMiddleware } from './core/decorators';
|
|
3
4
|
import { Constructor } from './core/di-container';
|
|
5
|
+
import { ContextExtractor } from './middleware/context.middleware';
|
|
4
6
|
export interface BootifyAppOptions {
|
|
5
7
|
controllers: Constructor[];
|
|
6
8
|
port?: number;
|
|
7
9
|
hostname?: string;
|
|
8
10
|
enableSwagger?: boolean;
|
|
9
11
|
configSchema?: ZodObject<any>;
|
|
12
|
+
contextExtractor?: ContextExtractor;
|
|
13
|
+
globalMiddlewares?: FastifyMiddleware[];
|
|
14
|
+
ignoreTrailingSlash?: boolean;
|
|
10
15
|
}
|
|
11
16
|
export declare function createBootifyApp(options: BootifyAppOptions): Promise<{
|
|
12
17
|
app: FastifyInstance<import("fastify").RawServerDefault, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>;
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAEA,OAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAClD,OAAU,EAAY,SAAS,EAAE,MAAM,KAAK,CAAA;AAG5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGjD,OAAO,EAAE,gBAAgB,EAA2B,MAAM,iCAAiC,CAAA;AAM3F,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,WAAW,EAAE,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAA;IAC7B,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACvC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB;;;GA2FhE"}
|
package/dist/api.js
CHANGED
|
@@ -37,25 +37,37 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.createBootifyApp = createBootifyApp;
|
|
40
|
+
const swagger_1 = __importDefault(require("@fastify/swagger"));
|
|
41
|
+
const swagger_ui_1 = __importDefault(require("@fastify/swagger-ui"));
|
|
40
42
|
const fastify_1 = __importDefault(require("fastify"));
|
|
41
43
|
const zod_1 = __importStar(require("zod"));
|
|
44
|
+
const AppConfig_1 = require("./config/AppConfig");
|
|
45
|
+
const constants_1 = require("./constants");
|
|
42
46
|
const router_1 = require("./core/router");
|
|
43
|
-
const swagger_1 = __importDefault(require("@fastify/swagger"));
|
|
44
|
-
const swagger_ui_1 = __importDefault(require("@fastify/swagger-ui"));
|
|
45
|
-
const request_logger_middleware_1 = require("./middleware/request-logger.middleware");
|
|
46
|
-
const context_middleware_1 = require("./middleware/context.middleware");
|
|
47
47
|
const logging_1 = require("./logging");
|
|
48
|
-
const
|
|
48
|
+
const context_middleware_1 = require("./middleware/context.middleware");
|
|
49
|
+
const request_logger_middleware_1 = require("./middleware/request-logger.middleware");
|
|
49
50
|
async function createBootifyApp(options) {
|
|
50
51
|
AppConfig_1.AppConfig.initialize(options.configSchema ?? zod_1.default.object({}));
|
|
51
52
|
const { logger, startupLogger } = await (0, logging_1.intitializeLogging)();
|
|
52
53
|
startupLogger.logStartupBanner();
|
|
53
54
|
const app = (0, fastify_1.default)({
|
|
54
55
|
logger: false,
|
|
56
|
+
ignoreTrailingSlash: options.ignoreTrailingSlash ?? true,
|
|
55
57
|
});
|
|
58
|
+
// Register context middleware FIRST to establish AsyncLocalStorage context
|
|
56
59
|
startupLogger.logComponentStart('Request Context Middleware');
|
|
57
|
-
app.addHook('onRequest', context_middleware_1.
|
|
60
|
+
app.addHook('onRequest', (0, context_middleware_1.createContextMiddleware)(options.contextExtractor));
|
|
58
61
|
startupLogger.logComponentComplete('Request Context Middleware');
|
|
62
|
+
// Register global middlewares after context is established
|
|
63
|
+
if (options.globalMiddlewares && options.globalMiddlewares.length > 0) {
|
|
64
|
+
startupLogger.logComponentStart('Global Middlewares');
|
|
65
|
+
options.globalMiddlewares.forEach((middleware, index) => {
|
|
66
|
+
app.addHook('onRequest', middleware);
|
|
67
|
+
console.log(` ✓ Registered global middleware ${index + 1}`);
|
|
68
|
+
});
|
|
69
|
+
startupLogger.logComponentComplete('Global Middlewares');
|
|
70
|
+
}
|
|
59
71
|
// 2. Request Logger Hooks
|
|
60
72
|
// These log the start and end of the request.
|
|
61
73
|
startupLogger.logComponentStart('Attaching Request Logger');
|
|
@@ -84,6 +96,8 @@ async function createBootifyApp(options) {
|
|
|
84
96
|
startupLogger.logComponentComplete('Attaching Global ErrorHandler');
|
|
85
97
|
if (options.enableSwagger) {
|
|
86
98
|
startupLogger.logComponentStart('Initializing Swagger');
|
|
99
|
+
const swaggerHost = options.hostname ?? 'localhost';
|
|
100
|
+
const swaggerPort = options.port ?? constants_1.DEFAULT_SERVER_PORT;
|
|
87
101
|
await app.register(swagger_1.default, {
|
|
88
102
|
openapi: {
|
|
89
103
|
info: {
|
|
@@ -91,7 +105,7 @@ async function createBootifyApp(options) {
|
|
|
91
105
|
description: 'API documentation',
|
|
92
106
|
version: '1.0.0',
|
|
93
107
|
},
|
|
94
|
-
servers: [{ url: `http://${
|
|
108
|
+
servers: [{ url: `http://${swaggerHost}:${swaggerPort}` }],
|
|
95
109
|
},
|
|
96
110
|
});
|
|
97
111
|
await app.register(swagger_ui_1.default, {
|
|
@@ -105,8 +119,10 @@ async function createBootifyApp(options) {
|
|
|
105
119
|
startupLogger.logStartupComplete();
|
|
106
120
|
const start = async () => {
|
|
107
121
|
try {
|
|
108
|
-
|
|
109
|
-
|
|
122
|
+
const actualPort = options.port ?? constants_1.DEFAULT_SERVER_PORT;
|
|
123
|
+
const actualHost = options.hostname ?? constants_1.DEFAULT_SERVER_HOST;
|
|
124
|
+
await app.listen({ port: actualPort, host: actualHost });
|
|
125
|
+
startupLogger.logStartupSummary(actualPort, actualHost);
|
|
110
126
|
}
|
|
111
127
|
catch (err) {
|
|
112
128
|
app.log.error(err);
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AuthManager - Central orchestrator for authentication strategies
|
|
3
|
+
* Manages strategy registration, selection, and execution
|
|
4
|
+
*/
|
|
5
|
+
import { AuthConfig, AuthContext, AuthResult, AuthStrategy, TokenStorage } from './types';
|
|
6
|
+
export declare class AuthManager {
|
|
7
|
+
private config;
|
|
8
|
+
private strategies;
|
|
9
|
+
private defaultStrategy?;
|
|
10
|
+
private tokenStorage?;
|
|
11
|
+
constructor(config?: {
|
|
12
|
+
defaultStrategy?: string;
|
|
13
|
+
tokenStorage?: TokenStorage;
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Register an authentication strategy
|
|
17
|
+
*/
|
|
18
|
+
registerStrategy(strategy: AuthStrategy, config: AuthConfig): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Get a registered strategy by name
|
|
21
|
+
*/
|
|
22
|
+
getStrategy(name: string): AuthStrategy | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Get all registered strategy names
|
|
25
|
+
*/
|
|
26
|
+
getRegisteredStrategies(): string[];
|
|
27
|
+
/**
|
|
28
|
+
* Authenticate using a specific strategy or auto-detect
|
|
29
|
+
*/
|
|
30
|
+
authenticate(context: AuthContext, strategyName?: string): Promise<AuthResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Validate a token using a specific strategy or auto-detect
|
|
33
|
+
*/
|
|
34
|
+
validate(token: string, context: AuthContext, strategyName?: string): Promise<AuthResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Refresh an access token
|
|
37
|
+
*/
|
|
38
|
+
refresh(refreshToken: string, context: AuthContext, strategyName?: string): Promise<AuthResult>;
|
|
39
|
+
/**
|
|
40
|
+
* Revoke/logout a user's session
|
|
41
|
+
*/
|
|
42
|
+
revoke(token: string, context: AuthContext, strategyName?: string): Promise<boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* Select appropriate strategy based on context and preference
|
|
45
|
+
*/
|
|
46
|
+
private selectStrategy;
|
|
47
|
+
/**
|
|
48
|
+
* Auto-detect strategy based on request context
|
|
49
|
+
*/
|
|
50
|
+
private detectStrategy;
|
|
51
|
+
/**
|
|
52
|
+
* Store session data in token storage
|
|
53
|
+
*/
|
|
54
|
+
private storeSessionData;
|
|
55
|
+
/**
|
|
56
|
+
* Clean up session data from token storage
|
|
57
|
+
*/
|
|
58
|
+
private cleanupSessionData;
|
|
59
|
+
/**
|
|
60
|
+
* Get authentication statistics
|
|
61
|
+
*/
|
|
62
|
+
getStats(): {
|
|
63
|
+
registeredStrategies: number;
|
|
64
|
+
strategyNames: string[];
|
|
65
|
+
defaultStrategy?: string;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=AuthManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthManager.d.ts","sourceRoot":"","sources":["../../src/auth/AuthManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,UAAU,EACV,WAAW,EAEX,UAAU,EACV,YAAY,EAEZ,YAAY,EACb,MAAM,SAAS,CAAC;AAEjB,qBAAa,WAAW;IAKV,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,UAAU,CAAwC;IAC1D,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,YAAY,CAAC,CAAe;gBAEhB,MAAM,GAAE;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,YAAY,CAAC;KACxB;IAKN;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBjF;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAInD;;OAEG;IACH,uBAAuB,IAAI,MAAM,EAAE;IAInC;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiCpF;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAuB/F;;OAEG;IACG,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA8BrG;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB1F;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;YACW,gBAAgB;IAiB9B;;OAEG;YACW,kBAAkB;IAiBhC;;OAEG;IACH,QAAQ,IAAI;QACV,oBAAoB,EAAE,MAAM,CAAC;QAC7B,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B;CAOF"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AuthManager - Central orchestrator for authentication strategies
|
|
4
|
+
* Manages strategy registration, selection, and execution
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.AuthManager = void 0;
|
|
8
|
+
const types_1 = require("./types");
|
|
9
|
+
class AuthManager {
|
|
10
|
+
constructor(config = {}) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.strategies = new Map();
|
|
13
|
+
this.defaultStrategy = config.defaultStrategy;
|
|
14
|
+
this.tokenStorage = config.tokenStorage;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Register an authentication strategy
|
|
18
|
+
*/
|
|
19
|
+
async registerStrategy(strategy, config) {
|
|
20
|
+
try {
|
|
21
|
+
await strategy.initialize(config);
|
|
22
|
+
this.strategies.set(strategy.name, strategy);
|
|
23
|
+
// Set as default if it's the first strategy or explicitly configured
|
|
24
|
+
if (!this.defaultStrategy || config.options?.isDefault) {
|
|
25
|
+
this.defaultStrategy = strategy.name;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
30
|
+
throw new types_1.AuthError(`Failed to register strategy '${strategy.name}': ${errorMessage}`, 'STRATEGY_REGISTRATION_FAILED', 500);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get a registered strategy by name
|
|
35
|
+
*/
|
|
36
|
+
getStrategy(name) {
|
|
37
|
+
return this.strategies.get(name);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get all registered strategy names
|
|
41
|
+
*/
|
|
42
|
+
getRegisteredStrategies() {
|
|
43
|
+
return Array.from(this.strategies.keys());
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Authenticate using a specific strategy or auto-detect
|
|
47
|
+
*/
|
|
48
|
+
async authenticate(context, strategyName) {
|
|
49
|
+
const strategy = this.selectStrategy(context, strategyName);
|
|
50
|
+
if (!strategy) {
|
|
51
|
+
return {
|
|
52
|
+
success: false,
|
|
53
|
+
error: 'No suitable authentication strategy found'
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
console.log('AuthManager.authenticate', strategy.name, context);
|
|
57
|
+
try {
|
|
58
|
+
const result = await strategy.authenticate(context);
|
|
59
|
+
// Store session data if authentication successful and token storage available
|
|
60
|
+
if (result.success && result.user && this.tokenStorage) {
|
|
61
|
+
await this.storeSessionData(result, strategy.name);
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error(`Authentication failed for strategy '${strategy.name}':`, error);
|
|
67
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
68
|
+
const errorCode = error instanceof types_1.AuthError ? error.code : 'UNKNOWN_ERROR';
|
|
69
|
+
return {
|
|
70
|
+
success: false,
|
|
71
|
+
error: errorMessage || 'Authentication failed',
|
|
72
|
+
metadata: { strategy: strategy.name, error: errorCode }
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Validate a token using a specific strategy or auto-detect
|
|
78
|
+
*/
|
|
79
|
+
async validate(token, context, strategyName) {
|
|
80
|
+
const strategy = this.selectStrategy(context, strategyName);
|
|
81
|
+
if (!strategy) {
|
|
82
|
+
return {
|
|
83
|
+
success: false,
|
|
84
|
+
error: 'No suitable validation strategy found'
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
return await strategy.validate(token, context);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
92
|
+
const errorCode = error instanceof types_1.AuthError ? error.code : 'UNKNOWN_ERROR';
|
|
93
|
+
return {
|
|
94
|
+
success: false,
|
|
95
|
+
error: errorMessage || 'Token validation failed',
|
|
96
|
+
metadata: { strategy: strategy.name, error: errorCode }
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Refresh an access token
|
|
102
|
+
*/
|
|
103
|
+
async refresh(refreshToken, context, strategyName) {
|
|
104
|
+
const strategy = this.selectStrategy(context, strategyName);
|
|
105
|
+
if (!strategy || !strategy.refresh) {
|
|
106
|
+
return {
|
|
107
|
+
success: false,
|
|
108
|
+
error: 'Token refresh not supported by strategy'
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
const result = await strategy.refresh(refreshToken, context);
|
|
113
|
+
// Update session data if refresh successful
|
|
114
|
+
if (result.success && result.user && this.tokenStorage) {
|
|
115
|
+
await this.storeSessionData(result, strategy.name);
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
121
|
+
const errorCode = error instanceof types_1.AuthError ? error.code : 'UNKNOWN_ERROR';
|
|
122
|
+
return {
|
|
123
|
+
success: false,
|
|
124
|
+
error: errorMessage || 'Token refresh failed',
|
|
125
|
+
metadata: { strategy: strategy.name, error: errorCode }
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Revoke/logout a user's session
|
|
131
|
+
*/
|
|
132
|
+
async revoke(token, context, strategyName) {
|
|
133
|
+
const strategy = this.selectStrategy(context, strategyName);
|
|
134
|
+
if (!strategy) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
const result = strategy.revoke ? await strategy.revoke(token, context) : true;
|
|
139
|
+
// Clean up session data
|
|
140
|
+
if (result && this.tokenStorage) {
|
|
141
|
+
await this.cleanupSessionData(token);
|
|
142
|
+
}
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
147
|
+
console.error(`Failed to revoke token: ${errorMessage}`);
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Select appropriate strategy based on context and preference
|
|
153
|
+
*/
|
|
154
|
+
selectStrategy(context, preferredStrategy) {
|
|
155
|
+
// Use explicitly specified strategy
|
|
156
|
+
if (preferredStrategy && this.strategies.has(preferredStrategy)) {
|
|
157
|
+
return this.strategies.get(preferredStrategy);
|
|
158
|
+
}
|
|
159
|
+
// Use strategy from context
|
|
160
|
+
if (context.strategy && this.strategies.has(context.strategy)) {
|
|
161
|
+
return this.strategies.get(context.strategy);
|
|
162
|
+
}
|
|
163
|
+
// Auto-detect based on request headers/content
|
|
164
|
+
const detectedStrategy = this.detectStrategy(context);
|
|
165
|
+
if (detectedStrategy && this.strategies.has(detectedStrategy)) {
|
|
166
|
+
return this.strategies.get(detectedStrategy);
|
|
167
|
+
}
|
|
168
|
+
// Fall back to default strategy
|
|
169
|
+
if (this.defaultStrategy && this.strategies.has(this.defaultStrategy)) {
|
|
170
|
+
return this.strategies.get(this.defaultStrategy);
|
|
171
|
+
}
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Auto-detect strategy based on request context
|
|
176
|
+
*/
|
|
177
|
+
detectStrategy(context) {
|
|
178
|
+
const { headers } = context;
|
|
179
|
+
// Check for API key in headers
|
|
180
|
+
if (headers['x-api-key'] || headers['api-key']) {
|
|
181
|
+
return types_1.AuthStrategyType.API_KEY;
|
|
182
|
+
}
|
|
183
|
+
// Check for JWT Bearer token
|
|
184
|
+
const authHeader = headers['authorization'] || headers['Authorization'];
|
|
185
|
+
if (authHeader?.startsWith('Bearer ')) {
|
|
186
|
+
return types_1.AuthStrategyType.JWT;
|
|
187
|
+
}
|
|
188
|
+
// Default detection logic can be extended here
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Store session data in token storage
|
|
193
|
+
*/
|
|
194
|
+
async storeSessionData(result, strategyName) {
|
|
195
|
+
if (!this.tokenStorage || !result.user || !result.tokens) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
const sessionKey = `session:${result.user.id}:${Date.now()}`;
|
|
199
|
+
const sessionData = {
|
|
200
|
+
userId: result.user.id,
|
|
201
|
+
strategy: strategyName,
|
|
202
|
+
issuedAt: new Date(),
|
|
203
|
+
expiresAt: new Date(Date.now() + (result.tokens.expiresIn * 1000)),
|
|
204
|
+
metadata: result.metadata
|
|
205
|
+
};
|
|
206
|
+
await this.tokenStorage.store(sessionKey, sessionData, result.tokens.expiresIn);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Clean up session data from token storage
|
|
210
|
+
*/
|
|
211
|
+
async cleanupSessionData(token) {
|
|
212
|
+
if (!this.tokenStorage) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
// This is a simplified cleanup - in practice, you'd need to
|
|
216
|
+
// decode the token to get user ID and find associated sessions
|
|
217
|
+
try {
|
|
218
|
+
// Implementation would depend on your token structure
|
|
219
|
+
// For now, we'll just log the cleanup attempt
|
|
220
|
+
console.log('Session cleanup requested for token');
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
224
|
+
console.error('Failed to cleanup session data:', errorMessage);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get authentication statistics
|
|
229
|
+
*/
|
|
230
|
+
getStats() {
|
|
231
|
+
return {
|
|
232
|
+
registeredStrategies: this.strategies.size,
|
|
233
|
+
strategyNames: Array.from(this.strategies.keys()),
|
|
234
|
+
defaultStrategy: this.defaultStrategy
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
exports.AuthManager = AuthManager;
|
|
239
|
+
//# sourceMappingURL=AuthManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthManager.js","sourceRoot":"","sources":["../../src/auth/AuthManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BootifyJS Authentication Examples
|
|
3
|
+
* Demonstrates how to use the authentication system with different strategies
|
|
4
|
+
*/
|
|
5
|
+
import { FastifyInstance } from 'fastify';
|
|
6
|
+
import { AuthManager, RedisTokenStorage } from '../index';
|
|
7
|
+
import { AuthMiddleware } from '../middleware/AuthMiddleware';
|
|
8
|
+
export declare class MockRedisClient {
|
|
9
|
+
private store;
|
|
10
|
+
get(key: string): Promise<string | null>;
|
|
11
|
+
set(key: string, value: string, options?: {
|
|
12
|
+
EX?: number;
|
|
13
|
+
}): Promise<string | null>;
|
|
14
|
+
del(key: string): Promise<number>;
|
|
15
|
+
exists(key: string): Promise<number>;
|
|
16
|
+
expire(key: string, seconds: number): Promise<number>;
|
|
17
|
+
ttl(key: string): Promise<number>;
|
|
18
|
+
}
|
|
19
|
+
export declare function setupJwtAuth(): Promise<{
|
|
20
|
+
authManager: AuthManager;
|
|
21
|
+
middleware: AuthMiddleware;
|
|
22
|
+
tokenStorage: RedisTokenStorage;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function setupMultiAuth(app: FastifyInstance): Promise<{
|
|
25
|
+
authManager: AuthManager;
|
|
26
|
+
middleware: AuthMiddleware;
|
|
27
|
+
tokenStorage: RedisTokenStorage;
|
|
28
|
+
}>;
|
|
29
|
+
export declare function registerJWTAuthRoutes(app: FastifyInstance, authManager: AuthManager, middleware: AuthMiddleware): void;
|
|
30
|
+
//# sourceMappingURL=basic-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-usage.d.ts","sourceRoot":"","sources":["../../../src/auth/examples/basic-usage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,EAGL,WAAW,EAEX,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAyD;IAEhE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAMlF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOrD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAOxC;AAGD,wBAAsB,YAAY;;;;GA2DjC;AAGD,wBAAsB,cAAc,CAAC,GAAG,EAAE,eAAe;;;;GA+DxD;AAGD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,cAAc,QA0G3B"}
|