trm-core
Version:
TRM (Transport Request Manager) Core
591 lines (590 loc) • 29.7 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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SystemConnectorBase = exports.INSTALL_DEVCLASS_VIEW = exports.SKIP_TRKORR_TABL = exports.SRC_TRKORR_TABL = exports.TRM_REST_PACKAGE_NAME = exports.TRM_REST_INTF = exports.TRM_SERVER_INTF = exports.TRM_SERVER_PACKAGE_NAME = void 0;
const semver_1 = require("semver");
const trm_commons_1 = require("trm-commons");
const manifest_1 = require("../manifest");
const transport_1 = require("../transport");
const trmPackage_1 = require("../trmPackage");
const registry_1 = require("../registry");
const node_r3trans_1 = require("node-r3trans");
const dependencies_1 = require("../dependencies");
const SystemConnector_1 = require("./SystemConnector");
exports.TRM_SERVER_PACKAGE_NAME = 'trm-server';
exports.TRM_SERVER_INTF = '/ATRM/IF_SERVER';
exports.TRM_REST_INTF = '/ATRM/IF_REST';
exports.TRM_REST_PACKAGE_NAME = 'trm-rest';
exports.SRC_TRKORR_TABL = '/ATRM/SRC_TRKORR';
exports.SKIP_TRKORR_TABL = '/ATRM/SKIPTRKORR';
exports.INSTALL_DEVCLASS_VIEW = '/ATRM/V_INSTDEVC';
class SystemConnectorBase {
constructor() {
this._tableKeys = {};
this._rootDevclass = {};
}
getTransportStatus(trkorr) {
return __awaiter(this, void 0, void 0, function* () {
const aTrkorrStatusCheck = (yield this.readTable('E070', [{ fieldName: 'TRKORR' }, { fieldName: 'TRSTATUS' }], `TRKORR EQ '${trkorr}'`));
if (aTrkorrStatusCheck.length !== 1) {
throw new Error(`Transport not found.`);
}
else {
return aTrkorrStatusCheck[0].trstatus;
}
});
}
getSourceTrkorr(refresh) {
return __awaiter(this, void 0, void 0, function* () {
if (!this._sourceTrkorr || refresh) {
trm_commons_1.Logger.log(`Ready to read installed packages`, true);
trm_commons_1.Logger.log(`Checking if ${exports.SRC_TRKORR_TABL} exists`, true);
const tablExists = yield this.readTable('TADIR', [{ fieldName: 'OBJ_NAME' }], `PGMID EQ 'R3TR' AND OBJECT EQ 'TABL' AND OBJ_NAME EQ '${exports.SRC_TRKORR_TABL}'`);
if (tablExists.length === 1) {
trm_commons_1.Logger.log(`TABL ${exports.SRC_TRKORR_TABL} exists`, true);
const srcTrkorr = yield this.readTable(exports.SRC_TRKORR_TABL, [{ fieldName: 'TRKORR' }]);
this._sourceTrkorr = srcTrkorr.map(o => o.trkorr);
}
else {
this._sourceTrkorr = [];
}
}
return this._sourceTrkorr;
});
}
getObject(pgmid, object, objName) {
return __awaiter(this, void 0, void 0, function* () {
const tadir = yield this.readTable('TADIR', [{ fieldName: 'PGMID' }, { fieldName: 'OBJECT' }, { fieldName: 'OBJ_NAME' }, { fieldName: 'DEVCLASS' }, { fieldName: 'SRCSYSTEM' }, { fieldName: 'AUTHOR' }], `PGMID EQ '${pgmid.trim().toUpperCase()}' AND OBJECT EQ '${object.trim().toUpperCase()}' AND OBJ_NAME EQ '${objName.trim().toUpperCase()}'`);
if (tadir.length === 1) {
return tadir[0];
}
});
}
getIgnoredTrkorr(refresh) {
return __awaiter(this, void 0, void 0, function* () {
if (!this._ignoredTrkorr || refresh) {
trm_commons_1.Logger.log(`Reading ignored transports`, true);
trm_commons_1.Logger.log(`Checking if ${exports.SKIP_TRKORR_TABL} exists`, true);
const tablExists = yield this.readTable('TADIR', [{ fieldName: 'OBJ_NAME' }], `PGMID EQ 'R3TR' AND OBJECT EQ 'TABL' AND OBJ_NAME EQ '${exports.SKIP_TRKORR_TABL}'`);
if (tablExists.length === 1) {
trm_commons_1.Logger.log(`TABLE ${exports.SKIP_TRKORR_TABL} exists`, true);
const skipTrkorr = yield this.readTable(exports.SKIP_TRKORR_TABL, [{ fieldName: 'TRKORR' }]);
this._ignoredTrkorr = skipTrkorr.map(o => o.trkorr);
}
else {
this._ignoredTrkorr = [];
}
}
return this._ignoredTrkorr;
});
}
getTrmServerPackage() {
return __awaiter(this, void 0, void 0, function* () {
var oPackage;
const oPublicRegistry = registry_1.RegistryProvider.getRegistry();
const intf = yield this.getObject('R3TR', 'INTF', exports.TRM_SERVER_INTF);
if (intf) {
try {
const trmServerVersion = yield this.getTrmServerVersion();
const oManifest = new manifest_1.Manifest({
name: exports.TRM_SERVER_PACKAGE_NAME,
version: trmServerVersion
});
if ((0, semver_1.valid)(trmServerVersion)) {
oPackage = new trmPackage_1.TrmPackage(exports.TRM_SERVER_PACKAGE_NAME, oPublicRegistry, oManifest).setDevclass(intf.devclass);
}
}
catch (e) { }
}
if (!oPackage) {
throw new Error(`Package ${exports.TRM_SERVER_PACKAGE_NAME} was not found.`);
}
return oPackage;
});
}
getTrmRestPackage() {
return __awaiter(this, void 0, void 0, function* () {
var oPackage;
const oPublicRegistry = registry_1.RegistryProvider.getRegistry();
const intf = yield this.getObject('R3TR', 'INTF', exports.TRM_REST_INTF);
if (intf) {
try {
const trmRestVersion = yield this.getTrmRestVersion();
const oManifest = new manifest_1.Manifest({
name: exports.TRM_REST_PACKAGE_NAME,
version: trmRestVersion
});
if ((0, semver_1.valid)(trmRestVersion)) {
oPackage = new trmPackage_1.TrmPackage(exports.TRM_REST_PACKAGE_NAME, oPublicRegistry, oManifest).setDevclass(intf.devclass);
}
}
catch (e) { }
}
if (!oPackage) {
throw new Error(`Package ${exports.TRM_REST_PACKAGE_NAME} was not found.`);
}
return oPackage;
});
}
getInstalledPackages(refresh, includeLocals, filter) {
return __awaiter(this, void 0, void 0, function* () {
var trmPackages = [];
var fromBackend = false;
if (!refresh && Array.isArray(this._installedPackages)) {
trm_commons_1.Logger.log(`Reading cached version of installed packages`, true);
return this._installedPackages;
}
const serverExists = yield this.readTable('TADIR', [{ fieldName: 'OBJ_NAME' }], `PGMID EQ 'R3TR' AND OBJECT EQ 'INTF' AND OBJ_NAME EQ '${exports.TRM_SERVER_INTF}'`);
if (serverExists.length === 1) {
trm_commons_1.Logger.log(`INTF ${exports.TRM_SERVER_INTF} exists, reading packages from backend API`, true);
try {
var installedPackagesBackend = yield this.getInstalledPackagesBackend(filter);
installedPackagesBackend = installedPackagesBackend.sort((a, b) => Number(`${b.as4Date}${b.as4Time}`) - Number(`${a.as4Date}${a.as4Time}`));
if (!includeLocals) {
installedPackagesBackend = installedPackagesBackend.filter(o => o.packageRegistry !== registry_1.LOCAL_RESERVED_KEYWORD);
}
for (const o of installedPackagesBackend) {
const manifest = manifest_1.Manifest.fromAbapXml(o.manifest);
if (o.trkorr) {
manifest.setLinkedTransport(new transport_1.Transport(o.trkorr, null));
}
const trmPackage = new trmPackage_1.TrmPackage(o.packageName, registry_1.RegistryProvider.getRegistry(o.packageRegistry), manifest).setDevclass(o.devclass).setDirtyEntries(o.dirty);
trmPackages.push(trmPackage);
}
fromBackend = true;
}
catch (e) {
trmPackages = [];
trm_commons_1.Logger.error(e.toString(), true);
}
}
if (fromBackend) {
trm_commons_1.Logger.log(`Packages were fetched from backend API`, true);
return trmPackages;
}
else {
trm_commons_1.Logger.log(`Packages weren't fetched from backend API, continue`, true);
}
var packageTransports = [];
trm_commons_1.Logger.log(`Ready to read installed packages`, true);
var allTransports = (yield this.readTable('E071', [{ fieldName: 'TRKORR' }], `PGMID EQ '*' AND OBJECT EQ '${transport_1.COMMENT_OBJ}'`)).map(o => o.trkorr);
allTransports = Array.from(new Set(allTransports));
for (const trkorr of allTransports) {
var aTrkorrStatusCheck;
try {
trm_commons_1.Logger.log(`Checking ${trkorr} TMS import result`, true);
aTrkorrStatusCheck = (yield this.readTable('TMSBUFFER', [{ fieldName: 'TRKORR' }, { fieldName: 'MAXRC' }], `SYSNAM EQ '${this.getSysname()}' AND TRKORR EQ '${trkorr}' AND IMPSING NE 'X'`));
aTrkorrStatusCheck = aTrkorrStatusCheck.filter(o => parseInt(o.maxrc) >= 0);
}
catch (e) {
aTrkorrStatusCheck = [];
}
if (aTrkorrStatusCheck.length === 0) {
trm_commons_1.Logger.log(`${trkorr} is ignored: no status!`, true);
allTransports = allTransports.filter(s => s !== trkorr);
}
}
trm_commons_1.Logger.log(`All transports to check: ${JSON.stringify(allTransports)}`, true);
const transports = allTransports.map(trkorr => new transport_1.Transport(trkorr, null));
for (const transport of transports) {
const trmPackage = yield transport.getLinkedPackage();
if (trmPackage) {
trm_commons_1.Logger.log(`Transport ${transport.trkorr}, found linked package`, true);
if (trmPackage.registry.getRegistryType() === registry_1.RegistryType.LOCAL && !includeLocals) {
trm_commons_1.Logger.log(`Package is local, skipping`, true);
continue;
}
var arrayIndex = packageTransports.findIndex(o => trmPackage_1.TrmPackage.compare(o.package, trmPackage));
if (arrayIndex < 0) {
arrayIndex = packageTransports.push({
package: trmPackage,
transports: []
});
arrayIndex--;
}
packageTransports[arrayIndex].transports.push(transport);
}
}
trm_commons_1.Logger.log(`Package Transports map: ${(0, trm_commons_1.inspect)(packageTransports.map(o => {
return {
packageName: o.package.packageName,
registry: o.package.registry.endpoint,
transports: o.transports.map(k => k.trkorr)
};
}), { breakLength: Infinity, compact: true })}`, true);
for (const packageTransport of packageTransports) {
const latestTransport = yield transport_1.Transport.getLatest(packageTransport.transports);
if (latestTransport) {
trmPackages.push(yield latestTransport.getLinkedPackage());
}
}
trm_commons_1.Logger.log(`Packages found: ${(0, trm_commons_1.inspect)(trmPackages, { breakLength: Infinity, compact: true })}`, true);
this._installedPackages = trmPackages;
return trmPackages;
});
}
getDevclass(devclass) {
return __awaiter(this, void 0, void 0, function* () {
const tdevc = yield this.readTable('TDEVC', [{ fieldName: 'DEVCLASS' }, { fieldName: 'PARENTCL' }, { fieldName: 'TPCLASS' }, { fieldName: 'DLVUNIT' }], `DEVCLASS EQ '${devclass.trim().toUpperCase()}'`);
if (tdevc.length === 1) {
return tdevc[0];
}
});
}
getSubpackages(devclass) {
return __awaiter(this, void 0, void 0, function* () {
const queryFields = [{ fieldName: 'DEVCLASS' }, { fieldName: 'PARENTCL' }];
var subpackages = [];
const initial = yield this.readTable('TDEVC', queryFields, `DEVCLASS EQ '${devclass.trim().toUpperCase()}'`);
if (initial.length === 1) {
subpackages.push({
tdevc: initial[0],
queryDone: false
});
}
while (subpackages.find(o => !o.queryDone)) {
const searchParentIndex = subpackages.findIndex(o => !o.queryDone);
const tdevc = yield this.readTable('TDEVC', queryFields, `PARENTCL EQ '${subpackages[searchParentIndex].tdevc.devclass.trim().toUpperCase()}'`);
subpackages[searchParentIndex].queryDone = true;
tdevc.forEach(o => {
subpackages.push({
tdevc: o,
queryDone: false
});
});
}
return subpackages.map(o => o.tdevc).filter(o => o.devclass !== devclass.trim().toUpperCase());
});
}
getDevclassObjects(devclass_1) {
return __awaiter(this, arguments, void 0, function* (devclass, includeSubpackages = true) {
var aTadir = [];
var aDevclass = [devclass];
if (includeSubpackages) {
aDevclass = aDevclass.concat(((yield this.getSubpackages(devclass)).map(o => o.devclass)));
}
for (const d of aDevclass) {
aTadir = aTadir.concat(((yield this.listDevclassObjects(d.trim().toUpperCase()))));
}
return aTadir;
});
}
getInstallPackages(packageName, registry) {
return __awaiter(this, void 0, void 0, function* () {
const registryEndpoint = registry.getRegistryType() === registry_1.RegistryType.PUBLIC ? registry_1.PUBLIC_RESERVED_KEYWORD : registry.endpoint;
return yield this.readTable(exports.INSTALL_DEVCLASS_VIEW, [{ fieldName: 'ORIGINAL_DEVCLASS' }, { fieldName: 'INSTALL_DEVCLASS' }], `PACKAGE_NAME EQ '${packageName}' AND PACKAGE_REGISTRY EQ '${registryEndpoint}'`);
});
}
setPackageSuperpackage(devclass, superpackage) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.tdevcInterface(devclass, superpackage);
});
}
clearPackageSuperpackage(devclass) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.tdevcInterface(devclass, null, true);
});
}
setPackageTransportLayer(devclass, devlayer) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.tdevcInterface(devclass, null, null, devlayer);
});
}
checkSapEntryExists(table, sapEntry) {
return __awaiter(this, void 0, void 0, function* () {
try {
var aQuery = [];
Object.keys(sapEntry).forEach(k => {
aQuery.push(`${k.trim().toUpperCase()} EQ '${sapEntry[k]}'`);
});
const entry = yield this.readTable(table.trim().toUpperCase(), [{ fieldName: Object.keys(sapEntry)[0].trim().toUpperCase() }], aQuery.join(' AND '));
return entry.length > 0;
}
catch (e) {
return false;
}
});
}
getPackageIntegrity(oPackage) {
return __awaiter(this, void 0, void 0, function* () {
const packageName = oPackage.packageName;
const registryEndpoint = oPackage.registry.getRegistryType() === registry_1.RegistryType.PUBLIC ? registry_1.PUBLIC_RESERVED_KEYWORD : oPackage.registry.endpoint;
const aIntegrity = yield this.readTable('ZTRM_INTEGRITY', [{ fieldName: 'INTEGRITY' }], `PACKAGE_NAME EQ '${packageName}' AND PACKAGE_REGISTRY EQ '${registryEndpoint}'`);
if (aIntegrity.length === 1) {
return aIntegrity[0].integrity;
}
else {
return '';
}
});
}
getFunctionModule(func) {
return __awaiter(this, void 0, void 0, function* () {
const aTfdir = yield this.readTable('TFDIR', [{ fieldName: 'FUNCNAME' }, { fieldName: 'PNAME' }], `FUNCNAME EQ '${func.trim().toUpperCase()}'`);
if (aTfdir.length === 1) {
return aTfdir[0];
}
});
}
getExistingObjects(objects) {
return __awaiter(this, void 0, void 0, function* () {
var ret = [];
for (const object of objects) {
const oTadir = yield this.getObject(object.pgmid, object.object, object.objName);
if (oTadir) {
ret.push(oTadir);
}
}
return ret;
});
}
getNamespace(namespace) {
return __awaiter(this, void 0, void 0, function* () {
const aNamespace = yield this.readTable('TRNSPACET', [{ fieldName: 'NAMESPACE' }, { fieldName: 'REPLICENSE' }], `NAMESPACE EQ '${namespace.toUpperCase()}'`);
if (aNamespace.length === 1) {
const aNamespacet = yield this.readTable('TRNSPACETT', [{ fieldName: 'NAMESPACE' }, { fieldName: 'SPRAS' }, { fieldName: 'DESCRIPTN' }, { fieldName: 'OWNER' }], `NAMESPACE EQ '${namespace.toUpperCase()}'`);
return {
trnspacet: aNamespace[0],
trnspacett: aNamespacet
};
}
});
}
getR3transVersion() {
return __awaiter(this, void 0, void 0, function* () {
if (!this._r3transInfoLog) {
this._r3transInfoLog = yield this.getR3transInfo();
}
return node_r3trans_1.R3trans.getVersion(this._r3transInfoLog);
});
}
getR3transUnicode() {
return __awaiter(this, void 0, void 0, function* () {
if (!this._r3transInfoLog) {
this._r3transInfoLog = yield this.getR3transInfo();
}
return node_r3trans_1.R3trans.isUnicode(this._r3transInfoLog);
});
}
isTransportLayerExist(devlayer) {
return __awaiter(this, void 0, void 0, function* () {
const aTransportLayer = (yield this.readTable('TCETRAL', [{ fieldName: 'VERSION' }, { fieldName: 'TRANSLAYER' }], `TRANSLAYER EQ '${devlayer}'`));
return aTransportLayer.length > 0;
});
}
readClassDescriptions(clsname) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.readTable('SEOCLASSTX', [{ fieldName: 'CLSNAME' }, { fieldName: 'LANGU' }, { fieldName: 'DESCRIPT' }], `CLSNAME EQ '${clsname.trim().toUpperCase()}'`);
});
}
getPackageDependencies(devclass, includeSubPackages) {
return __awaiter(this, void 0, void 0, function* () {
var packageDependencies;
const logProgress = trm_commons_1.Logger.progressbar('Finding dependencies [{bar}] {percentage}%', '>');
logProgress.start(100, 0);
const isStateless = SystemConnector_1.SystemConnector.isStateless();
const newConnection = isStateless ? SystemConnector_1.SystemConnector.systemConnector : SystemConnector_1.SystemConnector.getNewConnection();
if (!isStateless) {
yield newConnection.connect(true);
const logId = yield newConnection.createLogPolling('DEVCLASS_D');
const job = this.getPackageDependenciesInternal(devclass, includeSubPackages, logId);
var stopped = false;
const poll = (() => __awaiter(this, void 0, void 0, function* () {
while (!stopped) {
try {
const status = yield newConnection.readLogPolling(logId);
if (status) {
const match = status.match(/\(([\d.]+)%\)/);
if (match) {
logProgress.update(parseFloat(match[1]));
}
}
}
catch (_a) { }
yield new Promise(r => setTimeout(r, 500));
}
}))();
try {
packageDependencies = yield job;
}
catch (e) {
try {
yield newConnection.deleteLogPolling(logId);
}
catch (_a) { }
throw e;
}
stopped = true;
yield poll;
logProgress.update(100);
try {
yield newConnection.deleteLogPolling(logId);
if (!isStateless) {
yield newConnection.closeConnection();
}
}
catch (_b) { }
logProgress.stop();
return (yield new dependencies_1.PackageDependencies(devclass).setDependencies(packageDependencies || []));
}
else {
packageDependencies = yield this.getPackageDependenciesInternal(devclass, includeSubPackages);
return (yield new dependencies_1.PackageDependencies(devclass).setDependencies(packageDependencies || []));
}
});
}
getObjectDependencies(object, objName) {
return __awaiter(this, void 0, void 0, function* () {
const objectDependencies = yield this.getObjectDependenciesInternal(object, objName);
return (yield new dependencies_1.ObjectDependencies(object, objName).setDependencies(objectDependencies || []));
});
}
getTableKeys(tabname) {
return __awaiter(this, void 0, void 0, function* () {
tabname = tabname.trim().toUpperCase();
if (!this._tableKeys[tabname]) {
this._tableKeys[tabname] = yield this.readTable('DD03L', [{ fieldName: 'FIELDNAME' }, { fieldName: 'POSITION' }, { fieldName: 'LENG' }], `TABNAME EQ '${tabname.trim().toUpperCase()}' AND AS4LOCAL EQ 'A' AND AS4VERS EQ '0000' AND KEYFLAG EQ 'X'`);
}
return this._tableKeys[tabname];
});
}
getRootDevclass(devclass) {
return __awaiter(this, void 0, void 0, function* () {
devclass = devclass.trim().toUpperCase();
var currentDevclass = devclass;
if (!this._rootDevclass[currentDevclass]) {
var pastDevclass = [];
while (currentDevclass) {
var res = (yield this.readTable('TDEVC', [{ fieldName: 'DEVCLASS' }, { fieldName: 'PARENTCL' }], `DEVCLASS EQ '${currentDevclass}'`))[0];
if (res.parentcl) {
pastDevclass.push(currentDevclass);
currentDevclass = res.parentcl;
}
else {
pastDevclass.push(currentDevclass);
pastDevclass.forEach(p => {
this._rootDevclass[p] = res.devclass;
});
currentDevclass = null;
}
}
}
return this._rootDevclass[devclass];
});
}
getTimezone() {
return __awaiter(this, void 0, void 0, function* () {
if (!this._timezone) {
const map = {
CET: "Europe/Berlin",
EET: "Europe/Helsinki",
GMTUK: "Europe/London",
AZOREN: "Atlantic/Azores",
CYPRUS: "Asia/Nicosia",
MOLDVA: "Europe/Chisinau",
TURKEY: "Europe/Istanbul",
CAT: "Africa/Harare",
EGYPT: "Africa/Cairo",
MOROCC: "Africa/Casablanca",
ISRAEL: "Asia/Jerusalem",
IRAN: "Asia/Tehran",
IRAQ: "Asia/Baghdad",
JORDAN: "Asia/Amman",
LBANON: "Asia/Beirut",
SYRIA: "Asia/Damascus",
AFGHAN: "Asia/Kabul",
AZT: "Asia/Baku",
BDT: "Asia/Dhaka",
INDIA: "Asia/Kolkata",
JAPAN: "Asia/Tokyo",
NEPAL: "Asia/Kathmandu",
PKT: "Asia/Karachi",
RUS02: "Europe/Kaliningrad",
RUS03: "Europe/Moscow",
RUS04: "Europe/Samara",
RUS05: "Asia/Yekaterinburg",
RUS06: "Asia/Omsk",
RUS07: "Asia/Krasnoyarsk",
RUS08: "Asia/Irkutsk",
RUS09: "Asia/Yakutsk",
RUS10: "Asia/Vladivostok",
RUS11: "Asia/Magadan",
RUS12: "Asia/Kamchatka",
AUSEUC: "Australia/Eucla",
AUSLHI: "Australia/Lord_Howe",
AUSNSW: "Australia/Sydney",
AUSNT: "Australia/Darwin",
AUSQLD: "Australia/Brisbane",
AUSSA: "Australia/Adelaide",
AUSTAS: "Australia/Hobart",
AUSVIC: "Australia/Melbourne",
AUSWA: "Australia/Perth",
NORFLK: "Pacific/Norfolk",
NZST: "Pacific/Auckland",
NZCHA: "Pacific/Chatham",
ALA: "America/Anchorage",
ALAW: "America/Adak",
EST: "America/New_York",
EST_: "America/Toronto",
EST_NA: "America/New_York",
ESTNO: "America/New_York",
CST: "America/Chicago",
CST_NA: "America/Chicago",
CSTNO: "America/Chicago",
MST: "America/Denver",
MSTNO: "America/Phoenix",
MST_NA: "America/Denver",
PST: "America/Los_Angeles",
HAW: "Pacific/Honolulu",
NST: "America/St_Johns",
PIERRE: "America/Miquelon",
ART: "America/Argentina/Buenos_Aires",
BRAZIL: "America/Sao_Paulo",
BRZLAN: "America/Manaus",
BRZLWE: "America/Rio_Branco",
CHILE: "America/Santiago",
CHILEE: "Pacific/Easter",
CHILEM: "America/Punta_Arenas",
PARAGY: "America/Asuncion",
URUGUA: "America/Montevideo",
GST: "America/Godthab",
GSTE: "America/Scoresbysund",
GSTW: "America/Godthab",
FLKLND: "Atlantic/Stanley",
FIJI: "Pacific/Fiji",
MAU: "Indian/Mauritius",
UTC: "UTC",
};
try {
const sapTimezone = (yield this.readTable('TTZCU', [{ fieldName: 'TZONESYS' }]))[0].tzonesys;
const m = sapTimezone.match(/^UTC([+-])(\d{1,2})$/);
if (m) {
const sign = m[1];
const hours = Number(m[2]);
const etcSign = sign === "+" ? "-" : "+";
this._timezone = `Etc/GMT${etcSign}${hours}`;
}
if (!map[sapTimezone]) {
throw new Error(`Unsupported SAP timezone: ${sapTimezone}`);
}
this._timezone = map[sapTimezone];
}
catch (e) {
trm_commons_1.Logger.error(`Cannot read/parse system timezone!`, true);
trm_commons_1.Logger.error(e.toString(), true);
this._timezone = 'UTC';
}
}
return this._timezone;
});
}
}
exports.SystemConnectorBase = SystemConnectorBase;