@mcp-abap-adt/core 6.7.0 → 6.9.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 +20 -0
- package/README.md +38 -0
- package/dist/handlers/system/readonly/handleSearchSource.d.ts +1 -1
- package/dist/handlers/system/readonly/handleSearchSource.d.ts.map +1 -1
- package/dist/handlers/system/readonly/handleSearchSource.js +2 -2
- package/dist/handlers/system/readonly/handleSearchSource.js.map +1 -1
- package/dist/lib/config/applyAuthFields.d.ts +8 -0
- package/dist/lib/config/applyAuthFields.d.ts.map +1 -0
- package/dist/lib/config/applyAuthFields.js +30 -0
- package/dist/lib/config/applyAuthFields.js.map +1 -0
- package/dist/lib/config/parseAuthType.d.ts +4 -0
- package/dist/lib/config/parseAuthType.d.ts.map +1 -0
- package/dist/lib/config/parseAuthType.js +22 -0
- package/dist/lib/config/parseAuthType.js.map +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +6 -15
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/search-source/orchestrator.d.ts +1 -0
- package/dist/lib/search-source/orchestrator.d.ts.map +1 -1
- package/dist/lib/search-source/orchestrator.js +10 -3
- package/dist/lib/search-source/orchestrator.js.map +1 -1
- package/dist/lib/search-source/packageResolver.d.ts +13 -0
- package/dist/lib/search-source/packageResolver.d.ts.map +1 -0
- package/dist/lib/search-source/packageResolver.js +63 -0
- package/dist/lib/search-source/packageResolver.js.map +1 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +11 -16
- package/dist/lib/utils.js.map +1 -1
- package/docs/superpowers/plans/2026-05-23-cert-kerberos-auth.md +652 -0
- package/docs/superpowers/plans/innovations-from-sap-adt-mcp.md +103 -0
- package/docs/superpowers/specs/2026-05-23-cert-kerberos-auth-design.md +149 -0
- package/docs/user-guide/AVAILABLE_TOOLS.md +2 -2
- package/docs/user-guide/AVAILABLE_TOOLS_COMPACT.md +1 -1
- package/docs/user-guide/AVAILABLE_TOOLS_HIGH.md +1 -1
- package/docs/user-guide/AVAILABLE_TOOLS_LEGACY.md +2 -2
- package/docs/user-guide/AVAILABLE_TOOLS_LOW.md +1 -1
- package/docs/user-guide/AVAILABLE_TOOLS_READONLY.md +2 -2
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [6.9.0] - 2026-05-24
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- **Certificate (mTLS) and Kerberos (SPNEGO) authentication** for on-prem HTTP connections. Select via `SAP_AUTH_TYPE=certificate` or `SAP_AUTH_TYPE=kerberos`.
|
|
9
|
+
- Certificate: PEM (`SAP_CERT_PATH` + `SAP_CERT_KEY_PATH`) or PKCS#12 (`SAP_CERT_PFX_PATH` + optional `SAP_CERT_PASSPHRASE`). mTLS — no `SAP_USERNAME`/`SAP_PASSWORD` needed.
|
|
10
|
+
- Kerberos: single-leg Negotiate via the optional `kerberos` native package; SPN from `SAP_KERBEROS_SPN` (or derived `HTTP@<host>`, service class via `SAP_KERBEROS_SERVICE`). Requires a valid TGT (`kinit`) or keytab on the host.
|
|
11
|
+
- Both bypass the auth-broker (no browser/OAuth flow). Requires `@mcp-abap-adt/interfaces@^7.2.0`, `@mcp-abap-adt/connection@^1.9.0`.
|
|
12
|
+
|
|
13
|
+
### ⚠️ Help wanted — not yet validated on a live system
|
|
14
|
+
These two auth paths pass full unit coverage but have **not** been exercised against a real SAP system. If you have an on-prem system with **client-certificate** or **Kerberos/SPNEGO** SSO, please try `SAP_AUTH_TYPE=certificate`/`kerberos` and report results — especially whether Kerberos works with a single-leg Negotiate token or your system requires mutual-auth continuation. Please open an issue with what you see; feedback will confirm or refine these flows.
|
|
15
|
+
|
|
16
|
+
## [6.8.0] - 2026-05-16
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- `SearchSource.packages` now accepts ABAP `*` masks (e.g. `Z*`, `ZFI_*`, `/NS/Z*`) alongside exact dev-class names. Mask resolution reuses the same ADT informationsystem/search path that `SearchObject` uses for `objectType=DEVC`. Mask resolution is best-effort and capped at the ADT result window (1000 references); for certainty, pass concrete package names. The tool description carries the no-guarantees disclosure so an LLM caller sees it.
|
|
20
|
+
- `SearchSource.scanned.packages` now reports the resolved-and-deduplicated starting-package count (post-mask resolution, post-dedup) instead of raw input length. Closes #87.
|
|
21
|
+
|
|
22
|
+
### Notes
|
|
23
|
+
- `+` (single-char) wildcard probed against an onprem E19 system and found unsupported by the ADT `informationsystem/search` endpoint (despite SAP CP-pattern docs). Dropped from public examples; the resolver still detects `+` for forward-compat with backends that may honor it.
|
|
24
|
+
|
|
5
25
|
## [6.7.0] - 2026-05-14
|
|
6
26
|
|
|
7
27
|
### Added
|
package/README.md
CHANGED
|
@@ -301,6 +301,44 @@ SAP_CONNECTION_TYPE=rfc
|
|
|
301
301
|
|
|
302
302
|
See [RFC Setup Guide](docs/installation/RFC_SETUP.md) for prerequisites (SAP NW RFC SDK).
|
|
303
303
|
|
|
304
|
+
For client certificate (mTLS) authentication — on-prem HTTP only:
|
|
305
|
+
```bash
|
|
306
|
+
SAP_URL=https://your-sap-system.com
|
|
307
|
+
SAP_AUTH_TYPE=certificate
|
|
308
|
+
|
|
309
|
+
# PEM format (provide both files):
|
|
310
|
+
SAP_CERT_PATH=/path/to/client.crt
|
|
311
|
+
SAP_CERT_KEY_PATH=/path/to/client.key
|
|
312
|
+
|
|
313
|
+
# Or PKCS#12 format (alternative to PEM):
|
|
314
|
+
# SAP_CERT_PFX_PATH=/path/to/client.pfx
|
|
315
|
+
# SAP_CERT_PASSPHRASE=your-passphrase
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
For Kerberos (SPNEGO) authentication — on-prem HTTP only:
|
|
319
|
+
```bash
|
|
320
|
+
SAP_URL=https://your-sap-system.com
|
|
321
|
+
SAP_AUTH_TYPE=kerberos
|
|
322
|
+
|
|
323
|
+
# Optional: explicit SPN (default: HTTP@<host>)
|
|
324
|
+
# SAP_KERBEROS_SPN=HTTP@mysaphost.corp.example
|
|
325
|
+
# Optional: service class used to derive the SPN when SAP_KERBEROS_SPN is unset (default: HTTP)
|
|
326
|
+
# SAP_KERBEROS_SERVICE=HTTP
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
**Certificate auth notes:**
|
|
330
|
+
- Identifies the client via mTLS — no `SAP_USERNAME` / `SAP_PASSWORD` required.
|
|
331
|
+
- Provide either PEM files (`SAP_CERT_PATH` + `SAP_CERT_KEY_PATH`) or a PKCS#12 file (`SAP_CERT_PFX_PATH`), not both.
|
|
332
|
+
- On-prem HTTP connections only (`SAP_CONNECTION_TYPE=rfc` is not supported).
|
|
333
|
+
|
|
334
|
+
**Kerberos auth notes:**
|
|
335
|
+
- Requires a valid Kerberos ticket on the host before starting the server. Obtain one with `kinit` or a keytab.
|
|
336
|
+
- The optional [`kerberos`](https://www.npmjs.com/package/kerberos) npm package must be installed (needs GSSAPI dev libs on Linux / build tools on Windows): `npm i kerberos`.
|
|
337
|
+
- No `SAP_USERNAME` / `SAP_PASSWORD` required — identity comes from the TGT.
|
|
338
|
+
- Both auth types bypass the auth-broker; use `.env` directly.
|
|
339
|
+
|
|
340
|
+
> **⚠️ Help wanted — not yet validated on a live system.** Certificate and Kerberos auth pass full unit coverage but have not been tested against a real SAP system. If you have on-prem **client-certificate** or **Kerberos/SPNEGO** SSO, please try it and [open an issue](https://github.com/fr0ster/mcp-abap-adt/issues) with results — especially whether Kerberos succeeds with a single-leg Negotiate token or your system needs mutual-auth continuation.
|
|
341
|
+
|
|
304
342
|
**Generate .env from Service Key (JWT):**
|
|
305
343
|
```bash
|
|
306
344
|
# Install the connection package globally (one-time setup)
|
|
@@ -4,7 +4,7 @@ import { type OrchestratorInput } from '../../../lib/search-source/orchestrator'
|
|
|
4
4
|
export declare const TOOL_DEFINITION: {
|
|
5
5
|
readonly name: "SearchSource";
|
|
6
6
|
readonly available_in: readonly ["onprem", "legacy"];
|
|
7
|
-
readonly description: "[read-only] Search ABAP source text inside one or more packages (programs, function groups, classes). Onprem-only (cloud lacks an indexed source-search endpoint). Comments are searched by default; set exclude_comments=true to drop col-1 `*` and full-line `\"` comments. The `version` parameter affects PROG and CLAS main include reads only — FUGR subinclude reads always go against the active version (the include endpoint exposes no version selector).";
|
|
7
|
+
readonly description: "[read-only] Search ABAP source text inside one or more packages (programs, function groups, classes). Onprem-only (cloud lacks an indexed source-search endpoint). `packages` accepts `*` masks (Z*, ZFI_*, /NS/Z*) alongside exact names; mask resolution is best-effort and scoped to the ADT repository-search result window — there is no guarantee that every matching package is scanned. If you need certainty, pass concrete package names. When using masks, narrow the mask itself and use `object_types`, `object_filter`, and `max_objects` as scan-target controls that apply after package resolution. Comments are searched by default; set exclude_comments=true to drop col-1 `*` and full-line `\"` comments. The `version` parameter affects PROG and CLAS main include reads only — FUGR subinclude reads always go against the active version (the include endpoint exposes no version selector).";
|
|
8
8
|
readonly inputSchema: {
|
|
9
9
|
readonly query: z.ZodString;
|
|
10
10
|
readonly query2: z.ZodOptional<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleSearchSource.d.ts","sourceRoot":"","sources":["../../../../src/handlers/system/readonly/handleSearchSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,yCAAyC,CAAC;AAGjD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"handleSearchSource.d.ts","sourceRoot":"","sources":["../../../../src/handlers/system/readonly/handleSearchSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,yCAAyC,CAAC;AAGjD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;CAqFlB,CAAC;AAEX,KAAK,gBAAgB,GAAG,iBAAiB,CAAC;AAE1C,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,gBAAgB;;;;;;GAsBvB"}
|
|
@@ -41,7 +41,7 @@ const utils_1 = require("../../../lib/utils");
|
|
|
41
41
|
exports.TOOL_DEFINITION = {
|
|
42
42
|
name: 'SearchSource',
|
|
43
43
|
available_in: ['onprem', 'legacy'],
|
|
44
|
-
description: '[read-only] Search ABAP source text inside one or more packages (programs, function groups, classes). Onprem-only (cloud lacks an indexed source-search endpoint). Comments are searched by default; set exclude_comments=true to drop col-1 `*` and full-line `"` comments. The `version` parameter affects PROG and CLAS main include reads only — FUGR subinclude reads always go against the active version (the include endpoint exposes no version selector).',
|
|
44
|
+
description: '[read-only] Search ABAP source text inside one or more packages (programs, function groups, classes). Onprem-only (cloud lacks an indexed source-search endpoint). `packages` accepts `*` masks (Z*, ZFI_*, /NS/Z*) alongside exact names; mask resolution is best-effort and scoped to the ADT repository-search result window — there is no guarantee that every matching package is scanned. If you need certainty, pass concrete package names. When using masks, narrow the mask itself and use `object_types`, `object_filter`, and `max_objects` as scan-target controls that apply after package resolution. Comments are searched by default; set exclude_comments=true to drop col-1 `*` and full-line `"` comments. The `version` parameter affects PROG and CLAS main include reads only — FUGR subinclude reads always go against the active version (the include endpoint exposes no version selector).',
|
|
45
45
|
inputSchema: {
|
|
46
46
|
query: z
|
|
47
47
|
.string()
|
|
@@ -59,7 +59,7 @@ exports.TOOL_DEFINITION = {
|
|
|
59
59
|
packages: z
|
|
60
60
|
.array(z.string().min(1))
|
|
61
61
|
.min(1)
|
|
62
|
-
.describe('Packages to scan
|
|
62
|
+
.describe('Packages to scan. Each entry is either an exact dev-class name or a `*` mask (* = any chars). Examples: "ZFI_OBSOLETE", "Z*", "ZFI_*", "/NS/Z*".'),
|
|
63
63
|
include_subpackages: z
|
|
64
64
|
.boolean()
|
|
65
65
|
.optional()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleSearchSource.js","sourceRoot":"","sources":["../../../../src/handlers/system/readonly/handleSearchSource.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"handleSearchSource.js","sourceRoot":"","sources":["../../../../src/handlers/system/readonly/handleSearchSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SapConfig } from '@mcp-abap-adt/connection';
|
|
2
|
+
/**
|
|
3
|
+
* Populate auth-type-specific fields on a SapConfig from env.
|
|
4
|
+
* Returns true if it handled the auth type (so the caller skips the basic user/pass requirement).
|
|
5
|
+
* Handles: certificate, kerberos. Returns false for basic/saml (caller handles those).
|
|
6
|
+
*/
|
|
7
|
+
export declare function applyCertKerberosFields(config: SapConfig, env: NodeJS.ProcessEnv): boolean;
|
|
8
|
+
//# sourceMappingURL=applyAuthFields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyAuthFields.d.ts","sourceRoot":"","sources":["../../../src/lib/config/applyAuthFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,OAAO,CAkBT"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyCertKerberosFields = applyCertKerberosFields;
|
|
4
|
+
/**
|
|
5
|
+
* Populate auth-type-specific fields on a SapConfig from env.
|
|
6
|
+
* Returns true if it handled the auth type (so the caller skips the basic user/pass requirement).
|
|
7
|
+
* Handles: certificate, kerberos. Returns false for basic/saml (caller handles those).
|
|
8
|
+
*/
|
|
9
|
+
function applyCertKerberosFields(config, env) {
|
|
10
|
+
if (config.authType === 'certificate') {
|
|
11
|
+
if (env.SAP_CERT_PATH)
|
|
12
|
+
config.certPath = env.SAP_CERT_PATH.trim();
|
|
13
|
+
if (env.SAP_CERT_KEY_PATH)
|
|
14
|
+
config.certKeyPath = env.SAP_CERT_KEY_PATH.trim();
|
|
15
|
+
if (env.SAP_CERT_PFX_PATH)
|
|
16
|
+
config.certPfxPath = env.SAP_CERT_PFX_PATH.trim();
|
|
17
|
+
if (env.SAP_CERT_PASSPHRASE)
|
|
18
|
+
config.certPassphrase = env.SAP_CERT_PASSPHRASE; // no trim — passphrase may contain meaningful whitespace
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
if (config.authType === 'kerberos') {
|
|
22
|
+
if (env.SAP_KERBEROS_SPN)
|
|
23
|
+
config.kerberosSpn = env.SAP_KERBEROS_SPN.trim();
|
|
24
|
+
if (env.SAP_KERBEROS_SERVICE)
|
|
25
|
+
config.kerberosService = env.SAP_KERBEROS_SERVICE.trim();
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=applyAuthFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyAuthFields.js","sourceRoot":"","sources":["../../../src/lib/config/applyAuthFields.ts"],"names":[],"mappings":";;AAOA,0DAqBC;AA1BD;;;;GAIG;AACH,SAAgB,uBAAuB,CACrC,MAAiB,EACjB,GAAsB;IAEtB,IAAI,MAAM,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,aAAa;YAAE,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAClE,IAAI,GAAG,CAAC,iBAAiB;YACvB,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,GAAG,CAAC,iBAAiB;YACvB,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,GAAG,CAAC,mBAAmB;YACzB,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,yDAAyD;QAC5G,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,gBAAgB;YAAE,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC3E,IAAI,GAAG,CAAC,oBAAoB;YAC1B,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SapAuthType } from '@mcp-abap-adt/interfaces';
|
|
2
|
+
/** Resolve SAP auth type from env. SAP_JWT_TOKEN forces jwt; SAP_AUTH_TYPE is explicit; default basic. */
|
|
3
|
+
export declare function parseAuthType(env: NodeJS.ProcessEnv | Record<string, string | undefined>): SapAuthType;
|
|
4
|
+
//# sourceMappingURL=parseAuthType.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseAuthType.d.ts","sourceRoot":"","sources":["../../../src/lib/config/parseAuthType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,0GAA0G;AAC1G,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1D,WAAW,CAeb"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseAuthType = parseAuthType;
|
|
4
|
+
/** Resolve SAP auth type from env. SAP_JWT_TOKEN forces jwt; SAP_AUTH_TYPE is explicit; default basic. */
|
|
5
|
+
function parseAuthType(env) {
|
|
6
|
+
if (env.SAP_JWT_TOKEN)
|
|
7
|
+
return 'jwt';
|
|
8
|
+
const raw = env.SAP_AUTH_TYPE?.trim().toLowerCase();
|
|
9
|
+
if (!raw)
|
|
10
|
+
return 'basic';
|
|
11
|
+
if (raw === 'xsuaa')
|
|
12
|
+
return 'jwt';
|
|
13
|
+
if (raw === 'basic' ||
|
|
14
|
+
raw === 'jwt' ||
|
|
15
|
+
raw === 'saml' ||
|
|
16
|
+
raw === 'certificate' ||
|
|
17
|
+
raw === 'kerberos') {
|
|
18
|
+
return raw;
|
|
19
|
+
}
|
|
20
|
+
return 'basic';
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=parseAuthType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseAuthType.js","sourceRoot":"","sources":["../../../src/lib/config/parseAuthType.ts"],"names":[],"mappings":";;AAGA,sCAiBC;AAlBD,0GAA0G;AAC1G,SAAgB,aAAa,CAC3B,GAA2D;IAE3D,IAAI,GAAG,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpD,IAAI,CAAC,GAAG;QAAE,OAAO,OAAO,CAAC;IACzB,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAClC,IACE,GAAG,KAAK,OAAO;QACf,GAAG,KAAK,KAAK;QACb,GAAG,KAAK,MAAM;QACd,GAAG,KAAK,aAAa;QACrB,GAAG,KAAK,UAAU,EAClB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAoB1D,wBAAgB,SAAS,IAAI,SAAS,CAsHrC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,SAAS,QAQtD"}
|
package/dist/lib/config.js
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.getConfig = getConfig;
|
|
10
10
|
exports.setSapConfigOverride = setSapConfigOverride;
|
|
11
|
+
const applyAuthFields_js_1 = require("./config/applyAuthFields.js");
|
|
12
|
+
const parseAuthType_js_1 = require("./config/parseAuthType.js");
|
|
11
13
|
// Don't import setConfigOverride from utils.ts to avoid circular dependency
|
|
12
14
|
// setConfigOverride will be called lazily if needed
|
|
13
15
|
let sapConfigOverride;
|
|
@@ -46,21 +48,7 @@ function getConfig() {
|
|
|
46
48
|
client = client.trim();
|
|
47
49
|
}
|
|
48
50
|
// Auto-detect auth type: JWT token → jwt; SAP_AUTH_TYPE → explicit; default → basic
|
|
49
|
-
|
|
50
|
-
if (process.env.SAP_JWT_TOKEN) {
|
|
51
|
-
authType = 'jwt';
|
|
52
|
-
}
|
|
53
|
-
else if (process.env.SAP_AUTH_TYPE) {
|
|
54
|
-
const rawAuthType = process.env.SAP_AUTH_TYPE.trim().toLowerCase();
|
|
55
|
-
if (rawAuthType === 'xsuaa') {
|
|
56
|
-
authType = 'jwt';
|
|
57
|
-
}
|
|
58
|
-
else if (rawAuthType === 'basic' ||
|
|
59
|
-
rawAuthType === 'jwt' ||
|
|
60
|
-
rawAuthType === 'saml') {
|
|
61
|
-
authType = rawAuthType;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
51
|
+
const authType = (0, parseAuthType_js_1.parseAuthType)(process.env);
|
|
64
52
|
// Connection type: http (default) or rfc
|
|
65
53
|
const connectionType = process.env.SAP_CONNECTION_TYPE?.trim().toLowerCase() === 'rfc'
|
|
66
54
|
? 'rfc'
|
|
@@ -115,6 +103,9 @@ function getConfig() {
|
|
|
115
103
|
if (uaaClientSecret)
|
|
116
104
|
config.uaaClientSecret = uaaClientSecret.trim();
|
|
117
105
|
}
|
|
106
|
+
else if ((0, applyAuthFields_js_1.applyCertKerberosFields)(config, process.env)) {
|
|
107
|
+
// certificate / kerberos: no username/password required
|
|
108
|
+
}
|
|
118
109
|
else {
|
|
119
110
|
// basic (and rfc connection type) require username/password
|
|
120
111
|
const username = process.env.SAP_USERNAME;
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,7 @@ export interface OrchestratorResult {
|
|
|
45
45
|
export interface OrchestratorDeps {
|
|
46
46
|
fetchPackageContents: PackageContentsFetcher;
|
|
47
47
|
sourceReader: ReadSourceUnitsDeps;
|
|
48
|
+
resolvePackages: (entries: string[]) => Promise<string[]>;
|
|
48
49
|
}
|
|
49
50
|
export declare function runSearchSource(deps: OrchestratorDeps, input: OrchestratorInput): Promise<OrchestratorResult>;
|
|
50
51
|
export declare function runSearchSourceWithContext(ctx: HandlerContext, input: OrchestratorInput): Promise<OrchestratorResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/lib/search-source/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/lib/search-source/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAEL,KAAK,mBAAmB,EAExB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACzC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,cAAc,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,cAAc,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,SAAS,EAAE;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC;CAChE;AAED,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB,EAAE,sBAAsB,CAAC;IAC7C,YAAY,EAAE,mBAAmB,CAAC;IAClC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC3D;AA8BD,wBAAsB,eAAe,CACnC,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAuI7B;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAY7B"}
|
|
@@ -4,6 +4,7 @@ exports.runSearchSource = runSearchSource;
|
|
|
4
4
|
exports.runSearchSourceWithContext = runSearchSourceWithContext;
|
|
5
5
|
const lineScanner_1 = require("./lineScanner");
|
|
6
6
|
const packageEnumerator_1 = require("./packageEnumerator");
|
|
7
|
+
const packageResolver_1 = require("./packageResolver");
|
|
7
8
|
const sourceReader_1 = require("./sourceReader");
|
|
8
9
|
const DEFAULTS = {
|
|
9
10
|
include_subpackages: true,
|
|
@@ -43,13 +44,16 @@ async function runSearchSource(deps, input) {
|
|
|
43
44
|
const concurrency = Math.min(16, Math.max(1, input.concurrency ?? DEFAULTS.concurrency));
|
|
44
45
|
const emitNoHits = input.emit_no_hits ?? DEFAULTS.emit_no_hits;
|
|
45
46
|
const version = input.version ?? DEFAULTS.version;
|
|
47
|
+
const resolvedPackages = await deps.resolvePackages(input.packages);
|
|
46
48
|
const enumerateInput = {
|
|
47
|
-
packages:
|
|
49
|
+
packages: resolvedPackages,
|
|
48
50
|
include_subpackages: input.include_subpackages ?? DEFAULTS.include_subpackages,
|
|
49
51
|
object_filter: input.object_filter,
|
|
50
52
|
object_types: input.object_types ?? DEFAULTS.object_types,
|
|
51
53
|
};
|
|
52
|
-
const allTargets =
|
|
54
|
+
const allTargets = resolvedPackages.length === 0
|
|
55
|
+
? []
|
|
56
|
+
: await (0, packageEnumerator_1.enumerateScanTargets)(deps.fetchPackageContents, enumerateInput);
|
|
53
57
|
const truncatedByMaxObjects = allTargets.length > maxObjects;
|
|
54
58
|
const targets = truncatedByMaxObjects
|
|
55
59
|
? allTargets.slice(0, maxObjects)
|
|
@@ -136,7 +140,7 @@ async function runSearchSource(deps, input) {
|
|
|
136
140
|
const result = {
|
|
137
141
|
results: allHits,
|
|
138
142
|
scanned: {
|
|
139
|
-
packages:
|
|
143
|
+
packages: resolvedPackages.length,
|
|
140
144
|
objects: targets.length,
|
|
141
145
|
sources: sourcesScanned,
|
|
142
146
|
},
|
|
@@ -150,9 +154,12 @@ async function runSearchSource(deps, input) {
|
|
|
150
154
|
return result;
|
|
151
155
|
}
|
|
152
156
|
function runSearchSourceWithContext(ctx, input) {
|
|
157
|
+
const searchObjects = (0, packageResolver_1.createPackagePatternResolver)(ctx);
|
|
158
|
+
const resolverDeps = { searchObjects };
|
|
153
159
|
return runSearchSource({
|
|
154
160
|
fetchPackageContents: (0, packageEnumerator_1.createPackageContentsFetcher)(ctx),
|
|
155
161
|
sourceReader: (0, sourceReader_1.createSourceReaderDeps)(ctx),
|
|
162
|
+
resolvePackages: (entries) => (0, packageResolver_1.resolvePackagePatterns)(resolverDeps, entries),
|
|
156
163
|
}, input);
|
|
157
164
|
}
|
|
158
165
|
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/lib/search-source/orchestrator.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/lib/search-source/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { HandlerContext } from '../handlers/interfaces';
|
|
2
|
+
export interface SearchObjectsArgs {
|
|
3
|
+
query: string;
|
|
4
|
+
objectType: 'DEVC';
|
|
5
|
+
maxResults: number;
|
|
6
|
+
}
|
|
7
|
+
export type SearchObjectsFn = (args: SearchObjectsArgs) => Promise<string[]>;
|
|
8
|
+
export interface PackageResolverDeps {
|
|
9
|
+
searchObjects: SearchObjectsFn;
|
|
10
|
+
}
|
|
11
|
+
export declare function resolvePackagePatterns(deps: PackageResolverDeps, entries: string[]): Promise<string[]>;
|
|
12
|
+
export declare function createPackagePatternResolver(ctx: HandlerContext): SearchObjectsFn;
|
|
13
|
+
//# sourceMappingURL=packageResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageResolver.d.ts","sourceRoot":"","sources":["../../../src/lib/search-source/packageResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,eAAe,CAAC;CAChC;AAQD,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAwBnB;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,cAAc,GAClB,eAAe,CAyBjB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolvePackagePatterns = resolvePackagePatterns;
|
|
4
|
+
exports.createPackagePatternResolver = createPackagePatternResolver;
|
|
5
|
+
const clients_1 = require("../clients");
|
|
6
|
+
const WILDCARD_RE = /[*+]/;
|
|
7
|
+
function isPattern(entry) {
|
|
8
|
+
return WILDCARD_RE.test(entry);
|
|
9
|
+
}
|
|
10
|
+
async function resolvePackagePatterns(deps, entries) {
|
|
11
|
+
const exact = [];
|
|
12
|
+
const resolved = [];
|
|
13
|
+
for (const entry of entries) {
|
|
14
|
+
if (isPattern(entry)) {
|
|
15
|
+
const names = await deps.searchObjects({
|
|
16
|
+
query: entry,
|
|
17
|
+
objectType: 'DEVC',
|
|
18
|
+
maxResults: 1000,
|
|
19
|
+
});
|
|
20
|
+
resolved.push(...names);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
exact.push(entry);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const seen = new Set();
|
|
27
|
+
const out = [];
|
|
28
|
+
for (const name of [...exact, ...resolved]) {
|
|
29
|
+
const key = name.toUpperCase();
|
|
30
|
+
if (seen.has(key))
|
|
31
|
+
continue;
|
|
32
|
+
seen.add(key);
|
|
33
|
+
out.push(name);
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
function createPackagePatternResolver(ctx) {
|
|
38
|
+
const client = (0, clients_1.createAdtClient)(ctx.connection, ctx.logger);
|
|
39
|
+
const utils = client.getUtils();
|
|
40
|
+
return async ({ query, objectType, maxResults }) => {
|
|
41
|
+
const response = await utils.searchObjects({
|
|
42
|
+
query,
|
|
43
|
+
objectType,
|
|
44
|
+
maxResults,
|
|
45
|
+
});
|
|
46
|
+
const status = response?.status;
|
|
47
|
+
if (status && status !== 200) {
|
|
48
|
+
throw new Error(`ADT request failed (status ${status})`);
|
|
49
|
+
}
|
|
50
|
+
const xml = typeof response?.data === 'string'
|
|
51
|
+
? response.data
|
|
52
|
+
: String(response?.data ?? '');
|
|
53
|
+
const names = [];
|
|
54
|
+
for (const m of xml.matchAll(/<adtcore:objectReference\s+([^>]*)\/>/g)) {
|
|
55
|
+
const attrs = m[1];
|
|
56
|
+
const name = attrs.match(/adtcore:name="([^"]*)"/)?.[1];
|
|
57
|
+
if (name)
|
|
58
|
+
names.push(name);
|
|
59
|
+
}
|
|
60
|
+
return names;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=packageResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageResolver.js","sourceRoot":"","sources":["../../../src/lib/search-source/packageResolver.ts"],"names":[],"mappings":";;AAqBA,wDA2BC;AAED,oEA2BC;AA7ED,wCAA6C;AAe7C,MAAM,WAAW,GAAG,MAAM,CAAC;AAE3B,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAC1C,IAAyB,EACzB,OAAiB;IAEjB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC;gBACrC,KAAK,EAAE,KAAK;gBACZ,UAAU,EAAE,MAAM;gBAClB,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,4BAA4B,CAC1C,GAAmB;IAEnB,MAAM,MAAM,GAAG,IAAA,yBAAe,EAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC;YACzC,KAAK;YACL,UAAU;YACV,UAAU;SACX,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,CAAC;QAChC,IAAI,MAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,GAAG,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,GAAG,GACP,OAAO,QAAQ,EAAE,IAAI,KAAK,QAAQ;YAChC,CAAC,CAAC,QAAQ,CAAC,IAAI;YACf,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QACnC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,wCAAwC,CAAC,EAAE,CAAC;YACvE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/lib/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,EAEL,UAAU,EACV,gBAAgB,EAChB,KAAK,SAAS,EAEf,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/utils.js
CHANGED
|
@@ -85,6 +85,8 @@ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
|
85
85
|
Object.defineProperty(exports, "ErrorCode", { enumerable: true, get: function () { return types_js_1.ErrorCode; } });
|
|
86
86
|
Object.defineProperty(exports, "McpError", { enumerable: true, get: function () { return types_js_1.McpError; } });
|
|
87
87
|
const axios_1 = require("axios");
|
|
88
|
+
const applyAuthFields_js_1 = require("./config/applyAuthFields.js");
|
|
89
|
+
const parseAuthType_js_1 = require("./config/parseAuthType.js");
|
|
88
90
|
const connectionEvents_1 = require("./connectionEvents");
|
|
89
91
|
const logger_1 = require("./logger");
|
|
90
92
|
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
|
|
@@ -1129,11 +1131,15 @@ SAP CONNECTION (.env file):
|
|
|
1129
1131
|
Example: https://your-system.sap.com
|
|
1130
1132
|
SAP_CLIENT SAP client number (required for basic auth)
|
|
1131
1133
|
Example: 100
|
|
1132
|
-
SAP_AUTH_TYPE Authentication type: basic|jwt (default: basic)
|
|
1134
|
+
SAP_AUTH_TYPE Authentication type: basic|jwt|saml|certificate|kerberos (default: basic)
|
|
1133
1135
|
SAP_CONNECTION_TYPE Connection type: http|rfc (default: http)
|
|
1134
1136
|
SAP_USERNAME SAP username (required for basic auth)
|
|
1135
1137
|
SAP_PASSWORD SAP password (required for basic auth)
|
|
1136
1138
|
SAP_JWT_TOKEN JWT token (required for jwt auth)
|
|
1139
|
+
SAP_CERT_PATH / SAP_CERT_KEY_PATH Client cert + key (PEM) for certificate auth
|
|
1140
|
+
SAP_CERT_PFX_PATH / SAP_CERT_PASSPHRASE PKCS#12 cert for certificate auth (alternative to PEM)
|
|
1141
|
+
SAP_KERBEROS_SPN SPN for kerberos auth (default HTTP@<host>)
|
|
1142
|
+
SAP_KERBEROS_SERVICE Service class for SPN derivation when SAP_KERBEROS_SPN unset (default HTTP)
|
|
1137
1143
|
|
|
1138
1144
|
GENERATING .ENV FROM SERVICE KEY (JWT Authentication):
|
|
1139
1145
|
To generate .env file from SAP BTP service key JSON file, install the
|
|
@@ -1579,21 +1585,7 @@ function getConfig() {
|
|
|
1579
1585
|
client = client.trim();
|
|
1580
1586
|
}
|
|
1581
1587
|
// Auto-detect auth type: JWT token → jwt; SAP_AUTH_TYPE → explicit; default → basic
|
|
1582
|
-
|
|
1583
|
-
if (process.env.SAP_JWT_TOKEN) {
|
|
1584
|
-
authType = 'jwt';
|
|
1585
|
-
}
|
|
1586
|
-
else if (process.env.SAP_AUTH_TYPE) {
|
|
1587
|
-
const rawAuthType = process.env.SAP_AUTH_TYPE.trim().toLowerCase();
|
|
1588
|
-
if (rawAuthType === 'xsuaa') {
|
|
1589
|
-
authType = 'jwt';
|
|
1590
|
-
}
|
|
1591
|
-
else if (rawAuthType === 'basic' ||
|
|
1592
|
-
rawAuthType === 'jwt' ||
|
|
1593
|
-
rawAuthType === 'saml') {
|
|
1594
|
-
authType = rawAuthType;
|
|
1595
|
-
}
|
|
1596
|
-
}
|
|
1588
|
+
const authType = (0, parseAuthType_js_1.parseAuthType)(process.env);
|
|
1597
1589
|
// Connection type: http (default) or rfc
|
|
1598
1590
|
const connectionType = process.env.SAP_CONNECTION_TYPE?.trim().toLowerCase() === 'rfc'
|
|
1599
1591
|
? 'rfc'
|
|
@@ -1648,6 +1640,9 @@ function getConfig() {
|
|
|
1648
1640
|
if (uaaClientSecret)
|
|
1649
1641
|
config.uaaClientSecret = uaaClientSecret.trim();
|
|
1650
1642
|
}
|
|
1643
|
+
else if ((0, applyAuthFields_js_1.applyCertKerberosFields)(config, process.env)) {
|
|
1644
|
+
// certificate / kerberos: no username/password required
|
|
1645
|
+
}
|
|
1651
1646
|
else {
|
|
1652
1647
|
// basic and rfc both require username/password
|
|
1653
1648
|
const username = process.env.SAP_USERNAME;
|