trm-core
Version:
TRM (Transport Request Manager) Core
689 lines (688 loc) • 26.7 kB
JavaScript
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 () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.RESTClient = void 0;
const commons_1 = require("../commons");
const FormData = __importStar(require("form-data"));
const trm_commons_1 = require("trm-commons");
const _1 = require(".");
const parse_multipart_data_1 = require("parse-multipart-data");
const AXIOS_CTX = "RestServer";
class RESTClient {
constructor(endpoint, rfcdest, _login, _cLangu) {
this.endpoint = endpoint;
this.rfcdest = rfcdest;
this._login = _login;
this._cLangu = _cLangu;
this._connected = false;
this.endpoint = this.endpoint.trim();
this._axiosInstance = (0, commons_1.getAxiosInstance)({
baseURL: this.endpoint,
params: {
'sap-client': `${this._login.client}`
},
auth: {
username: this._login.user,
password: this._login.passwd
},
timeout: 30000,
}, AXIOS_CTX);
}
open() {
return __awaiter(this, void 0, void 0, function* () {
if (!this._connected) {
var response;
try {
response = yield this._axiosInstance.get('/', {
timeout: 5000
});
}
catch (e) {
throw new _1.RESTClientError("ZNO_CONN", null, e, e.message);
}
if (response.status !== 200) {
throw new _1.RESTClientError("ZNO_CONN", null, null, `Couldn't reach ${this.endpoint}!`);
}
else {
this._connected = true;
this._axiosInstance.interceptors.response.use((response) => {
return response;
}, (error) => __awaiter(this, void 0, void 0, function* () {
var axiosError;
var message;
var messageError;
var sapMessage = {
class: undefined,
no: undefined
};
if (error.name === `Trm${AXIOS_CTX}Error`) {
axiosError = error.axiosError;
}
else {
axiosError = error;
}
if (axiosError.config.url === '/read_table') {
if (JSON.parse(axiosError.config.data).query_table === 'T100') {
throw error;
}
}
if (axiosError.response.data.message) {
sapMessage = {
no: `${axiosError.response.data.message.msgno}`,
class: axiosError.response.data.message.msgid,
v1: axiosError.response.data.message.msgv1,
v2: axiosError.response.data.message.msgv2,
v3: axiosError.response.data.message.msgv3,
v4: axiosError.response.data.message.msgv4
};
try {
message = yield this.getMessage(sapMessage);
}
catch (k) {
messageError = k;
message = `Couldn't read error message ${axiosError.response.data.message.msgid} ${axiosError.response.data.message.msgno} ${axiosError.response.data.message.msgv1} ${axiosError.response.data.message.msgv2} ${axiosError.response.data.message.msgv3} ${axiosError.response.data.message.msgv4}`;
}
}
else {
throw error;
}
var rfcClientError = new _1.RESTClientError(error.message, sapMessage, axiosError, message);
if (messageError) {
rfcClientError.messageError = messageError.toString();
}
if (axiosError.response.data.log) {
rfcClientError.messageLog = axiosError.response.data.log;
}
trm_commons_1.Logger.error(rfcClientError.toString(), true);
throw rfcClientError;
}));
}
}
});
}
checkConnection() {
return __awaiter(this, void 0, void 0, function* () {
return this._connected;
});
}
getMessage(data) {
return __awaiter(this, void 0, void 0, function* () {
var msgnr = data.no;
while (msgnr.length < 3) {
msgnr = `0${msgnr}`;
}
const aT100 = yield this.readTable('T100', [{ fieldName: 'SPRSL' }, { fieldName: 'ARBGB' }, { fieldName: 'MSGNR' }, { fieldName: 'TEXT' }], `SPRSL EQ '${this._cLangu}' AND ARBGB EQ '${data.class}' AND MSGNR EQ '${msgnr}'`);
if (aT100.length === 1 && aT100[0].text) {
var msg = aT100[0].text;
var counter = 1;
do {
if (msg.includes(`&${counter}`)) {
msg = msg.replace(new RegExp(`&${counter}`, 'gmi'), data[`v${counter}`] || '');
msg = msg.replace(new RegExp(`&${counter}&`, 'gmi'), data[`v${counter}`] || '');
}
else {
msg = msg.replace("&", data[`v${counter}`] || '');
}
counter++;
} while (counter <= 4);
msg = msg.replace(new RegExp(`&\\d*`, 'gmi'), '');
msg = msg.replace(new RegExp(`&`, 'gmi'), '');
return msg.trim();
}
else {
throw new _1.RESTClientError("ZMSG_NOT_FOUND", null, null, `Message ${msgnr}, class ${data.class}, lang ${this._cLangu} not found.`);
}
});
}
readTable(tableName, fields, options) {
return __awaiter(this, void 0, void 0, function* () {
try {
var sqlOutput = [];
const delimiter = '|';
var aOptions = [];
if (options) {
const aSplit = options.split(/\s+AND\s+/);
if (aSplit.length > 1) {
aSplit.forEach((s, i) => {
var sText = s.trim();
if (i !== 0) {
sText = `AND ${sText}`;
}
aOptions.push({ text: sText });
});
}
else {
aOptions = aSplit.map(s => {
return {
text: s
};
});
}
}
const result = yield this._axiosInstance.get('/read_table', {
params: {
rfcdest: this.rfcdest
},
data: {
query_table: tableName.toUpperCase(),
delimiter,
options: aOptions,
fields: fields
}
});
const data = result.data;
data.forEach(tab512 => {
var sqlLine = {};
const waSplit = tab512.wa.split(delimiter);
fields.forEach((field, index) => {
sqlLine[field.fieldName] = waSplit[index].trim();
});
sqlOutput.push(sqlLine);
});
return (0, commons_1.normalize)(sqlOutput);
}
catch (e) {
if (e.message === 'TABLE_WITHOUT_DATA') {
return [];
}
else {
throw e;
}
}
});
}
getFileSystem() {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/get_file_sys')).data;
return result.fileSys;
});
}
getDirTrans() {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/get_dir_trans')).data;
return result.dirTrans;
});
}
getBinaryFile(filePath) {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/get_binary_file', {
responseType: 'arraybuffer',
headers: {
'Content-Type': 'application/octet-stream'
},
data: {
file_path: filePath
}
})).data;
return result;
});
}
writeBinaryFile(filePath, binary) {
return __awaiter(this, void 0, void 0, function* () {
const formData = new FormData.default();
var filename;
try {
filename = /[^\\\/]+$/gmi.exec(filePath)[0];
}
catch (e) {
filename = 'UNKNOWN_FILENAME';
}
formData.append('file', binary, filename);
formData.append('file_path', filePath);
yield this._axiosInstance.post('/write_binary_file', formData, {
headers: formData.getHeaders()
});
});
}
createTocTransport(text, target) {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.post('/create_toc', {
text: text,
target: target.trim().toUpperCase()
})).data;
return result.trkorr;
});
}
createWbTransport(text, target) {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.post('/create_import_tr', {
text: text,
target: target.trim().toUpperCase()
})).data;
return result.trkorr;
});
}
setTransportDoc(trkorr, doc) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.put('/set_transport_doc', {
trkorr: trkorr.trim().toUpperCase(),
doc: doc
});
});
}
getDevclassObjects(devclass) {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/get_devclass_objs', {
data: {
devclass: devclass.trim().toUpperCase()
}
})).data;
return result.tadir;
});
}
removeComments(trkorr, object) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.delete('/remove_tr_comments', {
data: {
trkorr: trkorr.trim().toUpperCase(),
object: object.trim().toUpperCase()
}
});
});
}
addToTransportRequest(trkorr, content, lock) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.put('/add_objs_tr', {
lock: lock ? 'X' : ' ',
trkorr: trkorr.trim().toUpperCase(),
e071: content.map(o => {
return {
pgmid: o.pgmid,
object: o.object,
obj_name: o.objName
};
})
});
});
}
repositoryEnvironment(objectType, objectName) {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/repository_environment', {
params: {
rfcdest: this.rfcdest
},
data: {
obj_type: objectType.trim().toUpperCase(),
object_name: objectName.trim().toUpperCase()
}
})).data;
return result.environmentTab;
});
}
deleteTrkorr(trkorr) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.delete('/delete_transport', {
data: {
trkorr: trkorr.trim().toUpperCase()
}
});
});
}
releaseTrkorr(trkorr, lock, timeout) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.post('/release_tr', {
trkorr: trkorr.trim().toUpperCase(),
lock: lock ? 'X' : ' '
}, {
timeout: timeout * 1000
});
});
}
addSkipTrkorr(trkorr) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.put('/add_skip_trkorr', {
trkorr: trkorr.trim().toUpperCase()
});
});
}
removeSkipTrkorr(trkorr) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.delete('/remove_skip_trkorr', {
data: {
trkorr: trkorr.trim().toUpperCase()
}
});
});
}
addSrcTrkorr(trkorr) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.put('/add_src_trkorr', {
trkorr: trkorr.trim().toUpperCase()
});
});
}
readTmsQueue(target) {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/read_tms_queue', {
data: {
target: target
}
})).data;
return result.requests;
});
}
createPackage(scompkdtln) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.post('/create_package', scompkdtln);
});
}
tdevcInterface(devclass, parentcl, rmParentCl, devlayer) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.post('/tdevc_interface', {
devclass: devclass.trim().toUpperCase(),
parentcl: parentcl ? parentcl.trim().toUpperCase() : '',
rm_parentcl: rmParentCl ? 'X' : ' ',
devlayer: devlayer ? devlayer.trim().toUpperCase() : ''
});
});
}
getDefaultTransportLayer() {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/get_transport_layer')).data;
return result.layer;
});
}
tadirInterface(tadir) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.post('/tadir_interface', {
pgmid: tadir.pgmid,
object: tadir.object,
obj_name: tadir.objName,
devclass: tadir.devclass,
set_genflag: tadir.genflag ? 'X' : ' ',
srcsystem: tadir.srcsystem
});
});
}
dequeueTransport(trkorr) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.post('/dequeue_tr', {
trkorr: trkorr.trim().toUpperCase()
});
});
}
forwardTransport(trkorr_1, target_1, source_1) {
return __awaiter(this, arguments, void 0, function* (trkorr, target, source, importAgain = true) {
yield this._axiosInstance.post('/forward_tr', {
trkorr: trkorr.trim().toUpperCase(),
target: target.trim().toUpperCase(),
source: source.trim().toUpperCase(),
import_again: importAgain ? 'X' : ' '
});
});
}
importTransport(trkorr, system) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.post('/import_tr', {
system: system.trim().toUpperCase(),
trkorr: trkorr.trim().toUpperCase()
});
});
}
setInstallDevc(installDevc) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.put('/set_install_devc', {
installdevc: installDevc
});
});
}
getObjectsList() {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/list_object_types')).data;
return result.objectText;
});
}
getTrmServerVersion() {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/version')).data;
return result.serverVersion;
});
}
getTrmRestVersion() {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/version')).data;
return result.restVersion;
});
}
trmServerPing() {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/ping')).data;
return result.return;
});
}
renameTransportRequest(trkorr, as4text) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.post('/rename_transport_request', {
trkorr: trkorr.trim().toUpperCase(),
as4text: as4text
});
});
}
setPackageIntegrity(integrity) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.put('/set_integrity', {
integrity: integrity
});
});
}
addTranslationToTr(trkorr, devclassFilter) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.put('/add_lang_tr', {
trkorr: trkorr,
devclass: devclassFilter
});
});
}
trCopy(from_1, to_1) {
return __awaiter(this, arguments, void 0, function* (from, to, doc = false) {
yield this._axiosInstance.post('/tr_copy', {
from: from,
to: to,
doc: doc ? 'X' : ' '
});
});
}
getDest() {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/get_dest', {
params: {
rfcdest: this.rfcdest
}
})).data;
return result.dest;
});
}
getTransportObjectsBulk(trkorr) {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/get_transport_objs_bulk', {
data: {
trkorr
}
})).data;
return result.tadir;
});
}
getExistingObjectsBulk(objects) {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/get_existing_objs_bulk', {
data: {
objects
}
})).data;
return result.tadir;
});
}
addNamespace(namespace, replicense, texts) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.put('/add_namespace', {
namespace,
replicense,
texts
});
});
}
getR3transInfo() {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/get_r3trans_info')).data;
return result.log;
});
}
migrateTransport(trkorr) {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.post('/migrate_transport', {
trkorr
})).data;
return result.trmTrkorr;
});
}
deleteTmsTransport(trkorr, system) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.delete('/delete_transport', {
data: {
trkorr,
system
}
});
});
}
refreshTransportTmsTxt(trkorr) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.post('/refresh_tms_transport_txt', {
trkorr
});
});
}
getDotAbapgit(devclass) {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/get_dot_abapgit', {
responseType: 'arraybuffer',
headers: {
'Content-Type': 'application/octet-stream'
},
data: {
devclass
}
})).data;
return result;
});
}
getAbapgitSource(devclass) {
return __awaiter(this, void 0, void 0, function* () {
const { headers, data } = yield this._axiosInstance.get('/get_abapgit_source', {
responseType: 'arraybuffer',
headers: {
'Content-Type': 'multipart/mixed'
},
data: {
devclass
}
});
try {
const boundary = headers['content-type'].match(/boundary=([-0-9A-Za-z]+)/i)[1];
const parsedData = (0, parse_multipart_data_1.parse)(data, boundary);
return {
zip: parsedData.find(o => o.name === 'zip').data,
objects: JSON.parse(parsedData.find(o => o.name === 'objects').data.toString())
};
}
catch (e) {
throw new _1.RESTClientError("ZPARSE_API_DATA", null, null, `Can't parse api data.`);
}
});
}
executePostActivity(data, pre) {
return __awaiter(this, void 0, void 0, function* () {
const formData = new FormData.default();
formData.append('data', data, 'data');
formData.append('pre', pre ? 'X' : '');
const result = (yield this._axiosInstance.post('/execute_post_activity', formData, {
timeout: 60000
})).data;
return {
messages: result.messages,
execute: result.execute === 'X'
};
});
}
getInstalledPackagesBackend() {
return __awaiter(this, void 0, void 0, function* () {
const result = (yield this._axiosInstance.get('/get_installed_packages')).data;
return result.packages.map(o => {
o.xmanifest = o.xmanifest ? Buffer.from(o.xmanifest, 'base64').toString('utf8') : undefined;
return {
name: o.name,
version: o.version,
registry: o.registry,
manifest: o.xmanifest,
tdevc: o.tdevc,
transport: {
trkorr: o.transport ? o.transport.trkorr : undefined,
migration: o.transport ? o.transport.migration === 'X' : undefined
},
trkorr: o.trkorr
};
});
});
}
isServerApisAllowed() {
return __awaiter(this, void 0, void 0, function* () {
try {
yield this._axiosInstance.post('/check_auth');
return true;
}
catch (e) {
return e;
}
});
}
changeTrOwner(trkorr, owner) {
return __awaiter(this, void 0, void 0, function* () {
yield this._axiosInstance.post('/change_tr_owner', {
trkorr,
new_owner: owner
});
});
}
}
exports.RESTClient = RESTClient;
;