@nestjsvn/swagger-sse
Version:
OpenAPI documentation and interactive Swagger UI for NestJS Server-Sent Events endpoints
340 lines (339 loc) • 13.6 kB
JavaScript
;
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);