UNPKG

@kitstack/nest-powertools

Version:

A comprehensive collection of NestJS powertools, decorators, and utilities to supercharge your backend development

90 lines 3.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SecureEndpoint = SecureEndpoint; exports.PublicCachedEndpoint = PublicCachedEndpoint; exports.AdminOnly = AdminOnly; exports.UserEndpoint = UserEndpoint; exports.RequireRoles = RequireRoles; exports.RequirePermissions = RequirePermissions; const common_1 = require("@nestjs/common"); const swagger_1 = require("@nestjs/swagger"); const jwt_auth_guard_1 = require("../guards/jwt-auth.guard"); const configurable_auth_guard_1 = require("../guards/configurable-auth.guard"); const validation_pipe_1 = require("../pipes/validation.pipe"); const logging_interceptor_1 = require("../interceptors/logging.interceptor"); const transform_interceptor_1 = require("../interceptors/transform.interceptor"); const cache_interceptor_1 = require("../interceptors/cache.interceptor"); const rate_limit_guard_1 = require("../guards/rate-limit.guard"); const types_1 = require("../types"); function SecureEndpoint(authConfig) { const decorators = [ (0, swagger_1.ApiBearerAuth)(), (0, common_1.UseGuards)(jwt_auth_guard_1.JwtAuthGuard, configurable_auth_guard_1.ConfigurableAuthGuard), (0, common_1.SetMetadata)('authConfig', authConfig), (0, common_1.UsePipes)(new validation_pipe_1.ValidationPipe(authConfig?.validation)), (0, common_1.UseInterceptors)(logging_interceptor_1.LoggingInterceptor, transform_interceptor_1.TransformInterceptor), ]; if (authConfig?.description) { decorators.push((0, swagger_1.ApiOperation)({ summary: authConfig.description })); } if (authConfig?.responses?.length) { authConfig.responses.forEach((response) => { decorators.push((0, swagger_1.ApiResponse)({ status: response.status, description: response.description, })); }); } return (0, common_1.applyDecorators)(...decorators); } function PublicCachedEndpoint(options) { const decorators = [ (0, common_1.UseInterceptors)(transform_interceptor_1.TransformInterceptor), (0, common_1.UsePipes)(new validation_pipe_1.ValidationPipe(options?.validation)), ]; if (options?.cache) { decorators.push((0, common_1.UseInterceptors)(new cache_interceptor_1.CacheInterceptor(options.cache))); } if (options?.rateLimit) { decorators.push((0, common_1.UseGuards)(new rate_limit_guard_1.RateLimitGuard(options.rateLimit))); } if (options?.description) { decorators.push((0, swagger_1.ApiOperation)({ summary: options.description })); } return (0, common_1.applyDecorators)(...decorators); } function AdminOnly(description) { return SecureEndpoint({ roles: [types_1.DefaultRoles.ADMIN], description: description || 'Admin only endpoint', responses: [ { status: 200, description: 'Success' }, { status: 401, description: 'Unauthorized' }, { status: 403, description: 'Forbidden' }, ], }); } function UserEndpoint(description) { return SecureEndpoint({ roles: [types_1.DefaultRoles.USER, types_1.DefaultRoles.ADMIN], description: description || 'User endpoint', validation: { transform: true, whitelist: true }, responses: [ { status: 200, description: 'Success' }, { status: 401, description: 'Unauthorized' }, ], }); } function RequireRoles(roles, description) { return SecureEndpoint({ roles, description: description || `Requires roles: ${roles.join(', ')}`, }); } function RequirePermissions(permissions, description) { return SecureEndpoint({ permissions, description: description || `Requires permissions: ${permissions.join(', ')}`, }); } //# sourceMappingURL=combined.js.map