trm-core 6.7.2 → 6.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +7 -2
  2. package/changelog.txt +13 -0
  3. package/dist/actions/commons/checkServerAuth.d.ts +3 -0
  4. package/dist/actions/commons/checkServerAuth.js +25 -0
  5. package/dist/actions/commons/index.d.ts +1 -0
  6. package/dist/actions/commons/index.js +1 -0
  7. package/dist/actions/commons/setSystemPackages.js +1 -1
  8. package/dist/actions/install/checkTransports.js +1 -1
  9. package/dist/actions/install/commit.d.ts +3 -0
  10. package/dist/actions/install/commit.js +33 -0
  11. package/dist/actions/install/executePostActivities.js +1 -1
  12. package/dist/actions/install/generateInstallTransport.js +9 -2
  13. package/dist/actions/install/importCustTransport.js +2 -0
  14. package/dist/actions/install/importDevcTransport.js +2 -0
  15. package/dist/actions/install/importLangTransport.js +2 -0
  16. package/dist/actions/install/importTadirTransport.js +2 -0
  17. package/dist/actions/install/index.js +4 -0
  18. package/dist/actions/publish/getSourceCode.js +2 -1
  19. package/dist/actions/publish/index.js +1 -0
  20. package/dist/client/RESTClient.d.ts +2 -2
  21. package/dist/client/RESTClient.js +10 -5
  22. package/dist/client/RFCClient.d.ts +3 -2
  23. package/dist/client/RFCClient.js +31 -7
  24. package/dist/client/struct/ZTY_TRM_PACKAGE.d.ts +1 -0
  25. package/dist/commons/TrmServerUpgradeService.d.ts +0 -1
  26. package/dist/commons/TrmServerUpgradeService.js +0 -8
  27. package/dist/manifest/PostActivity.js +0 -1
  28. package/dist/systemConnector/ISystemConnector.d.ts +2 -2
  29. package/dist/systemConnector/RESTSystemConnector.d.ts +3 -2
  30. package/dist/systemConnector/RESTSystemConnector.js +5 -2
  31. package/dist/systemConnector/RFCSystemConnector.d.ts +5 -3
  32. package/dist/systemConnector/RFCSystemConnector.js +14 -6
  33. package/dist/systemConnector/SystemConnector.d.ts +2 -2
  34. package/dist/systemConnector/SystemConnector.js +3 -3
  35. package/dist/systemConnector/SystemConnectorBase.js +39 -37
  36. package/dist/transport/Transport.js +2 -2
  37. package/dist/trmPackage/TrmPackage.d.ts +4 -0
  38. package/dist/trmPackage/TrmPackage.js +13 -0
  39. package/package.json +2 -2
