@mcp-abap-adt/proxy 1.2.1 → 1.3.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,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.3.0] - 2026-05-28
11
+
12
+ ### Added
13
+ - **CLI flags override values from `--config`** — when a config file is loaded via `--config`/`-c`, explicit CLI flags (`--btp`, `--target-url`/`--url`, `--unsafe`, `--browser`, `--browser-auth-port`, `--header`) now override matching values from the file instead of being silently dropped. `--header` entries merge with `defaultHeaders` (CLI keys win on conflict). The proxy logs which keys were overridden so the precedence is visible.
14
+ - **`--help` / `-h`** — full CLI usage printer covering auth, browser, transport flags and the documented environment variables. Previously the proxy had no help output at all, making the `--browser none` / `--browser-auth-port` flags effectively undiscoverable.
15
+ - **Graceful shutdown on `SIGINT` / `SIGTERM`** — the proxy now wires both signals to `shutdown()`, which closes the MCP server and HTTP listener, clears pending JWT refresh timers, drops the token cache, and releases per-destination auth brokers. Previously these resources were only released on hard process exit.
16
+
17
+ ### Fixed
18
+ - `BtpProxy.dispose()` now clears the token cache and the per-destination broker map in addition to refresh timers, so a clean shutdown actually releases all auth state.
19
+
10
20
  ## [1.2.1] - 2026-05-26
11
21
 
12
22
  ### Security
