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,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.OrderEventHandler = exports.UserEventHandler = exports.EventProcessingDemoService = exports.OrderProcessedEvent = exports.UserRegisteredEvent = void 0;
|
|
16
|
+
exports.runBufferedEventExample = runBufferedEventExample;
|
|
17
|
+
const decorators_1 = require("../../core/decorators");
|
|
18
|
+
const decorators_2 = require("../../events/decorators");
|
|
19
|
+
const events_1 = require("../../events");
|
|
20
|
+
/**
|
|
21
|
+
* Example events for demonstrating buffered processing
|
|
22
|
+
*/
|
|
23
|
+
class UserRegisteredEvent {
|
|
24
|
+
constructor(userId, email, timestamp = Date.now(), correlationId) {
|
|
25
|
+
this.userId = userId;
|
|
26
|
+
this.email = email;
|
|
27
|
+
this.timestamp = timestamp;
|
|
28
|
+
this.correlationId = correlationId;
|
|
29
|
+
this.type = 'user.registered';
|
|
30
|
+
}
|
|
31
|
+
get payload() {
|
|
32
|
+
return {
|
|
33
|
+
userId: this.userId,
|
|
34
|
+
email: this.email,
|
|
35
|
+
timestamp: this.timestamp
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.UserRegisteredEvent = UserRegisteredEvent;
|
|
40
|
+
class OrderProcessedEvent {
|
|
41
|
+
constructor(orderId, userId, amount, timestamp = Date.now(), correlationId) {
|
|
42
|
+
this.orderId = orderId;
|
|
43
|
+
this.userId = userId;
|
|
44
|
+
this.amount = amount;
|
|
45
|
+
this.timestamp = timestamp;
|
|
46
|
+
this.correlationId = correlationId;
|
|
47
|
+
this.type = 'order.processed';
|
|
48
|
+
}
|
|
49
|
+
get payload() {
|
|
50
|
+
return {
|
|
51
|
+
orderId: this.orderId,
|
|
52
|
+
userId: this.userId,
|
|
53
|
+
amount: this.amount,
|
|
54
|
+
timestamp: this.timestamp
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.OrderProcessedEvent = OrderProcessedEvent;
|
|
59
|
+
/**
|
|
60
|
+
* Service demonstrating both regular and buffered event processing
|
|
61
|
+
*/
|
|
62
|
+
let EventProcessingDemoService = class EventProcessingDemoService {
|
|
63
|
+
constructor(eventBus, bufferedEventBus) {
|
|
64
|
+
this.eventBus = eventBus;
|
|
65
|
+
this.bufferedEventBus = bufferedEventBus;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Emit events using regular event bus (synchronous processing)
|
|
69
|
+
*/
|
|
70
|
+
async emitRegularEvents() {
|
|
71
|
+
console.log('🔄 Emitting events via regular EventBus...');
|
|
72
|
+
// These will be processed synchronously on the main thread
|
|
73
|
+
this.eventBus.emit(new UserRegisteredEvent('user-123', 'user@example.com'));
|
|
74
|
+
this.eventBus.emit(new OrderProcessedEvent('order-456', 'user-123', 99.99));
|
|
75
|
+
console.log('✅ Regular events emitted');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Emit events using buffered event bus (asynchronous worker processing)
|
|
79
|
+
*/
|
|
80
|
+
async emitBufferedEvents() {
|
|
81
|
+
if (!this.bufferedEventBus) {
|
|
82
|
+
console.log('⚠️ Buffered event bus not available');
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
console.log('🔄 Emitting events via BufferedEventBus...');
|
|
86
|
+
// These will be processed asynchronously by worker threads
|
|
87
|
+
const result1 = await this.bufferedEventBus.emitEvent('user.registered', { userId: 'user-789', email: 'buffered@example.com' }, { priority: 'normal' });
|
|
88
|
+
const result2 = await this.bufferedEventBus.emitEvent('order.processed', { orderId: 'order-101', userId: 'user-789', amount: 149.99 }, { priority: 'critical' });
|
|
89
|
+
console.log('✅ Buffered events emitted:', { result1, result2 });
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get metrics from buffered event processing
|
|
93
|
+
*/
|
|
94
|
+
getBufferedEventMetrics() {
|
|
95
|
+
if (!this.bufferedEventBus) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
return this.bufferedEventBus.getMetrics();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get health status of buffered event processing
|
|
102
|
+
*/
|
|
103
|
+
async getBufferedEventHealth() {
|
|
104
|
+
if (!this.bufferedEventBus) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
return await this.bufferedEventBus.getHealthStatus();
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
exports.EventProcessingDemoService = EventProcessingDemoService;
|
|
111
|
+
exports.EventProcessingDemoService = EventProcessingDemoService = __decorate([
|
|
112
|
+
(0, decorators_1.Service)(),
|
|
113
|
+
__param(0, (0, decorators_1.Autowired)()),
|
|
114
|
+
__param(1, (0, decorators_1.Autowired)()),
|
|
115
|
+
__metadata("design:paramtypes", [events_1.EventBusService,
|
|
116
|
+
events_1.BufferedEventBusService])
|
|
117
|
+
], EventProcessingDemoService);
|
|
118
|
+
/**
|
|
119
|
+
* Event handlers that will process both regular and buffered events
|
|
120
|
+
*/
|
|
121
|
+
let UserEventHandler = class UserEventHandler {
|
|
122
|
+
async handleUserRegistered(event) {
|
|
123
|
+
console.log(`📧 Processing user registration for ${event.email} (ID: ${event.userId})`);
|
|
124
|
+
// Simulate some processing time
|
|
125
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
126
|
+
console.log(`✅ Welcome email sent to ${event.email}`);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
exports.UserEventHandler = UserEventHandler;
|
|
130
|
+
__decorate([
|
|
131
|
+
(0, decorators_2.OnEvent)('user.registered'),
|
|
132
|
+
__metadata("design:type", Function),
|
|
133
|
+
__metadata("design:paramtypes", [UserRegisteredEvent]),
|
|
134
|
+
__metadata("design:returntype", Promise)
|
|
135
|
+
], UserEventHandler.prototype, "handleUserRegistered", null);
|
|
136
|
+
exports.UserEventHandler = UserEventHandler = __decorate([
|
|
137
|
+
(0, decorators_2.EventListener)()
|
|
138
|
+
], UserEventHandler);
|
|
139
|
+
let OrderEventHandler = class OrderEventHandler {
|
|
140
|
+
async handleOrderProcessed(event) {
|
|
141
|
+
console.log(`📦 Processing order ${event.orderId} for user ${event.userId} ($${event.amount})`);
|
|
142
|
+
// Simulate some processing time
|
|
143
|
+
await new Promise(resolve => setTimeout(resolve, 200));
|
|
144
|
+
console.log(`✅ Order ${event.orderId} processed successfully`);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
exports.OrderEventHandler = OrderEventHandler;
|
|
148
|
+
__decorate([
|
|
149
|
+
(0, decorators_2.OnEvent)('order.processed'),
|
|
150
|
+
__metadata("design:type", Function),
|
|
151
|
+
__metadata("design:paramtypes", [OrderProcessedEvent]),
|
|
152
|
+
__metadata("design:returntype", Promise)
|
|
153
|
+
], OrderEventHandler.prototype, "handleOrderProcessed", null);
|
|
154
|
+
exports.OrderEventHandler = OrderEventHandler = __decorate([
|
|
155
|
+
(0, decorators_2.EventListener)()
|
|
156
|
+
], OrderEventHandler);
|
|
157
|
+
/**
|
|
158
|
+
* Example usage function
|
|
159
|
+
*/
|
|
160
|
+
async function runBufferedEventExample() {
|
|
161
|
+
console.log('\n🚀 Buffered Event Processing Example\n');
|
|
162
|
+
// This would typically be injected via DI
|
|
163
|
+
const demoService = new EventProcessingDemoService(new events_1.EventBusService());
|
|
164
|
+
// Emit regular events
|
|
165
|
+
await demoService.emitRegularEvents();
|
|
166
|
+
// Wait a bit
|
|
167
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
168
|
+
// Emit buffered events (if available)
|
|
169
|
+
await demoService.emitBufferedEvents();
|
|
170
|
+
// Show metrics (if available)
|
|
171
|
+
const metrics = demoService.getBufferedEventMetrics();
|
|
172
|
+
if (metrics) {
|
|
173
|
+
console.log('📊 Buffered Event Metrics:', metrics);
|
|
174
|
+
}
|
|
175
|
+
// Show health status (if available)
|
|
176
|
+
const health = await demoService.getBufferedEventHealth();
|
|
177
|
+
if (health) {
|
|
178
|
+
console.log('🏥 Buffered Event Health:', health);
|
|
179
|
+
}
|
|
180
|
+
console.log('\n✅ Example completed\n');
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=buffered-event-example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffered-event-example.js","sourceRoot":"","sources":["../../../src/examples/events/buffered-event-example.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test demonstrating buffered event processing
|
|
3
|
+
*/
|
|
4
|
+
export declare function runIntegrationTest(): Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* Performance test for buffered vs regular event processing
|
|
7
|
+
*/
|
|
8
|
+
export declare function runPerformanceComparison(): Promise<void>;
|
|
9
|
+
export declare function runAllTests(): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=integration-test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-test.d.ts","sourceRoot":"","sources":["../../../src/examples/events/integration-test.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,kBAAkB,kBAwEvC;AAED;;GAEG;AACH,wBAAsB,wBAAwB,kBAqE7C;AAGD,wBAAsB,WAAW,kBAShC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runIntegrationTest = runIntegrationTest;
|
|
4
|
+
exports.runPerformanceComparison = runPerformanceComparison;
|
|
5
|
+
exports.runAllTests = runAllTests;
|
|
6
|
+
const bootstrap_1 = require("../../events/bootstrap");
|
|
7
|
+
const buffered_event_config_1 = require("../../events/config/buffered-event-config");
|
|
8
|
+
const buffered_event_example_1 = require("./buffered-event-example");
|
|
9
|
+
/**
|
|
10
|
+
* Integration test demonstrating buffered event processing
|
|
11
|
+
*/
|
|
12
|
+
async function runIntegrationTest() {
|
|
13
|
+
console.log('🧪 Starting Buffered Event Processing Integration Test\n');
|
|
14
|
+
try {
|
|
15
|
+
// Bootstrap the event system with buffered processing enabled
|
|
16
|
+
console.log('🔧 Bootstrapping event system with buffered processing...');
|
|
17
|
+
const eventSystem = (0, bootstrap_1.bootstrapEventSystem)([], {
|
|
18
|
+
useBufferedProcessing: true,
|
|
19
|
+
bufferedEventConfig: {
|
|
20
|
+
...buffered_event_config_1.defaultBufferedEventConfig,
|
|
21
|
+
enabled: true,
|
|
22
|
+
workerCount: 2, // Use fewer workers for testing
|
|
23
|
+
maxQueueSize: 1000,
|
|
24
|
+
maxMemoryMB: 10,
|
|
25
|
+
monitoring: {
|
|
26
|
+
...buffered_event_config_1.defaultBufferedEventConfig.monitoring,
|
|
27
|
+
enabled: true,
|
|
28
|
+
metricsInterval: 2000 // Check metrics every 2 seconds
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
console.log('✅ Event system bootstrapped successfully');
|
|
33
|
+
console.log(`📊 Regular EventBus: ${eventSystem.eventBus ? 'Available' : 'Not Available'}`);
|
|
34
|
+
console.log(`🔄 Buffered EventBus: ${eventSystem.bufferedEventBus ? 'Available' : 'Not Available'}`);
|
|
35
|
+
// Wait a moment for workers to initialize
|
|
36
|
+
console.log('⏳ Waiting for worker threads to initialize...');
|
|
37
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
38
|
+
// Run the example
|
|
39
|
+
await (0, buffered_event_example_1.runBufferedEventExample)();
|
|
40
|
+
// Show final metrics if buffered processing is available
|
|
41
|
+
if (eventSystem.bufferedEventBus) {
|
|
42
|
+
console.log('\n📈 Final System Metrics:');
|
|
43
|
+
const metrics = eventSystem.bufferedEventBus.getMetrics();
|
|
44
|
+
console.log('Queue Metrics:', {
|
|
45
|
+
size: metrics.queueMetrics.size,
|
|
46
|
+
utilization: `${(metrics.queueMetrics.utilization * 100).toFixed(1)}%`,
|
|
47
|
+
totalProcessed: metrics.queueMetrics.totalProcessed
|
|
48
|
+
});
|
|
49
|
+
const health = await eventSystem.bufferedEventBus.getHealthStatus();
|
|
50
|
+
console.log('Health Status:', {
|
|
51
|
+
status: health.status,
|
|
52
|
+
activeWorkers: health.activeWorkers,
|
|
53
|
+
queueDepth: health.queueDepth
|
|
54
|
+
});
|
|
55
|
+
const workerStats = eventSystem.bufferedEventBus.getWorkerStatistics();
|
|
56
|
+
console.log('Worker Statistics:', {
|
|
57
|
+
totalWorkers: workerStats.totalWorkers,
|
|
58
|
+
activeWorkers: workerStats.activeWorkers,
|
|
59
|
+
averageProcessingTime: `${workerStats.averageProcessingTime.toFixed(2)}ms`
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// Graceful shutdown
|
|
63
|
+
console.log('\n🔄 Shutting down event system...');
|
|
64
|
+
if (eventSystem.bufferedEventBus) {
|
|
65
|
+
await eventSystem.bufferedEventBus.shutdown();
|
|
66
|
+
}
|
|
67
|
+
console.log('✅ Integration test completed successfully!\n');
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
console.error('❌ Integration test failed:', error);
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Performance test for buffered vs regular event processing
|
|
76
|
+
*/
|
|
77
|
+
async function runPerformanceComparison() {
|
|
78
|
+
console.log('⚡ Performance Comparison: Regular vs Buffered Event Processing\n');
|
|
79
|
+
const eventCount = 1000;
|
|
80
|
+
const testEvents = Array.from({ length: eventCount }, (_, i) => ({
|
|
81
|
+
type: 'test.event',
|
|
82
|
+
payload: { id: i, data: `test-data-${i}` },
|
|
83
|
+
timestamp: Date.now()
|
|
84
|
+
}));
|
|
85
|
+
// Test regular event processing
|
|
86
|
+
console.log(`🔄 Testing regular event processing (${eventCount} events)...`);
|
|
87
|
+
const regularStart = Date.now();
|
|
88
|
+
const regularEventSystem = (0, bootstrap_1.bootstrapEventSystem)([], {
|
|
89
|
+
useBufferedProcessing: false
|
|
90
|
+
});
|
|
91
|
+
for (const event of testEvents) {
|
|
92
|
+
regularEventSystem.eventBus.emit(event);
|
|
93
|
+
}
|
|
94
|
+
const regularEnd = Date.now();
|
|
95
|
+
const regularTime = regularEnd - regularStart;
|
|
96
|
+
console.log(`✅ Regular processing completed in ${regularTime}ms`);
|
|
97
|
+
console.log(`📊 Regular throughput: ${(eventCount / regularTime * 1000).toFixed(0)} events/sec\n`);
|
|
98
|
+
// Test buffered event processing
|
|
99
|
+
console.log(`🔄 Testing buffered event processing (${eventCount} events)...`);
|
|
100
|
+
const bufferedStart = Date.now();
|
|
101
|
+
const bufferedEventSystem = (0, bootstrap_1.bootstrapEventSystem)([], {
|
|
102
|
+
useBufferedProcessing: true,
|
|
103
|
+
bufferedEventConfig: {
|
|
104
|
+
...buffered_event_config_1.defaultBufferedEventConfig,
|
|
105
|
+
enabled: true,
|
|
106
|
+
workerCount: 4,
|
|
107
|
+
maxQueueSize: eventCount + 100
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
// Wait for workers to initialize
|
|
111
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
112
|
+
const emitPromises = testEvents.map(event => bufferedEventSystem.bufferedEventBus.emitEvent(event.type, event.payload, { priority: 'normal' }));
|
|
113
|
+
await Promise.all(emitPromises);
|
|
114
|
+
const bufferedEnd = Date.now();
|
|
115
|
+
const bufferedTime = bufferedEnd - bufferedStart;
|
|
116
|
+
console.log(`✅ Buffered processing completed in ${bufferedTime}ms`);
|
|
117
|
+
console.log(`📊 Buffered throughput: ${(eventCount / bufferedTime * 1000).toFixed(0)} events/sec`);
|
|
118
|
+
// Show comparison
|
|
119
|
+
const improvement = ((regularTime - bufferedTime) / regularTime * 100);
|
|
120
|
+
console.log(`\n📈 Performance improvement: ${improvement > 0 ? '+' : ''}${improvement.toFixed(1)}%`);
|
|
121
|
+
// Cleanup
|
|
122
|
+
await bufferedEventSystem.bufferedEventBus.shutdown();
|
|
123
|
+
console.log('\n✅ Performance comparison completed!\n');
|
|
124
|
+
}
|
|
125
|
+
// Export a function to run all tests
|
|
126
|
+
async function runAllTests() {
|
|
127
|
+
try {
|
|
128
|
+
await runIntegrationTest();
|
|
129
|
+
await new Promise(resolve => setTimeout(resolve, 1000)); // Brief pause
|
|
130
|
+
await runPerformanceComparison();
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
console.error('❌ Test suite failed:', error);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// If this file is run directly, execute all tests
|
|
138
|
+
if (require.main === module) {
|
|
139
|
+
runAllTests().then(() => {
|
|
140
|
+
console.log('🎉 All tests completed successfully!');
|
|
141
|
+
process.exit(0);
|
|
142
|
+
}).catch((error) => {
|
|
143
|
+
console.error('💥 Test suite failed:', error);
|
|
144
|
+
process.exit(1);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=integration-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-test.js","sourceRoot":"","sources":["../../../src/examples/events/integration-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-middleware-example.d.ts","sourceRoot":"","sources":["../../src/examples/global-middleware-example.ts"],"names":[],"mappings":"AA8DA,wBAAsB,6BAA6B,kBAkBlD"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.startAppWithGlobalMiddlewares = startAppWithGlobalMiddlewares;
|
|
13
|
+
const index_1 = require("../index");
|
|
14
|
+
const decorators_1 = require("../core/decorators");
|
|
15
|
+
// Example middleware implementations
|
|
16
|
+
const authMiddleware = async (request, reply) => {
|
|
17
|
+
console.log('🔐 Auth middleware executed');
|
|
18
|
+
request.user = { id: 1, username: 'testuser' };
|
|
19
|
+
};
|
|
20
|
+
const rateLimitMiddleware = async (request, reply) => {
|
|
21
|
+
console.log('⏱️ Rate limit middleware executed');
|
|
22
|
+
// Add rate limiting logic here
|
|
23
|
+
// For example: check request count per IP, implement sliding window, etc.
|
|
24
|
+
// Example: Simple rate limiting check
|
|
25
|
+
const clientIP = request.ip;
|
|
26
|
+
console.log(`Rate limiting check for IP: ${clientIP}`);
|
|
27
|
+
};
|
|
28
|
+
const loggingMiddleware = async (request, reply) => {
|
|
29
|
+
console.log('📝 Custom logging middleware executed');
|
|
30
|
+
// Add custom logging logic here
|
|
31
|
+
// For example: log request details, performance metrics, etc.
|
|
32
|
+
console.log(`${request.method} ${request.url} - User-Agent: ${request.headers['user-agent']}`);
|
|
33
|
+
};
|
|
34
|
+
const corsMiddleware = async (request, reply) => {
|
|
35
|
+
console.log('🌐 CORS middleware executed');
|
|
36
|
+
// Add CORS headers
|
|
37
|
+
reply.header('Access-Control-Allow-Origin', '*');
|
|
38
|
+
reply.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
|
|
39
|
+
reply.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
|
|
40
|
+
};
|
|
41
|
+
let UserController = class UserController {
|
|
42
|
+
getUsers() {
|
|
43
|
+
return {
|
|
44
|
+
message: 'Users retrieved successfully',
|
|
45
|
+
users: [
|
|
46
|
+
{ id: 1, name: 'John Doe' },
|
|
47
|
+
{ id: 2, name: 'Jane Smith' }
|
|
48
|
+
]
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
getUserById() {
|
|
52
|
+
return {
|
|
53
|
+
message: 'User retrieved successfully',
|
|
54
|
+
user: { id: 1, name: 'John Doe' }
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
__decorate([
|
|
59
|
+
(0, decorators_1.Get)('/'),
|
|
60
|
+
__metadata("design:type", Function),
|
|
61
|
+
__metadata("design:paramtypes", []),
|
|
62
|
+
__metadata("design:returntype", void 0)
|
|
63
|
+
], UserController.prototype, "getUsers", null);
|
|
64
|
+
__decorate([
|
|
65
|
+
(0, decorators_1.Get)('/:id'),
|
|
66
|
+
__metadata("design:type", Function),
|
|
67
|
+
__metadata("design:paramtypes", []),
|
|
68
|
+
__metadata("design:returntype", void 0)
|
|
69
|
+
], UserController.prototype, "getUserById", null);
|
|
70
|
+
UserController = __decorate([
|
|
71
|
+
(0, decorators_1.Controller)('/api/users')
|
|
72
|
+
], UserController);
|
|
73
|
+
// Example usage of globalMiddlewares
|
|
74
|
+
async function startAppWithGlobalMiddlewares() {
|
|
75
|
+
const app = await (0, index_1.createBootifyApp)({
|
|
76
|
+
controllers: [UserController],
|
|
77
|
+
port: 3000,
|
|
78
|
+
enableSwagger: true,
|
|
79
|
+
// Global middlewares execute in the order they are defined
|
|
80
|
+
globalMiddlewares: [
|
|
81
|
+
corsMiddleware, // Executes first - handles CORS
|
|
82
|
+
authMiddleware, // Executes second - handles authentication
|
|
83
|
+
rateLimitMiddleware, // Executes third - handles rate limiting
|
|
84
|
+
loggingMiddleware // Executes fourth - handles custom logging
|
|
85
|
+
]
|
|
86
|
+
});
|
|
87
|
+
await app.start();
|
|
88
|
+
console.log('🚀 Server started with global middlewares!');
|
|
89
|
+
console.log('📖 API Documentation: http://localhost:3000/api-docs');
|
|
90
|
+
console.log('🔗 Test endpoint: http://localhost:3000/api/users');
|
|
91
|
+
}
|
|
92
|
+
// Uncomment to run this example
|
|
93
|
+
// startAppWithGlobalMiddlewares().catch(console.error)
|
|
94
|
+
//# sourceMappingURL=global-middleware-example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-middleware-example.js","sourceRoot":"","sources":["../../src/examples/global-middleware-example.ts"],"names":[],"mappings":"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"}
|
package/dist/examples/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/examples/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/examples/index.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAA;AAazB,OAAO,mCAAmC,CAAA"}
|
package/dist/examples/index.js
CHANGED
|
@@ -3,44 +3,103 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
require("reflect-metadata");
|
|
7
6
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
8
|
-
|
|
7
|
+
require("reflect-metadata");
|
|
9
8
|
const api_1 = require("../api");
|
|
9
|
+
const di_container_1 = require("../core/di-container");
|
|
10
|
+
const bootstrap_1 = require("../events/bootstrap");
|
|
10
11
|
const health_controller_1 = require("./controllers/health.controller");
|
|
11
12
|
const todo_controller_1 = require("./controllers/todo.controller");
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const di_container_1 = require("../core/di-container");
|
|
15
|
-
const todo_service_1 = require("./services/todo.service");
|
|
13
|
+
dotenv_1.default.config();
|
|
14
|
+
// import { bootstrapCache } from '../cache/bootstrap'
|
|
16
15
|
const zod_1 = __importDefault(require("zod"));
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
//
|
|
20
|
-
|
|
16
|
+
const basic_usage_1 = require("../auth/examples/basic-usage");
|
|
17
|
+
const cache_1 = require("../cache");
|
|
18
|
+
// Import the RedisCacheStore to trigger @Service decorator registration
|
|
19
|
+
require("../cache/stores/redis-cache.store");
|
|
21
20
|
// --- Application Startup ---
|
|
21
|
+
const envSchema = zod_1.default.object({
|
|
22
|
+
NODE_ENV: zod_1.default.string().min(1),
|
|
23
|
+
JWT_SECRET: zod_1.default.string().min(1),
|
|
24
|
+
});
|
|
25
|
+
// Global middleware implementations
|
|
26
|
+
const corsMiddleware = async (request, reply) => {
|
|
27
|
+
console.log('🌐 CORS middleware executed');
|
|
28
|
+
reply.header('Access-Control-Allow-Origin', '*');
|
|
29
|
+
reply.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
|
|
30
|
+
reply.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
|
|
31
|
+
};
|
|
32
|
+
const requestTimingMiddleware = async (request, reply) => {
|
|
33
|
+
const startTime = Date.now();
|
|
34
|
+
console.log(`⏱️ Request started: ${request.method} ${request.url}`);
|
|
35
|
+
request.startTime = startTime;
|
|
36
|
+
request.logTiming = () => {
|
|
37
|
+
const duration = Date.now() - startTime;
|
|
38
|
+
console.log(`⏱️ Request completed in ${duration}ms: ${request.method} ${request.url}`);
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
const securityHeadersMiddleware = async (request, reply) => {
|
|
42
|
+
console.log('🔒 Security headers middleware executed');
|
|
43
|
+
reply.header('X-Content-Type-Options', 'nosniff');
|
|
44
|
+
reply.header('X-Frame-Options', 'DENY');
|
|
45
|
+
reply.header('X-XSS-Protection', '1; mode=block');
|
|
46
|
+
reply.header('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
|
|
47
|
+
};
|
|
48
|
+
const requestLoggingMiddleware = async (request, reply) => {
|
|
49
|
+
const clientIP = request.ip;
|
|
50
|
+
const userAgent = request.headers['user-agent'] || 'Unknown';
|
|
51
|
+
console.log(`📝 Request: ${request.method} ${request.url} from ${clientIP} - ${userAgent}`);
|
|
52
|
+
};
|
|
22
53
|
async function main() {
|
|
23
54
|
// await intitializeLogging()
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
})
|
|
27
|
-
const allComponents = Array.from(
|
|
28
|
-
await (0, bootstrap_1.bootstrapEventSystem)(allComponents);
|
|
29
|
-
|
|
30
|
-
const { start } = await (0, api_1.createBootifyApp)({
|
|
55
|
+
const { middleware: jwtAuthMiddleware, authManager } = await (0, basic_usage_1.setupJwtAuth)();
|
|
56
|
+
// Register authManager in DI container for controller injection
|
|
57
|
+
di_container_1.container.register('AuthManager', { useFactory: () => authManager });
|
|
58
|
+
const allComponents = Array.from(di_container_1.container.getRegisteredComponents());
|
|
59
|
+
await (0, bootstrap_1.bootstrapEventSystem)(allComponents, { useBufferedProcessing: true });
|
|
60
|
+
await (0, cache_1.bootstrapCache)();
|
|
61
|
+
const { app, start } = await (0, api_1.createBootifyApp)({
|
|
31
62
|
controllers: [health_controller_1.HealthController, todo_controller_1.TodoController],
|
|
32
63
|
enableSwagger: true,
|
|
33
|
-
port:
|
|
34
|
-
configSchema:
|
|
35
|
-
|
|
36
|
-
|
|
64
|
+
port: 8080,
|
|
65
|
+
configSchema: envSchema,
|
|
66
|
+
globalMiddlewares: [
|
|
67
|
+
// jwtAuthMiddleware.authenticate({
|
|
68
|
+
// strategies: ['jwt', 'api-key'],
|
|
69
|
+
// skipPaths: ['/auth/login', '/auth/refresh', '/health']
|
|
70
|
+
// }),
|
|
71
|
+
corsMiddleware, // 1st: Handle CORS headers
|
|
72
|
+
securityHeadersMiddleware, // 2nd: Add security headers
|
|
73
|
+
requestTimingMiddleware, // 3rd: Start request timing
|
|
74
|
+
requestLoggingMiddleware // 4th: Log request details
|
|
75
|
+
]
|
|
37
76
|
});
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
console.log(
|
|
77
|
+
await (0, basic_usage_1.registerJWTAuthRoutes)(app, authManager, jwtAuthMiddleware);
|
|
78
|
+
// Setup context middleware with authentication
|
|
79
|
+
// app.addHook('onRequest', createContextMiddleware(authContextExtractor));
|
|
80
|
+
// console.log('All components:', container.getRegisteredComponents())
|
|
81
|
+
// const animal = container.resolve<Animal>('Animal')
|
|
82
|
+
// // console.log(animal)
|
|
83
|
+
// const animalservice: AnimalService = container.resolve<AnimalService>(AnimalService)
|
|
84
|
+
// console.log(animalservice.animal === animalservice.animal1)
|
|
85
|
+
// console.log(animalservice.animal.name)
|
|
86
|
+
// console.log('🚀 BootifyJS Example Server starting...');
|
|
87
|
+
// console.log('🔧 Global middlewares enabled: CORS, Security Headers, Request Timing, Request Logging');
|
|
88
|
+
// console.log('📊 Available endpoints:');
|
|
89
|
+
// console.log(' GET /todos - List all todos (requires authentication)');
|
|
90
|
+
// console.log(' POST /todos - Create a new todo (requires authentication)');
|
|
91
|
+
// console.log(' GET /todos/:id - Get a specific todo (requires authentication)');
|
|
92
|
+
// console.log(' PUT /todos/:id - Update a todo (requires authentication)');
|
|
93
|
+
// console.log(' DELETE /todos/:id - Delete a todo (requires authentication)');
|
|
94
|
+
// console.log(' GET /animals - List all animals');
|
|
95
|
+
// console.log(' POST /animals - Create a new animal');
|
|
96
|
+
// console.log('🔐 Authentication endpoints:');
|
|
97
|
+
// console.log(' POST /auth/login - Login to get JWT token');
|
|
98
|
+
// console.log(' GET /auth/info - Check authentication status');
|
|
99
|
+
// console.log('💡 Use @UseMiddleware(authenticate()) decorator for protected routes!');
|
|
100
|
+
// console.log('🔑 Test credentials: admin/admin123, manager/manager123, user/user123');
|
|
101
|
+
// console.log('🌐 CORS enabled for all origins');
|
|
102
|
+
// console.log('🔒 Security headers automatically added to all responses');
|
|
44
103
|
await start();
|
|
45
104
|
}
|
|
46
105
|
main();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/examples/index.ts"],"names":[],"mappings":";;;;;AAAA,4BAAyB;AACzB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/examples/index.ts"],"names":[],"mappings":"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"}
|