@kitstack/nest-powertools
Version:
A comprehensive collection of NestJS powertools, decorators, and utilities to supercharge your backend development
99 lines • 3.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.UseAndGuards = UseAndGuards;
exports.UseOrGuards = UseOrGuards;
exports.UseNotGuard = UseNotGuard;
exports.AuditableEndpoint = AuditableEndpoint;
exports.AuditCreate = AuditCreate;
exports.AuditRead = AuditRead;
exports.AuditUpdate = AuditUpdate;
exports.AuditDelete = AuditDelete;
exports.PowerEndpoint = PowerEndpoint;
exports.UltimatePowerEndpoint = UltimatePowerEndpoint;
const common_1 = require("@nestjs/common");
const composite_guard_hook_1 = require("../hooks/composite-guard.hook");
const audit_hook_1 = require("../hooks/audit.hook");
const resilient_http_interceptor_1 = require("../interceptors/resilient-http.interceptor");
function UseAndGuards(...guards) {
return (0, common_1.UseGuards)(composite_guard_hook_1.CompositeGuardHelper.And(...guards));
}
function UseOrGuards(...guards) {
return (0, common_1.UseGuards)(composite_guard_hook_1.CompositeGuardHelper.Or(...guards));
}
function UseNotGuard(guard) {
return (0, common_1.UseGuards)(composite_guard_hook_1.CompositeGuardHelper.Not(guard));
}
function AuditableEndpoint(action, options) {
return (0, common_1.applyDecorators)((0, audit_hook_1.Audit)(action, options), (0, common_1.UseInterceptors)(audit_hook_1.AuditInterceptor));
}
function AuditCreate(resource) {
return AuditableEndpoint('CREATE', {
resource,
includeRequestBody: true,
excludeFields: ['password', 'token'],
});
}
function AuditRead(resource) {
return AuditableEndpoint('READ', { resource });
}
function AuditUpdate(resource) {
return AuditableEndpoint('UPDATE', {
resource,
includeRequestBody: true,
excludeFields: ['password', 'token'],
});
}
function AuditDelete(resource) {
return AuditableEndpoint('DELETE', { resource });
}
function PowerEndpoint(options) {
const decorators = [];
if (options.guards?.length) {
if (options.guardLogic === 'OR') {
decorators.push(UseOrGuards(...options.guards));
}
else {
decorators.push(UseAndGuards(...options.guards));
}
}
if (options.audit) {
decorators.push(AuditableEndpoint(options.audit.action, options.audit));
}
if (options.resilientHttp) {
decorators.push((0, common_1.UseInterceptors)(resilient_http_interceptor_1.ResilientHttpInterceptor));
}
return (0, common_1.applyDecorators)(...decorators);
}
function UltimatePowerEndpoint(options) {
const decorators = [];
if (options.adminOnly) {
decorators.push((0, common_1.UseGuards)());
}
if (options.auditAction) {
decorators.push(AuditableEndpoint(options.auditAction, {
resource: options.auditResource,
includeRequestBody: true,
}));
}
if (options.timeout || options.retries || options.circuitBreaker) {
const resilientConfig = {};
if (options.timeout) {
resilientConfig.timeout = options.timeout;
}
if (options.retries) {
resilientConfig.retry = {
maxAttempts: options.retries,
exponentialBackoff: true,
};
}
if (options.circuitBreaker) {
resilientConfig.circuitBreaker = {
failureThreshold: 5,
resetTimeout: 60000,
};
}
decorators.push((0, common_1.UseInterceptors)(resilient_http_interceptor_1.ResilientHttpInterceptor));
}
return (0, common_1.applyDecorators)(...decorators);
}
//# sourceMappingURL=hooks.js.map