@lineai/gov-deals
Version:
Explore Federal contracts for government building renovations, city hall renovations, courthouse updates, library modernizations, federal building improvement contracts, base housing and facilities upgrades.
120 lines • 6.45 kB
JavaScript
/**
* Custom error types for the gov-deals package
*/
/**
* Base error class for all gov-deals errors
*/
export class GovDealsError extends Error {
code;
details;
constructor(message, code, details) {
super(message);
this.code = code;
this.details = details;
this.name = 'GovDealsError';
// Maintains proper stack trace for where error was thrown
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
}
}
/**
* Configuration error
*/
export class ConfigurationError extends GovDealsError {
constructor(message, details) {
super(message, 'CONFIGURATION_ERROR', details);
this.name = 'ConfigurationError';
}
}
/**
* Authentication error for API requests
*/
export class AuthenticationError extends GovDealsError {
constructor(message, details) {
super(message, 'AUTHENTICATION_ERROR', details);
this.name = 'AuthenticationError';
}
}
/**
* API request error
*/
export class ApiError extends GovDealsError {
statusCode;
response;
constructor(message, statusCode, response, details) {
super(message, 'API_ERROR', details);
this.statusCode = statusCode;
this.response = response;
this.name = 'ApiError';
}
}
/**
* Rate limit error
*/
export class RateLimitError extends ApiError {
retryAfter;
constructor(message, retryAfter, details) {
super(message, 429, undefined, details);
this.retryAfter = retryAfter;
this.name = 'RateLimitError';
}
}
/**
* Validation error for data validation failures
*/
export class ValidationError extends GovDealsError {
validationErrors;
constructor(message, validationErrors, details) {
super(message, 'VALIDATION_ERROR', details);
this.validationErrors = validationErrors;
this.name = 'ValidationError';
}
}
/**
* Network error for connection issues
*/
export class NetworkError extends GovDealsError {
originalError;
constructor(message, originalError, details) {
super(message, 'NETWORK_ERROR', details);
this.originalError = originalError;
this.name = 'NetworkError';
}
}
/**
* Timeout error
*/
export class TimeoutError extends NetworkError {
constructor(message, details) {
super(message, undefined, details);
this.name = 'TimeoutError';
}
}
/**
* Check if an error is a gov-deals error
*/
export function isGovDealsError(error) {
return error instanceof GovDealsError;
}
/**
* Check if an error is a rate limit error
*/
export function isRateLimitError(error) {
return error instanceof RateLimitError;
}
/**
* Check if an error is retryable
*/
export function isRetryableError(error) {
if (error instanceof NetworkError || error instanceof TimeoutError) {
return true;
}
if (error instanceof ApiError) {
// Retry on 5xx errors and specific 4xx errors
const statusCode = error.statusCode;
return statusCode ? statusCode >= 500 || statusCode === 429 || statusCode === 408 : false;
}
return false;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUg7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLEtBQUs7SUFHcEI7SUFDQTtJQUhsQixZQUNFLE9BQWUsRUFDQyxJQUFZLEVBQ1osT0FBaUM7UUFFakQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSEMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFlBQU8sR0FBUCxPQUFPLENBQTBCO1FBR2pELElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1FBRTVCLDBEQUEwRDtRQUMxRCxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtZQUMzQixLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGFBQWE7SUFDbkQsWUFBWSxPQUFlLEVBQUUsT0FBaUM7UUFDNUQsS0FBSyxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGFBQWE7SUFDcEQsWUFBWSxPQUFlLEVBQUUsT0FBaUM7UUFDNUQsS0FBSyxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVMsU0FBUSxhQUFhO0lBR3ZCO0lBQ0E7SUFIbEIsWUFDRSxPQUFlLEVBQ0MsVUFBbUIsRUFDbkIs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