UNPKG

trm-core

Version:

TRM (Transport Request Manager) Core

689 lines (688 loc) 26.7 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 () { 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;