@mcp-abap-adt/connection 9.1.0 → 9.2.1
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 +72 -3
- package/README.md +12 -9
- package/dist/auth/FileCertificateMaterialLoader.d.ts +1 -1
- package/dist/auth/FileCertificateMaterialLoader.d.ts.map +1 -1
- package/dist/auth/providers.d.ts +2 -2
- package/dist/auth/providers.d.ts.map +1 -1
- package/dist/config/sapConfig.d.ts +1 -1
- package/dist/config/sapConfig.d.ts.map +1 -1
- package/dist/connection/AbstractAbapConnection.d.ts +1 -6
- package/dist/connection/AbstractAbapConnection.d.ts.map +1 -1
- package/dist/connection/AbstractAbapConnection.js +2 -7
- package/dist/session/SessionLifecycle.d.ts +1 -1
- package/dist/session/SessionLifecycle.d.ts.map +1 -1
- package/dist/utils/timeouts.d.ts +1 -1
- package/dist/utils/timeouts.d.ts.map +1 -1
- package/dist/utils/tokenRefresh.d.ts +1 -1
- package/dist/utils/tokenRefresh.d.ts.map +1 -1
- package/docs/INDEX.md +1 -1
- package/docs/INSTALLATION.md +9 -7
- package/docs/MIGRATION-9.0.md +11 -8
- package/docs/SCOPE.md +3 -3
- package/docs/USAGE.md +0 -7
- package/package.json +7 -7
- package/dist/auth/kerberosSpnego.d.ts +0 -3
- package/dist/auth/kerberosSpnego.d.ts.map +0 -1
- package/dist/auth/kerberosSpnego.js +0 -56
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,75 @@ All notable changes to the `@mcp-abap-adt/connection` package will be documented
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [9.2.1] - 2026-09-24
|
|
11
|
+
|
|
12
|
+
### Removed
|
|
13
|
+
|
|
14
|
+
- **The optional `kerberos` dependency, and the SPNEGO wrapper nothing called.**
|
|
15
|
+
`KerberosAbapConnection` went in 6.0 (see `docs/MIGRATION-6.0.md#kerberos`);
|
|
16
|
+
what it left behind — `src/auth/kerberosSpnego.ts` — was not exported and not
|
|
17
|
+
reached from anywhere in the library, yet `optionalDependencies` still made
|
|
18
|
+
every install build a native module, and pull the archived `prebuild-install`
|
|
19
|
+
with it, for no code path. No API changes: nothing public named it. A
|
|
20
|
+
consumer who imported `dist/auth/kerberosSpnego.js` by deep path was on a
|
|
21
|
+
private file; `kerberos` itself is still on npm to call directly. Kerberos
|
|
22
|
+
belongs on the credential axis as an `IAuthProvider`, added with a KDC to
|
|
23
|
+
test it against.
|
|
24
|
+
- `docs/USAGE.md` described the single-leg SPNEGO limitation of a connection
|
|
25
|
+
that no longer exists. It no longer does.
|
|
26
|
+
|
|
27
|
+
## [9.2.0] - 2026-09-24
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- **The contracts split again, and this package follows the names.**
|
|
32
|
+
`@mcp-abap-adt/interfaces-adt@^9.0.0` (was `^8.0.0`), `-auth@^1.2.0` (was
|
|
33
|
+
`^1.1.0`), `-network@^2.0.0` (was `^1.1.0`), `-utils@^1.1.0` (was `^1.0.0`),
|
|
34
|
+
and **`@mcp-abap-adt/interfaces-auth-sap@^1.0.0` is new**.
|
|
35
|
+
|
|
36
|
+
**This time the names moved, not just the ranges.** Of the 15 names this
|
|
37
|
+
package takes from the ADT contract, six left it:
|
|
38
|
+
|
|
39
|
+
| name | now in |
|
|
40
|
+
|---|---|
|
|
41
|
+
| `ISapConfig`, `SapAuthType`, `SapConnectionType`, `ICertificateMaterialLoader` | `interfaces-auth-sap` |
|
|
42
|
+
| `ITokenRefresher`, `ITokenRefreshResult` | `interfaces-auth` |
|
|
43
|
+
|
|
44
|
+
and one came the other way: **`ITimeoutConfig` is `interfaces-adt` now**,
|
|
45
|
+
because `csrf` names an SAP operation rather than a transport primitive. The
|
|
46
|
+
nine that stay are the connection contract itself — `IAbapConnection`,
|
|
47
|
+
`IAbapRequestOptions`, `IAdtResponse`, `IAdtWireResponse`, `ICriticalSection`,
|
|
48
|
+
`IRequestProfiling`, `ISessionLifecycleAware`, `ADT_SESSION_ERROR`,
|
|
49
|
+
`AdtSessionErrorCode`. That is the criterion in the contract repository
|
|
50
|
+
working: what this package takes from the ADT contract is ADT.
|
|
51
|
+
|
|
52
|
+
17 files repointed. **Nothing this package exports changes shape**, and no
|
|
53
|
+
name is renamed, so a consumer sees a dependency set with one more package in
|
|
54
|
+
it and nothing else.
|
|
55
|
+
|
|
56
|
+
Every range names the version the moved names actually land in. A range one
|
|
57
|
+
major behind is what npm answers by silently nesting a second copy — this
|
|
58
|
+
repository shipped 9.1.0 into a tree that held `interfaces-adt` 8 beside
|
|
59
|
+
`adt-clients`' 9 for exactly that reason. Checked after installing, rather than
|
|
60
|
+
assumed:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
find node_modules -path "*@mcp-abap-adt/interfaces-*/package.json"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Five paths, all at the top level, and no `"link": true` in the lockfile.
|
|
67
|
+
|
|
68
|
+
- **Documentation, and `check:docs` found the first three.** Three snippets
|
|
69
|
+
imported `ITokenRefresher` from `interfaces-adt` — `README.md` twice and
|
|
70
|
+
`docs/MIGRATION-9.0.md` once — and the compiler behind `npm test` caught them
|
|
71
|
+
before a reader could. Swept with them: the package tables in `README.md` and
|
|
72
|
+
`docs/MIGRATION-9.0.md` (a new `-auth-sap` row, `ITimeoutConfig` moved to the
|
|
73
|
+
`-adt` row, the token contracts to `-auth`), the install lines there and in
|
|
74
|
+
`docs/INSTALLATION.md`, `docs/SCOPE.md`'s ownership table, and
|
|
75
|
+
`docs/INDEX.md`'s one-line summary.
|
|
76
|
+
|
|
8
77
|
## [9.1.0] - 2026-09-23
|
|
9
78
|
|
|
10
79
|
### Changed
|
|
@@ -39,8 +108,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
39
108
|
through 6. The umbrella — `@mcp-abap-adt/interfaces` — was deleted in its
|
|
40
109
|
52.0.0, for exactly the cost that paragraph describes. It says so now.
|
|
41
110
|
|
|
42
|
-
## [Unreleased]
|
|
43
|
-
|
|
44
111
|
## [9.0.0] - 2026-09-23
|
|
45
112
|
|
|
46
113
|
**The contracts split, and this package follows them rather than the shim left
|
|
@@ -1683,7 +1750,9 @@ const connection = createAbapConnection(config, logger);
|
|
|
1683
1750
|
- JWT token refresh now properly handles connection errors (401/403 during initial connect)
|
|
1684
1751
|
- Permission errors (403 with "ExceptionResourceNoAccess") no longer trigger JWT refresh loops
|
|
1685
1752
|
- Proper separation: base class handles HTTP/session, concrete classes handle auth-specific errors
|
|
1686
|
-
[Unreleased]: https://github.com/fr0ster/mcp-abap-connection/compare/v9.1
|
|
1753
|
+
[Unreleased]: https://github.com/fr0ster/mcp-abap-connection/compare/v9.2.1...HEAD
|
|
1754
|
+
[9.2.1]: https://github.com/fr0ster/mcp-abap-connection/compare/v9.2.0...v9.2.1
|
|
1755
|
+
[9.2.0]: https://github.com/fr0ster/mcp-abap-connection/compare/v9.1.0...v9.2.0
|
|
1687
1756
|
[9.1.0]: https://github.com/fr0ster/mcp-abap-connection/compare/v9.0.0...v9.1.0
|
|
1688
1757
|
[9.0.0]: https://github.com/fr0ster/mcp-abap-connection/compare/v8.1.0...v9.0.0
|
|
1689
1758
|
[8.1.0]: https://github.com/fr0ster/mcp-abap-connection/compare/v8.0.1...v8.1.0
|
package/README.md
CHANGED
|
@@ -131,19 +131,22 @@ This package interacts with external packages **ONLY through interfaces**:
|
|
|
131
131
|
- **Logger interface**: Uses `ILogger` interface for logging - does not know about concrete logger implementation
|
|
132
132
|
- **No direct dependencies on auth packages**: All token-related operations are handled through configuration (`SapConfig`) passed by consumers
|
|
133
133
|
|
|
134
|
-
The contracts themselves come from
|
|
134
|
+
The contracts themselves come from five packages, and are the only runtime
|
|
135
135
|
dependencies of this one besides `axios`, `commander` and `open`:
|
|
136
136
|
|
|
137
137
|
| Package | What this package takes from it |
|
|
138
138
|
|---|---|
|
|
139
|
-
| `@mcp-abap-adt/interfaces-adt` | `IAbapConnection`, `
|
|
140
|
-
| `@mcp-abap-adt/interfaces-auth` | `IAuthProvider`, `IRenewableCredential`, `ICertificateMaterial` |
|
|
141
|
-
| `@mcp-abap-adt/interfaces-
|
|
139
|
+
| `@mcp-abap-adt/interfaces-adt` | `IAbapConnection`, `IAbapRequestOptions`, `IAdtResponse`, `IAdtWireResponse`, `ITimeoutConfig`, the capability atoms, `ADT_SESSION_ERROR` |
|
|
140
|
+
| `@mcp-abap-adt/interfaces-auth` | `IAuthProvider`, `IRenewableCredential`, `ICertificateMaterial`, `ITokenRefresher`, `ITokenRefreshResult` |
|
|
141
|
+
| `@mcp-abap-adt/interfaces-auth-sap` | `ISapConfig`, `SapAuthType`, `SapConnectionType`, `ICertificateMaterialLoader` |
|
|
142
|
+
| `@mcp-abap-adt/interfaces-network` | `NETWORK_ERROR_CODES`, the WebSocket contracts |
|
|
142
143
|
| `@mcp-abap-adt/interfaces-utils` | `ILogger` |
|
|
143
144
|
|
|
144
|
-
Not `@mcp-abap-adt/interfaces`. That
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
Not `@mcp-abap-adt/interfaces`. That package is **deleted** as of its 52.0.0,
|
|
146
|
+
which was never published: npm still serves 51.0.0 — every symbol re-exported and
|
|
147
|
+
deprecated — to whoever is pinned to it, and nothing further ships there. This
|
|
148
|
+
package stopped depending on it in 9.0.0; there is nothing left to move to but
|
|
149
|
+
the packages above. See [Migration to 9.0.0](./docs/MIGRATION-9.0.md).
|
|
147
150
|
|
|
148
151
|
## Documentation
|
|
149
152
|
|
|
@@ -177,7 +180,7 @@ config you build — install the package it lives in as well, because this one n
|
|
|
177
180
|
longer brings them along:
|
|
178
181
|
|
|
179
182
|
```bash
|
|
180
|
-
npm install @mcp-abap-adt/interfaces-adt @mcp-abap-adt/interfaces-auth
|
|
183
|
+
npm install @mcp-abap-adt/interfaces-adt @mcp-abap-adt/interfaces-auth @mcp-abap-adt/interfaces-auth-sap
|
|
181
184
|
```
|
|
182
185
|
|
|
183
186
|
For detailed installation instructions, see [Installation Guide](./docs/INSTALLATION.md).
|
|
@@ -370,7 +373,7 @@ import {
|
|
|
370
373
|
TokenAuthProvider,
|
|
371
374
|
getTimeout,
|
|
372
375
|
} from "@mcp-abap-adt/connection";
|
|
373
|
-
import type { ITokenRefresher } from "@mcp-abap-adt/interfaces-
|
|
376
|
+
import type { ITokenRefresher } from "@mcp-abap-adt/interfaces-auth";
|
|
374
377
|
|
|
375
378
|
// Token refresher provides token acquisition and refresh
|
|
376
379
|
// (created by @mcp-abap-adt/auth-broker or custom implementation)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ICertificateMaterialLoader, ISapConfig } from '@mcp-abap-adt/interfaces-adt';
|
|
2
1
|
import type { ICertificateMaterial } from '@mcp-abap-adt/interfaces-auth';
|
|
2
|
+
import type { ICertificateMaterialLoader, ISapConfig } from '@mcp-abap-adt/interfaces-auth-sap';
|
|
3
3
|
export declare class FileCertificateMaterialLoader implements ICertificateMaterialLoader {
|
|
4
4
|
load(config: ISapConfig): Promise<ICertificateMaterial>;
|
|
5
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileCertificateMaterialLoader.d.ts","sourceRoot":"","sources":["../../src/auth/FileCertificateMaterialLoader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"FileCertificateMaterialLoader.d.ts","sourceRoot":"","sources":["../../src/auth/FileCertificateMaterialLoader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EACV,0BAA0B,EAC1B,UAAU,EACX,MAAM,mCAAmC,CAAC;AAE3C,qBAAa,6BACX,YAAW,0BAA0B;IAE/B,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAyB9D"}
|
package/dist/auth/providers.d.ts
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* `CertificateAuthProvider` returns are what `CertificateAbapConnection`
|
|
8
8
|
* returned. Nothing about how a credential works changed; only who owns it.
|
|
9
9
|
*/
|
|
10
|
-
import type {
|
|
11
|
-
import type {
|
|
10
|
+
import type { IAuthProvider, ICertificateMaterial, IRenewableCredential, ITokenRefresher } from '@mcp-abap-adt/interfaces-auth';
|
|
11
|
+
import type { ICertificateMaterialLoader, ISapConfig } from '@mcp-abap-adt/interfaces-auth-sap';
|
|
12
12
|
/** Username and password, as `Basic base64(user:pass)`. */
|
|
13
13
|
export declare class BasicAuthProvider implements IAuthProvider {
|
|
14
14
|
private readonly username;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/auth/providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/auth/providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EAChB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,0BAA0B,EAC1B,UAAU,EACX,MAAM,mCAAmC,CAAC;AAE3C,2DAA2D;AAC3D,qBAAa,iBAAkB,YAAW,aAAa;IAiBnD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAjB3B,QAAQ,CAAC,IAAI,WAAW;IAExB,wEAAwE;IAClE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAE9B,yDAAyD;IACzD,OAAO,IAAI,MAAM,GAAG,IAAI;IAIxB,gFAAgF;IAChF,iBAAiB,IAAI,oBAAoB;gBAKtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM;IAG7B,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAGpD;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,iBAAkB,YAAW,oBAAoB;IAyB1D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAxBzB,QAAQ,CAAC,IAAI,WAAW;IAExB,wEAAwE;IAClE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAE9B,yDAAyD;IACzD,OAAO,IAAI,MAAM,GAAG,IAAI;IAIxB,gFAAgF;IAChF,iBAAiB,IAAI,oBAAoB;IAIzC;;;;;;;OAOG;gBAEgB,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAG7E;;;;;;;OAOG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUnD;;;;;;;;;;;;;;;;;;OAkBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B;AAED;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,aAAa;IAWxC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAV3C,QAAQ,CAAC,IAAI,UAAU;IAEvB,wEAAwE;IAClE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAE9B,gFAAgF;IAChF,iBAAiB,IAAI,oBAAoB;gBAIZ,cAAc,EAAE,MAAM;IAEnD,0EAA0E;IACpE,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAInD,8BAA8B;IAC9B,OAAO,IAAI,MAAM;CAGlB;AAED;;;;;;GAMG;AACH,qBAAa,uBAAwB,YAAW,aAAa;IAWzD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXzB,QAAQ,CAAC,IAAI,iBAAiB;IAE9B,yDAAyD;IACzD,OAAO,IAAI,MAAM,GAAG,IAAI;IAIxB,OAAO,CAAC,QAAQ,CAAqC;gBAGlC,MAAM,EAAE,0BAA0B,EAClC,MAAM,EAAE,UAAU;IAG/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B,+DAA+D;IACzD,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAInD,iBAAiB,IAAI,oBAAoB;CAS1C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ISapConfig, SapAuthType, SapConnectionType } from '@mcp-abap-adt/interfaces-
|
|
1
|
+
import type { ISapConfig, SapAuthType, SapConnectionType } from '@mcp-abap-adt/interfaces-auth-sap';
|
|
2
2
|
export type { SapAuthType, SapConnectionType };
|
|
3
3
|
export type SapConfig = ISapConfig;
|
|
4
4
|
export declare function sapConfigSignature(config: ISapConfig): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sapConfig.d.ts","sourceRoot":"","sources":["../../src/config/sapConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,iBAAiB,EAClB,MAAM,
|
|
1
|
+
{"version":3,"file":"sapConfig.d.ts","sourceRoot":"","sources":["../../src/config/sapConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,iBAAiB,EAClB,MAAM,mCAAmC,CAAC;AAG3C,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AAC/C,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC;AAEnC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CA4B7D"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { IAdtWireResponse, ICriticalSection, IRequestProfiling, ISessionLifecycleAware } from '@mcp-abap-adt/interfaces-adt';
|
|
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';
|
|
@@ -203,11 +203,6 @@ declare abstract class AbstractAbapConnection implements AbapConnection, ISessio
|
|
|
203
203
|
*
|
|
204
204
|
* Must be idempotent: `establishSession()` may prepare the same credential
|
|
205
205
|
* again, and does.
|
|
206
|
-
*
|
|
207
|
-
* Kerberos deliberately does NOT implement it. Minting the SPNEGO token this
|
|
208
|
-
* early changes when the exchange happens, and that connection is not
|
|
209
|
-
* production-tested — its preflight fails the way it already did, is caught
|
|
210
|
-
* inside the strategy, and the connection falls back to ICF as before.
|
|
211
206
|
*/
|
|
212
207
|
protected prepareCredential(): Promise<void>;
|
|
213
208
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractAbapConnection.d.ts","sourceRoot":"","sources":["../../src/connection/AbstractAbapConnection.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"AbstractAbapConnection.d.ts","sourceRoot":"","sources":["../../src/connection/AbstractAbapConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -274,11 +274,6 @@ class AbstractAbapConnection {
|
|
|
274
274
|
*
|
|
275
275
|
* Must be idempotent: `establishSession()` may prepare the same credential
|
|
276
276
|
* again, and does.
|
|
277
|
-
*
|
|
278
|
-
* Kerberos deliberately does NOT implement it. Minting the SPNEGO token this
|
|
279
|
-
* early changes when the exchange happens, and that connection is not
|
|
280
|
-
* production-tested — its preflight fails the way it already did, is caught
|
|
281
|
-
* inside the strategy, and the connection falls back to ICF as before.
|
|
282
277
|
*/
|
|
283
278
|
async prepareCredential() { }
|
|
284
279
|
/**
|
|
@@ -496,8 +491,8 @@ class AbstractAbapConnection {
|
|
|
496
491
|
this.lifecycle.forgetIdentity();
|
|
497
492
|
try {
|
|
498
493
|
// First, because the preflight below has to be able to authenticate: the
|
|
499
|
-
// credential of a certificate
|
|
500
|
-
// it is loaded
|
|
494
|
+
// credential of a certificate connection is not in hand until
|
|
495
|
+
// it is loaded, and assembling a request without it throws.
|
|
501
496
|
await this.prepareCredential();
|
|
502
497
|
// Before the establishing call, because on a system that has one this is
|
|
503
498
|
// what creates the session the rest of the connection runs in — and the
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* anything held against the old one;
|
|
26
26
|
* an unchanged one says nothing about whether the server still has it.
|
|
27
27
|
*/
|
|
28
|
-
import {
|
|
28
|
+
import type { AdtSessionErrorCode } from '@mcp-abap-adt/interfaces-adt';
|
|
29
29
|
export type TransitionKind = 'connect' | 'disconnect' | 'recover' | 'cleanup';
|
|
30
30
|
export interface RequestLease {
|
|
31
31
|
/** Teardown epoch at admission — the baseline a recovery compares against. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionLifecycle.d.ts","sourceRoot":"","sources":["../../src/session/SessionLifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"SessionLifecycle.d.ts","sourceRoot":"","sources":["../../src/session/SessionLifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGxE,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9E,MAAM,WAAW,YAAY;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,0FAA0F;IAC1F,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC9B,iFAAiF;IACjF,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,mBAAmB,EACzB,OAAO,CAAC,EAAE,MAAM,GACf,KAAK,GAAG;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,CAMvC;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAgD;IAC7D,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,UAAU,CAAK;IAEvB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAK;IAErB,OAAO,CAAC,IAAI,CAAuC;IACnD,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,WAAW,CAAiC;IAIpD,4EAA4E;IAC5E,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,0EAA0E;IAC1E,IAAI,QAAQ,IAAI,MAAM,GAAG,IAAI,CAM5B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;;;;;;;;;;;;OAaG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED;;;;;OAKG;IACH,aAAa,CAAC,WAAW,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa,GAAG,IAAI;IAOzE;;;;;;OAMG;IACH,cAAc,IAAI,IAAI;IAItB,gBAAgB,IAAI,IAAI;IAKxB;;;;;;OAMG;IACH,OAAO,CACL,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACvC,WAAW,GAAG,aAAa,GAAG,UAAU;IAiB3C,YAAY,IAAI,IAAI;IAMpB,4EAA4E;IAC5E,YAAY,IAAI,YAAY;IAiB5B,2FAA2F;IAC3F,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,OAAO;IAM3D,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,oBAAoB,GAAG,IAAI;IAelE,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAID;;;;;;;;;OASG;IACH,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAuBvE"}
|
package/dist/utils/timeouts.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ITimeoutConfig } from '@mcp-abap-adt/interfaces-
|
|
1
|
+
import type { ITimeoutConfig } from '@mcp-abap-adt/interfaces-adt';
|
|
2
2
|
export type TimeoutConfig = ITimeoutConfig;
|
|
3
3
|
export declare function getTimeoutConfig(): ITimeoutConfig;
|
|
4
4
|
export declare function getTimeout(type?: 'default' | 'csrf' | 'long' | number): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeouts.d.ts","sourceRoot":"","sources":["../../src/utils/timeouts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"timeouts.d.ts","sourceRoot":"","sources":["../../src/utils/timeouts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAGnE,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC;AAE3C,wBAAgB,gBAAgB,IAAI,cAAc,CAajD;AAED,wBAAgB,UAAU,CACxB,IAAI,GAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAkB,GACrD,MAAM,CAOR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Token refresh utilities for JWT authentication
|
|
3
3
|
*/
|
|
4
|
-
import type { ITokenRefreshResult } from '@mcp-abap-adt/interfaces-
|
|
4
|
+
import type { ITokenRefreshResult } from '@mcp-abap-adt/interfaces-auth';
|
|
5
5
|
export type TokenRefreshResult = ITokenRefreshResult;
|
|
6
6
|
/**
|
|
7
7
|
* Refreshes the access token using refresh token
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenRefresh.d.ts","sourceRoot":"","sources":["../../src/utils/tokenRefresh.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"tokenRefresh.d.ts","sourceRoot":"","sources":["../../src/utils/tokenRefresh.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAIzE,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAErD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,mBAAmB,CAAC,CA0C9B"}
|
package/docs/INDEX.md
CHANGED
|
@@ -46,7 +46,7 @@ mcp-abap-connection/
|
|
|
46
46
|
- 🔑 [JWT Auth Tools](./JWT_AUTH_TOOLS.md) - CLI tool for browser-based authentication
|
|
47
47
|
|
|
48
48
|
### Upgrading
|
|
49
|
-
- 🚚 [Migrating to 9.0.0](./MIGRATION-9.0.md) - the contracts split into `interfaces-adt`, `-auth`, `-network` and `-utils
|
|
49
|
+
- 🚚 [Migrating to 9.0.0](./MIGRATION-9.0.md) - the contracts split into `interfaces-adt`, `-auth`, `-network` and `-utils`, and this package stopped depending on the umbrella; `interfaces-auth-sap` joined them in the release after, when authentication split into what is SAP's and what is not
|
|
50
50
|
- 🚚 [Migrating to 7.0.0 and 8.0.0](./MIGRATION-8.0.md) - `sap-adt-request-id` and `X-sap-adt-profiling` on every request, `x-sap-security-session: use` on cloud, the contracts floor at 39, and `flushGoodbye()`
|
|
51
51
|
- 🚚 [Migrating to 6.0.0](./MIGRATION-6.0.md) - the factory and the per-credential classes are removed; the RFC wire is a transport you hand to the on-prem connector
|
|
52
52
|
- 🧱 [Migrating to 4.0.0](./MIGRATION-4.0.md) - JWT error classification: a 401 refreshes, a 403 propagates with the server's message
|
package/docs/INSTALLATION.md
CHANGED
|
@@ -205,16 +205,18 @@ anything your own signatures name has to be installed. Install the ones you
|
|
|
205
205
|
actually use:
|
|
206
206
|
|
|
207
207
|
```bash
|
|
208
|
-
npm install @mcp-abap-adt/interfaces-adt
|
|
209
|
-
npm install @mcp-abap-adt/interfaces-auth
|
|
210
|
-
npm install @mcp-abap-adt/interfaces-
|
|
211
|
-
npm install @mcp-abap-adt/interfaces-
|
|
208
|
+
npm install @mcp-abap-adt/interfaces-adt # IAbapConnection, ITimeoutConfig, ADT_SESSION_ERROR
|
|
209
|
+
npm install @mcp-abap-adt/interfaces-auth # IAuthProvider, IRenewableCredential, ITokenRefresher
|
|
210
|
+
npm install @mcp-abap-adt/interfaces-auth-sap # ISapConfig, SapAuthType, ICertificateMaterialLoader
|
|
211
|
+
npm install @mcp-abap-adt/interfaces-network # NETWORK_ERROR_CODES, the WebSocket contracts
|
|
212
|
+
npm install @mcp-abap-adt/interfaces-utils # ILogger
|
|
212
213
|
```
|
|
213
214
|
|
|
214
215
|
Nothing is needed here if you only call what this package exports — the types
|
|
215
|
-
travel with it. Do **not** reach for `@mcp-abap-adt/interfaces`:
|
|
216
|
-
|
|
217
|
-
|
|
216
|
+
travel with it. Do **not** reach for `@mcp-abap-adt/interfaces`: it is **deleted**
|
|
217
|
+
as of its 52.0.0, npm still serves 51.0.0 with every symbol re-exported and
|
|
218
|
+
deprecated, and installing that alongside a contract package at a different major
|
|
219
|
+
puts two copies of the same contract in your tree.
|
|
218
220
|
[Migration to 9.0.0](./MIGRATION-9.0.md) has the details.
|
|
219
221
|
|
|
220
222
|
### Create `tsconfig.json`
|
package/docs/MIGRATION-9.0.md
CHANGED
|
@@ -4,17 +4,19 @@
|
|
|
4
4
|
Nothing was renamed here, no signature moved, no behaviour is different. What
|
|
5
5
|
changed is where the *contracts* come from.
|
|
6
6
|
|
|
7
|
-
`@mcp-abap-adt/interfaces` split. The contracts now live in four
|
|
7
|
+
`@mcp-abap-adt/interfaces` split. The contracts now live in five packages — four in 9.0.0, and `interfaces-auth-sap` from the release that follows it, when authentication split into what is SAP's and what is not:
|
|
8
8
|
|
|
9
9
|
| Package | What is in it |
|
|
10
10
|
|---|---|
|
|
11
|
-
| `@mcp-abap-adt/interfaces-adt` | The ADT vocabulary: `IAbapConnection`, `IAbapRequestOptions`, `IAdtWireResponse`, `IAdtResponse`, `
|
|
12
|
-
| `@mcp-abap-adt/interfaces-auth` | The credential axis: `IAuthProvider`, `IRenewableCredential`, `ICertificateMaterial` |
|
|
13
|
-
| `@mcp-abap-adt/interfaces-
|
|
11
|
+
| `@mcp-abap-adt/interfaces-adt` | The ADT vocabulary: `IAbapConnection`, `IAbapRequestOptions`, `IAdtWireResponse`, `IAdtResponse`, `ITimeoutConfig`, and the capability atoms — `ISessionLifecycleAware`, `ICriticalSection`, `IRequestProfiling` — with `ADT_SESSION_ERROR` and `AdtSessionErrorCode` |
|
|
12
|
+
| `@mcp-abap-adt/interfaces-auth` | The credential axis: `IAuthProvider`, `IRenewableCredential`, `ICertificateMaterial`, `ITokenRefresher`, `ITokenRefreshResult` |
|
|
13
|
+
| `@mcp-abap-adt/interfaces-auth-sap` | The SAP side of it: `ISapConfig`, `SapAuthType`, `SapConnectionType`, `ICertificateMaterialLoader` |
|
|
14
|
+
| `@mcp-abap-adt/interfaces-network` | The wire: `NETWORK_ERROR_CODES` and the WebSocket contracts — `IWebSocketTransport`, `IWebSocketConnectOptions`, `IWebSocketCloseInfo`, `IWebSocketMessageEnvelope`, `IWebSocketMessageHandler` |
|
|
14
15
|
| `@mcp-abap-adt/interfaces-utils` | `ILogger` |
|
|
15
16
|
|
|
16
|
-
This package now depends on those
|
|
17
|
-
`@mcp-abap-adt/interfaces` at all
|
|
17
|
+
This package now depends on those five and **no longer depends on
|
|
18
|
+
`@mcp-abap-adt/interfaces` at all** — that package is itself deleted as of its
|
|
19
|
+
52.0.0, with npm serving 51.0.0 to anyone pinned to it. That is the breaking part, and it is the
|
|
18
20
|
only breaking part: a consumer who was getting the umbrella transitively through
|
|
19
21
|
this package stops getting it.
|
|
20
22
|
|
|
@@ -27,7 +29,7 @@ If you do import them, move each import to the package it now lives in. Install
|
|
|
27
29
|
the ones you name:
|
|
28
30
|
|
|
29
31
|
```bash
|
|
30
|
-
npm install @mcp-abap-adt/interfaces-adt @mcp-abap-adt/interfaces-auth
|
|
32
|
+
npm install @mcp-abap-adt/interfaces-adt @mcp-abap-adt/interfaces-auth @mcp-abap-adt/interfaces-auth-sap
|
|
31
33
|
```
|
|
32
34
|
|
|
33
35
|
Before:
|
|
@@ -40,7 +42,7 @@ After:
|
|
|
40
42
|
|
|
41
43
|
```ts
|
|
42
44
|
import type { IAuthProvider } from '@mcp-abap-adt/interfaces-auth';
|
|
43
|
-
import type { ITokenRefresher } from '@mcp-abap-adt/interfaces-
|
|
45
|
+
import type { ITokenRefresher } from '@mcp-abap-adt/interfaces-auth';
|
|
44
46
|
```
|
|
45
47
|
|
|
46
48
|
The table above says which package each name went to. Nothing was renamed, so
|
|
@@ -97,6 +99,7 @@ change for this package at a moment chosen by someone else.
|
|
|
97
99
|
```bash
|
|
98
100
|
npm ls @mcp-abap-adt/interfaces-adt # should print one version, deduped
|
|
99
101
|
npm ls @mcp-abap-adt/interfaces-auth
|
|
102
|
+
npm ls @mcp-abap-adt/interfaces-auth-sap
|
|
100
103
|
```
|
|
101
104
|
|
|
102
105
|
Two versions of a contract package in one tree is the failure this release is
|
package/docs/SCOPE.md
CHANGED
|
@@ -14,9 +14,9 @@ This package is **one component of the `@mcp-abap-adt/*` family**. Each package
|
|
|
14
14
|
| Concern | Belongs in |
|
|
15
15
|
|---|---|
|
|
16
16
|
| Token acquisition (SAML/OAuth2 flows, browser login, PKCE) | `@mcp-abap-adt/auth-broker` |
|
|
17
|
-
| Token validation, refresh, re-authentication, expiry tracking | consumer via `ITokenProvider` (from `@mcp-abap-adt/interfaces-
|
|
17
|
+
| Token validation, refresh, re-authentication, expiry tracking | consumer via `ITokenProvider` (from `@mcp-abap-adt/interfaces-auth`) |
|
|
18
18
|
| Session state persistence across processes | `@mcp-abap-adt/auth-broker` |
|
|
19
|
-
| Auth-type constants, provider error codes, auth lifecycle contracts | `@mcp-abap-adt/interfaces-
|
|
19
|
+
| Auth-type constants, provider error codes, auth lifecycle contracts | `@mcp-abap-adt/interfaces-auth`, `@mcp-abap-adt/interfaces-auth-sap` |
|
|
20
20
|
|
|
21
21
|
The rule: **if it is about *acquiring* or *refreshing* credentials, it is not our job.** We receive credentials that are valid at call time and use them. The consumer is responsible for handing us fresh ones — they know their IdP, their refresh cadence, their re-auth UX.
|
|
22
22
|
|
|
@@ -41,4 +41,4 @@ It forwards every `(name, value)` pair from the JS `Client(params)` object to `R
|
|
|
41
41
|
|
|
42
42
|
- [`INSTALLATION.md`](./INSTALLATION.md)
|
|
43
43
|
- [`USAGE.md`](./USAGE.md)
|
|
44
|
-
- Sibling packages: `@mcp-abap-adt/interfaces-adt`, `@mcp-abap-adt/interfaces-auth`, `@mcp-abap-adt/interfaces-network`, `@mcp-abap-adt/interfaces-utils`, `@mcp-abap-adt/sap-rfc-lite`, `@mcp-abap-adt/auth-broker`
|
|
44
|
+
- Sibling packages: `@mcp-abap-adt/interfaces-adt`, `@mcp-abap-adt/interfaces-auth`, `@mcp-abap-adt/interfaces-auth-sap`, `@mcp-abap-adt/interfaces-network`, `@mcp-abap-adt/interfaces-utils`, `@mcp-abap-adt/sap-rfc-lite`, `@mcp-abap-adt/auth-broker`
|
package/docs/USAGE.md
CHANGED
|
@@ -290,13 +290,6 @@ connection.setSessionType('stateless');
|
|
|
290
290
|
The connection owns its session, and that ownership is explicit rather than
|
|
291
291
|
implied. Four things follow from it.
|
|
292
292
|
|
|
293
|
-
> **A Kerberos limitation worth knowing.** SPNEGO here is single-leg: one
|
|
294
|
-
> `step('')` produces the token and the GSS context is discarded. If the server
|
|
295
|
-
> continues the exchange — a 401 carrying a `Negotiate` token, which
|
|
296
|
-
> [RFC 4559](https://www.rfc-editor.org/rfc/rfc4559) defines as a continuation —
|
|
297
|
-
> this client cannot feed that token back, so `connect()` fails with an error
|
|
298
|
-
> saying exactly that. Multi-leg SPNEGO is not implemented.
|
|
299
|
-
|
|
300
293
|
> **Availability.** `connect()` is on the shared `IAbapConnection` contract and
|
|
301
294
|
> works on every connection. The rest of this section is on the contract too, but
|
|
302
295
|
> as a **capability atom** in `@mcp-abap-adt/interfaces-adt` rather than as methods on
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcp-abap-adt/connection",
|
|
3
|
-
"version": "9.1
|
|
3
|
+
"version": "9.2.1",
|
|
4
4
|
"description": "ABAP connection layer for MCP ABAP ADT server",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -53,17 +53,17 @@
|
|
|
53
53
|
"node": ">=18.0.0"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@mcp-abap-adt/interfaces-adt": "^
|
|
57
|
-
"@mcp-abap-adt/interfaces-auth": "^1.
|
|
58
|
-
"@mcp-abap-adt/interfaces-
|
|
59
|
-
"@mcp-abap-adt/interfaces-
|
|
56
|
+
"@mcp-abap-adt/interfaces-adt": "^9.0.0",
|
|
57
|
+
"@mcp-abap-adt/interfaces-auth": "^1.2.0",
|
|
58
|
+
"@mcp-abap-adt/interfaces-auth-sap": "^1.0.0",
|
|
59
|
+
"@mcp-abap-adt/interfaces-network": "^2.0.0",
|
|
60
|
+
"@mcp-abap-adt/interfaces-utils": "^1.1.0",
|
|
60
61
|
"axios": "^1.16.0",
|
|
61
62
|
"commander": "^14.0.3",
|
|
62
63
|
"open": "^11.0.0"
|
|
63
64
|
},
|
|
64
65
|
"optionalDependencies": {
|
|
65
|
-
"@mcp-abap-adt/sap-rfc-lite": "^0.1.0"
|
|
66
|
-
"kerberos": "^2.1.0"
|
|
66
|
+
"@mcp-abap-adt/sap-rfc-lite": "^0.1.0"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
69
|
"@biomejs/biome": "^2.3.14",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kerberosSpnego.d.ts","sourceRoot":"","sources":["../../src/auth/kerberosSpnego.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBtE"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.generateSpnegoToken = generateSpnegoToken;
|
|
37
|
-
/** Thin, lazily-loaded wrapper over the optional `kerberos` native package. */
|
|
38
|
-
async function generateSpnegoToken(spn) {
|
|
39
|
-
// optional peer dep; typed as any because the module/types may be absent
|
|
40
|
-
let kerberos;
|
|
41
|
-
try {
|
|
42
|
-
// @ts-expect-error optional peer dependency — module may be absent at build time (TS2307)
|
|
43
|
-
kerberos = await Promise.resolve().then(() => __importStar(require('kerberos')));
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
throw new Error('Kerberos authentication requires the optional "kerberos" package. ' +
|
|
47
|
-
'Install it (needs GSSAPI dev libs on Linux / build tools on Windows): npm i kerberos');
|
|
48
|
-
}
|
|
49
|
-
const client = await kerberos.initializeClient(spn, {});
|
|
50
|
-
await client.step('');
|
|
51
|
-
const token = client.response;
|
|
52
|
-
if (!token) {
|
|
53
|
-
throw new Error('Kerberos: no SPNEGO token produced (no TGT? run kinit, or check SPN).');
|
|
54
|
-
}
|
|
55
|
-
return token;
|
|
56
|
-
}
|