@sitecore/sc-contenthub-webclient-sdk
Version:
Sitecore Content Hub WebClient SDK.
129 lines • 5.92 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ResponseHandler = void 0;
const http_status_codes_1 = require("http-status-codes");
const argument_error_1 = require("../errors/argument-error");
const forbidden_error_1 = require("../errors/forbidden-error");
const not_found_error_1 = require("../errors/not-found-error");
const validation_error_1 = require("../errors/validation-error");
const validation_failure_1 = require("../errors/validation-failure");
const web_api_error_1 = require("../errors/web-api-error");
const guard_1 = __importDefault(require("../guard"));
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_1.default.notNullOrUndefined(responseMessage);
if (responseMessage.isSuccessStatusCode) {
return;
}
if (responseMessage.statusCode === http_status_codes_1.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_1.default.notNullOrUndefined(responseMessage);
if (responseMessage.isSuccessStatusCode) {
throw new argument_error_1.ArgumentError(`Can not process successful request (code: ${responseMessage.statusCode}).`);
}
if (responseMessage.statusCode !== http_status_codes_1.StatusCodes.BAD_REQUEST) {
throw new argument_error_1.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 validation_error_1.ValidationError(responseMessage.content);
}
}
else {
json = responseMessage.content;
}
throw new validation_error_1.ValidationError("One or more validation errors were detected.", ...Object.keys(json).map(propertyName => new validation_failure_1.ValidationFailure(json[propertyName], propertyName)));
}
else {
throw new validation_error_1.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_1.default.notNullOrUndefined(responseMessage);
if (responseMessage.isSuccessStatusCode) {
throw new argument_error_1.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 validation_error_1.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 === http_status_codes_1.StatusCodes.FORBIDDEN) {
throw new forbidden_error_1.ForbiddenError(message !== null && message !== void 0 ? message : "Insufficient privileges or resource in use.");
}
else if (responseMessage.statusCode === http_status_codes_1.StatusCodes.NOT_FOUND) {
throw new not_found_error_1.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 === http_status_codes_1.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 web_api_error_1.WebApiError(message, responseMessage.statusCode, responseMessage);
}
}
}
exports.ResponseHandler = ResponseHandler;
//# sourceMappingURL=response-handler.js.map