UNPKG

@nestjsvn/swagger-sse

Version:

OpenAPI documentation and interactive Swagger UI for NestJS Server-Sent Events endpoints

340 lines (339 loc) 13.6 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 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; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.MobileTestController = exports.TestEventsController = exports.MockAuthGuard = exports.PerformanceMetricDto = exports.ErrorEventDto = exports.NotificationDto = exports.MessageReceivedDto = exports.UserCreatedDto = void 0; const common_1 = require("@nestjs/common"); const rxjs_1 = require("rxjs"); const api_sse_decorator_1 = require("../../decorators/api-sse.decorator"); const swagger_1 = require("@nestjs/swagger"); // Test DTOs class UserCreatedDto { } exports.UserCreatedDto = UserCreatedDto; __decorate([ (0, swagger_1.ApiProperty)({ description: 'User ID' }), __metadata("design:type", String) ], UserCreatedDto.prototype, "userId", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Username' }), __metadata("design:type", String) ], UserCreatedDto.prototype, "username", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'User email' }), __metadata("design:type", String) ], UserCreatedDto.prototype, "email", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Creation timestamp' }), __metadata("design:type", Date) ], UserCreatedDto.prototype, "timestamp", void 0); class MessageReceivedDto { } exports.MessageReceivedDto = MessageReceivedDto; __decorate([ (0, swagger_1.ApiProperty)({ description: 'Message ID' }), __metadata("design:type", String) ], MessageReceivedDto.prototype, "messageId", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Sender user ID' }), __metadata("design:type", String) ], MessageReceivedDto.prototype, "fromUserId", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Recipient user ID' }), __metadata("design:type", String) ], MessageReceivedDto.prototype, "toUserId", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Message content' }), __metadata("design:type", String) ], MessageReceivedDto.prototype, "content", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Message timestamp' }), __metadata("design:type", Date) ], MessageReceivedDto.prototype, "timestamp", void 0); class NotificationDto { } exports.NotificationDto = NotificationDto; __decorate([ (0, swagger_1.ApiProperty)({ description: 'Notification ID' }), __metadata("design:type", String) ], NotificationDto.prototype, "id", void 0); __decorate([ (0, swagger_1.ApiProperty)({ enum: ['info', 'warning', 'error', 'success'], description: 'Notification type' }), __metadata("design:type", String) ], NotificationDto.prototype, "type", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Notification title' }), __metadata("design:type", String) ], NotificationDto.prototype, "title", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Notification message' }), __metadata("design:type", String) ], NotificationDto.prototype, "message", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Notification timestamp' }), __metadata("design:type", Date) ], NotificationDto.prototype, "timestamp", void 0); class ErrorEventDto { } exports.ErrorEventDto = ErrorEventDto; __decorate([ (0, swagger_1.ApiProperty)({ description: 'Error message' }), __metadata("design:type", String) ], ErrorEventDto.prototype, "error", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Error code' }), __metadata("design:type", Number) ], ErrorEventDto.prototype, "code", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Error timestamp' }), __metadata("design:type", Date) ], ErrorEventDto.prototype, "timestamp", void 0); class PerformanceMetricDto { } exports.PerformanceMetricDto = PerformanceMetricDto; __decorate([ (0, swagger_1.ApiProperty)({ description: 'Metric name' }), __metadata("design:type", String) ], PerformanceMetricDto.prototype, "metric", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Metric value' }), __metadata("design:type", Number) ], PerformanceMetricDto.prototype, "value", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Metric unit' }), __metadata("design:type", String) ], PerformanceMetricDto.prototype, "unit", void 0); __decorate([ (0, swagger_1.ApiProperty)({ description: 'Metric timestamp' }), __metadata("design:type", Date) ], PerformanceMetricDto.prototype, "timestamp", void 0); // Mock Auth Guard for testing let MockAuthGuard = class MockAuthGuard { canActivate(context) { const request = context.switchToHttp().getRequest(); // Simple mock auth - check for authorization header return request.headers.authorization === 'Bearer test-token'; } }; exports.MockAuthGuard = MockAuthGuard; exports.MockAuthGuard = MockAuthGuard = __decorate([ (0, common_1.Injectable)() ], MockAuthGuard); let TestEventsController = class TestEventsController { basicStream() { return (0, rxjs_1.interval)(1000).pipe((0, rxjs_1.take)(5), (0, rxjs_1.map)(i => ({ data: JSON.stringify(i % 2 === 0 ? { userId: `user-${i}`, username: `User${i}`, email: `user${i}@example.com`, timestamp: new Date(), } : { messageId: `msg-${i}`, fromUserId: `user-${i}`, toUserId: `user-${i + 1}`, content: `Test message ${i}`, timestamp: new Date(), }), type: i % 2 === 0 ? 'user-created' : 'message-received', }))); } highFrequencyStream() { return (0, rxjs_1.interval)(100).pipe((0, rxjs_1.take)(50), (0, rxjs_1.map)(i => ({ data: JSON.stringify({ metric: `cpu-usage-${i}`, value: Math.random() * 100, unit: 'percent', timestamp: new Date(), }), type: 'performance-metric', }))); } errorHandlingStream() { const notifications = (0, rxjs_1.interval)(2000).pipe((0, rxjs_1.take)(3), (0, rxjs_1.map)(i => ({ data: JSON.stringify({ id: `notif-${i}`, type: 'info', title: `Notification ${i}`, message: `This is test notification ${i}`, timestamp: new Date(), }), type: 'notification', }))); const errors = (0, rxjs_1.timer)(5000).pipe((0, rxjs_1.map)(() => ({ data: JSON.stringify({ error: 'Test error occurred', code: 500, timestamp: new Date(), }), type: 'error', }))); return (0, rxjs_1.merge)(notifications, errors); } filteredStream(userId) { return (0, rxjs_1.interval)(1500).pipe((0, rxjs_1.take)(4), (0, rxjs_1.map)(i => ({ data: JSON.stringify({ userId: userId ?? `user-${i}`, username: `User${i}`, email: `user${i}@example.com`, timestamp: new Date(), }), type: 'user-created', }))); } authenticatedStream() { return (0, rxjs_1.interval)(2000).pipe((0, rxjs_1.take)(3), (0, rxjs_1.map)(i => ({ data: JSON.stringify({ id: `secure-notif-${i}`, type: 'success', title: `Secure Notification ${i}`, message: `This is a secure notification ${i}`, timestamp: new Date(), }), type: 'notification', }))); } longRunningStream() { return (0, rxjs_1.interval)(5000).pipe((0, rxjs_1.map)(_i => ({ data: JSON.stringify({ metric: `memory-usage`, value: 50 + Math.random() * 30, unit: 'MB', timestamp: new Date(), }), type: 'performance-metric', }))); } }; exports.TestEventsController = TestEventsController; __decorate([ (0, common_1.Sse)('basic'), (0, api_sse_decorator_1.ApiSse)({ summary: 'Basic SSE stream', description: 'Simple event stream for basic testing', events: { 'user-created': UserCreatedDto, 'message-received': MessageReceivedDto, }, }), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", rxjs_1.Observable) ], TestEventsController.prototype, "basicStream", null); __decorate([ (0, common_1.Sse)('high-frequency'), (0, api_sse_decorator_1.ApiSse)({ summary: 'High frequency event stream', description: 'Stream with high event frequency for performance testing', events: { 'performance-metric': PerformanceMetricDto, }, }), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", rxjs_1.Observable) ], TestEventsController.prototype, "highFrequencyStream", null); __decorate([ (0, common_1.Sse)('error-handling'), (0, api_sse_decorator_1.ApiSse)({ summary: 'Error handling stream', description: 'Stream that includes error events for testing error handling', events: { notification: NotificationDto, error: ErrorEventDto, }, }), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", rxjs_1.Observable) ], TestEventsController.prototype, "errorHandlingStream", null); __decorate([ (0, common_1.Sse)('filtered'), (0, api_sse_decorator_1.ApiSse)({ summary: 'Filtered event stream', description: 'Stream with query parameter filtering', events: { 'user-created': UserCreatedDto, }, }), __param(0, (0, common_1.Query)('userId')), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", rxjs_1.Observable) ], TestEventsController.prototype, "filteredStream", null); __decorate([ (0, common_1.Sse)('authenticated'), (0, common_1.UseGuards)(MockAuthGuard), (0, swagger_1.ApiBearerAuth)(), (0, api_sse_decorator_1.ApiSse)({ summary: 'Authenticated event stream', description: 'Stream that requires authentication', security: [{ bearer: [] }], events: { notification: NotificationDto, }, }), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", rxjs_1.Observable) ], TestEventsController.prototype, "authenticatedStream", null); __decorate([ (0, common_1.Sse)('long-running'), (0, api_sse_decorator_1.ApiSse)({ summary: 'Long running stream', description: 'Stream for testing long-running connections', events: { 'performance-metric': PerformanceMetricDto, }, }), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", rxjs_1.Observable) ], TestEventsController.prototype, "longRunningStream", null); exports.TestEventsController = TestEventsController = __decorate([ (0, common_1.Controller)('test-events'), (0, swagger_1.ApiTags)('Test Events') ], TestEventsController); let MobileTestController = class MobileTestController { touchEventsStream() { return (0, rxjs_1.interval)(3000).pipe((0, rxjs_1.take)(5), (0, rxjs_1.map)(i => ({ data: JSON.stringify({ id: `mobile-${i}`, type: 'info', title: `Mobile Event ${i}`, message: `Touch-optimized event ${i}`, timestamp: new Date(), }), type: 'notification', }))); } }; exports.MobileTestController = MobileTestController; __decorate([ (0, common_1.Sse)('touch-events'), (0, api_sse_decorator_1.ApiSse)({ summary: 'Mobile touch events', description: 'Stream optimized for mobile testing', events: { notification: NotificationDto, }, }), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", rxjs_1.Observable) ], MobileTestController.prototype, "touchEventsStream", null); exports.MobileTestController = MobileTestController = __decorate([ (0, common_1.Controller)('mobile-test'), (0, swagger_1.ApiTags)('Mobile Test') ], MobileTestController);