navidev-adt-api
Version:
API de conexión al Abap Developer Tools
123 lines (122 loc) • 5.3 kB
JavaScript
;
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;