navidev-adt-api
Version:
API de conexión al Abap Developer Tools
177 lines (176 loc) • 7.76 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const axios_1 = __importDefault(require("axios"));
const adtException_1 = __importStar(require("./adtException"));
const isValidations_1 = __importDefault(require("../utilities/general/isValidations"));
const xmlParser_1 = __importDefault(require("../utilities/parser/xmlParser"));
class AdtExceptionController {
constructor() {
this.isResponse = (r) => isValidations_1.default.isObject(r) &&
!!(r === null || r === void 0 ? void 0 : r.status) &&
isValidations_1.default.isString(r === null || r === void 0 ? void 0 : r.statusText);
/**
* Genera un error simple
* @param response | Respuesta HTTP de Axios o propia
* @returns Excepción ADTError
*/
this.simpleError = (response, typeID) => adtException_1.default.simpleError(response.status, `Error ${response.status}:${response.statusText}`, typeID);
/**
* Error procedente de una respuesta HTTP
* @param data | Datos
* @param response | Objeto con la respuesta HTTP
* @returns Excepción
*/
this.fromResponse = (data, response) => {
// Errores de no tener autorización
if (response.status >= 401 && response.status <= 401)
return adtException_1.default.authError(response.status, response.statusText, response);
if (!data)
return this.simpleError(response, adtException_1.HTTPTYPEID);
// Error por CSRF es también autorización pero seguramente porque haya caducado el mismo
if (data.match(/CSRF/))
return adtException_1.default.createCsrfError(data);
const raw = xmlParser_1.default.fullParse(data);
const root = raw["exc:exception"];
if (root)
this.fromAbapException(root, response);
if (raw.error)
return this.fromAbapError(raw.error, response);
return this.simpleError(response);
};
/**
* Devuelve un string con los datos del error de Axios
* @param e | Axios error
* @returns String con los datos del error
*/
this.axiosErrorBody = (e) => { var _a; return ((_a = e.response) === null || _a === void 0 ? void 0 : _a.data) ? `${e.response.data}` : ""; };
/**
* Genera la excepción a partir de un error nativo del proceso
* @param error | Error nativo
* @returns Excepción
*/
this.fromError = (error) => {
try {
if (this.isAdtError(error))
return error;
if (isValidations_1.default.isObject(error) &&
"message" in error &&
isValidations_1.default.isString(error === null || error === void 0 ? void 0 : error.message))
return adtException_1.default.generalError(500, "", error.message);
}
catch (error) { }
return adtException_1.default.nativeError(500, `${error}`, error);
};
}
isAdtError(e) {
return e instanceof adtException_1.default;
}
isCsrfError(e) {
return (e === null || e === void 0 ? void 0 : e.typeID) === adtException_1.CSRFEXTYPEID;
}
isHttpError(e) {
return (e === null || e === void 0 ? void 0 : e.typeID) === adtException_1.HTTPTYPEID;
}
isAdtException(e) {
return e instanceof adtException_1.default;
}
/**
* Informa la excepción a partir de una excepción ABAP, o dump(creo)
* @param abapException
* @param response
* @returns
*/
fromAbapException(abapException, response) {
const getf = (base, idx) => (base ? base[idx] : "");
const properties = {};
xmlParser_1.default.xmlArray(abapException, "properties", "entry").forEach((p) => {
properties[p["@_key"]] = `${p["#text"]}`
.replace(/^\s+/, "")
.replace(/\s+$/, "");
});
return adtException_1.default.create(response.status, properties, abapException.type["@_id"], abapException.message["#text"], undefined, getf(abapException.namespace, "@_id"), getf(abapException.localizedMessage, "#text"), undefined, adtException_1.ADTEXTYPEID);
}
/**
* Informa la excepción a partir de una error ABAP. Es otro tipo de error al que se genera cuando es excepción.
* @param abapException
* @param response
* @returns
*/
fromAbapError(bodyParsed, response) {
return adtException_1.default.simpleError(response.status, bodyParsed.message["#text"]);
}
/**
* Proceso interno que gestiona si viene desde excepcion o respuesta del servicio
* @param errOrResp | Excepción o respuesta de servicios
*/
fromExceptionOrResponse(errOrResp) {
try {
if (this.isResponse(errOrResp))
return this.fromResponse(errOrResp.body, errOrResp);
else
return this.fromError(errOrResp);
}
catch (e) {
return this.isResponse(errOrResp)
? adtException_1.default.create(errOrResp, {})
: this.fromError(e);
}
}
/**
* Devuelve la excepcion segun el error pasado por parámetro
* @param errOrResp | Error
* @returns | Clase con la excepción
*/
fromException(errOrResp) {
if (this.isAdtException(errOrResp))
return errOrResp;
if (axios_1.default.isAxiosError(errOrResp) && errOrResp.response)
return this.fromResponse(this.axiosErrorBody(errOrResp), errOrResp.response);
if (isValidations_1.default.isNativeError(errOrResp))
adtException_1.default.nativeError(500, `${errOrResp}`, errOrResp);
/*if (
!this.isResponse(errOrResp) &&
(!IsValidations.isNativeError(errOrResp) ||
(IsValidations.isNativeError(errOrResp) &&
!axios.isAxiosError(errOrResp)))
)
return AdtErrorException.create(500, {}, "Unknown error", `${errOrResp}`);*/
return this.fromExceptionOrResponse(errOrResp);
}
/**
* Genera una excepción a partir de un texto libre
* @param text Texto libre
* @param text Numero de error
* @returns Excepción
*/
fromText(text, err = 500) {
return adtException_1.default.generalError(err, "", text);
}
}
exports.default = AdtExceptionController;