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