mindee
Version:
Mindee Client Library for Node.js
199 lines (198 loc) • 6.54 kB
JavaScript
import { MindeeError } from "../../errors/index.js";
import { errorHandler } from "../../errors/handler.js";
export function handleError(urlName, response, serverError) {
let code;
try {
if (response.data.api_request["status_code"] === 200 && response.data?.job?.error?.code) {
code = 500;
response.data.api_request.error = response.data.job.error;
}
else if (response.data) {
code = response.data.api_request["status_code"];
}
}
catch {
code = 500;
}
let errorObj;
try {
//Regular instances where the returned error is in JSON format.
errorObj = response.data.api_request.error;
}
catch {
//Rare instances where errors are returned as HTML instead of JSON.
if (!("reconstructedResponse" in response.data)) {
response.data.reconstructedResponse = "";
}
if (response.data.reconstructedResponse.includes("Maximum pdf pages")) {
errorObj = {
message: "TooManyPages",
details: "Maximum amount of pdf pages reached.",
};
}
else if (response.data.reconstructedResponse.includes("Max file size is")) {
errorObj = {
message: "FileTooLarge",
details: "Maximum file size reached.",
};
}
else if (response.data.reconstructedResponse.includes("Invalid file type")) {
errorObj = {
message: "InvalidFiletype",
details: "Invalid file type.",
};
}
else if (response.data.reconstructedResponse.includes("Gateway timeout")) {
errorObj = {
message: "RequestTimeout",
details: "Request timed out.",
};
}
else if (response.data.reconstructedResponse.includes("Bad gateway")) {
errorObj = {
message: "BadRequest",
details: "Bad Gateway",
};
}
else if (response.data.reconstructedResponse.includes("Too Many Requests")) {
errorObj = {
message: "TooManyRequests",
details: "Too Many Requests.",
};
}
else {
errorObj = {
message: "Unknown Server Error.",
details: response.data.reconstructedResponse,
};
}
}
if (serverError !== undefined &&
(!("message" in errorObj) ||
!errorObj.message ||
errorObj.message.length === 0)) {
errorObj.message = serverError;
}
let errorToThrow;
switch (code) {
case 400:
errorToThrow = new MindeeHttp400Error(errorObj, urlName, code);
break;
case 401:
errorToThrow = new MindeeHttp401Error(errorObj, urlName, code);
break;
case 403:
errorToThrow = new MindeeHttp403Error(errorObj, urlName, code);
break;
case 404:
errorToThrow = new MindeeHttp404Error(errorObj, urlName, code);
break;
case 413:
errorToThrow = new MindeeHttp413Error(errorObj, urlName, code);
break;
case 429:
errorToThrow = new MindeeHttp429Error(errorObj, urlName, code);
break;
case 500:
errorToThrow = new MindeeHttp500Error(errorObj, urlName, code);
break;
case 504:
errorToThrow = new MindeeHttp504Error(errorObj, urlName, code);
break;
default:
errorToThrow = new MindeeHttpErrorV1(errorObj, urlName, code);
break;
}
errorHandler.throw(errorToThrow);
}
/**
* `Error` wrapper for server (HTTP) errors.
* Is used when an error is lacking a handled error code.
*/
export class MindeeHttpErrorV1 extends MindeeError {
constructor(httpError, urlName, code) {
super(`${urlName} API ${code} HTTP error: ${httpError.message}`);
/** Description of the error. */
this.message = "";
/** Additional details on the error. */
this.details = "";
this.details = httpError.details;
this.message = httpError.message;
this.code = code;
this.name = "MindeeHttpError";
}
}
/**
* Generic client errors.
* Can include errors like InvalidQuery.
*/
export class MindeeHttp400Error extends MindeeHttpErrorV1 {
constructor(httpError, urlName, code) {
super(httpError, urlName, code);
this.name = "MindeeHttp400Error";
}
}
/**
* Can include errors like NoTokenSet or InvalidToken.
*/
export class MindeeHttp401Error extends MindeeHttpErrorV1 {
constructor(httpError, urlName, code) {
super(httpError, urlName, code);
this.name = "MindeeHttp401Error";
}
}
/**
* Regular AccessForbidden error.
* Can also include errors like PlanLimitReached, AsyncRequestDisallowed or SyncRequestDisallowed.
*/
export class MindeeHttp403Error extends MindeeHttpErrorV1 {
constructor(httpError, urlName, code) {
super(httpError, urlName, code);
this.name = "MindeeHttp403Error";
}
}
export class MindeeHttp404Error extends MindeeHttpErrorV1 {
constructor(httpError, urlName, code) {
super(httpError, urlName, code);
this.name = "MindeeHttp404Error";
}
}
/**
* Rare error.
* Can occasionally happen when unusually large documents are passed.
*/
export class MindeeHttp413Error extends MindeeHttpErrorV1 {
constructor(httpError, urlName, code) {
super(httpError, urlName, code);
this.name = "MindeeHttp413Error";
}
}
/**
* Usually corresponds to TooManyRequests errors.
* Arises whenever too many calls to the API are made in quick succession.
*/
export class MindeeHttp429Error extends MindeeHttpErrorV1 {
constructor(httpError, urlName, code) {
super(httpError, urlName, code);
this.name = "MindeeHttp429Error";
}
}
/**
* Generic server errors.
*/
export class MindeeHttp500Error extends MindeeHttpErrorV1 {
constructor(httpError, urlName, code) {
super(httpError, urlName, code);
this.name = "MindeeHttp500Error";
}
}
/**
* Miscellaneous server errors.
* Can include errors like RequestTimeout or GatewayTimeout.
*/
export class MindeeHttp504Error extends MindeeHttpErrorV1 {
constructor(httpError, urlName, code) {
super(httpError, urlName, code);
this.name = "MindeeHttp504Error";
}
}