package/dist/index.js CHANGED
@@ -567,9 +567,88 @@ Authorization source: ${authSourceObj}`;
567
567
  exports.McpAbapAdtProxyServer = McpAbapAdtProxyServer;
568
568
  // Export for use in bin script
569
569
  exports.default = McpAbapAdtProxyServer;
570
+ /**
571
+ * Print CLI usage and exit.
572
+ */
573
+ function printHelp() {
574
+ const help = `Usage: mcp-abap-adt-proxy [options]
575
+
576
+ Authorization proxy for MCP clients (Cline, Claude Code, etc.) that cannot
577
+ authenticate on their own to MCP servers deployed on SAP BTP.
578
+
579
+ CONFIGURATION
580
+ -c, --config <path> Load config from YAML/JSON file. CLI flags below
581
+ override values from the file.
582
+
583
+ AUTHENTICATION (BTP / XSUAA)
584
+ --btp <destination> BTP destination name. Service key is read from
585
+ ~/.config/mcp-abap-adt/service-keys/<dest>.json
586
+ --target-url <url> Override target service URL (default: from service key)
587
+ --url <url> Alias for --target-url
588
+ --unsafe Persist session/tokens to disk (default: in-memory)
589
+ --header <key=value> Inject a default header into every forwarded
590
+ request. Repeatable. Client-supplied headers win.
591
+
592
+ BROWSER AUTHORIZATION
593
+ --browser <mode> Browser used for OAuth login. One of:
594
+ system - OS default browser (default)
595
+ chrome - Google Chrome
596
+ edge - Microsoft Edge
597
+ firefox - Firefox
598
+ none - Print URL to console and wait for
599
+ callback (for SSH/headless sessions)
600
+ headless - Alias for 'none'
601
+ --browser-auth-port <port> Local OAuth callback port. Must match the
602
+ redirect_uri registered on XSUAA (default: 3333).
603
+
604
+ TRANSPORT
605
+ --transport <type> stdio | streamable-http | http | sse
606
+ (auto-detected from stdin TTY if not set)
607
+ --stdio Shortcut for --transport stdio
608
+ --http Shortcut for --transport streamable-http
609
+ --sse Shortcut for --transport sse
610
+ --http-port <port> HTTP transport port (default: 3001)
611
+ --http-host <host> HTTP transport host (default: 127.0.0.1)
612
+ --sse-port <port> SSE transport port (default: 3002)
613
+ --sse-host <host> SSE transport host (default: 127.0.0.1)
614
+
615
+ -h, --help Show this help and exit
616
+
617
+ ENVIRONMENT VARIABLES
618
+ MCP_TRANSPORT, MCP_HTTP_PORT, MCP_HTTP_HOST, MCP_SSE_PORT, MCP_SSE_HOST,
619
+ LOG_LEVEL, MCP_PROXY_UNSAFE, MCP_PROXY_MAX_RETRIES, MCP_PROXY_RETRY_DELAY,
620
+ MCP_PROXY_REQUEST_TIMEOUT, MCP_PROXY_CIRCUIT_BREAKER_THRESHOLD,
621
+ MCP_PROXY_CIRCUIT_BREAKER_TIMEOUT
622
+
623
+ See docs/CONFIGURATION.md for the full configuration reference.
624
+ `;
625
+ process.stdout.write(help);
626
+ }
570
627
  // Auto-start server when run directly (unless MCP_SKIP_AUTO_START is set)
571
628
  if (process.env.MCP_SKIP_AUTO_START !== 'true') {
629
+ if (process.argv.includes('--help') || process.argv.includes('-h')) {
630
+ printHelp();
631
+ process.exit(0);
632
+ }
572
633
  const server = new McpAbapAdtProxyServer();
634
+ // Graceful shutdown: release the OAuth callback port, MCP server, and HTTP listener.
635
+ let shuttingDown = false;
636
+ const onSignal = (signal) => {
637
+ if (shuttingDown)
638
+ return;
639
+ shuttingDown = true;
640
+ logger_js_1.logger?.info('Received shutdown signal, releasing resources', { signal });
641
+ server
642
+ .shutdown()
643
+ .catch((error) => {
644
+ logger_js_1.logger?.error('Error during shutdown', {
645
+ error: error instanceof Error ? error.message : String(error),
646
+ });
647
+ })
648
+ .finally(() => process.exit(0));
649
+ };
650
+ process.on('SIGINT', onSignal);
651
+ process.on('SIGTERM', onSignal);
573
652
  server.run().catch((error) => {
574
653
  logger_js_1.logger?.error('Fatal error while running MCP proxy server', {
575
654
  type: 'SERVER_FATAL_ERROR',
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IAEjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGxC,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAG/B,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CAqC3D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,mBAAmB,CAQrB;AAgBD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAYhC;AA4ID;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAElD;AAUD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAoDA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IAEjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGxC,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAG/B,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CAyB3D;AAwED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,mBAAmB,CAQrB;AAgBD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAYhC;AA4ID;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAElD;AAUD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAoDA"}
@@ -56,24 +56,17 @@ function loadConfig(configPath) {
56
56
  // Get config path from parameter or command line (--config/-c)
57
57
  // Do NOT use environment variable MCP_PROXY_CONFIG - only explicit --config parameter
58
58
  const finalConfigPath = configPath || getConfigPath();
59
- // If --config is provided, load ONLY from that file (no merge with command line params)
59
+ // If --config is provided: load from file, apply defaults, then overlay explicit CLI flags.
60
+ // CLI flags override YAML values (YAML is just the baseline).
60
61
  if (finalConfigPath) {
61
- // Warn if other CLI parameters are also provided (they will be ignored)
62
- const conflictingParams = ['--btp', '--unsafe'].filter((param) => hasArg(param));
63
- if (conflictingParams.length > 0) {
64
- console.warn(`Warning: --config is specified, but the following CLI parameters will be ignored: ${conflictingParams.join(', ')}. ` +
65
- `Configuration will be loaded ONLY from ${finalConfigPath}. ` +
66
- `To use CLI parameters, do not specify --config.`);
67
- }
68
62
  try {
69
- if (fs.existsSync(finalConfigPath)) {
70
- const fileConfig = loadConfigFile(finalConfigPath);
71
- // Apply defaults for missing values in file config
72
- return applyDefaults(fileConfig);
73
- }
74
- else {
63
+ if (!fs.existsSync(finalConfigPath)) {
75
64
  throw new Error(`Config file not found: ${finalConfigPath}`);
76
65
  }
66
+ const fileConfig = loadConfigFile(finalConfigPath);
67
+ const base = applyDefaults(fileConfig);
68
+ const cli = readCliOverrides();
69
+ return mergeCliOverrides(base, cli, finalConfigPath);
77
70
  }
78
71
  catch (error) {
79
72
  throw new Error(`Failed to load config from file ${finalConfigPath}: ${error instanceof Error ? error.message : String(error)}`);
@@ -82,6 +75,61 @@ function loadConfig(configPath) {
82
75
  // No --config provided: load ONLY from command line parameters and environment variables
83
76
  return loadFromEnv();
84
77
  }
78
+ /**
79
+ * Read CLI flags that should override file/YAML configuration.
80
+ * Only includes keys that were explicitly provided on the command line.
81
+ */
82
+ function readCliOverrides() {
83
+ const overrides = {};
84
+ const btp = getArgValue('--btp');
85
+ if (btp !== undefined)
86
+ overrides.btpDestination = btp;
87
+ const targetUrl = getArgValue('--target-url') ?? getArgValue('--url');
88
+ if (targetUrl !== undefined)
89
+ overrides.targetUrl = targetUrl;
90
+ if (hasArg('--unsafe'))
91
+ overrides.unsafe = true;
92
+ const browser = getArgValue('--browser');
93
+ if (browser !== undefined) {
94
+ overrides.browser = browser;
95
+ }
96
+ const browserAuthPortStr = getArgValue('--browser-auth-port');
97
+ if (browserAuthPortStr !== undefined) {
98
+ overrides.browserAuthPort = parseInt(browserAuthPortStr, 10);
99
+ }
100
+ const headerArgs = getAllArgValues('--header');
101
+ if (headerArgs.length > 0) {
102
+ const headers = {};
103
+ for (const arg of headerArgs) {
104
+ const eqIndex = arg.indexOf('=');
105
+ if (eqIndex > 0) {
106
+ const key = arg.substring(0, eqIndex).toLowerCase();
107
+ const value = arg.substring(eqIndex + 1);
108
+ headers[key] = value;
109
+ }
110
+ }
111
+ overrides.defaultHeaders = headers;
112
+ }
113
+ return overrides;
114
+ }
115
+ /**
116
+ * Merge CLI overrides on top of file-based config. Logs which keys were overridden.
117
+ * `defaultHeaders` is merged per-key (CLI keys override YAML keys); other fields are replaced.
118
+ */
119
+ function mergeCliOverrides(base, cli, configPath) {
120
+ const merged = { ...base, ...cli };
121
+ if (cli.defaultHeaders) {
122
+ merged.defaultHeaders = {
123
+ ...(base.defaultHeaders || {}),
124
+ ...cli.defaultHeaders,
125
+ };
126
+ }
127
+ const overriddenKeys = Object.keys(cli);
128
+ if (overriddenKeys.length > 0) {
129
+ console.warn(`Note: CLI flags override values from ${configPath}: ${overriddenKeys.join(', ')}`);
130
+ }
131
+ return merged;
132
+ }
85
133
  /**
86
134
  * Extract transport-related fields from a raw config object
87
135
  */
@@ -1 +1 @@
1
- {"version":3,"file":"btpProxy.d.ts","sourceRoot":"","sources":["../../src/proxy/btpProxy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAgB,MAAM,2BAA2B,CAAC;AAYrE,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AA4CnE;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAU3C;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAGD,MAAM,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,oBAAoB,CAAa;IACzC,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,UAAU,CACN;IACZ,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAU;gBAEZ,oBAAoB,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;IAqF3E;;;OAGG;IACU,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB3D;;;;OAIG;YACW,wBAAwB;IAqFtC;;OAEG;YACW,uBAAuB;IAyFrC;;;;OAIG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,OAAe,GAC5B,OAAO,CAAC,MAAM,CAAC;IAiHlB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;;OAGG;IACH,OAAO,CAAC,UAAU;IASlB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA6BhC;;OAEG;YACW,gBAAgB;IAU9B;;OAEG;IACI,OAAO,IAAI,IAAI;IAOtB;;;OAGG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAexD;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;;;;;;;;;;;;;;;OAgBG;YACW,iBAAiB;IAmT/B;;OAEG;IACG,YAAY,CAChB,eAAe,EAAE,YAAY,EAC7B,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GAC7D,OAAO,CAAC,aAAa,CAAC;IAiLzB;;OAEG;WACiB,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;CAyB7E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC5B,OAAO,CAAC,QAAQ,CAAC,CAEnB"}
1
+ {"version":3,"file":"btpProxy.d.ts","sourceRoot":"","sources":["../../src/proxy/btpProxy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAgB,MAAM,2BAA2B,CAAC;AAYrE,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AA4CnE;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAU3C;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAGD,MAAM,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,oBAAoB,CAAa;IACzC,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,UAAU,CACN;IACZ,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAU;gBAEZ,oBAAoB,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;IAqF3E;;;OAGG;IACU,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB3D;;;;OAIG;YACW,wBAAwB;IAqFtC;;OAEG;YACW,uBAAuB;IAyFrC;;;;OAIG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,OAAe,GAC5B,OAAO,CAAC,MAAM,CAAC;IAiHlB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;;OAGG;IACH,OAAO,CAAC,UAAU;IASlB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA6BhC;;OAEG;YACW,gBAAgB;IAU9B;;OAEG;IACI,OAAO,IAAI,IAAI;IAStB;;;OAGG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAexD;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;;;;;;;;;;;;;;;OAgBG;YACW,iBAAiB;IAmT/B;;OAEG;IACG,YAAY,CAChB,eAAe,EAAE,YAAY,EAC7B,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GAC7D,OAAO,CAAC,aAAa,CAAC;IAiLzB;;OAEG;WACiB,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;CAyB7E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC5B,OAAO,CAAC,QAAQ,CAAC,CAEnB"}
@@ -474,6 +474,8 @@ class BtpProxy {
474
474
  clearTimeout(timer);
475
475
  }
476
476
  this.refreshTimers.clear();
477
+ this.tokenCache.clear();
478
+ this.btpAuthBrokers.clear();
477
479
  }
478
480
  /**
479
481
  * Get the target service URL for a destination.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-abap-adt/proxy",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "description": "MCP proxy server for SAP ABAP ADT - proxies local requests to cloud-llm-hub with JWT authentication",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",