UNPKG

@gp_jcisneros/errors

Version:

Error handling utilities for GreenPay microservices

137 lines (124 loc) 3.84 kB
const { CustomError } = require('./CustomError'); /** * AWS error class for AWS service operation failures */ class AWSError extends CustomError { constructor(message, service = null, awsErrorCode = null) { super(message, { errorCode: service ? `AWS_${service.toUpperCase()}` : 'AWS_GENERAL', description: message, integration: 'aws-service', statusCode: 500 }); this.name = 'AWSError'; this.type = 'AWS_ERROR'; this.service = service; this.awsErrorCode = awsErrorCode; } /** * Create a DynamoDB error * @param {string} awsErrorCode - AWS error code * @param {string} message - Error message * @returns {AWSError} - DynamoDB error */ static dynamoDB(awsErrorCode, message) { const error = new AWSError(message, 'DYNAMODB', awsErrorCode); error.errorCode = 'AWS_DYNAMODB'; return error; } /** * Create an S3 error * @param {string} awsErrorCode - AWS error code * @param {string} message - Error message * @returns {AWSError} - S3 error */ static s3(awsErrorCode, message) { const error = new AWSError(message, 'S3', awsErrorCode); error.errorCode = 'AWS_S3'; return error; } /** * Create a Lambda error * @param {string} awsErrorCode - AWS error code * @param {string} message - Error message * @returns {AWSError} - Lambda error */ static lambda(awsErrorCode, message) { const error = new AWSError(message, 'LAMBDA', awsErrorCode); error.errorCode = 'AWS_LAMBDA'; return error; } /** * Create an SQS error * @param {string} awsErrorCode - AWS error code * @param {string} message - Error message * @returns {AWSError} - SQS error */ static sqs(awsErrorCode, message) { const error = new AWSError(message, 'SQS', awsErrorCode); error.errorCode = 'AWS_SQS'; return error; } /** * Create an error for a specific AWS service * @param {string} service - AWS service name * @param {string} awsErrorCode - AWS error code * @param {string} message - Error message * @returns {AWSError} - AWS service error */ static forService(service, awsErrorCode, message) { const error = new AWSError(message, service, awsErrorCode); error.errorCode = `AWS_${service.toUpperCase()}`; return error; } /** * Create a credentials error * @param {string} message - Error message * @returns {AWSError} - Credentials error */ static credentials(message = 'AWS credentials not found or invalid') { const error = new AWSError(message, 'CREDENTIALS', 'AUTH'); error.errorCode = 'AWS_CREDENTIALS'; return error; } /** * Create a region error * @param {string} message - Error message * @returns {AWSError} - Region error */ static region(message) { const error = new AWSError(message, 'REGION', 'CONFIG'); error.errorCode = 'AWS_REGION'; return error; } /** * Create a timeout error * @param {string} service - AWS service name * @param {string} operation - Operation name * @param {number} timeout - Timeout in seconds * @returns {AWSError} - Timeout error */ static timeout(service, operation, timeout = 30) { const message = `${service} ${operation} operation timed out after ${timeout}s`; const error = new AWSError(message, service, 'TIMEOUT'); error.errorCode = `AWS_${service.toUpperCase()}`; return error; } /** * Get AWS error details * @returns {Object} - AWS error details */ getAWSDetails() { return { service: this.service, awsErrorCode: this.awsErrorCode, message: this.message, type: this.type, // Required fields errorCode: this.errorCode, description: this.description, integration: this.integration, }; } } module.exports = { AWSError };