advanced-retry
Version:
A retry library with advanced features
57 lines (56 loc) • 2.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.redirectErrorFilter = exports.clientErrorErrorFilter = exports.serverErrorErrorFilter = exports.statusCodeErrorFilterRange = exports.statusCodeErrorFilterAny = void 0;
exports.errorToStatusCode = errorToStatusCode;
function errorToStatusCode(error) {
// Check for standard response object with status
if (typeof error === 'object' && error !== null) {
const err = error;
// Check common status/statusCode properties
if ('status' in err && typeof err.status === 'number')
return err.status;
if ('statusCode' in err && typeof err.statusCode === 'number')
return err.statusCode;
// Check for nested response object
if ('response' in err &&
typeof err.response === 'object' &&
err.response &&
'status' in err.response &&
typeof err.response.status === 'number') {
return err.response.status;
}
// Check for nested response object
if ('response' in err &&
typeof err.response === 'object' &&
err.response &&
'statusCode' in err.response &&
typeof err.response.statusCode === 'number') {
return err.response.statusCode;
}
}
return null;
}
/**
* Creates a filter that matches if the error has any of the specified status codes
*/
const statusCodeErrorFilterAny = (statusCodes) => ({
canHandleError: error => {
const status = errorToStatusCode(error);
return status !== null && statusCodes.includes(status);
},
});
exports.statusCodeErrorFilterAny = statusCodeErrorFilterAny;
/**
* Creates a filter that matches errors within a status code range (inclusive)
*/
const statusCodeErrorFilterRange = (min, max) => ({
canHandleError: error => {
const status = errorToStatusCode(error);
return status !== null && status >= min && status <= max;
},
});
exports.statusCodeErrorFilterRange = statusCodeErrorFilterRange;
// Common status code ranges
exports.serverErrorErrorFilter = (0, exports.statusCodeErrorFilterRange)(500, 599);
exports.clientErrorErrorFilter = (0, exports.statusCodeErrorFilterRange)(400, 499);
exports.redirectErrorFilter = (0, exports.statusCodeErrorFilterRange)(300, 399);