@mcp-abap-adt/connection 2.0.0 → 4.0.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/CHANGELOG.md CHANGED
@@ -7,6 +7,136 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [4.0.0] - 2026-08-16
11
+
12
+ A JWT connection stops answering with an error of its own making. See
13
+ [docs/MIGRATION-4.0.md](docs/MIGRATION-4.0.md).
14
+
15
+ ### Breaking
16
+
17
+ - **A 403 no longer triggers a token refresh.** It means the server authenticated the caller and
18
+ refused the action anyway, so a new token is the same caller and cannot change the answer.
19
+ - **`Error('JWT token has expired. Please re-authenticate.')` is gone.** Both a 401 and a 403 were
20
+ reported with it, and the original `AxiosError` was discarded along with the status and the
21
+ body. The server's error now reaches the caller unchanged. Code matching on that message must
22
+ branch on `error.response.status` instead — which it can now do.
23
+
24
+ ### Fixed
25
+
26
+ - The substring guard meant to let permission failures past matched three literal strings and SAP
27
+ sends none of them: the type is `ExceptionResourceNoAuthorization`, not `...NoAccess`, and the
28
+ message reads "not authorized", not "No authorization". The list is deleted rather than
29
+ extended — it enumerated prose, so the next unlisted wording would have been the same defect
30
+ ([#30](https://github.com/fr0ster/mcp-abap-connection/issues/30)).
31
+ - A 401 that survives a renewal is now logged at ERROR. The previous log fired only when the
32
+ renewal never happened, so the case the deleted message was actually about passed silently.
33
+ - `establishSession` no longer refreshes or recurses into itself. `fetchCsrfToken` owns recovery
34
+ during establishment; a second refresh at the outer level asked the same refresher the same
35
+ question, and the recursion was unbounded whenever the refresher kept resolving.
36
+ - `JwtAbapConnection.fetchCsrfToken` declared three parameters where the base declares four and
37
+ called `super` with three, silently dropping the `generation` that fences response effects.
38
+ TypeScript accepts that — fewer parameters are assignable to more. Latent rather than live:
39
+ both call sites that pass one are gated on basic auth.
40
+
41
+ ### Changed
42
+
43
+ - **One credential renewal per caller-visible operation, session included.** Concurrent requests
44
+ meeting the same expired token now share a single token fetch *and* a single session
45
+ re-establishment. Previously each ran its own teardown and recovery — and since `recover` and
46
+ `cleanup` never join, one request's cleanup could tear down the session another had just
47
+ rebuilt, leaving its retry at a closed door.
48
+ - The renewal decision is made against the credential state the operation started with, carried
49
+ in a per-connection `AsyncLocalStorage`. A nested token-only refresh no longer passes for a
50
+ session recovery.
51
+ - A retry is abandoned with `ADT_NOT_CONNECTED` if the connection was torn down between the last
52
+ lifecycle check and the retry itself.
53
+ - `establishSession` takes its CSRF retry defaults from `CSRF_CONFIG` at all four authentication
54
+ types instead of repeating `3, 1000` in each.
55
+
56
+ ### Documentation
57
+
58
+ - New [MIGRATION-4.0.md](docs/MIGRATION-4.0.md), linked from the README and the docs index, which
59
+ now has an *Upgrading* section — the 2.0 migration guide was in the tree but linked from
60
+ nowhere but a directory listing.
61
+ - `USAGE.md` gains the classification table; `STATEFUL_SESSION_GUIDE.md` notes that a 401-driven
62
+ refresh replaces the SAP session and surfaces as `ADT_SESSION_REPLACED` inside a lock window,
63
+ while a 403 tears down nothing; the README and both examples no longer promise a refresh on
64
+ 403.
65
+
66
+ ### Known
67
+
68
+ - Whether some BTP setup answers an *invalid* token with 403 rather than 401 is unobserved and
69
+ tracked in [#32](https://github.com/fr0ster/mcp-abap-connection/issues/32). Preserving the
70
+ original error is what makes the assumption safe to be wrong about.
71
+
72
+ ## [3.0.0] - 2026-08-03
73
+
74
+ Undoes two mistakes from 2.0.0, four days old. Everything else that release
75
+ carried — mandatory `connect()`, replaced-session detection, session verdicts
76
+ surviving the retry layers, the Kerberos diagnosis — is unchanged.
77
+
78
+ ### Changed — BREAKING
79
+ - **`disconnect()` returns `Promise<void>` and waits for nothing.** It used to
80
+ drain in-flight requests before clearing anything, and that drain had an
81
+ unbounded tail: a request whose caller chose no timeout — a legitimate choice
82
+ for a long poll — could hold a teardown open forever. Because lifecycle
83
+ transitions are serialized, every later `connect()` queued behind it. We
84
+ published a `disconnect()` that resolves; that path could not.
85
+
86
+ Deciding when to disconnect is the caller's, and so is preparing for it.
87
+ Requests in flight now run to completion untouched — nothing is aborted — and
88
+ the session state is cleared at once. Requires `@mcp-abap-adt/interfaces`
89
+ **^12.0.0**.
90
+ - **A replaced session is always fatal.** It used to be tolerated when no lock
91
+ window was open. Windows are gone (below), and this layer does not know that a
92
+ lock exists, what object it covers or what would release it — so the rule is
93
+ written from what it can know: the ABAP session we were speaking to is not the
94
+ one we are speaking to now, and anything held against the old one is dead.
95
+ Being wrong in this direction costs a reconnect; being wrong the other way
96
+ costs a lock nobody can find.
97
+
98
+ ### Removed — BREAKING
99
+ - **`beginWindow()` / `endWindow()`**, and the window accounting in
100
+ `SessionLifecycle`. They were added in 2.0.0 and never worked: `beginWindow()`
101
+ put a label in a map and touched no timeout. The protection they were assumed
102
+ to provide — a span where a short per-request timeout must not abort a
103
+ request — is `beginCriticalSection()` / `endCriticalSection()`, which has done
104
+ it since 1.9.0, is reference-counted, and is **unchanged by this release**. Two
105
+ mechanisms for one idea, and the one promoted into the public API was the
106
+ no-op. Nothing called it: zero callers across every repository that depends on
107
+ this package.
108
+
109
+ ### Added
110
+ - **Session-generation fencing.** Removing the wait means a request can settle
111
+ after a later `connect()` established a new session, and the response path
112
+ mutates shared state — cookies, the identity policy, the CSRF cache. A stale
113
+ response would write over the new session and could be read as a replacement,
114
+ tearing down a session that is perfectly healthy. Every lease now carries the
115
+ generation it was admitted under, and a response whose generation is not
116
+ current has its effects skipped. It still resolves normally to its own caller:
117
+ fencing suppresses effects, not results.
118
+
119
+ Deliberately not the teardown epoch. Only a caller-initiated teardown moves the
120
+ epoch — a recovery must not cancel itself — so after a session loss and a
121
+ successful recovery, requests from the dead session carry the same epoch as the
122
+ new one and pass straight through a fence built on it.
123
+
124
+ The fence sits at the **top of the error path**, before anything reads or
125
+ writes shared state — not merely before the response headers are applied.
126
+ Everything below it acts on the connection rather than on the request: a late
127
+ 400 "session not found" would tear down the healthy session established since,
128
+ and a late 401/403 would clear the live session's state, fetch a fresh CSRF
129
+ token and **retry** — replaying a mutation from a dead session inside the live
130
+ one. A stale request now gets its error back and nothing else happens.
131
+
132
+ ### Fixed
133
+ - **Our own re-establishment no longer reads as someone else's replacement.**
134
+ With a replacement now always fatal, a deliberate re-authentication would have
135
+ torn the connection down: `invalidateSession()` dropped the cookies but kept
136
+ the tracked identity, so the next cookie looked foreign. Both it and the
137
+ establishment path now forget the identity first. The distinction that matters
138
+ is not "was a lock held" but "did we cause this".
139
+
10
140
  ## [2.0.0] - 2026-07-29
11
141
 
12
142
  The connection owns its session now, and says so. Before this release a stateful
@@ -718,7 +848,9 @@ const connection = createAbapConnection(config, logger);
718
848
  - JWT token refresh now properly handles connection errors (401/403 during initial connect)
719
849
  - Permission errors (403 with "ExceptionResourceNoAccess") no longer trigger JWT refresh loops
720
850
  - Proper separation: base class handles HTTP/session, concrete classes handle auth-specific errors
721
- [Unreleased]: https://github.com/fr0ster/mcp-abap-connection/compare/v2.0.0...HEAD
851
+ [Unreleased]: https://github.com/fr0ster/mcp-abap-connection/compare/v4.0.0...HEAD
852
+ [4.0.0]: https://github.com/fr0ster/mcp-abap-connection/compare/v3.0.0...v4.0.0
853
+ [3.0.0]: https://github.com/fr0ster/mcp-abap-connection/compare/v2.0.0...v3.0.0
722
854
  [2.0.0]: https://github.com/fr0ster/mcp-abap-connection/compare/v1.10.2...v2.0.0
723
855
  [1.10.2]: https://github.com/fr0ster/mcp-abap-connection/compare/v1.10.1...v1.10.2
724
856
  [1.10.1]: https://github.com/fr0ster/mcp-abap-connection/compare/v1.10.0...v1.10.1
package/README.md CHANGED
@@ -113,6 +113,7 @@ This package interacts with external packages **ONLY through interfaces**:
113
113
 
114
114
  - 📦 **[Installation Guide](./docs/INSTALLATION.md)** - Setup and installation instructions
115
115
  - 📚 **[Usage Guide](./docs/USAGE.md)** - Detailed usage examples and API documentation
116
+ - 🚚 **[Migration to 4.0.0](./docs/MIGRATION-4.0.md)** - a 401 refreshes the token, a 403 reaches you with the server's message; the synthesised "JWT token has expired" is gone
116
117
  - 🚚 **[Migration: the explicit session lifecycle](./docs/MIGRATION-2.0.md)** - `connect()` is now required; start here if you are coming from 1.x
117
118
  - 💡 **[Examples](./examples/)** - Working code examples
118
119
 
@@ -220,7 +221,7 @@ const response = await connection.makeAdtRequest({
220
221
 
221
222
  ### Cloud Usage with Automatic Token Refresh
222
223
 
223
- For automatic token refresh on 401/403 errors, inject `ITokenRefresher`:
224
+ For automatic token refresh on **401** errors, inject `ITokenRefresher`:
224
225
 
225
226
  ```typescript
226
227
  import { JwtAbapConnection, SapConfig } from "@mcp-abap-adt/connection";
@@ -240,7 +241,7 @@ const config: SapConfig = {
240
241
  jwtToken: await tokenRefresher.getToken(), // Get initial token
241
242
  };
242
243
 
243
- // Create connection with token refresher - 401/403 handled automatically
244
+ // Create connection with token refresher - 401 handled automatically
244
245
  const connection = new JwtAbapConnection(config, logger, undefined, tokenRefresher);
245
246
  await connection.connect();
246
247
 
@@ -253,6 +254,18 @@ const response = await connection.makeAdtRequest({
253
254
  });
254
255
  ```
255
256
 
257
+ **A 403 is never treated as an expired token.** It means the server
258
+ authenticated the caller and refused the action anyway, so no credential can
259
+ change the answer. It propagates unchanged — `error.response.status` and the
260
+ server's message, which usually names the authorization object — rather than
261
+ being reported as an expired token.
262
+
263
+ Earlier versions reported both 401 and 403 as
264
+ `JWT token has expired. Please re-authenticate.` and discarded the original
265
+ error. Code matching on that message must branch on `error.response.status`
266
+ instead — which it can now do, since the status is no longer thrown away.
267
+ See [MIGRATION-4.0.md](./docs/MIGRATION-4.0.md).
268
+
256
269
  ### Stateful Sessions
257
270
 
258
271
  For operations that require session state (e.g., object modifications), you can enable stateful sessions:
@@ -409,24 +422,26 @@ interface AbapConnection {
409
422
  ```
410
423
 
411
424
  The HTTP connection classes carry the rest of the session lifecycle. It is on the
412
- shared contract as two **capability atoms** in `@mcp-abap-adt/interfaces` (11.5.0+)
413
- rather than as methods on `IAbapConnection`, which is why `RfcAbapConnection` — a
414
- transport that owns no HTTP session — is unaffected by their existence:
425
+ shared contract as a **capability atom** in `@mcp-abap-adt/interfaces` rather than
426
+ as methods on `IAbapConnection`, which is why `RfcAbapConnection` — a transport
427
+ that owns no HTTP session — is unaffected by its existence:
415
428
 
416
429
  ```typescript
417
430
  // ISessionLifecycleAware
418
- disconnect(): Promise<ITeardownReport>; // never throws; reports what it could not finish
431
+ disconnect(): Promise<void>; // never throws, and waits for nothing
419
432
  isConnected(): boolean;
420
- getSessionIdentity(): string | null; // WHICH SAP session; null is not "disconnected"
421
-
422
- // ILockWindowAware
423
- beginWindow(label: string): WindowToken;
424
- endWindow(token: WindowToken): void;
433
+ getSessionIdentity(): string | null; // WHICH SAP session; null is not "disconnected"
425
434
  ```
426
435
 
427
436
  Import those names from `@mcp-abap-adt/interfaces`, not from this package: a
428
437
  contract type re-exported under a second name is a contract type that can drift.
429
438
 
439
+ **The connection does not track locks.** Deciding when to disconnect, and
440
+ preparing for it, belongs to the caller; pairing every LOCK with its UNLOCK
441
+ belongs to `@mcp-abap-adt/adt-clients`, which holds the handles. What this layer
442
+ owns is not being interrupted by a timeout mid-operation — see
443
+ `beginCriticalSection()` below.
444
+
430
445
  See [docs/USAGE.md — Session Lifecycle](./docs/USAGE.md#session-lifecycle).
431
446
 
432
447
  **Session Management:**
@@ -1,4 +1,4 @@
1
- import { type IAdtResponse, type ILockWindowAware, type ISessionLifecycleAware, type ITeardownReport, type WindowToken } from '@mcp-abap-adt/interfaces';
1
+ import { type IAdtResponse, type ISessionLifecycleAware } from '@mcp-abap-adt/interfaces';
2
2
  import type { SapConfig } from '../config/sapConfig.js';
3
3
  import type { ILogger } from '../logger.js';
4
4
  import { SessionLifecycle } from '../session/SessionLifecycle.js';
@@ -9,7 +9,7 @@ import type { AbapConnection, AbapRequestOptions } from './AbapConnection.js';
9
9
  * the HTTP session's own, and naming them means a signature that drifts from
10
10
  * the published contract fails to compile here instead of at the consumer.
11
11
  */
12
- declare abstract class AbstractAbapConnection implements AbapConnection, ISessionLifecycleAware, ILockWindowAware {
12
+ declare abstract class AbstractAbapConnection implements AbapConnection, ISessionLifecycleAware {
13
13
  private readonly config;
14
14
  protected readonly logger: ILogger | null;
15
15
  /**
@@ -108,10 +108,20 @@ declare abstract class AbstractAbapConnection implements AbapConnection, ISessio
108
108
  */
109
109
  connect(): Promise<void>;
110
110
  /**
111
- * Tears the session down. Never throws: the report says what did not finish
112
- * rather than failing. Sends no ADT session-close — see the design's D2.
111
+ * Tears the session down. Never throws, and always settles.
112
+ *
113
+ * It waits for NOTHING. Deciding when to disconnect is the caller's, and so is
114
+ * preparing for it — finishing chains, releasing locks. Waiting here on a
115
+ * request whose caller chose no timeout is what made a teardown unbounded, and
116
+ * an unbounded teardown blocks every later transition on the serialized tail.
117
+ *
118
+ * Requests already in flight run to completion untouched. Generation fencing
119
+ * (see `SessionLifecycle.isCurrent`) keeps their results from reaching this
120
+ * connection afterwards.
121
+ *
122
+ * Sends no ADT session-close — see the design's D2.
113
123
  */
114
- disconnect(): Promise<ITeardownReport>;
124
+ disconnect(): Promise<void>;
115
125
  isConnected(): boolean;
116
126
  /**
117
127
  * Fingerprint of the SAP-side session, or null when none is known.
@@ -124,9 +134,6 @@ declare abstract class AbstractAbapConnection implements AbapConnection, ISessio
124
134
  * learned; only a CHANGED value means the session was replaced.
125
135
  */
126
136
  getSessionIdentity(): string | null;
127
- /** Opens a lock window. See the design: a lock outlives its request. */
128
- beginWindow(label: string): WindowToken;
129
- endWindow(token: WindowToken): void;
130
137
  /**
131
138
  * Discards the session at a caller's request: cancels queued recoveries and
132
139
  * queues the cleanup rather than tearing down under a live request.
@@ -179,8 +186,8 @@ declare abstract class AbstractAbapConnection implements AbapConnection, ISessio
179
186
  * immediately — a later comparison must see the change, and on a dead session
180
187
  * the cookie is unchanged, so only the state can tell.
181
188
  *
182
- * Does not await: it is called from inside a request, and the queued cleanup
183
- * drains that very request.
189
+ * Does not await: it is called from inside a request, and the cleanup must not
190
+ * wait for the very request that raised it.
184
191
  */
185
192
  protected raiseSessionLost(reason: string): void;
186
193
  /** The credential-renewal raiser; see raiseSessionLost(). */
@@ -207,11 +214,18 @@ declare abstract class AbstractAbapConnection implements AbapConnection, ISessio
207
214
  /**
208
215
  * Acts on what a response said about the session identity.
209
216
  *
210
- * A replacement is fatal only while a lock is held — and "a lock is held"
211
- * means an open window, not `sessionMode`: a mode flag cannot represent
212
- * windows, another handler can flip it back, and a batch never sets it.
213
- * With no lock held the same replacement is not a loss: nothing was being
214
- * held, so the new identity simply becomes the current one.
217
+ * A replacement is always fatal, and that is a narrowing: an earlier version
218
+ * tolerated it "when no lock is held", deciding from the connection's own
219
+ * lock windows. Those are gone, and rightly — this layer does not know that a
220
+ * lock exists, what object it covers or what would release it. Locks are
221
+ * tracked a layer up, per object, by the code that took them.
222
+ *
223
+ * So the rule is written from what this layer CAN know: the ABAP session we
224
+ * were speaking to is not the one we are speaking to now. Anything the caller
225
+ * held against the old one is dead, and continuing quietly would hand them a
226
+ * session they never opened — the failure this whole design exists to prevent.
227
+ * Being wrong in this direction costs a reconnect; being wrong the other way
228
+ * costs a lock nobody can find.
215
229
  */
216
230
  private applyIdentityPolicy;
217
231
  /**
@@ -244,7 +258,9 @@ declare abstract class AbstractAbapConnection implements AbapConnection, ISessio
244
258
  * Fetch CSRF token from SAP system
245
259
  * Protected method for use by concrete implementations in their connect() method
246
260
  */
247
- protected fetchCsrfToken(url: string, retryCount?: number, retryDelay?: number): Promise<string>;
261
+ protected fetchCsrfToken(url: string, retryCount?: number, retryDelay?: number,
262
+ /** Fences the response effects; omitted during connect(), which has no lease. */
263
+ generation?: number): Promise<string>;
248
264
  /**
249
265
  * Fetch CSRF token from a specific endpoint with retries
250
266
  */
@@ -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":"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"}