UNPKG

@versatiledatakit/shared

Version:

Versatile Data Kit Shared library enables reusability of shared features like: NgRx Redux, Error Handlers, Utils, Generic Components, etc.

124 lines • 15.1 kB
/* * Copyright 2023-2025 Broadcom * SPDX-License-Identifier: Apache-2.0 */ import { HttpErrorResponse } from '@angular/common/http'; import { CollectionsUtil } from '../../../utils'; import { generateErrorCode } from '../../../common'; /** * ** Process service HTTP request error and return ErrorRecord. * * @param {string} objectUUID - is objectUUID of the Object for which processing error is invoked * @param {Record<keyof ServiceHttpErrorCodes, string>} serviceHttpErrorCodes - is map of Service method supported error codes auto-handling * @param {unknown} error - is actual error object reference */ export const processServiceRequestError = (objectUUID, serviceHttpErrorCodes, error) => { const _objectUUID = CollectionsUtil.isDefined(objectUUID) ? objectUUID : CollectionsUtil.generateObjectUUID('UnknownClassName'); if (!CollectionsUtil.isLiteralObject(serviceHttpErrorCodes)) { return { code: generateErrorCode('UnknownClassName', 'UnknownPublicName', 'UnknownMethodName', 'Generic'), objectUUID: _objectUUID, error: error instanceof Error ? error : null }; } if (error instanceof HttpErrorResponse) { let code; switch (error.status) { case 400 /* BadRequest */: code = serviceHttpErrorCodes.BadRequest; break; case 401 /* Unauthorized */: code = serviceHttpErrorCodes.Unauthorized; break; case 403 /* Forbidden */: code = serviceHttpErrorCodes.Forbidden; break; case 404 /* NotFound */: code = serviceHttpErrorCodes.NotFound; break; case 405 /* MethodNotAllowed */: code = serviceHttpErrorCodes.MethodNotAllowed; break; case 409 /* Conflict */: code = serviceHttpErrorCodes.Conflict; break; case 422 /* UnprocessableEntity */: code = serviceHttpErrorCodes.UnprocessableEntity; break; case 500 /* InternalServerError */: code = serviceHttpErrorCodes.InternalServerError; break; case 503 /* ServiceUnavailable */: code = serviceHttpErrorCodes.ServiceUnavailable; break; default: code = serviceHttpErrorCodes.Unknown; } return { code, objectUUID: _objectUUID, error, httpStatusCode: error.status }; } return { code: serviceHttpErrorCodes.Unknown, objectUUID: _objectUUID, error: error instanceof Error ? error : null }; }; /** * ** Get API formatted error message from provided Error. */ export const getApiFormattedErrorMessage = (error) => { let statusCode = null; if (error instanceof HttpErrorResponse) { if (CollectionsUtil.isString(error.error)) { return { what: `${error.error}`, why: `${error.message}` }; } if (CollectionsUtil.isLiteralObject(error.error)) { return { what: `${error.error.what}`, why: `${error.error.why}`, consequences: `${error.error.consequences}`, countermeasures: `${error.error.countermeasures}` }; } statusCode = error.status; } return { what: 'Please contact Superollider and report the issue', why: getHumanReadableStatusText(statusCode) }; }; /** * ** Get Human readable text from HTTP error status code. */ export const getHumanReadableStatusText = (httpErrorStatus) => { switch (httpErrorStatus) { case 400 /* BadRequest */: return 'Invalid param'; case 401 /* Unauthorized */: return 'Unauthorized'; case 403 /* Forbidden */: return 'Forbidden'; case 404 /* NotFound */: return 'Not Found'; case 405 /* MethodNotAllowed */: return 'Not Allowed'; case 409 /* Conflict */: return 'Conflict'; case 422 /* UnprocessableEntity */: return 'Invalid operation'; case 500 /* InternalServerError */: return 'Internal Server Error'; case 503 /* ServiceUnavailable */: return 'Service Unavailable'; default: return 'Unknown Error'; } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb3JlL2Vycm9yL3V0aWxzL2Vycm9yLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFnQyxpQkFBaUIsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6Rzs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUN0QyxVQUFrQixFQUNsQixxQkFBa0UsRUFDbEUsS0FBYyxFQUNILEVBQUU7SUFDYixNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRWhJLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLEVBQUU7UUFDekQsT0FBTztZQUNILElBQUksRUFBRSxpQkFBaUIsQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLENBQUM7WUFDaEcsVUFBVSxFQUFFLFdBQVc7WUFDdkIsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUMvQyxDQUFDO0tBQ0w7SUFFRCxJQUFJLEtBQUssWUFBWSxpQkFBaUIsRUFBRTtRQUNwQyxJQUFJLElBQVksQ0FBQztRQUVqQixRQUFRLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDbEI7Z0JBQ0ksSUFBSSxHQUFHLHFCQUFxQixDQUFDLFVBQVUs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Q0ksT0FBTyxxQkFBcUIsQ0FBQztRQUNqQztZQUNJLE9BQU8sZUFBZSxDQUFDO0tBQzlCO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIzLTIwMjUgQnJvYWRjb21cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBDb2xsZWN0aW9uc1V0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5cbmltcG9ydCB7IEFwaUVycm9yTWVzc2FnZSwgRXJyb3JSZWNvcmQsIGdlbmVyYXRlRXJyb3JDb2RlLCBTZXJ2aWNlSHR0cEVycm9yQ29kZXMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24nO1xuXG4vKipcbiAqICoqIFByb2Nlc3Mgc2VydmljZSBIVFRQIHJlcXVlc3QgZXJyb3IgYW5kIHJldHVybiBFcnJvclJlY29yZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0VVVJRCAtIGlzIG9iamVjdFVVSUQgb2YgdGhlIE9iamVjdCBmb3Igd2hpY2ggcHJvY2Vzc2luZyBlcnJvciBpcyBpbnZva2VkXG4gKiBAcGFyYW0ge1JlY29yZDxrZXlvZiBTZXJ2aWNlSHR0cEVycm9yQ29kZXMsIHN0cmluZz59IHNlcnZpY2VIdHRwRXJyb3JDb2RlcyAtIGlzIG1hcCBvZiBTZXJ2aWNlIG1ldGhvZCBzdXBwb3J0ZWQgZXJyb3IgY29kZXMgYXV0by1oYW5kbGluZ1xuICogQHBhcmFtIHt1bmtub3dufSBlcnJvciAtIGlzIGFjdHVhbCBlcnJvciBvYmplY3QgcmVmZXJlbmNlXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzU2VydmljZVJlcXVlc3RFcnJvciA9IChcbiAgICBvYmplY3RVVUlEOiBzdHJpbmcsXG4gICAgc2VydmljZUh0dHBFcnJvckNvZGVzOiBSZWNvcmQ8a2V5b2YgU2VydmljZUh0dHBFcnJvckNvZGVzLCBzdHJpbmc+LFxuICAgIGVycm9yOiB1bmtub3duXG4pOiBFcnJvclJlY29yZCA9PiB7XG4gICAgY29uc3QgX29iamVjdFVVSUQgPSBDb2xsZWN0aW9uc1V0aWwuaXNEZWZpbmVkKG9iamVjdFVVSUQpID8gb2JqZWN0VVVJRCA6IENvbGxlY3Rpb25zVXRpbC5nZW5lcmF0ZU9iamVjdFVVSUQoJ1Vua25vd25DbGFzc05hbWUnKTtcblxuICAgIGlmICghQ29sbGVjdGlvbnNVdGlsLmlzTGl0ZXJhbE9iamVjdChzZXJ2aWNlSHR0cEVycm9yQ29kZXMpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2RlOiBnZW5lcmF0ZUVycm9yQ29kZSgnVW5rbm93bkNsYXNzTmFtZScsICdVbmtub3duUHVibGljTmFtZScsICdVbmtub3duTWV0aG9kTmFtZScsICdHZW5lcmljJyksXG4gICAgICAgICAgICBvYmplY3RVVUlEOiBfb2JqZWN0VVVJRCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBudWxsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGNvZGU6IHN0cmluZztcblxuICAgICAgICBzd2l0Y2ggKGVycm9yLnN0YXR1cykge1xuICAgICAgICAgICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5CYWRSZXF1ZXN0OlxuICAgICAgICAgICAgICAgIGNvZGUgPSBzZXJ2aWNlSHR0cEVycm9yQ29kZXMuQmFkUmVxdWVzdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVW5hdXRob3JpemVkOlxuICAgICAgICAgICAgICAgIGNvZGUgPSBzZXJ2aWNlSHR0cEVycm9yQ29kZXMuVW5hdXRob3JpemVkO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Gb3JiaWRkZW46XG4gICAgICAgICAgICAgICAgY29kZSA9IHNlcnZpY2VIdHRwRXJyb3JDb2Rlcy5Gb3JiaWRkZW47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLk5vdEZvdW5kOlxuICAgICAgICAgICAgICAgIGNvZGUgPSBzZXJ2aWNlSHR0cEVycm9yQ29kZXMuTm90Rm91bmQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLk1ldGhvZE5vdEFsbG93ZWQ6XG4gICAgICAgICAgICAgICAgY29kZSA9IHNlcnZpY2VIdHRwRXJyb3JDb2Rlcy5NZXRob2ROb3RBbGxvd2VkO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Db25mbGljdDpcbiAgICAgICAgICAgICAgICBjb2RlID0gc2VydmljZUh0dHBFcnJvckNvZGVzLkNvbmZsaWN0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5VbnByb2Nlc3NhYmxlRW50aXR5OlxuICAgICAgICAgICAgICAgIGNvZGUgPSBzZXJ2aWNlSHR0cEVycm9yQ29kZXMuVW5wcm9jZXNzYWJsZUVudGl0eTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuSW50ZXJuYWxTZXJ2ZXJFcnJvcjpcbiAgICAgICAgICAgICAgICBjb2RlID0gc2VydmljZUh0dHBFcnJvckNvZGVzLkludGVybmFsU2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlNlcnZpY2VVbmF2YWlsYWJsZTpcbiAgICAgICAgICAgICAgICBjb2RlID0gc2VydmljZUh0dHBFcnJvckNvZGVzLlNlcnZpY2VVbmF2YWlsYWJsZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29kZSA9IHNlcnZpY2VIdHRwRXJyb3JDb2Rlcy5Vbmtub3duO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICBvYmplY3RVVUlEOiBfb2JqZWN0VVVJRCxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgaHR0cFN0YXR1c0NvZGU6IGVycm9yLnN0YXR1c1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGNvZGU6IHNlcnZpY2VIdHRwRXJyb3JDb2Rlcy5Vbmtub3duLFxuICAgICAgICBvYmplY3RVVUlEOiBfb2JqZWN0VVVJRCxcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG51bGxcbiAgICB9O1xufTtcblxuLyoqXG4gKiAqKiBHZXQgQVBJIGZvcm1hdHRlZCBlcnJvciBtZXNzYWdlIGZyb20gcHJvdmlkZWQgRXJyb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBcGlGb3JtYXR0ZWRFcnJvck1lc3NhZ2UgPSAoZXJyb3I6IEVycm9yKTogQXBpRXJyb3JNZXNzYWdlID0+IHtcbiAgICBsZXQgc3RhdHVzQ29kZTogbnVtYmVyID0gbnVsbDtcblxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIGlmIChDb2xsZWN0aW9uc1V0aWwuaXNTdHJpbmcoZXJyb3IuZXJyb3IpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdoYXQ6IGAke2Vycm9yLmVycm9yfWAsXG4gICAgICAgICAgICAgICAgd2h5OiBgJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQ29sbGVjdGlvbnNVdGlsLmlzTGl0ZXJhbE9iamVjdChlcnJvci5lcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2hhdDogYCR7KGVycm9yLmVycm9yIGFzIEFwaUVycm9yTWVzc2FnZSkud2hhdH1gLFxuICAgICAgICAgICAgICAgIHdoeTogYCR7KGVycm9yLmVycm9yIGFzIEFwaUVycm9yTWVzc2FnZSkud2h5fWAsXG4gICAgICAgICAgICAgICAgY29uc2VxdWVuY2VzOiBgJHsoZXJyb3IuZXJyb3IgYXMgQXBpRXJyb3JNZXNzYWdlKS5jb25zZXF1ZW5jZXN9YCxcbiAgICAgICAgICAgICAgICBjb3VudGVybWVhc3VyZXM6IGAkeyhlcnJvci5lcnJvciBhcyBBcGlFcnJvck1lc3NhZ2UpLmNvdW50ZXJtZWFzdXJlc31gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdHVzQ29kZSA9IGVycm9yLnN0YXR1cztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB3aGF0OiAnUGxlYXNlIGNvbnRhY3QgU3VwZXJvbGxpZGVyIGFuZCByZXBvcnQgdGhlIGlzc3VlJyxcbiAgICAgICAgd2h5OiBnZXRIdW1hblJlYWRhYmxlU3RhdHVzVGV4dChzdGF0dXNDb2RlKVxuICAgIH07XG59O1xuXG4vKipcbiAqICoqIEdldCBIdW1hbiByZWFkYWJsZSB0ZXh0IGZyb20gSFRUUCBlcnJvciBzdGF0dXMgY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEh1bWFuUmVhZGFibGVTdGF0dXNUZXh0ID0gKGh0dHBFcnJvclN0YXR1czogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICBzd2l0Y2ggKGh0dHBFcnJvclN0YXR1cykge1xuICAgICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkJhZFJlcXVlc3Q6XG4gICAgICAgICAgICByZXR1cm4gJ0ludmFsaWQgcGFyYW0nO1xuICAgICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgICAgIHJldHVybiAnVW5hdXRob3JpemVkJztcbiAgICAgICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Gb3JiaWRkZW46XG4gICAgICAgICAgICByZXR1cm4gJ0ZvcmJpZGRlbic7XG4gICAgICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuTm90Rm91bmQ6XG4gICAgICAgICAgICByZXR1cm4gJ05vdCBGb3VuZCc7XG4gICAgICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuTWV0aG9kTm90QWxsb3dlZDpcbiAgICAgICAgICAgIHJldHVybiAnTm90IEFsbG93ZWQnO1xuICAgICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkNvbmZsaWN0OlxuICAgICAgICAgICAgcmV0dXJuICdDb25mbGljdCc7XG4gICAgICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVW5wcm9jZXNzYWJsZUVudGl0eTpcbiAgICAgICAgICAgIHJldHVybiAnSW52YWxpZCBvcGVyYXRpb24nO1xuICAgICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkludGVybmFsU2VydmVyRXJyb3I6XG4gICAgICAgICAgICByZXR1cm4gJ0ludGVybmFsIFNlcnZlciBFcnJvcic7XG4gICAgICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuU2VydmljZVVuYXZhaWxhYmxlOlxuICAgICAgICAgICAgcmV0dXJuICdTZXJ2aWNlIFVuYXZhaWxhYmxlJztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAnVW5rbm93biBFcnJvcic7XG4gICAgfVxufTtcbiJdfQ==