@mcp-abap-adt/connection 0.1.4 → 0.1.6
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.
|
@@ -15,11 +15,11 @@ declare abstract class AbstractAbapConnection implements AbapConnection {
|
|
|
15
15
|
private sessionMode;
|
|
16
16
|
protected constructor(config: SapConfig, logger: ILogger, sessionStorage?: ISessionStorage, sessionId?: string);
|
|
17
17
|
/**
|
|
18
|
-
* Enable stateful session mode
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* Enable stateful session mode (tells SAP to maintain stateful session)
|
|
19
|
+
* This controls whether x-sap-adt-sessiontype: stateful header is used
|
|
20
|
+
* Storage is controlled separately via setSessionStorage()
|
|
21
21
|
*/
|
|
22
|
-
enableStatefulSession(
|
|
22
|
+
enableStatefulSession(): void;
|
|
23
23
|
/**
|
|
24
24
|
* Disable stateful session mode (switch to stateless)
|
|
25
25
|
* Optionally saves current state before switching
|
|
@@ -41,8 +41,9 @@ declare abstract class AbstractAbapConnection implements AbapConnection {
|
|
|
41
41
|
getSessionId(): string | null;
|
|
42
42
|
/**
|
|
43
43
|
* Set session storage (can be changed at runtime)
|
|
44
|
+
* This controls whether session state (cookies, CSRF token) is persisted to disk/storage
|
|
44
45
|
*/
|
|
45
|
-
setSessionStorage(storage: ISessionStorage | null): void
|
|
46
|
+
setSessionStorage(storage: ISessionStorage | null): Promise<void>;
|
|
46
47
|
/**
|
|
47
48
|
* Get current session storage
|
|
48
49
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractAbapConnection.d.ts","sourceRoot":"","sources":["../../src/connection/AbstractAbapConnection.ts"],"names":[],"mappings":"AAAA,OAAc,EAAiD,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AbstractAbapConnection.d.ts","sourceRoot":"","sources":["../../src/connection/AbstractAbapConnection.ts"],"names":[],"mappings":"AAAA,OAAc,EAAiD,aAAa,EAAE,MAAM,OAAO,CAAC;AAG5F,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEtE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,uBAAe,sBAAuB,YAAW,cAAc;IAW3D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO;IAXpC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,WAAW,CAAyC;IAE5D,SAAS,aACU,MAAM,EAAE,SAAS,EACf,MAAM,EAAE,OAAO,EAClC,cAAc,CAAC,EAAE,eAAe,EAChC,SAAS,CAAC,EAAE,MAAM;IAWpB;;;;OAIG;IACH,qBAAqB,IAAI,IAAI;IAQ7B;;;OAGG;IACG,sBAAsB,CAAC,iBAAiB,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB/E;;OAEG;IACH,cAAc,IAAI,WAAW,GAAG,UAAU;IAI1C;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IASrC;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B;;;OAGG;IACG,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAcvE;;OAEG;IACH,iBAAiB,IAAI,eAAe,GAAG,IAAI;IAI3C;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBvC;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBvC;;;;OAIG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAYtC;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAY1C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBxC,SAAS,IAAI,SAAS;IAItB,KAAK,IAAI,IAAI;IAYP,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAkB7B,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,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IAwMzE,SAAS,CAAC,QAAQ,CAAC,wBAAwB,IAAI,MAAM;IAErD;;;OAGG;cACa,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,SAAI,EAAE,UAAU,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAgL/F;;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,OAAO,CAAC,yBAAyB;IAuDjC,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,mBAAmB;YAOb,oBAAoB;IAwBlC,OAAO,CAAC,eAAe;CAyBxB;AAGD,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.AbstractAbapConnection = void 0;
|
|
37
37
|
const axios_1 = __importStar(require("axios"));
|
|
38
38
|
const https_1 = require("https");
|
|
39
|
+
const crypto_1 = require("crypto");
|
|
39
40
|
const timeouts_js_1 = require("../utils/timeouts.js");
|
|
40
41
|
class AbstractAbapConnection {
|
|
41
42
|
config;
|
|
@@ -52,23 +53,22 @@ class AbstractAbapConnection {
|
|
|
52
53
|
this.config = config;
|
|
53
54
|
this.logger = logger;
|
|
54
55
|
this.sessionStorage = sessionStorage || null;
|
|
55
|
-
|
|
56
|
-
this.
|
|
56
|
+
// Always generate sessionId (used for sap-adt-connection-id header in all session types)
|
|
57
|
+
this.sessionId = sessionId || (0, crypto_1.randomUUID)();
|
|
58
|
+
// Session mode depends only on storage availability (sessionId exists for both modes)
|
|
59
|
+
this.sessionMode = sessionStorage ? "stateful" : "stateless";
|
|
60
|
+
this.logger.debug(`AbstractAbapConnection - Session ID: ${this.sessionId.substring(0, 8)}..., mode: ${this.sessionMode}`);
|
|
57
61
|
}
|
|
58
62
|
/**
|
|
59
|
-
* Enable stateful session mode
|
|
60
|
-
*
|
|
61
|
-
*
|
|
63
|
+
* Enable stateful session mode (tells SAP to maintain stateful session)
|
|
64
|
+
* This controls whether x-sap-adt-sessiontype: stateful header is used
|
|
65
|
+
* Storage is controlled separately via setSessionStorage()
|
|
62
66
|
*/
|
|
63
|
-
|
|
64
|
-
this.sessionId = sessionId;
|
|
65
|
-
this.sessionStorage = storage;
|
|
67
|
+
enableStatefulSession() {
|
|
66
68
|
this.sessionMode = "stateful";
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
sessionId,
|
|
71
|
-
hasExistingState: !!this.csrfToken || !!this.cookies
|
|
69
|
+
this.logger.debug("Stateful session mode enabled", {
|
|
70
|
+
sessionId: this.sessionId?.substring(0, 8),
|
|
71
|
+
hasStorage: !!this.sessionStorage
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
@@ -83,9 +83,7 @@ class AbstractAbapConnection {
|
|
|
83
83
|
await this.saveSessionState();
|
|
84
84
|
}
|
|
85
85
|
this.sessionMode = "stateless";
|
|
86
|
-
this.
|
|
87
|
-
this.sessionStorage = null;
|
|
88
|
-
this.logger.debug("Stateful session disabled", {
|
|
86
|
+
this.logger.debug("Stateful session mode disabled", {
|
|
89
87
|
savedBeforeDisable: saveBeforeDisable
|
|
90
88
|
});
|
|
91
89
|
}
|
|
@@ -117,15 +115,18 @@ class AbstractAbapConnection {
|
|
|
117
115
|
}
|
|
118
116
|
/**
|
|
119
117
|
* Set session storage (can be changed at runtime)
|
|
118
|
+
* This controls whether session state (cookies, CSRF token) is persisted to disk/storage
|
|
120
119
|
*/
|
|
121
|
-
setSessionStorage(storage) {
|
|
120
|
+
async setSessionStorage(storage) {
|
|
122
121
|
this.sessionStorage = storage;
|
|
122
|
+
// Load existing session state if storage is provided
|
|
123
123
|
if (storage && this.sessionId) {
|
|
124
|
-
this.
|
|
125
|
-
}
|
|
126
|
-
else if (!storage) {
|
|
127
|
-
this.sessionMode = "stateless";
|
|
124
|
+
await this.loadSessionState();
|
|
128
125
|
}
|
|
126
|
+
this.logger.debug("Session storage configured", {
|
|
127
|
+
hasStorage: !!storage,
|
|
128
|
+
sessionMode: this.sessionMode
|
|
129
|
+
});
|
|
129
130
|
}
|
|
130
131
|
/**
|
|
131
132
|
* Get current session storage
|