@kitstack/nest-powertools
Version:
A comprehensive collection of NestJS powertools, decorators, and utilities to supercharge your backend development
90 lines • 3.84 kB
JavaScript
"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