UNPKG

navidev-adt-api

Version:

API de conexión al Abap Developer Tools

177 lines (176 loc) 7.76 kB
"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;