@mcp-abap-adt/connection 1.2.0 → 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/dist/connection/AbstractAbapConnection.d.ts +9 -16
- package/dist/connection/AbstractAbapConnection.d.ts.map +1 -1
- package/dist/connection/AbstractAbapConnection.js +10 -26
- package/dist/connection/BaseAbapConnection.d.ts +3 -1
- package/dist/connection/BaseAbapConnection.d.ts.map +1 -1
- package/dist/connection/BaseAbapConnection.js +2 -2
- package/dist/connection/SamlAbapConnection.d.ts +3 -1
- package/dist/connection/SamlAbapConnection.d.ts.map +1 -1
- package/dist/connection/SamlAbapConnection.js +2 -2
- package/package.json +1 -1
|
@@ -12,30 +12,23 @@ declare abstract class AbstractAbapConnection implements AbapConnection {
|
|
|
12
12
|
private baseUrl;
|
|
13
13
|
private sessionId;
|
|
14
14
|
private sessionMode;
|
|
15
|
-
|
|
15
|
+
private skipSessionType;
|
|
16
|
+
protected constructor(config: SapConfig, logger: ILogger | null, sessionId?: string, options?: {
|
|
17
|
+
skipSessionType?: boolean;
|
|
18
|
+
});
|
|
16
19
|
/**
|
|
17
20
|
* Set session type (stateful or stateless)
|
|
18
21
|
* Controls whether x-sap-adt-sessiontype: stateful header is added to requests
|
|
19
22
|
* - stateful: SAP maintains session state between requests (locks, transactions)
|
|
20
23
|
* - stateless: Each request is independent
|
|
21
24
|
*
|
|
22
|
-
*
|
|
23
|
-
* x-sap-adt-sessiontype header
|
|
24
|
-
*
|
|
25
|
-
* memory instead
|
|
25
|
+
* When skipSessionType is enabled (via constructor options), this is a no-op:
|
|
26
|
+
* the x-sap-adt-sessiontype header will never be sent. This is needed for
|
|
27
|
+
* older BASIS versions (e.g. 7.40) where the stateful header causes locks
|
|
28
|
+
* to be stored in ABAP session memory instead of the global enqueue table,
|
|
29
|
+
* resulting in HTTP 423 on subsequent PUT requests.
|
|
26
30
|
*/
|
|
27
31
|
setSessionType(type: 'stateful' | 'stateless'): void;
|
|
28
|
-
/**
|
|
29
|
-
* Enable stateful session mode (tells SAP to maintain stateful session)
|
|
30
|
-
* This controls whether x-sap-adt-sessiontype: stateful header is used
|
|
31
|
-
* @deprecated Use setSessionType("stateful") instead
|
|
32
|
-
*/
|
|
33
|
-
enableStatefulSession(): void;
|
|
34
|
-
/**
|
|
35
|
-
* Disable stateful session mode (switch to stateless)
|
|
36
|
-
* @deprecated Use setSessionType("stateless") instead
|
|
37
|
-
*/
|
|
38
|
-
disableStatefulSession(): void;
|
|
39
32
|
/**
|
|
40
33
|
* Get current session mode
|
|
41
34
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractAbapConnection.d.ts","sourceRoot":"","sources":["../../src/connection/AbstractAbapConnection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAkB,MAAM,0BAA0B,CAAC;AAM7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,uBAAe,sBAAuB,YAAW,cAAc;
|
|
1
|
+
{"version":3,"file":"AbstractAbapConnection.d.ts","sourceRoot":"","sources":["../../src/connection/AbstractAbapConnection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAkB,MAAM,0BAA0B,CAAC;AAM7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,uBAAe,sBAAuB,YAAW,cAAc;IAW3D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAX3C,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,eAAe,CAAU;IAEjC,SAAS,aACU,MAAM,EAAE,SAAS,EACf,MAAM,EAAE,OAAO,GAAG,IAAI,EACzC,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;IAqBzC;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI;IAUpD;;OAEG;IACH,cAAc,IAAI,WAAW,GAAG,UAAU;IAI1C;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKrC;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,SAAS,IAAI,SAAS;IAItB,KAAK,IAAI,IAAI;IAYP,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAI7B,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAevD;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAE3B,cAAc,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EACnC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IA4P9B,SAAS,CAAC,QAAQ,CAAC,wBAAwB,IAAI,MAAM;IAErD;;;OAGG;cACa,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,UAAU,GAAE,MAAgC,EAC5C,UAAU,GAAE,MAAgC,GAC3C,OAAO,CAAC,MAAM,CAAC;IAgLlB;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,MAAM,GAAG,IAAI;IAIvC;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIlD;;OAEG;IACH,SAAS,CAAC,UAAU,IAAI,MAAM,GAAG,IAAI;IAIrC,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlD,OAAO,CAAC,yBAAyB;IAkEjC,OAAO,CAAC,gBAAgB;YAqBV,oBAAoB;IAiClC,OAAO,CAAC,eAAe;CA+BxB;AAGD,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -50,9 +50,11 @@ class AbstractAbapConnection {
|
|
|
50
50
|
baseUrl;
|
|
51
51
|
sessionId = null;
|
|
52
52
|
sessionMode = 'stateless';
|
|
53
|
-
|
|
53
|
+
skipSessionType;
|
|
54
|
+
constructor(config, logger, sessionId, options) {
|
|
54
55
|
this.config = config;
|
|
55
56
|
this.logger = logger;
|
|
57
|
+
this.skipSessionType = options?.skipSessionType ?? false;
|
|
56
58
|
// Generate sessionId (used for sap-adt-connection-id header)
|
|
57
59
|
this.sessionId = sessionId || (0, node_crypto_1.randomUUID)();
|
|
58
60
|
// Initialize baseUrl from config (required, will throw if invalid)
|
|
@@ -71,13 +73,14 @@ class AbstractAbapConnection {
|
|
|
71
73
|
* - stateful: SAP maintains session state between requests (locks, transactions)
|
|
72
74
|
* - stateless: Each request is independent
|
|
73
75
|
*
|
|
74
|
-
*
|
|
75
|
-
* x-sap-adt-sessiontype header
|
|
76
|
-
*
|
|
77
|
-
* memory instead
|
|
76
|
+
* When skipSessionType is enabled (via constructor options), this is a no-op:
|
|
77
|
+
* the x-sap-adt-sessiontype header will never be sent. This is needed for
|
|
78
|
+
* older BASIS versions (e.g. 7.40) where the stateful header causes locks
|
|
79
|
+
* to be stored in ABAP session memory instead of the global enqueue table,
|
|
80
|
+
* resulting in HTTP 423 on subsequent PUT requests.
|
|
78
81
|
*/
|
|
79
82
|
setSessionType(type) {
|
|
80
|
-
if (this.
|
|
83
|
+
if (this.skipSessionType) {
|
|
81
84
|
return;
|
|
82
85
|
}
|
|
83
86
|
this.sessionMode = type;
|
|
@@ -85,25 +88,6 @@ class AbstractAbapConnection {
|
|
|
85
88
|
sessionId: this.sessionId?.substring(0, 8),
|
|
86
89
|
});
|
|
87
90
|
}
|
|
88
|
-
/**
|
|
89
|
-
* Enable stateful session mode (tells SAP to maintain stateful session)
|
|
90
|
-
* This controls whether x-sap-adt-sessiontype: stateful header is used
|
|
91
|
-
* @deprecated Use setSessionType("stateful") instead
|
|
92
|
-
*/
|
|
93
|
-
enableStatefulSession() {
|
|
94
|
-
this.setSessionType('stateful');
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Disable stateful session mode (switch to stateless)
|
|
98
|
-
* @deprecated Use setSessionType("stateless") instead
|
|
99
|
-
*/
|
|
100
|
-
disableStatefulSession() {
|
|
101
|
-
if (this.sessionMode === 'stateless') {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
this.sessionMode = 'stateless';
|
|
105
|
-
this.logger?.debug('Stateful session mode disabled');
|
|
106
|
-
}
|
|
107
91
|
/**
|
|
108
92
|
* Get current session mode
|
|
109
93
|
*/
|
|
@@ -187,7 +171,7 @@ class AbstractAbapConnection {
|
|
|
187
171
|
if (this.sessionId) {
|
|
188
172
|
requestHeaders['sap-adt-connection-id'] = this.sessionId;
|
|
189
173
|
}
|
|
190
|
-
// Add stateful session headers if stateful mode enabled
|
|
174
|
+
// Add stateful session headers if stateful mode is enabled
|
|
191
175
|
if (this.sessionMode === 'stateful') {
|
|
192
176
|
requestHeaders['x-sap-adt-sessiontype'] = 'stateful';
|
|
193
177
|
requestHeaders['sap-adt-request-id'] = (0, node_crypto_1.randomUUID)().replace(/-/g, '');
|
|
@@ -5,7 +5,9 @@ import { AbstractAbapConnection } from './AbstractAbapConnection.js';
|
|
|
5
5
|
* Basic Authentication connection for on-premise SAP systems
|
|
6
6
|
*/
|
|
7
7
|
export declare class BaseAbapConnection extends AbstractAbapConnection {
|
|
8
|
-
constructor(config: SapConfig, logger?: ILogger | null, sessionId?: string
|
|
8
|
+
constructor(config: SapConfig, logger?: ILogger | null, sessionId?: string, options?: {
|
|
9
|
+
skipSessionType?: boolean;
|
|
10
|
+
});
|
|
9
11
|
/**
|
|
10
12
|
* Connect to SAP system with Basic Auth
|
|
11
13
|
* Fetches CSRF token which also establishes session cookies
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAbapConnection.d.ts","sourceRoot":"","sources":["../../src/connection/BaseAbapConnection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,sBAAsB;
|
|
1
|
+
{"version":3,"file":"BaseAbapConnection.d.ts","sourceRoot":"","sources":["../../src/connection/BaseAbapConnection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,sBAAsB;gBAE1D,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,EACvB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;IAMzC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC9B,SAAS,CAAC,wBAAwB,IAAI,MAAM;IAU5C,OAAO,CAAC,MAAM,CAAC,cAAc;CAmB9B"}
|
|
@@ -7,9 +7,9 @@ const AbstractAbapConnection_js_1 = require("./AbstractAbapConnection.js");
|
|
|
7
7
|
* Basic Authentication connection for on-premise SAP systems
|
|
8
8
|
*/
|
|
9
9
|
class BaseAbapConnection extends AbstractAbapConnection_js_1.AbstractAbapConnection {
|
|
10
|
-
constructor(config, logger, sessionId) {
|
|
10
|
+
constructor(config, logger, sessionId, options) {
|
|
11
11
|
BaseAbapConnection.validateConfig(config);
|
|
12
|
-
super(config, logger || null, sessionId);
|
|
12
|
+
super(config, logger || null, sessionId, options);
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* Connect to SAP system with Basic Auth
|
|
@@ -6,7 +6,9 @@ import { AbstractAbapConnection } from './AbstractAbapConnection.js';
|
|
|
6
6
|
*/
|
|
7
7
|
export declare class SamlAbapConnection extends AbstractAbapConnection {
|
|
8
8
|
private sessionCookies;
|
|
9
|
-
constructor(config: SapConfig, logger?: ILogger | null, sessionId?: string
|
|
9
|
+
constructor(config: SapConfig, logger?: ILogger | null, sessionId?: string, options?: {
|
|
10
|
+
skipSessionType?: boolean;
|
|
11
|
+
});
|
|
10
12
|
/**
|
|
11
13
|
* Connect to SAP system using existing session cookies
|
|
12
14
|
* Fetches CSRF token to establish session context
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SamlAbapConnection.d.ts","sourceRoot":"","sources":["../../src/connection/SamlAbapConnection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,sBAAsB;IAC5D,OAAO,CAAC,cAAc,CAAS;
|
|
1
|
+
{"version":3,"file":"SamlAbapConnection.d.ts","sourceRoot":"","sources":["../../src/connection/SamlAbapConnection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,sBAAsB;IAC5D,OAAO,CAAC,cAAc,CAAS;gBAG7B,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,EACvB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;IAUzC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC9B,SAAS,CAAC,wBAAwB,IAAI,MAAM;IAItC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAQvD,OAAO,CAAC,MAAM,CAAC,cAAc;CAW9B"}
|
|
@@ -8,9 +8,9 @@ const AbstractAbapConnection_js_1 = require("./AbstractAbapConnection.js");
|
|
|
8
8
|
*/
|
|
9
9
|
class SamlAbapConnection extends AbstractAbapConnection_js_1.AbstractAbapConnection {
|
|
10
10
|
sessionCookies;
|
|
11
|
-
constructor(config, logger, sessionId) {
|
|
11
|
+
constructor(config, logger, sessionId, options) {
|
|
12
12
|
SamlAbapConnection.validateConfig(config);
|
|
13
|
-
super(config, logger || null, sessionId);
|
|
13
|
+
super(config, logger || null, sessionId, options);
|
|
14
14
|
this.sessionCookies = config.sessionCookies || '';
|
|
15
15
|
if (this.sessionCookies) {
|
|
16
16
|
this.setInitialCookies(this.sessionCookies);
|