@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.
@@ -12,30 +12,23 @@ declare abstract class AbstractAbapConnection implements AbapConnection {
12
12
  private baseUrl;
13
13
  private sessionId;
14
14
  private sessionMode;
15
- protected constructor(config: SapConfig, logger: ILogger | null, sessionId?: string);
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
- * On on-prem (basic/saml auth) this is a no-op: Eclipse ADT does not send
23
- * x-sap-adt-sessiontype header; locks go to the global enqueue table via JCo.
24
- * Sending stateful on older BASIS (e.g. 7.40) stores the lock in ABAP session
25
- * memory instead, causing HTTP 423 on subsequent PUT requests.
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;IAU3D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAV3C,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;IAE5D,SAAS,aACU,MAAM,EAAE,SAAS,EACf,MAAM,EAAE,OAAO,GAAG,IAAI,EACzC,SAAS,CAAC,EAAE,MAAM;IAoBpB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI;IAUpD;;;;OAIG;IACH,qBAAqB,IAAI,IAAI;IAI7B;;;OAGG;IACH,sBAAsB,IAAI,IAAI;IAU9B;;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"}
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
- constructor(config, logger, sessionId) {
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
- * On on-prem (basic/saml auth) this is a no-op: Eclipse ADT does not send
75
- * x-sap-adt-sessiontype header; locks go to the global enqueue table via JCo.
76
- * Sending stateful on older BASIS (e.g. 7.40) stores the lock in ABAP session
77
- * memory instead, causing HTTP 423 on subsequent PUT requests.
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.config.authType !== 'jwt') {
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 via enableStatefulSession()
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;gBAChD,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM;IAK1E;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC9B,SAAS,CAAC,wBAAwB,IAAI,MAAM;IAU5C,OAAO,CAAC,MAAM,CAAC,cAAc;CAmB9B"}
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;gBAEnB,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM;IAS1E;;;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"}
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-abap-adt/connection",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "ABAP connection layer for MCP ABAP ADT server",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",