@mcp-abap-adt/connection 6.0.1 → 7.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,103 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [7.0.0] - 2026-09-08
11
+
12
+ **Headers that belong to the request stop belonging to the session.**
13
+
14
+ Nothing in the type surface changed: no signature narrowed, `IAbapConnection` is
15
+ untouched, and code built against 6.x compiles unchanged. The major is for the
16
+ wire — every request now looks different in an SAP trace, and on cloud it says
17
+ something about the session it did not say before. A system that reacts badly to
18
+ either should be findable by version rather than by reading a trace.
19
+
20
+ ### Changed
21
+
22
+ - **BREAKING: `sap-adt-request-id` goes out on every request**, not only inside
23
+ the stateful branch, and `X-sap-adt-profiling` comes from a settable default
24
+ rather than a literal.
25
+
26
+ Only `x-sap-adt-sessiontype` ever belonged in that branch. A request id
27
+ identifies the **request**, and asking the server to report its own processing
28
+ time is not a property of the session either. It stayed invisible while every
29
+ write happened inside a lock window — the window was stateful, so the writes
30
+ carried all three — and `@mcp-abap-adt/adt-clients` has since narrowed
31
+ stateful to the `LOCK` and the `UNLOCK`, at which point the writes silently
32
+ lost two headers.
33
+
34
+ Eclipse sends both on everything. From an ADT 3.60.0 trace on E19, a stateless
35
+ source `PUT` carries `sap-adt-request-id` and `X-sap-adt-profiling` and no
36
+ session type at all. Measured on a BTP trial after the narrowing: of 792
37
+ requests in a full run, 99 carried a request id and **693 — 87.5% — carried
38
+ neither**.
39
+
40
+ Both are **defaults, not overrides**: a caller who names either in
41
+ `options.headers` keeps it, matched without case. `adt-clients` passes its own
42
+ id to `getDiscovery({ requestId })` so the id it logs is the id on the wire,
43
+ and a profiler run asks for something other than `server-time`.
44
+
45
+ - **BREAKING (cloud): `x-sap-security-session: use` on every request**, once a
46
+ session exists.
47
+
48
+ ABAP Cloud issues its session as a resource asked for at
49
+ `/sap/bc/adt/core/http/sessions`, and this wire said the header exactly twice
50
+ in a session's life — `create` to open one, `use` on the `DELETE` that ends
51
+ it. Eclipse names it on everything in between. Measured from ADT 3.60.3
52
+ against a BTP trial: a plain `GET …/businessservices/odatav4/ZAC_SRVB01` and a
53
+ `POST …/unpublishjobs`, a read and a write, both stateless, both saying `use`
54
+ beside `saplb: appserver-dgm9s` and `saplb-options: REDISPATCH_ON_SHUTDOWN`.
55
+
56
+ That pair works together on a load-balanced landscape: here is the server, and
57
+ use the session that lives on it. In one full run against the same trial the
58
+ responses named two different application servers — `appserver-dgm9s` 501
59
+ times and `appserver-8q4vl` 290 — so which one answers is not a constant, and
60
+ the session is not on both.
61
+
62
+ **On-prem is deliberately unchanged**: its session arrives with the logon,
63
+ there is no trace of Eclipse sending this there, and adding it would be a
64
+ guess wearing a measurement's clothes.
65
+
66
+ ### Added
67
+
68
+ - `setProfilingRequest(what: string | null)` / `getProfilingRequest()` — the
69
+ connection-wide `X-sap-adt-profiling` default, `null` to ask nothing.
70
+ `'server-time'` is what Eclipse asks for and stays the default. Nothing in
71
+ this package reads the answer back, which is an argument for being able to
72
+ turn it off rather than for switching it off: an investigation does read it,
73
+ and one settled this week that the unit is microseconds — a trial's unpublish
74
+ job answered `server-time=132512547` on a request that takes ~133 s.
75
+
76
+ **On the concrete class, not yet on the contract.** `AbapConnection` is
77
+ `IAbapConnection`, so a consumer holding the contract reaches these only by
78
+ casting. `@mcp-abap-adt/interfaces@38.1.0` publishes `IRequestProfiling`
79
+ (and `ICriticalSection`, for the section this package already has) as
80
+ capability atoms for exactly this — but this package is on `^21.0.0`, and
81
+ declaring them means moving seventeen majors, which is its own piece of work
82
+ and not this one. Until then the per-request route is the contract-level one:
83
+ `X-sap-adt-profiling` in `options.headers` is honoured and never overwritten.
84
+
85
+
86
+ ## [6.1.0] - 2026-09-03
87
+
88
+ ### Licence
89
+
90
+ - **This package is now `LGPL-3.0-only`.** It was MIT up to and including 6.0.1, and
91
+ those versions stay MIT — a licence change is not retroactive, and anyone
92
+ already using 6.0.1 under MIT keeps that grant for 6.0.1.
93
+
94
+ The library licence of the GNU family, chosen for what it does *not* ask:
95
+ linking it into your own program — importing it, as every consumer of an npm
96
+ package does — does not put your program under the LGPL. What it asks is that
97
+ changes to this library stay free and that your users can substitute their own
98
+ build of it.
99
+
100
+ Both texts ship in the package: `LICENSE` is the LGPL, `COPYING` is the GPL it
101
+ is written on top of. The LGPL is a set of additional permissions over the GPL,
102
+ so it cannot be read without both.
103
+
104
+ Copyright © 2025–2026 Oleksii Kyslytsia.
105
+
106
+
10
107
  ## [6.0.1] - 2026-08-25
11
108
 
12
109
  ### Removed
@@ -1360,8 +1457,10 @@ const connection = createAbapConnection(config, logger);
1360
1457
  - JWT token refresh now properly handles connection errors (401/403 during initial connect)
1361
1458
  - Permission errors (403 with "ExceptionResourceNoAccess") no longer trigger JWT refresh loops
1362
1459
  - Proper separation: base class handles HTTP/session, concrete classes handle auth-specific errors
1363
- [Unreleased]: https://github.com/fr0ster/mcp-abap-connection/compare/v6.0.1...HEAD
1460
+ [Unreleased]: https://github.com/fr0ster/mcp-abap-connection/compare/v7.0.0...HEAD
1461
+ [7.0.0]: https://github.com/fr0ster/mcp-abap-connection/compare/v6.1.0...v7.0.0
1364
1462
  [6.0.1]: https://github.com/fr0ster/mcp-abap-connection/compare/v6.0.0...v6.0.1
1463
+ [6.1.0]: https://github.com/fr0ster/mcp-abap-connection/compare/v6.0.1...v6.1.0
1365
1464
  [6.0.0]: https://github.com/fr0ster/mcp-abap-connection/compare/v5.0.0...v6.0.0
1366
1465
  [5.0.0]: https://github.com/fr0ster/mcp-abap-connection/compare/v4.0.0...v5.0.0
1367
1466
  [4.0.0]: https://github.com/fr0ster/mcp-abap-connection/compare/v3.0.0...v4.0.0