@sitecore/sc-contenthub-webclient-sdk
Version:
Sitecore Content Hub WebClient SDK.
122 lines • 5.25 kB
JavaScript
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