UNPKG

sqs-consumer

Version:

Build SQS-based Node applications without the boilerplate

119 lines (118 loc) 3.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TimeoutError = exports.StandardError = exports.SQSError = void 0; exports.isConnectionError = isConnectionError; exports.toSQSError = toSQSError; exports.toStandardError = toStandardError; exports.toTimeoutError = toTimeoutError; class SQSError extends Error { constructor(message) { super(message); this.name = this.constructor.name; } } exports.SQSError = SQSError; class TimeoutError extends Error { constructor(message = "Operation timed out.") { super(message); this.message = message; this.name = "TimeoutError"; this.messageIds = []; } } exports.TimeoutError = TimeoutError; class StandardError extends Error { constructor(message = "An unexpected error occurred:") { super(message); this.message = message; this.name = "StandardError"; this.messageIds = []; } } exports.StandardError = StandardError; /** * List of SQS error codes that are considered connection errors. */ const CONNECTION_ERRORS = [ "CredentialsError", "UnknownEndpoint", "AWS.SimpleQueueService.NonExistentQueue", "CredentialsProviderError", "InvalidAddress", "InvalidSecurity", "QueueDoesNotExist", "RequestThrottled", "OverLimit", ]; /** * Checks if the error provided should be treated as a connection error. * @param err The error that was received. */ function isConnectionError(err) { if (err instanceof SQSError) { return err.statusCode === 403 || CONNECTION_ERRORS.includes(err.code); } return false; } /** * Gets the message IDs from the message. * @param message The message that was received from SQS. */ function getMessageIds(message) { if (Array.isArray(message)) { return message.map((m) => m.MessageId); } return [message.MessageId]; } /** * Formats an AWSError the the SQSError type. * @param err The error object that was received. * @param message The message to send with the error. */ function toSQSError(err, message, extendedAWSErrors, queueUrl, sqsMessage) { const sqsError = new SQSError(message); sqsError.cause = err; sqsError.code = err.name; sqsError.statusCode = err.$metadata?.httpStatusCode; sqsError.retryable = err.$retryable?.throttling; sqsError.service = err.$service; sqsError.fault = err.$fault; sqsError.time = new Date(); if (extendedAWSErrors) { sqsError.response = err.$response; sqsError.metadata = err.$metadata; } if (queueUrl) { sqsError.queueUrl = queueUrl; } if (sqsMessage) { sqsError.messageIds = getMessageIds(sqsMessage); } return sqsError; } /** * Formats an Error to the StandardError type. * @param err The error object that was received. * @param message The message to send with the error. * @param sqsMessage The message that was received from SQS. */ function toStandardError(err, message, sqsMessage) { const error = new StandardError(message); error.cause = err; error.time = new Date(); error.messageIds = getMessageIds(sqsMessage); return error; } /** * Formats an Error to the TimeoutError type. * @param err The error object that was received. * @param message The message to send with the error. * @param sqsMessage The message that was received from SQS. */ function toTimeoutError(err, message, sqsMessage) { const error = new TimeoutError(message); error.cause = err; error.time = new Date(); error.messageIds = getMessageIds(sqsMessage); return error; }