package/README.md CHANGED
@@ -5,13 +5,18 @@
5
5
  [![Core Latest version](https://img.shields.io/npm/v/trm-core)](https://www.npmjs.com/package/trm-core)
6
6
  [![Core Installs](https://img.shields.io/npm/dt/trm-core)](https://www.npmjs.com/package/trm-core)
7
7
 
8
- This module contains the core functionalities of TRM (Transport Request Manager).
8
+ | 🚀 This project is funded and maintained by 🏦 | 🔗 |
9
+ |-------------------------------------------------|----------------------------------------------------------------|
10
+ | Regesta S.p.A. | [https://www.regestaitalia.eu/](https://www.regestaitalia.eu/) |
11
+ | Clarex S.r.l. | [https://www.clarex.it/](https://www.clarex.it/) |
12
+
13
+ This module contains the core functionalities of [TRM (Transport Request Manager)](https://trmregistry.com/).
9
14
 
10
15
  TRM is a software designed to make transports between SAP ECC/S4 systems easy.
11
16
 
12
17
  # Documentation <!-- {docsify-remove} -->
13
18
 
14
- Full documentation can be seen at [https://docs.trmregistry.com](https://docs.trmregistry.com).
19
+ Full documentation can be seen at [https://docs.trmregistry.com/](https://docs.trmregistry.com).
15
20
 
16
21
  # Contributing <!-- {docsify-remove} -->
17
22
 
package/changelog.txt CHANGED
@@ -8,6 +8,19 @@ Legend
8
8
  + : added
9
9
  - : removed
10
10
 
11
+ 2025-05-29 v6.9.0
12
+ -------------------
13
+ ! check server api auth before install and publish
14
+ ! trm-server ^3.1.0
15
+ ! read wb transport from package
16
+
17
+ 2025-05-27 v6.8.0
18
+ -------------------
19
+ ! on install transport update, check tasks before add object attempt
20
+ * commit before post activity run on RFC
21
+ * post activity error log
22
+ + node-rfc #327 -> device or resource busy, added workaround
23
+
11
24
  2025-05-20 v6.7.1
12
25
  -------------------
13
26
  ! get installed packages from backend with trm-server version check
@@ -0,0 +1,3 @@
1
+ import { Step } from "@simonegaffurini/sammarksworkflow";
2
+ import { IActionContext } from "..";
3
+ export declare const checkServerAuth: Step<IActionContext>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.checkServerAuth = void 0;
13
+ const trm_commons_1 = require("trm-commons");
14
+ const systemConnector_1 = require("../../systemConnector");
15
+ const client_1 = require("../../client");
16
+ exports.checkServerAuth = {
17
+ name: 'check-server-auth',
18
+ run: (context) => __awaiter(void 0, void 0, void 0, function* () {
19
+ trm_commons_1.Logger.log('Check server auth step', true);
20
+ const auth = yield systemConnector_1.SystemConnector.isServerApisAllowed();
21
+ if (auth instanceof client_1.ClientError) {
22
+ throw auth;
23
+ }
24
+ })
25
+ };
@@ -1,2 +1,3 @@
1
1
  export * from "./IActionContext";
2
2
  export * from "./setSystemPackages";
3
+ export * from "./checkServerAuth";
@@ -16,3 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./IActionContext"), exports);
18
18
  __exportStar(require("./setSystemPackages"), exports);
19
+ __exportStar(require("./checkServerAuth"), exports);
@@ -13,7 +13,7 @@ exports.setSystemPackages = void 0;
13
13
  const trm_commons_1 = require("trm-commons");
14
14
  const systemConnector_1 = require("../../systemConnector");
15
15
  exports.setSystemPackages = {
16
- name: 'setSystemPackages',
16
+ name: 'set-system-packages',
17
17
  run: (context) => __awaiter(void 0, void 0, void 0, function* () {
18
18
  trm_commons_1.Logger.log('Set system packages step', true);
19
19
  if (context.rawInput.contextData.systemPackages === undefined) {
@@ -144,8 +144,8 @@ exports.checkTransports = {
144
144
  else {
145
145
  trm_commons_1.Logger.log(`${trkorr} is linked to another package, will later be migrated`, true);
146
146
  context.runtime.generatedData.migrations.push(oTransport);
147
- context.runtime.generatedData.tmsTxtRefresh.push(oTransport);
148
147
  }
148
+ context.runtime.generatedData.tmsTxtRefresh.push(oTransport);
149
149
  }
150
150
  else if (trmRelevant) {
151
151
  trm_commons_1.Logger.log(`${trkorr} is TRM relevant but no linked package (could be DEVC, LANG etc..). No migration, just tms refresh`, true);
@@ -0,0 +1,3 @@
1
+ import { Step } from "@simonegaffurini/sammarksworkflow";
2
+ import { InstallWorkflowContext } from ".";
3
+ export declare const commit: Step<InstallWorkflowContext>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.commit = void 0;
13
+ const trm_commons_1 = require("trm-commons");
14
+ const systemConnector_1 = require("../../systemConnector");
15
+ exports.commit = {
16
+ name: 'commit',
17
+ filter: (context) => __awaiter(void 0, void 0, void 0, function* () {
18
+ if (systemConnector_1.SystemConnector.systemConnector instanceof systemConnector_1.RFCSystemConnector) {
19
+ return true;
20
+ }
21
+ else {
22
+ return false;
23
+ }
24
+ }),
25
+ run: (context) => __awaiter(void 0, void 0, void 0, function* () {
26
+ trm_commons_1.Logger.log('Commit (RFC Connection) step', true);
27
+ trm_commons_1.Logger.loading(`Closing rfc connection...`, true);
28
+ yield systemConnector_1.SystemConnector.systemConnector.close();
29
+ trm_commons_1.Logger.loading(`Opening rfc connection...`, true);
30
+ yield systemConnector_1.SystemConnector.systemConnector.connect(true);
31
+ trm_commons_1.Logger.success(`Commit OK`, true);
32
+ })
33
+ };
@@ -61,7 +61,7 @@ exports.executePostActivities = {
61
61
  yield postActivity.execute();
62
62
  }
63
63
  catch (e) {
64
- trm_commons_1.Logger.error(`Failed execution of post activity: ${e.toString()}`);
64
+ trm_commons_1.Logger.error(`Failed execution of post activity: ${e.message}`);
65
65
  }
66
66
  trm_commons_1.Logger.removePrefix();
67
67
  }
@@ -12,7 +12,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.generateInstallTransport = void 0;
13
13
  const trm_commons_1 = require("trm-commons");
14
14
  const commons_1 = require("../../commons");
15
- const systemConnector_1 = require("../../systemConnector");
16
15
  const transport_1 = require("../../transport");
17
16
  exports.generateInstallTransport = {
18
17
  name: 'generate-install-transport',
@@ -33,7 +32,7 @@ exports.generateInstallTransport = {
33
32
  return;
34
33
  }
35
34
  trm_commons_1.Logger.loading(`Checking install transport...`);
36
- context.runtime.installData.transport = yield systemConnector_1.SystemConnector.getPackageWorkbenchTransport(context.runtime.remotePackageData.trmPackage);
35
+ context.runtime.installData.transport = yield context.runtime.remotePackageData.trmPackage.getWbTransport();
37
36
  if (context.runtime.installData.transport) {
38
37
  trm_commons_1.Logger.log(`Install transport (${context.runtime.installData.transport.trkorr}) already exists, won't create a new one.`, true);
39
38
  trm_commons_1.Logger.loading(`Updating install transport...`);
@@ -74,6 +73,14 @@ exports.generateInstallTransport = {
74
73
  };
75
74
  }));
76
75
  }
76
+ var trObjs = yield context.runtime.installData.transport.getE071();
77
+ const tasks = yield context.runtime.installData.transport.getTasks();
78
+ for (const task of tasks) {
79
+ trObjs = trObjs.concat(yield task.getE071());
80
+ }
81
+ trObjs.forEach(o => {
82
+ tadirObjects = tadirObjects.filter(k => !(k.pgmid === o.pgmid && k.object === o.object && k.objName === o.objName));
83
+ });
77
84
  for (const tadir of tadirObjects) {
78
85
  try {
79
86
  try {
@@ -42,7 +42,9 @@ exports.importCustTransport = {
42
42
  });
43
43
  yield context.runtime.packageTransports.cust.instance.deleteFromTms(systemConnector_1.SystemConnector.getDest());
44
44
  trm_commons_1.Logger.loading(`Importing ${context.runtime.packageTransports.cust.binaries.trkorr}`, true);
45
+ trm_commons_1.Logger.setPrefix(`(Customizing) `);
45
46
  yield context.runtime.packageTransports.cust.instance.import(importTimeout);
47
+ trm_commons_1.Logger.removePrefix();
46
48
  trm_commons_1.Logger.success(`Transport ${context.runtime.packageTransports.cust.binaries.trkorr} imported`, true);
47
49
  }),
48
50
  revert: (context) => __awaiter(void 0, void 0, void 0, function* () {
@@ -38,7 +38,9 @@ exports.importDevcTransport = {
38
38
  });
39
39
  yield context.runtime.packageTransports.devc.instance.deleteFromTms(systemConnector_1.SystemConnector.getDest());
40
40
  trm_commons_1.Logger.loading(`Importing ${context.runtime.packageTransports.devc.binaries.trkorr}`, true);
41
+ trm_commons_1.Logger.setPrefix(`(SAP Package) `);
41
42
  yield context.runtime.packageTransports.devc.instance.import(importTimeout);
43
+ trm_commons_1.Logger.removePrefix();
42
44
  trm_commons_1.Logger.success(`Transport ${context.runtime.packageTransports.devc.binaries.trkorr} imported`, true);
43
45
  trm_commons_1.Logger.loading(`Finalizing import...`);
44
46
  if (rootDevclass && rootDevclass.parentcl) {
@@ -42,7 +42,9 @@ exports.importLangTransport = {
42
42
  });
43
43
  yield context.runtime.packageTransports.lang.instance.deleteFromTms(systemConnector_1.SystemConnector.getDest());
44
44
  trm_commons_1.Logger.loading(`Importing ${context.runtime.packageTransports.lang.binaries.trkorr}`, true);
45
+ trm_commons_1.Logger.setPrefix(`(Translations) `);
45
46
  yield context.runtime.packageTransports.lang.instance.import(importTimeout);
47
+ trm_commons_1.Logger.removePrefix();
46
48
  trm_commons_1.Logger.success(`Transport ${context.runtime.packageTransports.lang.binaries.trkorr} imported`, true);
47
49
  }),
48
50
  revert: (context) => __awaiter(void 0, void 0, void 0, function* () {
@@ -34,7 +34,9 @@ exports.importTadirTransport = {
34
34
  yield context.runtime.packageTransports.tadir.instance.deleteFromTms(systemConnector_1.SystemConnector.getDest());
35
35
  }
36
36
  trm_commons_1.Logger.loading(`Importing ${context.runtime.packageTransports.tadir.binaries.trkorr}`, true);
37
+ trm_commons_1.Logger.setPrefix(`(Workbench) `);
37
38
  yield context.runtime.packageTransports.tadir.instance.import(importTimeout);
39
+ trm_commons_1.Logger.removePrefix();
38
40
  trm_commons_1.Logger.success(`Transport ${context.runtime.packageTransports.tadir.binaries.trkorr} imported`, true);
39
41
  trm_commons_1.Logger.loading(`Finalizing import...`);
40
42
  for (const tadir of context.runtime.packageTransportsData.tadir) {
@@ -17,6 +17,7 @@ const sammarksworkflow_1 = __importDefault(require("@simonegaffurini/sammarkswor
17
17
  const util_1 = require("util");
18
18
  const trm_commons_1 = require("trm-commons");
19
19
  const init_1 = require("./init");
20
+ const __1 = require("..");
20
21
  const setSystemPackages_1 = require("../commons/setSystemPackages");
21
22
  const checkAlreadyInstalled_1 = require("./checkAlreadyInstalled");
22
23
  const checkIntegrity_1 = require("./checkIntegrity");
@@ -41,11 +42,13 @@ const refreshTmsTxt_1 = require("./refreshTmsTxt");
41
42
  const migrate_1 = require("./migrate");
42
43
  const executePostActivities_1 = require("./executePostActivities");
43
44
  const setTrmServerUpgradeService_1 = require("./setTrmServerUpgradeService");
45
+ const commit_1 = require("./commit");
44
46
  ;
45
47
  const WORKFLOW_NAME = 'install';
46
48
  function install(inputData) {
47
49
  return __awaiter(this, void 0, void 0, function* () {
48
50
  const workflow = [
51
+ __1.checkServerAuth,
49
52
  init_1.init,
50
53
  setSystemPackages_1.setSystemPackages,
51
54
  setTrmServerUpgradeService_1.setTrmServerUpgradeService,
@@ -70,6 +73,7 @@ function install(inputData) {
70
73
  refreshTmsTxt_1.refreshTmsTxt,
71
74
  setPackageIntegrity_1.setPackageIntegrity,
72
75
  generateInstallTransport_1.generateInstallTransport,
76
+ commit_1.commit,
73
77
  executePostActivities_1.executePostActivities
74
78
  ];
75
79
  trm_commons_1.Logger.log(`Ready to execute workflow ${WORKFLOW_NAME}, input data: ${(0, util_1.inspect)(inputData, { breakLength: Infinity, compact: true })}`, true);
@@ -31,13 +31,14 @@ exports.getSourceCode = {
31
31
  if ((0, minimatch_1.minimatch)(abapgitObject.fullPath, pattern, { matchBase: true })) {
32
32
  if (!context.runtime.abapGitData.sourceCode.ignoredObjects.find(k => k.pgmid === o.pgmid && k.object === o.object && k.objName === o.objName)) {
33
33
  context.runtime.abapGitData.sourceCode.ignoredObjects.push(o);
34
+ trm_commons_1.Logger.log(`Excluding ${o.pgmid} ${o.object} ${o.objName} (.abapgit ignore)`, true);
34
35
  }
35
36
  }
36
37
  });
37
38
  }
38
39
  });
39
40
  if (ignoredPatterns.length > 0) {
40
- trm_commons_1.Logger.info(`Excluding ${context.runtime.abapGitData.sourceCode.ignoredObjects.length} object(s) as configured in .abapgit.xml:\n${ignoredPatterns.join('\n ')}`);
41
+ trm_commons_1.Logger.info(`Excluding ${context.runtime.abapGitData.sourceCode.ignoredObjects.length} object(s) as configured in .abapgit.xml: ${ignoredPatterns.join(', ')}`);
41
42
  }
42
43
  }
43
44
  catch (e) {
@@ -37,6 +37,7 @@ const WORKFLOW_NAME = 'publish';
37
37
  function publish(inputData) {
38
38
  return __awaiter(this, void 0, void 0, function* () {
39
39
  const workflow = [
40
+ __1.checkServerAuth,
40
41
  init_1.init,
41
42
  __1.setSystemPackages,
42
43
  setTransportTarget_1.setTransportTarget,
@@ -1,7 +1,7 @@
1
1
  import * as components from "./components";
2
2
  import * as struct from "./struct";
3
3
  import { IClient } from "./IClient";
4
- import { Login, SapMessage } from ".";
4
+ import { Login, RESTClientError, SapMessage } from ".";
5
5
  export declare class RESTClient implements IClient {
6
6
  endpoint: string;
7
7
  rfcdest: components.RFCDEST;
@@ -65,5 +65,5 @@ export declare class RESTClient implements IClient {
65
65
  execute?: boolean;
66
66
  }>;
67
67
  getInstalledPackagesBackend(): Promise<struct.ZTY_TRM_PACKAGE[]>;
68
- regenProg(prog: components.PROGNAME): Promise<void>;
68
+ isServerApisAllowed(): Promise<true | RESTClientError>;
69
69
  }
@@ -650,16 +650,21 @@ class RESTClient {
650
650
  transport: {
651
651
  trkorr: o.transport ? o.transport.trkorr : undefined,
652
652
  migration: o.transport ? o.transport.migration === 'X' : undefined
653
- }
653
+ },
654
+ trkorr: o.trkorr
654
655
  };
655
656
  });
656
657
  });
657
658
  }
658
- regenProg(prog) {
659
+ isServerApisAllowed() {
659
660
  return __awaiter(this, void 0, void 0, function* () {
660
- yield this._axiosInstance.post('/regen_prog', {
661
- progname: prog
662
- });
661
+ try {
662
+ yield this._axiosInstance.post('/check_auth');
663
+ return true;
664
+ }
665
+ catch (e) {
666
+ return e;
667
+ }
663
668
  });
664
669
  }
665
670
  }
@@ -1,7 +1,7 @@
1
1
  import * as components from "./components";
2
2
  import * as struct from "./struct";
3
3
  import { IClient } from "./IClient";
4
- import { SapMessage } from ".";
4
+ import { RFCClientError, SapMessage } from ".";
5
5
  export declare class RFCClient implements IClient {
6
6
  private _rfcClientArgs;
7
7
  private _cLangu;
@@ -10,6 +10,7 @@ export declare class RFCClient implements IClient {
10
10
  constructor(_rfcClientArgs: any, _cLangu: string, traceDir?: string);
11
11
  private getRfcClient;
12
12
  open(): Promise<void>;
13
+ close(): Promise<void>;
13
14
  checkConnection(): Promise<boolean>;
14
15
  private _call;
15
16
  private _getMessage;
@@ -64,5 +65,5 @@ export declare class RFCClient implements IClient {
64
65
  execute?: boolean;
65
66
  }>;
66
67
  getInstalledPackagesBackend(): Promise<struct.ZTY_TRM_PACKAGE[]>;
67
- regenProg(prog: components.PROGNAME): Promise<void>;
68
+ isServerApisAllowed(): Promise<true | RFCClientError>;
68
69
  }
@@ -93,6 +93,18 @@ class RFCClient {
93
93
  }
94
94
  });
95
95
  }
96
+ close() {
97
+ return __awaiter(this, void 0, void 0, function* () {
98
+ try {
99
+ trm_commons_1.Logger.loading(`Closing RFC connection`, true);
100
+ yield (yield this.getRfcClient()).close();
101
+ trm_commons_1.Logger.success(`RFC closed`, true);
102
+ }
103
+ catch (e) {
104
+ throw new _1.RFCClientError("ZNO_CLOSE", null, e, e.message);
105
+ }
106
+ });
107
+ }
96
108
  checkConnection() {
97
109
  return __awaiter(this, void 0, void 0, function* () {
98
110
  if (!this._aliveCheck) {
@@ -107,8 +119,8 @@ class RFCClient {
107
119
  return (yield this.getRfcClient()).alive;
108
120
  });
109
121
  }
110
- _call(fm, arg, timeout, noErrorParsing) {
111
- return __awaiter(this, void 0, void 0, function* () {
122
+ _call(fm_1, arg_1, timeout_1, noErrorParsing_1) {
123
+ return __awaiter(this, arguments, void 0, function* (fm, arg, timeout, noErrorParsing, retryCount = 0) {
112
124
  var argNormalized;
113
125
  if (arg) {
114
126
  var emptyKeys = [];
@@ -139,6 +151,13 @@ class RFCClient {
139
151
  return responseNormalized;
140
152
  }
141
153
  catch (e) {
154
+ if (e.message === 'device or resource busy: device or resource busy' && retryCount <= 10) {
155
+ trm_commons_1.Logger.log('device or resource busy, retrying', true);
156
+ yield new Promise(res => {
157
+ setTimeout(res, 1000);
158
+ });
159
+ return this._call(fm, arg, timeout, noErrorParsing, retryCount + 1);
160
+ }
142
161
  if (noErrorParsing) {
143
162
  throw e;
144
163
  }
@@ -636,16 +655,21 @@ class RFCClient {
636
655
  trkorr: o['TRANSPORT']['TRKORR']['_text'],
637
656
  migration: o['TRANSPORT']['MIGRATION']['_text'] === 'X',
638
657
  },
639
- tdevc: (0, commons_1.normalize)(flatTdevc)
658
+ tdevc: (0, commons_1.normalize)(flatTdevc),
659
+ trkorr: o['TRKORR']['_text']
640
660
  };
641
661
  });
642
662
  });
643
663
  }
644
- regenProg(prog) {
664
+ isServerApisAllowed() {
645
665
  return __awaiter(this, void 0, void 0, function* () {
646
- yield this._call("ZTRM_REGEN_PROG", {
647
- iv_progname: prog
648
- });
666
+ try {
667
+ yield this._call("ZTRM_CHECK_AUTH");
668
+ return true;
669
+ }
670
+ catch (e) {
671
+ return e;
672
+ }
649
673
  });
650
674
  }
651
675
  }
@@ -10,4 +10,5 @@ export type ZTY_TRM_PACKAGE = {
10
10
  trkorr?: TRKORR;
11
11
  migration?: boolean;
12
12
  };
13
+ trkorr?: TRKORR;
13
14
  };
@@ -12,5 +12,4 @@ export declare class TrmServerUpgrade {
12
12
  executePostActivities(): boolean;
13
13
  removeComments(): boolean;
14
14
  refreshTmsTxt(): boolean;
15
- getInstalledPackagesBackend(): boolean;
16
15
  }
@@ -77,13 +77,5 @@ class TrmServerUpgrade {
77
77
  return !((0, semver_1.lt)(this.currentVersion, '2.2.0') && (0, semver_1.gte)(this.installVersion, '2.2.0'));
78
78
  }
79
79
  }
80
- getInstalledPackagesBackend() {
81
- if (this.dummy) {
82
- return true;
83
- }
84
- else {
85
- return !((0, semver_1.lt)(this.currentVersion, '3.0.0') && (0, semver_1.gte)(this.installVersion, '3.0.0'));
86
- }
87
- }
88
80
  }
89
81
  exports.TrmServerUpgrade = TrmServerUpgrade;
@@ -65,7 +65,6 @@ class PostActivity {
65
65
  if (description) {
66
66
  trm_commons_1.Logger.loading(`Post activity: ${description}`, silent);
67
67
  }
68
- yield systemConnector_1.SystemConnector.regenProg('SAPLZTRM');
69
68
  const pre = yield systemConnector_1.SystemConnector.executePostActivity(data, true);
70
69
  if (pre.messages) {
71
70
  yield this.printMessages(pre.messages, silent);
@@ -1,4 +1,4 @@
1
- import { SapMessage } from "../client";
1
+ import { ClientError, SapMessage } from "../client";
2
2
  import * as components from "../client/components";
3
3
  import * as struct from "../client/struct";
4
4
  import { ISystemConnectorBase } from "./ISystemConnectorBase";
@@ -58,5 +58,5 @@ export interface ISystemConnector extends ISystemConnectorBase {
58
58
  messages: struct.SYMSG[];
59
59
  execute?: boolean;
60
60
  }>;
61
- regenProg: (prog: components.PROGNAME) => Promise<void>;
61
+ isServerApisAllowed: () => Promise<true | ClientError>;
62
62
  }
@@ -6,7 +6,7 @@ import * as components from "../client/components";
6
6
  import * as struct from "../client/struct";
7
7
  import { SystemConnectorBase } from "./SystemConnectorBase";
8
8
  import { RESTConnection } from "./RESTConnection";
9
- import { SapMessage } from "../client";
9
+ import { ClientError, SapMessage } from "../client";
10
10
  import { SystemConnectorSupportedBulk } from "./SystemConnectorSupportedBulk";
11
11
  export declare class RESTSystemConnector extends SystemConnectorBase implements ISystemConnector {
12
12
  private _connection;
@@ -15,6 +15,7 @@ export declare class RESTSystemConnector extends SystemConnectorBase implements
15
15
  private _lang;
16
16
  private _user;
17
17
  private _client;
18
+ private _isServerApisAllowed;
18
19
  supportedBulk: SystemConnectorSupportedBulk;
19
20
  constructor(_connection: RESTConnection, _login: Login);
20
21
  protected getSysname(): string;
@@ -77,5 +78,5 @@ export declare class RESTSystemConnector extends SystemConnectorBase implements
77
78
  messages: struct.SYMSG[];
78
79
  execute?: boolean;
79
80
  }>;
80
- regenProg(prog: components.PROGNAME): Promise<void>;
81
+ isServerApisAllowed(): Promise<true | ClientError>;
81
82
  }
@@ -319,9 +319,12 @@ class RESTSystemConnector extends SystemConnectorBase_1.SystemConnectorBase {
319
319
  return this._client.executePostActivity(data, pre);
320
320
  });
321
321
  }
322
- regenProg(prog) {
322
+ isServerApisAllowed() {
323
323
  return __awaiter(this, void 0, void 0, function* () {
324
- return this._client.regenProg(prog);
324
+ if (this._isServerApisAllowed === undefined) {
325
+ this._isServerApisAllowed = yield this._client.isServerApisAllowed();
326
+ }
327
+ return this._isServerApisAllowed;
325
328
  });
326
329
  }
327
330
  }
@@ -1,4 +1,4 @@
1
- import { SapMessage } from "../client";
1
+ import { ClientError, SapMessage } from "../client";
2
2
  import { DEVCLASS } from "../client/components";
3
3
  import { TADIR } from "../client/struct";
4
4
  import { RFCConnection } from "./RFCConnection";
@@ -15,6 +15,7 @@ export declare class RFCSystemConnector extends SystemConnectorBase implements I
15
15
  private _lang;
16
16
  private _user;
17
17
  private _client;
18
+ private _isServerApisAllowed;
18
19
  supportedBulk: SystemConnectorSupportedBulk;
19
20
  constructor(_connection: RFCConnection, _login: Login, _traceDir?: string);
20
21
  protected getSysname(): string;
@@ -30,7 +31,8 @@ export declare class RFCSystemConnector extends SystemConnectorBase implements I
30
31
  protected getInstalledPackagesBackend(): Promise<struct.ZTY_TRM_PACKAGE[]>;
31
32
  getConnectionData(): RFCConnection;
32
33
  getLogonUser(): string;
33
- connect(): Promise<void>;
34
+ connect(silent?: boolean): Promise<void>;
35
+ close(): Promise<void>;
34
36
  checkConnection(): Promise<boolean>;
35
37
  ping(): Promise<string>;
36
38
  getFileSystem(): Promise<struct.FILESYS>;
@@ -75,5 +77,5 @@ export declare class RFCSystemConnector extends SystemConnectorBase implements I
75
77
  messages: struct.SYMSG[];
76
78
  execute?: boolean;
77
79
  }>;
78
- regenProg(prog: components.PROGNAME): Promise<void>;
80
+ isServerApisAllowed(): Promise<true | ClientError>;
79
81
  }
@@ -88,18 +88,23 @@ class RFCSystemConnector extends SystemConnectorBase_1.SystemConnectorBase {
88
88
  return this._user;
89
89
  }
90
90
  connect() {
91
- return __awaiter(this, void 0, void 0, function* () {
92
- trm_commons_1.Logger.loading(`Connecting to ${this.getDest()}...`);
91
+ return __awaiter(this, arguments, void 0, function* (silent = false) {
92
+ trm_commons_1.Logger.loading(`Connecting to ${this.getDest()}...`, silent);
93
93
  try {
94
94
  yield this._client.open();
95
- trm_commons_1.Logger.success(`Connected to ${this.getDest()} as ${this._user}.`, false);
95
+ trm_commons_1.Logger.success(`Connected to ${this.getDest()} as ${this._user}.`, silent);
96
96
  }
97
97
  catch (e) {
98
- trm_commons_1.Logger.error(`Connection to ${this.getDest()} as ${this._user} failed.`, false);
98
+ trm_commons_1.Logger.error(`Connection to ${this.getDest()} as ${this._user} failed.`, silent);
99
99
  throw e;
100
100
  }
101
101
  });
102
102
  }
103
+ close() {
104
+ return __awaiter(this, void 0, void 0, function* () {
105
+ yield this._client.close();
106
+ });
107
+ }
103
108
  checkConnection() {
104
109
  return __awaiter(this, void 0, void 0, function* () {
105
110
  return this._client.checkConnection();
@@ -290,9 +295,12 @@ class RFCSystemConnector extends SystemConnectorBase_1.SystemConnectorBase {
290
295
  return this._client.executePostActivity(data, pre);
291
296
  });
292
297
  }
293
- regenProg(prog) {
298
+ isServerApisAllowed() {
294
299
  return __awaiter(this, void 0, void 0, function* () {
295
- return this._client.regenProg(prog);
300
+ if (this._isServerApisAllowed === undefined) {
301
+ this._isServerApisAllowed = yield this._client.isServerApisAllowed();
302
+ }
303
+ return this._isServerApisAllowed;
296
304
  });
297
305
  }
298
306
  }
@@ -1,4 +1,4 @@
1
- import { TRKORR, DEVCLASS, TDEVC, TMSCSYS, TADIR, PGMID, TROBJTYPE, SOBJ_NAME } from "../client";
1
+ import { TRKORR, DEVCLASS, TDEVC, TMSCSYS, TADIR, PGMID, TROBJTYPE, SOBJ_NAME, ClientError } from "../client";
2
2
  import { AbstractRegistry } from "../registry";
3
3
  import { Transport } from "../transport";
4
4
  import { TrmPackage } from "../trmPackage";
@@ -91,5 +91,5 @@ export declare namespace SystemConnector {
91
91
  execute?: boolean;
92
92
  }>;
93
93
  function readClassDescriptions(clsname: components.SEOCLSNAME): Promise<struct.SEOCLASSTX[]>;
94
- function regenProg(prog: components.PROGNAME): Promise<void>;
94
+ function isServerApisAllowed(): Promise<true | ClientError>;
95
95
  }
@@ -520,11 +520,11 @@ var SystemConnector;
520
520
  });
521
521
  }
522
522
  SystemConnector.readClassDescriptions = readClassDescriptions;
523
- function regenProg(prog) {
523
+ function isServerApisAllowed() {
524
524
  return __awaiter(this, void 0, void 0, function* () {
525
525
  yield checkSystemConnector();
526
- return SystemConnector.systemConnector.regenProg(prog);
526
+ return SystemConnector.systemConnector.isServerApisAllowed();
527
527
  });
528
528
  }
529
- SystemConnector.regenProg = regenProg;
529
+ SystemConnector.isServerApisAllowed = isServerApisAllowed;
530
530
  })(SystemConnector || (exports.SystemConnector = SystemConnector = {}));
@@ -17,7 +17,6 @@ const transport_1 = require("../transport");
17
17
  const trmPackage_1 = require("../trmPackage");
18
18
  const registry_1 = require("../registry");
19
19
  const node_r3trans_1 = require("node-r3trans");
20
- const commons_1 = require("../commons");
21
20
  exports.TRM_SERVER_PACKAGE_NAME = 'trm-server';
22
21
  exports.TRM_SERVER_INTF = 'ZIF_TRM';
23
22
  exports.TRM_REST_PACKAGE_NAME = 'trm-rest';
@@ -179,57 +178,60 @@ class SystemConnectorBase {
179
178
  }
180
179
  trm_commons_1.Logger.log(`Include sources: ${includeSoruces}`, true);
181
180
  const aSourceTrkorr = includeSoruces ? (yield this.getSourceTrkorr(refresh)) : [];
182
- if (commons_1.TrmServerUpgrade.getInstance().getInstalledPackagesBackend()) {
183
- const serverExists = yield this.readTable('TADIR', [{ fieldName: 'OBJ_NAME' }], `PGMID EQ 'R3TR' AND OBJECT EQ 'INTF' AND OBJ_NAME EQ '${exports.TRM_SERVER_INTF}'`);
184
- if (serverExists.length === 1) {
185
- trm_commons_1.Logger.log(`INTF ${exports.TRM_SERVER_INTF} exists`, true);
186
- try {
187
- var installedPackagesBackend = yield this.getInstalledPackagesBackend();
188
- if (!includeSoruces) {
189
- installedPackagesBackend = installedPackagesBackend.filter(o => !aSourceTrkorr.includes(o.transport.trkorr));
190
- }
191
- if (!includeLocals) {
192
- installedPackagesBackend = installedPackagesBackend.filter(o => o.registry !== registry_1.LOCAL_RESERVED_KEYWORD);
181
+ const serverExists = yield this.readTable('TADIR', [{ fieldName: 'OBJ_NAME' }], `PGMID EQ 'R3TR' AND OBJECT EQ 'INTF' AND OBJ_NAME EQ '${exports.TRM_SERVER_INTF}'`);
182
+ if (serverExists.length === 1) {
183
+ trm_commons_1.Logger.log(`INTF ${exports.TRM_SERVER_INTF} exists`, true);
184
+ try {
185
+ var installedPackagesBackend = yield this.getInstalledPackagesBackend();
186
+ if (!includeSoruces) {
187
+ installedPackagesBackend = installedPackagesBackend.filter(o => !aSourceTrkorr.includes(o.transport.trkorr));
188
+ }
189
+ if (!includeLocals) {
190
+ installedPackagesBackend = installedPackagesBackend.filter(o => o.registry !== registry_1.LOCAL_RESERVED_KEYWORD);
191
+ }
192
+ for (const o of installedPackagesBackend) {
193
+ const transport = o.transport.trkorr ? new transport_1.Transport(o.transport.trkorr, null, o.transport.migration) : null;
194
+ const manifest = manifest_1.Manifest.fromAbapXml(o.manifest);
195
+ if (transport) {
196
+ manifest.setLinkedTransport(transport);
193
197
  }
194
- for (const o of installedPackagesBackend) {
195
- const transport = o.transport.trkorr ? new transport_1.Transport(o.transport.trkorr, null, o.transport.migration) : null;
196
- const manifest = manifest_1.Manifest.fromAbapXml(o.manifest);
197
- if (transport) {
198
- manifest.setLinkedTransport(transport);
199
- }
200
- const trmPackage = new trmPackage_1.TrmPackage(o.name, registry_1.RegistryProvider.getRegistry(o.registry), manifest);
201
- if (transport) {
198
+ const trmPackage = new trmPackage_1.TrmPackage(o.name, registry_1.RegistryProvider.getRegistry(o.registry), manifest);
199
+ if (transport) {
200
+ try {
202
201
  trmPackage.setDevclass(yield transport.getDevclass(o.tdevc));
203
202
  }
204
- else {
205
- if (o.tdevc.length === 1) {
206
- trmPackage.setDevclass(o.tdevc[0].devclass);
207
- }
203
+ catch (x) {
208
204
  }
209
- trmPackages.push(trmPackage);
210
205
  }
211
- fromBackend = true;
212
- }
213
- catch (e) {
214
- trmPackages = [];
215
- trm_commons_1.Logger.error(e.toString(), true);
206
+ else {
207
+ if (o.tdevc.length === 1) {
208
+ trmPackage.setDevclass(o.tdevc[0].devclass);
209
+ }
210
+ }
211
+ trmPackage.setWbTransport(o.trkorr ? new transport_1.Transport(o.trkorr) : null);
212
+ trmPackages.push(trmPackage);
216
213
  }
214
+ fromBackend = true;
217
215
  }
218
- if (fromBackend) {
219
- trm_commons_1.Logger.log(`Packages were fetched from backend`, true);
220
- return trmPackages;
221
- }
222
- else {
223
- trm_commons_1.Logger.log(`Packages weren't fetched from backend, continue`, true);
216
+ catch (e) {
217
+ trmPackages = [];
218
+ trm_commons_1.Logger.error(e.toString(), true);
224
219
  }
225
220
  }
221
+ if (fromBackend) {
222
+ trm_commons_1.Logger.log(`Packages were fetched from backend`, true);
223
+ return trmPackages;
224
+ }
225
+ else {
226
+ trm_commons_1.Logger.log(`Packages weren't fetched from backend, continue`, true);
227
+ }
226
228
  var packageTransports = [];
227
229
  trm_commons_1.Logger.log(`Ready to read installed packages`, true);
228
230
  trm_commons_1.Logger.log(`Source trkorr ${JSON.stringify(aSourceTrkorr)}`, true);
229
231
  var aSkipTrkorr = yield this.getIgnoredTrkorr();
230
232
  trm_commons_1.Logger.log(`Ignored trkorr ${JSON.stringify(aSkipTrkorr)}`, true);
231
233
  var aMigrationTrkorr;
232
- var aActualTrkorr = (yield this.readTable('E071', [{ fieldName: 'TRKORR' }], `PGMID EQ '*' AND OBJECT EQ '${transport_1.COMMENT_OBJ}'`)).map(o => o.trkorr);
234
+ var aActualTrkorr = (yield this.readTable('E071', [{ fieldName: 'TRKORR' }], `PGMID EQ '*' AND OBJECT EQ '${transport_1.COMMENT_OBJ}' AND TRKORR EQ 'RSTK906391'`)).map(o => o.trkorr);
233
235
  aActualTrkorr = Array.from(new Set(aActualTrkorr));
234
236
  try {
235
237
  aMigrationTrkorr = (yield this.readTable('ZTRM_E070', [{ fieldName: 'TRM_TROKRR' }])).map(o => o.trmTrokrr);
@@ -591,10 +591,10 @@ class Transport {
591
591
  }
592
592
  }
593
593
  if (!inQueue) {
594
- throw new Error(`Transport request not found in queue, timed out after ${inQueueAttempts + 1} attempts`);
594
+ throw new Error(`${this.trkorr} not found in queue, timed out after ${inQueueAttempts + 1} attempts`);
595
595
  }
596
596
  else {
597
- trm_commons_1.Logger.success(`Transport ${this.trkorr} ${sLog}.`, skipLog);
597
+ trm_commons_1.Logger.success(`${this.trkorr} ${sLog}.`, skipLog);
598
598
  }
599
599
  }
600
600
  else {
@@ -3,6 +3,7 @@ import { AbstractRegistry } from "../registry";
3
3
  import { TrmArtifact } from "./TrmArtifact";
4
4
  import { DEVCLASS } from "../client";
5
5
  import { R3transOptions } from "node-r3trans";
6
+ import { Transport } from "../transport";
6
7
  export declare const DEFAULT_VERSION: string;
7
8
  export declare class TrmPackage {
8
9
  packageName: string;
@@ -13,9 +14,12 @@ export declare class TrmPackage {
13
14
  private _remoteArtifacts;
14
15
  private _remoteContent;
15
16
  private _devclass;
17
+ private _wbTransport;
16
18
  constructor(packageName: string, registry: AbstractRegistry, manifest?: Manifest);
17
19
  setDevclass(devclass: DEVCLASS): TrmPackage;
18
20
  getDevclass(): DEVCLASS;
21
+ setWbTransport(transport: Transport): TrmPackage;
22
+ getWbTransport(): Promise<Transport>;
19
23
  exists(version?: string): Promise<boolean>;
20
24
  canPublishReleases(): Promise<{
21
25
  canPublishReleases: boolean;
@@ -46,6 +46,7 @@ exports.TrmPackage = exports.DEFAULT_VERSION = void 0;
46
46
  const semver = __importStar(require("semver"));
47
47
  const trm_commons_1 = require("trm-commons");
48
48
  const manifest_1 = require("../manifest");
49
+ const systemConnector_1 = require("../systemConnector");
49
50
  exports.DEFAULT_VERSION = "1.0.0";
50
51
  class TrmPackage {
51
52
  constructor(packageName, registry, manifest) {
@@ -62,6 +63,18 @@ class TrmPackage {
62
63
  getDevclass() {
63
64
  return this._devclass;
64
65
  }
66
+ setWbTransport(transport) {
67
+ this._wbTransport = transport;
68
+ return this;
69
+ }
70
+ getWbTransport() {
71
+ return __awaiter(this, void 0, void 0, function* () {
72
+ if (this._wbTransport === undefined) {
73
+ this._wbTransport = yield systemConnector_1.SystemConnector.getPackageWorkbenchTransport(this);
74
+ }
75
+ return this._wbTransport;
76
+ });
77
+ }
65
78
  exists() {
66
79
  return __awaiter(this, arguments, void 0, function* (version = 'latest') {
67
80
  return (yield this.registry.packageExists(this.packageName, version));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trm-core",
3
- "version": "6.7.2",
3
+ "version": "6.9.0",
4
4
  "description": "TRM (Transport Request Manager) Core",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "license": "MIT",
36
36
  "trmDependencies": {
37
- "trm-server": "^3.0.0"
37
+ "trm-server": "^3.1.0"
38
38
  },
39
39
  "dependencies": {
40
40
  "@esm2cjs/normalize-url": "^8.0.0",