UNPKG

@sitecore/sc-contenthub-webclient-sdk

Version:

Sitecore Content Hub WebClient SDK.

122 lines 5.25 kB
import { StatusCodes } from "http-status-codes"; import { ArgumentError } from "../errors/argument-error"; import { ForbiddenError } from "../errors/forbidden-error"; import { NotFoundError } from "../errors/not-found-error"; import { ValidationError } from "../errors/validation-error"; import { ValidationFailure } from "../errors/validation-failure"; import { WebApiError } from "../errors/web-api-error"; import Guard from "../guard"; export class ResponseHandler { /** * Inspects the response message's success status. * * @remarks * Throws errors when response message is not successful. * * @param responseMessage - The response message */ static handleErrors(responseMessage) { Guard.notNullOrUndefined(responseMessage); if (responseMessage.isSuccessStatusCode) { return; } if (responseMessage.statusCode === StatusCodes.BAD_REQUEST) { ResponseHandler.handleBadRequest(responseMessage); } else { ResponseHandler.handleGenericError(responseMessage); } } /** * Handle validation errors related to a malformed or in another way invalid request payload send to server. * * @remarks * This method always throws an exception. * * @param responseMessage - The response message */ static handleBadRequest(responseMessage) { Guard.notNullOrUndefined(responseMessage); if (responseMessage.isSuccessStatusCode) { throw new ArgumentError(`Can not process successful request (code: ${responseMessage.statusCode}).`); } if (responseMessage.statusCode !== StatusCodes.BAD_REQUEST) { throw new ArgumentError(`Can not process failed request with status code '${responseMessage.statusCode}'.`); } /* istanbul ignore if */ if (responseMessage.content != null) { let json; if (typeof responseMessage.content === "string") { try { json = JSON.parse(responseMessage.content); } catch (ex) { throw new ValidationError(responseMessage.content); } } else { json = responseMessage.content; } throw new ValidationError("One or more validation errors were detected.", ...Object.keys(json).map(propertyName => new ValidationFailure(json[propertyName], propertyName))); } else { throw new ValidationError("An unspecified error occurred."); } } /** * Handle generic errors. * * @remarks * This method always throws an exception. * * @param responseMessage - The response message */ static handleGenericError(responseMessage) { var _a; Guard.notNullOrUndefined(responseMessage); if (responseMessage.isSuccessStatusCode) { throw new ArgumentError(`Can not process successful request (code: ${responseMessage.statusCode}).`); } let message = null; /* istanbul ignore if */ if (responseMessage.content != null) { let json; try { if (typeof responseMessage.content === "string") { try { json = JSON.parse(responseMessage.content); } catch (ex) { throw new ValidationError(responseMessage.content); } } else { json = responseMessage.content; } message = (_a = json["ExceptionMessage"]) !== null && _a !== void 0 ? _a : json["Message"]; } catch (ex) { } } message = message !== null && message !== void 0 ? message : responseMessage.content; if (responseMessage.statusCode === StatusCodes.FORBIDDEN) { throw new ForbiddenError(message !== null && message !== void 0 ? message : "Insufficient privileges or resource in use."); } else if (responseMessage.statusCode === StatusCodes.NOT_FOUND) { throw new NotFoundError(message && message.length > 0 ? message : "Resource can not be found.", responseMessage); } else { if (message != null) { message = `An error has occurred (${responseMessage.statusCode}${responseMessage.statusText != null ? ` - ${responseMessage.statusText}` : ""}).\n` + `Message: ${message}`; } else if (responseMessage.statusCode === StatusCodes.CONFLICT) { message = `Conflict in the parameter value or name (${responseMessage.statusCode}${responseMessage.statusText != null ? ` - ${responseMessage.statusText}` : ""})`; } else { message = `An error has occurred without further information (${responseMessage.statusCode}${responseMessage.statusText != null ? ` - ${responseMessage.statusText}` : ""})`; } throw new WebApiError(message, responseMessage.statusCode, responseMessage); } } } //# sourceMappingURL=response-handler.js.map