@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 +0 -22
- package/dist/core/program/AdtProgram.d.ts.map +1 -1
- package/dist/core/program/AdtProgram.js +1 -1
- package/dist/core/program/validation.d.ts +1 -1
- package/dist/core/program/validation.d.ts.map +1 -1
- package/dist/core/program/validation.js +5 -2
- package/dist/core/transport/index.d.ts +0 -2
- package/dist/core/transport/index.d.ts.map +1 -1
- package/dist/core/transport/index.js +1 -3
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/utils/systemInfo.d.ts +5 -2
- package/dist/utils/systemInfo.d.ts.map +1 -1
- package/dist/utils/systemInfo.js +28 -2
- package/package.json +3 -3
- package/dist/core/transport/resolveTransport.d.ts +0 -43
- package/dist/core/transport/resolveTransport.d.ts.map +0 -1
- package/dist/core/transport/resolveTransport.js +0 -78
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;
|
|
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,
|
|
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,
|
|
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.
|
|
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,
|
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,OAAO,EACP,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AACtF,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,YAAY,EACV,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,yBAAyB,EACzB,oCAAoC,EACpC,aAAa,EACb,yBAAyB,EACzB,+BAA+B,EAC/B,wBAAwB,EACxB,mCAAmC,EACnC,aAAa,EACb,eAAe,EACf,WAAW,EACX,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,6BAA6B,EAC7B,6BAA6B,EAC7B,4BAA4B,EAC5B,mCAAmC,GACpC,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,WAAW,EACX,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChF,YAAY,EACV,cAAc,IAAI,kBAAkB,EACpC,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,wBAAwB,EACxB,wBAAwB,EACxB,8BAA8B,EAC9B,uBAAuB,EACvB,kCAAkC,GACnC,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,cAAc,EACd,cAAc,EACd,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,6BAA6B,EAC7B,WAAW,EACX,kBAAkB,EAClB,0BAA0B,EAC1B,6BAA6B,EAC7B,sCAAsC,EACtC,2BAA2B,EAC3B,2BAA2B,EAC3B,6BAA6B,EAC7B,6BAA6B,EAC7B,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,mCAAmC,EACnC,uBAAuB,EACvB,2BAA2B,EAC3B,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,YAAY,EACV,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,sBAAsB,EACtB,+BAA+B,EAC/B,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,0BAA0B,EAC1B,oBAAoB,EACpB,6BAA6B,EAC7B,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5E,YAAY,EACV,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,cAAc,EACd,
|
|
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.
|
|
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
|
-
*
|
|
19
|
-
*
|
|
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
|
|
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"}
|
package/dist/utils/systemInfo.js
CHANGED
|
@@ -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
|
-
*
|
|
61
|
-
*
|
|
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.
|
|
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": "
|
|
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": "
|
|
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
|
-
}
|