@mcp-abap-adt/connection 0.1.14 โ†’ 0.2.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
@@ -7,15 +7,12 @@ ABAP connection layer for MCP ABAP ADT server. Provides a unified interface for
7
7
  - ๐Ÿ” **Multiple Authentication Methods**:
8
8
  - Basic Auth for on-premise SAP systems
9
9
  - JWT/OAuth2 for SAP BTP ABAP Environment
10
- - ๐Ÿ”„ **Automatic JWT Token Refresh**:
11
- - Detects expired tokens (401/403 errors)
12
- - Automatically refreshes using OAuth2 refresh token
13
- - Distinguishes between auth errors and permission errors
14
- - No manual intervention required
15
- - ๐Ÿ’พ **Stateful Sessions**:
16
- - Persistent session management with CSRF tokens and cookies
17
- - Custom storage backends (file system, database, Redis, etc.)
18
- - Automatic session state save/load
10
+ - ๐Ÿ”„ **Token Management**:
11
+ - Token refresh is handled by `@mcp-abap-adt/auth-broker` package
12
+ - Connection package focuses on HTTP communication only
13
+ - ๐Ÿ’พ **Session Management**:
14
+ - Session headers management (cookies, CSRF tokens)
15
+ - Session state persistence is handled by `@mcp-abap-adt/auth-broker` package
19
16
  - ๐Ÿ—๏ธ **Clean Architecture**:
20
17
  - Abstract base class for common HTTP/session logic
21
18
  - Auth-type specific implementations (BaseAbapConnection, JwtAbapConnection)
@@ -42,9 +39,9 @@ The package uses a clean separation of concerns:
42
39
 
43
40
  - **`JwtAbapConnection`** (concrete, exported):
44
41
  - JWT/OAuth2 Authentication implementation
45
- - Smart connect() - detects expired tokens and auto-refreshes
46
- - Permission vs auth error detection
42
+ - Simple connect() - establishes connection with JWT token
47
43
  - Suitable for SAP BTP ABAP Environment
44
+ - Token refresh handled by auth-broker package
48
45
 
49
46
  ## Responsibilities and Design Principles
50
47
 
@@ -71,21 +68,19 @@ This package is responsible for:
71
68
  1. **HTTP communication with SAP systems**: Makes HTTP requests to SAP ABAP systems via ADT protocol
72
69
  2. **Authentication handling**: Supports Basic Auth and JWT/OAuth2 authentication methods
73
70
  3. **Session management**: Manages cookies, CSRF tokens, and session state
74
- 4. **Token refresh**: Automatically refreshes expired JWT tokens (for `JwtAbapConnection`)
75
- 5. **Error handling**: Distinguishes between authentication errors and permission errors
71
+ 4. **Error handling**: Handles HTTP errors and connection issues
76
72
 
77
73
  #### What This Package Does
78
74
 
79
75
  - **Provides connection abstraction**: `AbapConnection` interface for interacting with SAP systems
80
76
  - **Handles HTTP requests**: Makes requests to SAP ADT endpoints with proper headers and authentication
81
77
  - **Manages sessions**: Handles cookies, CSRF tokens, and session state persistence
82
- - **Refreshes tokens**: Automatically refreshes expired JWT tokens when detected
83
- - **Validates tokens**: Detects expired tokens by analyzing HTTP response codes (401/403)
84
78
 
85
79
  #### What This Package Does NOT Do
86
80
 
87
81
  - **Does NOT obtain tokens**: Token acquisition is handled by `@mcp-abap-adt/auth-providers` and `@mcp-abap-adt/auth-broker`
88
82
  - **Does NOT store tokens**: Token storage is handled by `@mcp-abap-adt/auth-stores`
83
+ - **Does NOT refresh tokens**: Token refresh is handled by `@mcp-abap-adt/auth-broker`
89
84
  - **Does NOT orchestrate authentication**: Token lifecycle management is handled by `@mcp-abap-adt/auth-broker`
