@mcp-abap-adt/adt-clients 1.2.1 → 1.3.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.
package/README.md CHANGED
@@ -351,28 +351,6 @@ await client.getBehaviorImplementation().create(
351
351
  );
352
352
  ```
353
353
 
354
- ### Resolving Transport Requests
355
-
356
- Use `resolveTransport` before create/update to determine the correct transport request.
357
- This prevents ABAP dumps when an object is already assigned to a different TR.
358
-
359
- ```typescript
360
- import { resolveTransport } from '@mcp-abap-adt/adt-clients';
361
-
362
- const result = await resolveTransport(connection, {
363
- pgmid: 'R3TR',
364
- objectType: 'CLAS',
365
- objectName: 'ZCL_MY_CLASS',
366
- devclass: 'ZPACKAGE',
367
- uri: '/sap/bc/adt/oo/classes/zcl_my_class',
368
- operation: 'U',
369
- });
370
-
371
- // result.lockedInTransport — TR the object is already in
372
- // result.availableTransports — available TRs for the package
373
- // result.isLocal — true for $TMP (no transport needed)
374
- ```
375
-
376
354
  ## Developer Tools
377
355
 
378
356
  ### ADT Discovery Script
@@ -1 +1 @@
1
- {"version":3,"file":"AdtProgram.d.ts","sourceRoot":"","sources":["../../../src/core/program/AdtProgram.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,OAAO,EACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWpD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7D,qBAAa,UAAW,YAAW,UAAU,CAAC,cAAc,EAAE,aAAa,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU;IAClC,SAAgB,UAAU,EAAE,MAAM,CAAa;gBAEnC,UAAU,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,OAAO;IAKzD;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAqCvE;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,aAAa,CAAC;IA2DzB;;OAEG;IACG,IAAI,CACR,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,EAC/B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAwBrC;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,aAAa,CAAC;IAgCzB;;;;OAIG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,aAAa,CAAC;IA4LzB;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAsCrE;;;OAGG;IACG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAkCvE;;OAEG;IACG,KAAK,CACT,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC;IA2BzB;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GACtC,OAAO,CAAC,aAAa,CAAC;IAsCzB;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAS5D;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;CAgB1B"}
1
+ {"version":3,"file":"AdtProgram.d.ts","sourceRoot":"","sources":["../../../src/core/program/AdtProgram.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,OAAO,EACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWpD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7D,qBAAa,UAAW,YAAW,UAAU,CAAC,cAAc,EAAE,aAAa,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU;IAClC,SAAgB,UAAU,EAAE,MAAM,CAAa;gBAEnC,UAAU,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,OAAO;IAKzD;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAsCvE;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,aAAa,CAAC;IA2DzB;;OAEG;IACG,IAAI,CACR,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,EAC/B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAwBrC;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,aAAa,CAAC;IAgCzB;;;;OAIG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,aAAa,CAAC;IA4LzB;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAsCrE;;;OAGG;IACG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAkCvE;;OAEG;IACG,KAAK,CACT,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC;IA2BzB;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GACtC,OAAO,CAAC,aAAa,CAAC;IAsCzB;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAS5D;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;CAgB1B"}
@@ -45,7 +45,7 @@ class AdtProgram {
45
45
  throw new Error('Program name is required for validation');
46
46
  }
47
47
  try {
48
- const validationResponse = await (0, validation_1.validateProgramName)(this.connection, config.programName, config.description);
48
+ const validationResponse = await (0, validation_1.validateProgramName)(this.connection, config.programName, config.description, config.packageName);
49
49
  return {
50
50
  validationResponse: validationResponse,
51
51
  errors: [],
@@ -13,5 +13,5 @@ import type { IAdtResponse as AxiosResponse, IAbapConnection } from '@mcp-abap-a
13
13
  * - Success: <CHECK_RESULT>X</CHECK_RESULT>
14
14
  * - Error: <exc:exception> with message about existing object or validation failure
15
15
  */
16
- export declare function validateProgramName(connection: IAbapConnection, programName: string, description?: string): Promise<AxiosResponse>;
16
+ export declare function validateProgramName(connection: IAbapConnection, programName: string, description?: string, packageName?: string): Promise<AxiosResponse>;
17
17
  //# sourceMappingURL=validation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/core/program/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAIlC;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,eAAe,EAC3B,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAqBxB"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/core/program/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAIlC;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,eAAe,EAC3B,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAyBxB"}
@@ -17,13 +17,16 @@ const timeouts_1 = require("../../utils/timeouts");
17
17
  * - Success: <CHECK_RESULT>X</CHECK_RESULT>
18
18
  * - Error: <exc:exception> with message about existing object or validation failure
19
19
  */
20
- async function validateProgramName(connection, programName, description) {
20
+ async function validateProgramName(connection, programName, description, packageName) {
21
21
  const url = `/sap/bc/adt/programs/validation`;
22
22
  const encodedName = (0, internalUtils_1.encodeSapObjectName)(programName);
23
23
  const queryParams = new URLSearchParams({
24
- objtype: 'prog',
25
24
  objname: encodedName,
25
+ objtype: 'PROG/P',
26
26
  });
27
+ if (packageName) {
28
+ queryParams.append('packagename', packageName);
29
+ }
27
30
  if (description) {
28
31
  queryParams.append('description', description);
29
32
  }
@@ -4,8 +4,6 @@
4
4
  import type { IAdtObject } from '@mcp-abap-adt/interfaces';
5
5
  import type { ITransportConfig, ITransportState } from './types';
6
6
  export { AdtRequest } from './AdtRequest';
7
- export type { IResolveTransportParams, IResolveTransportResult, } from './resolveTransport';
8
- export { resolveTransport } from './resolveTransport';
9
7
  export type { ITransportConfig, ITransportState } from './types';
10
8
  export type AdtRequestType = IAdtObject<ITransportConfig, ITransportState>;
11
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/transport/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EACV,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAGjE,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/transport/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAGjE,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC"}
@@ -3,8 +3,6 @@
3
3
  * Transport operations - exports
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.resolveTransport = exports.AdtRequest = void 0;
6
+ exports.AdtRequest = void 0;
7
7
  var AdtRequest_1 = require("./AdtRequest");
8
8
  Object.defineProperty(exports, "AdtRequest", { enumerable: true, get: function () { return AdtRequest_1.AdtRequest; } });
9
- var resolveTransport_1 = require("./resolveTransport");
10
- Object.defineProperty(exports, "resolveTransport", { enumerable: true, get: function () { return resolveTransport_1.resolveTransport; } });
package/dist/index.d.ts CHANGED
@@ -52,8 +52,7 @@ export type { AdtObjectType, AdtSourceObjectType, GetPackageHierarchyOptions, Ge
52
52
  export type { AdtStructureType, IStructureConfig, IStructureState, } from './core/structure';
53
53
  export type { AdtTableType, ITableConfig, ITableState } from './core/table';
54
54
  export type { AdtDdicTableTypeAlias, ITableTypeConfig, ITableTypeState, } from './core/tabletype';
55
- export type { AdtRequestType, IResolveTransportParams, IResolveTransportResult, ITransportConfig, ITransportState, } from './core/transport';
56
- export { resolveTransport } from './core/transport';
55
+ export type { AdtRequestType, ITransportConfig, ITransportState, } from './core/transport';
57
56
  export type { AdtUnitTestType, ICdsUnitTestConfig, ICdsUnitTestState, IUnitTestConfig, IUnitTestState, } from './core/unitTest';
58
57
  export type { AdtViewType, IViewConfig, IViewState } from './core/view';
59
58
  export type { IClassExecuteWithProfilerOptions, IClassExecuteWithProfilingOptions, IClassExecuteWithProfilingResult, IClassExecutionTarget, IClassExecutor, IExecutor, IProgramExecuteWithProfilerOptions, IProgramExecuteWithProfilingOptions, IProgramExecuteWithProfilingResult, IProgramExecutionTarget, IProgramExecutor, } from './executors';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -21,7 +21,7 @@
21
21
  * ```
