UNPKG

navidev-adt-api

Version:

API de conexión al Abap Developer Tools

123 lines (122 loc) 5.3 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const connectionRepository_1 = __importDefault(require("./connectionRepository")); const adtExceptionController_1 = __importDefault(require("../shared/exceptions/adtExceptionController")); const Result_1 = require("../shared/core/Result"); const adtException_1 = require("../shared/exceptions/adtException"); const axios_1 = require("axios"); class ConnectionApp { /** * Constructor * @param logonData | Datos de conexion */ constructor(logonData) { this.exceptionManager = new adtExceptionController_1.default(); this.connection = new connectionRepository_1.default(logonData); } /** * Conexión al sistema SAP */ login() { return __awaiter(this, void 0, void 0, function* () { try { let resultLogin = yield this.connection.login(); let response = { connectionAuth: resultLogin, }; return Result_1.Result.ok(response); } catch (error) { return Result_1.Result.fail(this.exceptionManager.fromException(error)); } }); } /** * Logout */ logout() { return __awaiter(this, void 0, void 0, function* () { try { this.connection.logout(); } catch (error) { } }); } /** * Realiza la petición HTTP * @param url | URL a llamar * @param options | Opciones de la llamad * @returns Respuesta del proceso */ request(url, options) { return __awaiter(this, void 0, void 0, function* () { try { /** * Nota 31/01/2025 - Se cambia la manera de conectarse. Ahora ha cada servicio se le pasa el usuario y contraseña. * El token de autentificación funciona en todos los casos de ADT pero la clase de conexión se usa para obtención de datos * de los servicios de GW hay casos que no termina de funcionar. Además, desde el eclipse veo que SAP hace lo mismo, y he visto que en mi codigo * no se penaliza el rendimiento. */ // Si no se esta conectado nos conectamos. Si falla la autentificación se devuelve su response porque estará el error if (!this.connection.is_logged()) { let responseLogin = yield this.login(); if (responseLogin.isFailure) return Result_1.Result.fail(responseLogin.getErrorValue()); } let resultRequest = yield this.connection.request(url, options); return Result_1.Result.ok(resultRequest); } catch (error) { // Se mira si la excepción es de autorización/time out, si es así, se vuelve a conectar y lanza de nuevo la petición. let adtException = this.exceptionManager.fromException(error); if (this.isExceptionAuth(adtException) || this.isExceptionTimeOut(adtException)) { let responseLogin = yield this.login(); if (responseLogin.isFailure) return Result_1.Result.fail(responseLogin.getErrorValue()); let resultRequest = yield this.connection.request(url, options); return Result_1.Result.ok(resultRequest); } else { return Result_1.Result.fail(adtException); } } }); } /** * Devuelve si es una excepción por autorización * @param adtException | Objeto de excepción * @returns true o false si */ isExceptionAuth(adtException) { return adtException.typeID == adtException_1.CSRFEXTYPEID || adtException.typeID == adtException_1.AUTHTYPEID ? true : false; } /** * Devuelve si es una excepción por timeout * @param adtException | Objeto de excepción * @returns true o false si */ isExceptionTimeOut(adtException) { return adtException.err == axios_1.HttpStatusCode.BadRequest && (adtException.message.includes("timeout") || adtException.message.includes("timed out")) ? true : false; } } exports.default = ConnectionApp;