90
85
  - **Does NOT know about destinations**: Destination-based authentication is handled by consumers
91
86
  - **Does NOT handle OAuth2 flows**: OAuth2 flows are handled by token providers
@@ -95,25 +90,19 @@ This package is responsible for:
95
90
  This package interacts with external packages **ONLY through interfaces**:
96
91
 
97
92
  - **Logger interface**: Uses `ILogger` interface for logging - does not know about concrete logger implementation
98
- - **Session storage interface**: Uses `ISessionStorage` interface for session persistence - does not know about concrete storage implementation
99
93
  - **No direct dependencies on auth packages**: All token-related operations are handled through configuration (`SapConfig`) passed by consumers
100
94
 
101
95
  ## Documentation
102
96
 
103
97
  - ๐Ÿ“ฆ **[Installation Guide](./docs/INSTALLATION.md)** - Setup and installation instructions
104
98
  - ๐Ÿ“š **[Usage Guide](./docs/USAGE.md)** - Detailed usage examples and API documentation
105
- - ๐Ÿงช **[Testing Guide](./docs/AUTO_REFRESH_TESTING.md)** - Auto-refresh testing and troubleshooting
106
- - ๐Ÿ”ง **[Session Storage](./docs/CUSTOM_SESSION_STORAGE.md)** - Custom session storage implementation
107
- - ๐Ÿ” **[Stateful Session Guide (Connection)](./docs/STATEFUL_SESSION_GUIDE.md)** - Cookies, CSRF tokens, and session storage responsibilities
108
99
  - ๐Ÿ’ก **[Examples](./examples/)** - Working code examples
109
100
 
110
101
  ## Features
111
102
 
112
103
  - ๐Ÿ” **Multiple Authentication Methods**: Basic Auth for on-premise systems, JWT/OAuth2 for SAP BTP ABAP Environment
113
- - ๐Ÿ”„ **Auto Token Refresh**: Automatic JWT token refresh when expired (for cloud systems)
114
- - ๐Ÿ’พ **Stateful Sessions**: Support for persistent sessions with CSRF token and cookie management
115
- - ๐Ÿ“ **Custom Logging**: Pluggable logger interface for integration with any logging system
116
- - ๐Ÿ› ๏ธ **CLI Tool**: Built-in authentication helper for SAP BTP service key authentication
104
+ - ๐Ÿ’พ **Session Management**: Session headers management (cookies, CSRF tokens) for HTTP communication
105
+ - ๐Ÿ“ **Custom Logging**: Pluggable logger interface for integration with any logging system (optional)
117
106
  - ๐Ÿ“ฆ **TypeScript**: Full TypeScript support with type definitions included
118
107
  - โšก **Timeout Management**: Configurable timeouts for different operation types
119
108
 
@@ -158,22 +147,17 @@ const response = await connection.makeAdtRequest({
158
147
  });
159
148
  ```
160
149
 
161
- ### Cloud Usage (JWT/OAuth2 with Auto-Refresh)
150
+ ### Cloud Usage (JWT/OAuth2)
162
151
 
163
152
  ```typescript
164
153
  import { createAbapConnection, SapConfig } from "@mcp-abap-adt/connection";
165
154
 
166
- // JWT configuration with refresh token for auto-refresh
155
+ // JWT configuration
167
156
  const config: SapConfig = {
168
157
  url: "https://your-instance.abap.cloud.sap",
169
158
  client: "100", // Optional
170
159
  authType: "jwt",
171
160
  jwtToken: "your-jwt-token-here", // Obtained via OAuth2 flow
172
- // For auto-refresh support:
173
- refreshToken: "your-refresh-token",
174
- uaaUrl: "https://your-tenant.authentication.cert.eu10.hana.ondemand.com",
175
- uaaClientId: "your-client-id",
176
- uaaClientSecret: "your-client-secret",
177
161
  };
178
162
 