22
22
  */
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.resolveTransport = exports.AdtServiceBinding = exports.AdtService = exports.DebuggerSessionClient = exports.AdtRuntimeClientExperimental = exports.AdtRuntimeClient = exports.AdtExecutor = exports.AdtClientsWS = exports.AdtClient = exports.BatchRecordingConnection = exports.AdtRuntimeClientBatch = exports.AdtClientBatch = void 0;
24
+ exports.AdtServiceBinding = exports.AdtService = exports.DebuggerSessionClient = exports.AdtRuntimeClientExperimental = exports.AdtRuntimeClient = exports.AdtExecutor = exports.AdtClientsWS = exports.AdtClient = exports.BatchRecordingConnection = exports.AdtRuntimeClientBatch = exports.AdtClientBatch = void 0;
25
25
  var AdtClientBatch_1 = require("./batch/AdtClientBatch");
26
26
  Object.defineProperty(exports, "AdtClientBatch", { enumerable: true, get: function () { return AdtClientBatch_1.AdtClientBatch; } });
27
27
  var AdtRuntimeClientBatch_1 = require("./batch/AdtRuntimeClientBatch");
@@ -43,5 +43,3 @@ Object.defineProperty(exports, "DebuggerSessionClient", { enumerable: true, get:
43
43
  var service_1 = require("./core/service");
44
44
  Object.defineProperty(exports, "AdtService", { enumerable: true, get: function () { return service_1.AdtService; } });
45
45
  Object.defineProperty(exports, "AdtServiceBinding", { enumerable: true, get: function () { return service_1.AdtServiceBinding; } });
46
- var transport_1 = require("./core/transport");
47
- Object.defineProperty(exports, "resolveTransport", { enumerable: true, get: function () { return transport_1.resolveTransport; } });
@@ -15,8 +15,11 @@ export declare function getSystemInformation(connection: IAbapConnection): Promi
15
15
  } | null>;
16
16
  /**
17
17
  * Check if the system is a BTP ABAP Cloud Environment
18
- * Returns true if the systeminformation endpoint is available (cloud system)
19
- * Returns false if the endpoint doesn't exist (on-premise system)
18
+ *
19
+ * Detection strategy (ordered by reliability):
20
+ * 1. URL pattern — cloud systems use *.hana.ondemand.com or *.abap.*.hana.ondemand.com
21
+ * 2. HTTP with explicit port — almost always on-premise
22
+ * 3. Fallback to systeminformation endpoint check
20
23
  */
21
24
  export declare function isCloudEnvironment(connection: IAbapConnection): Promise<boolean>;
22
25
  //# sourceMappingURL=systemInfo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"systemInfo.d.ts","sourceRoot":"","sources":["../../src/utils/systemInfo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC;IACT,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,IAAI,CAAC,CAgDR;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC,OAAO,CAAC,CAGlB"}
1
+ {"version":3,"file":"systemInfo.d.ts","sourceRoot":"","sources":["../../src/utils/systemInfo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC;IACT,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,IAAI,CAAC,CAgDR;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC,OAAO,CAAC,CAyBlB"}
@@ -57,10 +57,36 @@ async function getSystemInformation(connection) {
57
57
  }
58
58
  /**
59
59
  * Check if the system is a BTP ABAP Cloud Environment
60
- * Returns true if the systeminformation endpoint is available (cloud system)
61
- * Returns false if the endpoint doesn't exist (on-premise system)
60
+ *
61
+ * Detection strategy (ordered by reliability):
62
+ * 1. URL pattern — cloud systems use *.hana.ondemand.com or *.abap.*.hana.ondemand.com
63
+ * 2. HTTP with explicit port — almost always on-premise
64
+ * 3. Fallback to systeminformation endpoint check
62
65
  */
63
66
  async function isCloudEnvironment(connection) {
67
+ try {
68
+ const baseUrl = await connection.getBaseUrl();
69
+ if (baseUrl) {
70
+ // Cloud systems use specific domain patterns
71
+ if (/\.hana\.ondemand\.com/i.test(baseUrl)) {
72
+ return true;
73
+ }
74
+ // HTTP with explicit port is typically on-premise
75
+ try {
76
+ const parsed = new URL(baseUrl);
77
+ if (parsed.protocol === 'http:' && parsed.port) {
78
+ return false;
79
+ }
80
+ }
81
+ catch {
82
+ // URL parsing failed — continue to fallback
83
+ }
84
+ }
85
+ }
86
+ catch {
87
+ // getBaseUrl() failed — continue to fallback
88
+ }
89
+ // Fallback: check if systeminformation endpoint is available
64
90
  const systemInfo = await getSystemInformation(connection);
65
91
  return systemInfo !== null;
66
92
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-abap-adt/adt-clients",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "description": "ADT clients for SAP ABAP systems - AdtClient and AdtRuntimeClient",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -38,13 +38,13 @@
38
38
  },
39
39
  "scripts": {
40
40
  "chrono": "./tools/version-stats.sh",
41
- "clean": "rm -rf dist tsconfig.tsbuildinfo",
41
+ "clean": "node -e \"const fs=require('fs');['dist','tsconfig.tsbuildinfo'].forEach(p=>{try{fs.rmSync(p,{recursive:true,force:true})}catch{}})\"",
42
42
  "lint": "npx biome check --write src",
43
43
  "lint:check": "npx biome check src",
44
44
  "format": "npx biome format --write src",
45
45
  "build": "npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json",
46
46
  "build:fast": "npx tsc -p tsconfig.json",
47
- "test": "NODE_OPTIONS=\"${NODE_OPTIONS:-} --localstorage-file=/tmp/mcp-abap-adt-jest-localstorage.json\" jest --runInBand",
47
+ "test": "npx jest --runInBand",
48
48
  "test:check": "npx tsc --noEmit --project tsconfig.test.json",
49
49
  "test:type-check": "npm run test:check",
50
50
  "test:check:integration": "npx tsc --noEmit --project tsconfig.test.integration.json",
@@ -1,43 +0,0 @@
1
- /**
2
- * Resolve transport request for an object via /sap/bc/adt/cts/transportchecks
3
- *
4
- * Before create/update, call this to determine which TR the object
5
- * is already assigned to, or which TRs are available.
6
- * Prevents ABAP dumps when a wrong transport request number is provided.
7
- */
8
- import type { IAbapConnection } from '@mcp-abap-adt/interfaces';
9
- export interface IResolveTransportParams {
10
- /** PGMID, e.g. 'R3TR' */
11
- pgmid?: string;
12
- /** Object type, e.g. 'CLAS', 'PROG', 'DDLS', 'TABL', 'DOMA', 'DTEL', 'FUGR', 'DEVC' */
13
- objectType?: string;
14
- /** Object name, e.g. 'ZCL_MY_CLASS' */
15
- objectName?: string;
16
- /** Package name (DEVCLASS) */
17
- devclass: string;
18
- /** Object URI, e.g. '/sap/bc/adt/oo/classes/zcl_my_class' */
19
- uri?: string;
20
- /** Operation: 'I' = insert (create), 'U' = update. Default: 'I' */
21
- operation?: 'I' | 'U';
22
- }
23
- export interface IResolveTransportResult {
24
- /** Whether the check succeeded */
25
- success: boolean;
26
- /** Transport request the object is locked in (from LOCKS) */
27
- lockedInTransport?: string;
28
- /** Available transport requests */
29
- availableTransports: string[];
30
- /** Whether the object is in a local ($TMP) package — no transport needed */
31
- isLocal: boolean;
32
- /** Raw RECORDING field value */
33
- recording?: string;
34
- }
35
- /**
36
- * Resolve transport request for an object.
37
- * Calls /sap/bc/adt/cts/transportchecks to determine:
38
- * - Which TR the object is already assigned to (LOCKS)
39
- * - Which TRs are available (REQUESTS)
40
- * - Whether the object is local ($TMP)
41
- */
42
- export declare function resolveTransport(connection: IAbapConnection, params: IResolveTransportParams): Promise<IResolveTransportResult>;
43
- //# sourceMappingURL=resolveTransport.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveTransport.d.ts","sourceRoot":"","sources":["../../../src/core/transport/resolveTransport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIhE,MAAM,WAAW,uBAAuB;IACtC,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,SAAS,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mCAAmC;IACnC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;IACjB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CA8ElC"}
@@ -1,78 +0,0 @@
1
- "use strict";
2
- /**
3
- * Resolve transport request for an object via /sap/bc/adt/cts/transportchecks
4
- *
5
- * Before create/update, call this to determine which TR the object
6
- * is already assigned to, or which TRs are available.
7
- * Prevents ABAP dumps when a wrong transport request number is provided.
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.resolveTransport = resolveTransport;
11
- const fast_xml_parser_1 = require("fast-xml-parser");
12
- const timeouts_1 = require("../../utils/timeouts");
13
- /**
14
- * Resolve transport request for an object.
15
- * Calls /sap/bc/adt/cts/transportchecks to determine:
16
- * - Which TR the object is already assigned to (LOCKS)
17
- * - Which TRs are available (REQUESTS)
18
- * - Whether the object is local ($TMP)
19
- */
20
- async function resolveTransport(connection, params) {
21
- const url = `/sap/bc/adt/cts/transportchecks`;
22
- const pgmid = params.pgmid ?? '';
23
- const objectType = params.objectType ?? '';
24
- const objectName = params.objectName ?? '';
25
- const operation = params.operation ?? 'I';
26
- const uri = params.uri ?? '';
27
- const xmlBody = `<?xml version="1.0" encoding="UTF-8"?><asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
28
- <asx:values>
29
- <DATA>
30
- <PGMID>${pgmid}</PGMID>
31
- <OBJECT>${objectType}</OBJECT>
32
- <OBJECTNAME>${objectName}</OBJECTNAME>
33
- <DEVCLASS>${params.devclass}</DEVCLASS>
34
- <SUPER_PACKAGE/>
35
- <RECORD_CHANGES/>
36
- <OPERATION>${operation}</OPERATION>
37
- <URI>${uri}</URI>
38
- </DATA>
39
- </asx:values>
40
- </asx:abap>`;
41
- const response = await connection.makeAdtRequest({
42
- url,
43
- method: 'POST',
44
- timeout: (0, timeouts_1.getTimeout)('default'),
45
- data: xmlBody,
46
- headers: {
47
- Accept: 'application/vnd.sap.as+xml;charset=UTF-8;dataname=com.sap.adt.transport.service.checkData',
48
- 'Content-Type': 'application/vnd.sap.as+xml; charset=UTF-8; dataname=com.sap.adt.transport.service.checkData',
49
- },
50
- });
51
- const parser = new fast_xml_parser_1.XMLParser({ ignoreAttributes: false });
52
- const result = parser.parse(response.data);
53
- const data = result['asx:abap']?.['asx:values']?.DATA;
54
- // Extract locked transport (object already assigned to a TR)
55
- const locks = data?.LOCKS?.CTS_OBJECT_LOCK;
56
- const lockList = locks ? (Array.isArray(locks) ? locks : [locks]) : [];
57
- const lockedInTransport = lockList
58
- .map((lock) => lock.LOCK_HOLDER?.REQ_HEADER)
59
- .map((header) => header?.TRKORR)
60
- .find((trkorr) => trkorr);
61
- // Extract available transports
62
- const requests = data?.REQUESTS?.CTS_REQUEST || [];
63
- const transportList = Array.isArray(requests) ? requests : [requests];
64
- const availableTransports = transportList
65
- .map((req) => req.REQ_HEADER?.TRKORR)
66
- .filter((trkorr) => trkorr);
67
- // Check if transport is needed (SAP decides, not us — works for $TMP, ZLOCAL, etc.)
68
- const recording = data?.RECORDING;
69
- const isLocal = recording === '' ||
70
- (!lockedInTransport && availableTransports.length === 0);
71
- return {
72
- success: data?.RESULT === 'S',
73
- lockedInTransport,
74
- availableTransports,
75
- isLocal,
76
- recording,
77
- };
78
- }