navidev-adt-api
Version:
API de conexión al Abap Developer Tools
111 lines (110 loc) • 4.38 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 {
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;