179
163
  const logger = {
@@ -183,20 +167,14 @@ const logger = {
183
167
  debug: (msg: string, meta?: any) => console.debug(msg, meta),
184
168
  };
185
169
 
170
+ // Logger is optional - if not provided, no logging output
186
171
  const connection = createAbapConnection(config, logger);
187
172
 
188
- // Token will be automatically refreshed if expired during requests
173
+ // Note: Token refresh is handled by @mcp-abap-adt/auth-broker package
189
174
  const response = await connection.makeAdtRequest({
190
175
  method: "GET",
191
176
  url: "/sap/bc/adt/programs/programs/your-program",
192
177
  });
193
-
194
- // How auto-refresh works:
195
- // 1. If JWT token expired โ†’ SAP returns 401/403
196
- // 2. Connection detects this is auth error (not permission error)
197
- // 3. Automatically calls refresh token endpoint
198
- // 4. Retries the request with new token
199
- // 5. User doesn't need to handle this manually
200
178
  ```
201
179
 
202
180
  ### Stateful Sessions
@@ -204,46 +182,21 @@ const response = await connection.makeAdtRequest({
204
182
  For operations that require session state (e.g., object modifications), you can enable stateful sessions:
205
183
 
206
184
  ```typescript
207
- import {
208
- createAbapConnection,
209
- ISessionStorage,
210
- SessionState,
211
- } from "@mcp-abap-adt/connection";
212
-
213
- // Implement session storage (e.g., file system, database, memory)
214
- class FileSessionStorage implements ISessionStorage {
215
- async save(sessionId: string, state: SessionState): Promise<void> {
216
- // Save to file system
217
- await fs.writeFile(
218
- `sessions/${sessionId}.json`,
219
- JSON.stringify(state, null, 2)
220
- );
221
- }
222
-
223
- async load(sessionId: string): Promise<SessionState | null> {
224
- // Load from file system
225
- const data = await fs.readFile(`sessions/${sessionId}.json`, "utf-8");
226
- return JSON.parse(data);
227
- }
228
-
229
- async delete(sessionId: string): Promise<void> {
230
- // Delete from file system
231
- await fs.unlink(`sessions/${sessionId}.json`);
232
- }
233
- }
185
+ import { createAbapConnection } from "@mcp-abap-adt/connection";
234
186
 
235
187
  const connection = createAbapConnection(config, logger);
236
- const sessionStorage = new FileSessionStorage();
237
188
 
238
- // Enable stateful session
239
- await connection.enableStatefulSession("my-session-id", sessionStorage);
189
+ // Enable stateful session mode (adds x-sap-adt-sessiontype: stateful header)
190
+ connection.setSessionType("stateful");
240
191
 
241
- // Now CSRF tokens and cookies are automatically managed
192
+ // Make requests - SAP will maintain session state
242
193
  await connection.makeAdtRequest({
243
194
  method: "POST",
244
195
  url: "/sap/bc/adt/objects/domains",
245
196
  data: { /* domain data */ },
246
197
  });
198
+
199
+ // Note: Session state persistence is handled by @mcp-abap-adt/auth-broker package
247
200
  ```
248
201
 
249
202
  ### Custom Logger
@@ -369,17 +322,16 @@ Main interface for ABAP connections.
369
322
  interface AbapConnection {
370
323
  makeAdtRequest(options: AbapRequestOptions): Promise<AxiosResponse>;
371
324
  reset(): void;
372
- enableStatefulSession(sessionId: string, storage: ISessionStorage): Promise<void>;
373
- disableStatefulSession(): void;
374
- getSessionMode(): "stateless" | "stateful";
375
- getSessionId(): string | undefined; // Get current session ID
376
325
  setSessionType(type: "stateless" | "stateful"): void; // Switch session type
326
+ getSessionMode(): "stateless" | "stateful"; // Get current session mode
327
+ getSessionId(): string | null; // Get current session ID
377
328
  }
378
329
  ```
379
330
 
380
- **New in 0.1.6+:**
381
- - `getSessionId()`: Returns the current session ID if stateful session is enabled, otherwise `undefined`
382
- - `setSessionType(type)`: Programmatically switch between stateful and stateless modes without recreating connection
331
+ **Session Management:**
332
+ - `setSessionType(type)`: Programmatically switch between stateful and stateless modes
333
+ - `getSessionMode()`: Returns current session mode
334
+ - `getSessionId()`: Returns the current session ID (auto-generated UUID)
383
335
 
384
336
  #### `ILogger`
385
337
 
@@ -396,29 +348,16 @@ interface ILogger {
396
348
  }
397
349
  ```
398
350
 
399
- #### `ISessionStorage`
400
-
401
- Interface for session state persistence.
402
-
403
- ```typescript
404
- interface ISessionStorage {
405
- save(sessionId: string, state: SessionState): Promise<void>;
406
- load(sessionId: string): Promise<SessionState | null>;
407
- delete(sessionId: string): Promise<void>;
408
- }
409
- ```
410
-
411
351
  ### Functions
412
352
 
413
- #### `createAbapConnection(config, logger, sessionStorage?, sessionId?)`
353
+ #### `createAbapConnection(config, logger?, sessionId?)`
414
354
 
415
355
  Factory function to create an ABAP connection instance.
416
356
 
417
357
  ```typescript
418
358
  function createAbapConnection(
419
359
  config: SapConfig,
420
- logger: ILogger,
421
- sessionStorage?: ISessionStorage,
360
+ logger?: ILogger | null,
422
361
  sessionId?: string
423
362
  ): AbapConnection;
424
363
  ```
@@ -492,14 +431,14 @@ See [PR Proposal](./PR_PROPOSAL_CSRF_CONFIG.md) for more details.
492
431
 
493
432
  See [CHANGELOG.md](./CHANGELOG.md) for detailed version history and breaking changes.
494
433
 
495
- **Latest version: 0.1.13**
496
- - Added `CSRF_CONFIG` and `CSRF_ERROR_MESSAGES` exports for consistent CSRF token handling
497
- - Updated CSRF token endpoint to `/sap/bc/adt/core/discovery` (lighter response, available on all systems)
434
+ **Latest version: 0.2.0**
435
+ - Removed token refresh functionality (handled by `@mcp-abap-adt/auth-broker`)
436
+ - Removed session storage functionality (handled by `@mcp-abap-adt/auth-broker`)
437
+ - Logger is now optional
498
438
  - See [CHANGELOG.md](./CHANGELOG.md) for full details
499
439
 
500
440
  ## Documentation
501
441
 
502
- - [Custom Session Storage](./docs/CUSTOM_SESSION_STORAGE.md) - How to implement custom session persistence (database, Redis, etc.)
503
442
  - [Examples](./examples/README.md) - Working code examples
504
443
  - [Changelog](./CHANGELOG.md) - Version history and release notes
505
444
 
@@ -1 +1 @@
1
- {"version":3,"file":"AbapConnection.d.ts","sourceRoot":"","sources":["../../src/connection/AbapConnection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGrF,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AACrD,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC"}
1
+ {"version":3,"file":"AbapConnection.d.ts","sourceRoot":"","sources":["../../src/connection/AbapConnection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGrF,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AACrD,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC"}
@@ -1,19 +1,18 @@
1
1
  import { AxiosResponse } from "axios";
2
- import { ILogger, ISessionStorage, SessionState } from "../logger.js";
2
+ import { ILogger } from "../logger.js";
3
3
  import { SapConfig } from "../config/sapConfig.js";
4
4
  import { AbapConnection, AbapRequestOptions } from "./AbapConnection.js";
5
5
  declare abstract class AbstractAbapConnection implements AbapConnection {
6
6
  private readonly config;
7
- protected readonly logger: ILogger;
7
+ protected readonly logger: ILogger | null;
8
8
  private axiosInstance;
9
9
  private csrfToken;
10
10
  private cookies;
11
11
  private cookieStore;
12
12
  private baseUrl;
13
13
  private sessionId;
14
- private sessionStorage;
15
14
  private sessionMode;
16
- protected constructor(config: SapConfig, logger: ILogger, sessionStorage?: ISessionStorage, sessionId?: string);
15
+ protected constructor(config: SapConfig, logger: ILogger | null, sessionId?: string);
17
16
  /**
18
17
  * Set session type (stateful or stateless)
19
18
  * Controls whether x-sap-adt-sessiontype: stateful header is added to requests
@@ -24,64 +23,27 @@ declare abstract class AbstractAbapConnection implements AbapConnection {
24
23
  /**
25
24
  * Enable stateful session mode (tells SAP to maintain stateful session)
26
25
  * This controls whether x-sap-adt-sessiontype: stateful header is used
27
- * Storage is controlled separately via setSessionStorage()
28
26
  * @deprecated Use setSessionType("stateful") instead
29
27
  */
30
28
  enableStatefulSession(): void;
31
29
  /**
32
30
  * Disable stateful session mode (switch to stateless)
33
- * Optionally saves current state before switching
34
31
  * @deprecated Use setSessionType("stateless") instead
35
32
  */
36
- disableStatefulSession(saveBeforeDisable?: boolean): Promise<void>;
33
+ disableStatefulSession(): void;
37
34
  /**
38
35
  * Get current session mode
39
36
  */
40
37
  getSessionMode(): "stateless" | "stateful";
41
38
  /**
42
- * Set session ID for stateful operations
43
- * When session ID is set, session state (cookies, CSRF token) will be persisted
44
- * @deprecated Use enableStatefulSession() instead
39
+ * Set session ID
40
+ * @deprecated Session ID is auto-generated, use setSessionType() to control session mode
45
41
  */
46
42
  setSessionId(sessionId: string): void;
47
43
  /**
48
44
  * Get current session ID
49
45
  */
50
46
  getSessionId(): string | null;
51
- /**
52
- * Set session storage (can be changed at runtime)
53
- * This controls whether session state (cookies, CSRF token) is persisted to disk/storage
54
- */
55
- setSessionStorage(storage: ISessionStorage | null): Promise<void>;
56
- /**
57
- * Get current session storage
58
- */
59
- getSessionStorage(): ISessionStorage | null;
60
- /**
61
- * Load session state from storage
62
- */
63
- loadSessionState(): Promise<void>;
64
- /**
65
- * Save session state to storage
66
- * Only saves if in stateful mode
67
- */
68
- saveSessionState(): Promise<void>;
69
- /**
70
- * Get current session state
71
- * Returns cookies, CSRF token, and cookie store for manual persistence
72
- * @returns Current session state or null if no session data
73
- */
74
- getSessionState(): SessionState | null;
75
- /**
76
- * Set session state manually
77
- * Allows user to restore session from custom storage (e.g., database, Redis)
78
- * @param state - Session state with cookies, CSRF token, and cookie store
79
- */
80
- setSessionState(state: SessionState): void;
81
- /**
82
- * Clear session state from storage
83
- */
84
- clearSessionState(): Promise<void>;
85
47
  getConfig(): SapConfig;
86
48
  reset(): void;
87
49
  getBaseUrl(): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractAbapConnection.d.ts","sourceRoot":"","sources":["../../src/connection/AbstractAbapConnection.ts"],"names":[],"mappings":"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"}
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,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,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;IAgBpB;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI;IAOpD;;;;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;IAK7B,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,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IA2MzE,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;IAkKlB;;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;YAmBV,oBAAoB;IAwBlC,OAAO,CAAC,eAAe;CAyBxB;AAGD,OAAO,EAAE,sBAAsB,EAAE,CAAC"}