UNPKG

@kitstack/nest-powertools

Version:

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

99 lines 3.6 kB
"use strict"; 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