in source/packages/services/events-processor/src/utils/errors.util.ts [16:64]
export function handleError(e: Error, res: Response): void {
logger.error(`errors.util handleError: in: ${e}`);
const error_429s = [
'ProvisionedThroughputExceededException',
'RequestTimeout',
'RequestThrottledException',
'Throttling',
'ThrottlingException',
'TooManyRequestsException',
];
if (
e.name === 'ArgumentError' ||
e.message === 'UNSUPPORTED_TARGET_TYPE' ||
e.message.startsWith('INVALID_TABLE') ||
(e.hasOwnProperty('code') &&
['InvalidParameter', 'ValidationException'].includes(e['code']))
) {
res.status(400).json({ error: res.statusMessage }).end();
} else if (e.message?.endsWith('NOT_FOUND')) {
res.status(404).json({ error: 'Item not found' }).end();
} else if (e.name === 'ResourceNotFoundException') {
res.status(404).json({ error: res.statusMessage }).end();
} else if (
e.name === 'ConditionalCheckFailedException' ||
e.name === 'ResourceAlreadyExistsException'
) {
res.status(409).json({ error: 'Item already exists' }).end();
} else if (e.message === 'SUBSCRIPTION_FOR_USER_PRINCIPAL_ALREADY_EXISTS') {
res.status(409)
.json({ error: 'A subscription for this event / user / principal already exists' })
.end();
} else if (e.message === 'NOT_SUPPORTED') {
res.status(415)
.json({ error: 'Requested action not supported for the requested API version' })
.end();
} else if (e.hasOwnProperty('code') && error_429s.includes(e['code'])) {
res.status(429).json({ error: res.statusMessage }).end();
} else if (e.message === 'NOT_IMPLEMENTED') {
res.status(501).json({ error: 'TODO: Not yet implemented' }).end();
} else {
res.status(500).json({ error: res.statusMessage }).end();
}
logger.error(
`errors.util handleError: exit: res status:${res.statusCode}, message: ${res.statusMessage}`
);
}