UNPKG

@kitstack/nest-powertools

Version:

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

61 lines 2.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExternalApiCall = exports.ResilientEndpoint = exports.WithCircuitBreaker = exports.WithTimeout = exports.WithRetry = exports.ResilientHttp = exports.RESILIENT_HTTP_CONFIG = void 0; const common_1 = require("@nestjs/common"); exports.RESILIENT_HTTP_CONFIG = 'resilient-http-config'; const ResilientHttp = (config) => { return (0, common_1.SetMetadata)(exports.RESILIENT_HTTP_CONFIG, config); }; exports.ResilientHttp = ResilientHttp; const WithRetry = (maxAttempts = 3, delay = 1000, exponentialBackoff = true) => { return (0, exports.ResilientHttp)({ retry: { maxAttempts, delay, exponentialBackoff, }, }); }; exports.WithRetry = WithRetry; const WithTimeout = (timeout) => { return (0, exports.ResilientHttp)({ timeout }); }; exports.WithTimeout = WithTimeout; const WithCircuitBreaker = (failureThreshold = 5, resetTimeout = 60000, fallbackHandler) => { return (0, exports.ResilientHttp)({ circuitBreaker: { failureThreshold, resetTimeout, fallbackHandler, }, }); }; exports.WithCircuitBreaker = WithCircuitBreaker; const ResilientEndpoint = (config) => { return (0, common_1.applyDecorators)((0, exports.ResilientHttp)({ timeout: 10000, enableLogging: true, ...config, })); }; exports.ResilientEndpoint = ResilientEndpoint; const ExternalApiCall = (options) => { const config = { timeout: options?.timeout || 10000, enableLogging: true, retry: { maxAttempts: options?.maxRetries || 3, delay: 1000, exponentialBackoff: true, }, }; if (options?.enableCircuitBreaker) { config.circuitBreaker = { failureThreshold: 5, resetTimeout: 60000, }; } return (0, exports.ResilientHttp)(config); }; exports.ExternalApiCall = ExternalApiCall; //# sourceMappingURL=resilient-http.decorator.js.map