@mcp-abap-adt/auth-providers 0.1.2 → 0.1.3

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,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.1.3] - 2025-12-07
11
+
12
+ ### Added
13
+ - **Configurable Browser Auth Port**: Added optional `browserAuthPort` parameter to `BtpTokenProvider` constructor
14
+ - Allows configuring the OAuth callback server port (default: 3001)
15
+ - Prevents port conflicts when proxy server runs on the same port
16
+ - Port is passed through to `startBrowserAuth` and `exchangeCodeForToken` functions
17
+ - Enables proxy to configure browser auth port via CLI parameter or YAML config
18
+
19
+ ### Changed
20
+ - **BtpTokenProvider Constructor**: Now accepts optional `browserAuthPort?: number` parameter
21
+ - Defaults to 3001 if not specified (maintains backward compatibility)
22
+ - **startBrowserAuth Function**: Added optional `port: number = 3001` parameter
23
+ - Port is used for OAuth callback server and redirect URI
24
+ - **exchangeCodeForToken Function**: Added optional `port: number = 3001` parameter
25
+ - Port is used in redirect URI when exchanging authorization code for tokens
26
+ - **Implementation Isolation**: Internal authentication functions are no longer exported from package
27
+ - `startBrowserAuth`, `refreshJwtToken`, and `getTokenWithClientCredentials` are now internal functions
28
+ - Providers use private method wrappers to call these functions
29
+ - Constructor parameters (like `browserAuthPort`) are passed through private methods to internal functions
30
+ - This ensures proper encapsulation and prevents direct usage of internal implementation details
31
+ - **Test Improvements**: Unit tests now use provider methods instead of direct internal function imports
32
+ - Tests use `jest.spyOn` to mock private provider methods instead of mocking internal functions
33
+ - Tests now properly test the public API of providers, ensuring better isolation
34
+ - This aligns with encapsulation principles and makes tests more maintainable
35
+
10
36
  ## [0.1.2] - 2025-12-05
11
37
 
12
38
  ### Changed
package/README.md CHANGED
@@ -130,10 +130,11 @@ const btpBroker = new AuthBroker({
130
130
  const abapServiceKeyStore = new AbapServiceKeyStore('/path/to/service-keys');
131
131
  const abapSessionStore = new AbapSessionStore('/path/to/sessions');
132
132
 
133
+ // Use custom port if running alongside other services (e.g., proxy on port 3001)
133
134
  const abapBroker = new AuthBroker({
134
135
  serviceKeyStore: abapServiceKeyStore,
135
136
  sessionStore: abapSessionStore,
136
- tokenProvider: new BtpTokenProvider(), // BtpTokenProvider works for ABAP too
137
+ tokenProvider: new BtpTokenProvider(4001), // Custom port to avoid conflicts
137
138
  });
138
139
  ```
139
140
 
@@ -171,8 +172,12 @@ Uses browser-based OAuth2 flow or refresh token:
171
172
  import { BtpTokenProvider } from '@mcp-abap-adt/auth-providers';
172
173
  import type { IAuthorizationConfig } from '@mcp-abap-adt/auth-broker';
173
174
 
175
+ // Create provider with default port (3001)
174
176
  const provider = new BtpTokenProvider();
175
177
 
178
+ // Or specify custom port for OAuth callback server (useful to avoid port conflicts)
179
+ const providerWithCustomPort = new BtpTokenProvider(4001);
180
+
176
181
  const authConfig: IAuthorizationConfig = {
177
182
  uaaUrl: 'https://...authentication...hana.ondemand.com',
178
183
  uaaClientId: '...',
@@ -191,6 +196,8 @@ const result = await provider.getConnectionConfig(authConfig, {
191
196
  // result.refreshToken contains refresh token (if browser flow was used)
192
197
  ```
193
198
 
199
+ **Note**: The `browserAuthPort` parameter (default: 3001) configures the OAuth callback server port. This is useful when running the provider in environments where port 3001 is already in use (e.g., when running alongside a proxy server).
200
+
194
201
  ### Token Validation
195
202
 
196
203
  Both providers support token validation:
@@ -7,9 +7,11 @@ import type { IAuthorizationConfig, ILogger } from '@mcp-abap-adt/interfaces';
7
7
  * @param authConfig Authorization configuration with UAA credentials
8
8
  * @param browser Browser name (chrome, edge, firefox, system, none)
9
9
  * @param logger Optional logger instance. If not provided, uses default logger.
10
+ * @param port Port for OAuth callback server (default: 3001)
10
11
  * @returns Promise that resolves to tokens
12
+ * @internal - Internal function, not exported from package
11
13
  */
12
- export declare function startBrowserAuth(authConfig: IAuthorizationConfig, browser?: string, logger?: ILogger): Promise<{
14
+ export declare function startBrowserAuth(authConfig: IAuthorizationConfig, browser?: string, logger?: ILogger, port?: number): Promise<{
13
15
  accessToken: string;
14
16
  refreshToken?: string;
15
17
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"browserAuth.d.ts","sourceRoot":"","sources":["../../src/auth/browserAuth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAkF9E;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,oBAAoB,EAChC,OAAO,GAAE,MAAiB,EAC1B,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkSzD"}
1
+ {"version":3,"file":"browserAuth.d.ts","sourceRoot":"","sources":["../../src/auth/browserAuth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAkF9E;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,oBAAoB,EAChC,OAAO,GAAE,MAAiB,EAC1B,MAAM,CAAC,EAAE,OAAO,EAChB,IAAI,GAAE,MAAa,GAClB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkSzD"}
@@ -66,10 +66,10 @@ function getJwtAuthorizationUrl(authConfig, port = 3001) {
66
66
  /**
67
67
  * Exchange authorization code for tokens
68
68
  */
69
- async function exchangeCodeForToken(authConfig, code) {
69
+ async function exchangeCodeForToken(authConfig, code, port = 3001) {
70
70
  const { uaaUrl: url, uaaClientId: clientid, uaaClientSecret: clientsecret } = authConfig;
71
71
  const tokenUrl = `${url}/oauth/token`;
72
- const redirectUri = 'http://localhost:3001/callback';
72
+ const redirectUri = `http://localhost:${port}/callback`;
73
73
  const params = new URLSearchParams();
74
74
  params.append('grant_type', 'authorization_code');
75
75
  params.append('code', code);
@@ -109,9 +109,11 @@ const defaultLogger = {
109
109
  * @param authConfig Authorization configuration with UAA credentials
110
110
  * @param browser Browser name (chrome, edge, firefox, system, none)
111
111
  * @param logger Optional logger instance. If not provided, uses default logger.
112
+ * @param port Port for OAuth callback server (default: 3001)
112
113
  * @returns Promise that resolves to tokens
114
+ * @internal - Internal function, not exported from package
113
115
  */
114
- async function startBrowserAuth(authConfig, browser = 'system', logger) {
116
+ async function startBrowserAuth(authConfig, browser = 'system', logger, port = 3001) {
115
117
  const log = logger ? {
116
118
  info: (msg) => logger.info(msg),
117
119
  debug: (msg) => logger.debug(msg),
@@ -133,7 +135,7 @@ async function startBrowserAuth(authConfig, browser = 'system', logger) {
133
135
  };
134
136
  const app = (0, express_1.default)();
135
137
  const server = http.createServer(app);
136
- const PORT = 3001;
138
+ const PORT = port;
137
139
  let serverInstance = null;
138
140
  const authorizationUrl = getJwtAuthorizationUrl(authConfig, PORT);
139
141
  // OAuth2 callback handler
@@ -278,7 +280,7 @@ async function startBrowserAuth(authConfig, browser = 'system', logger) {
278
280
  res.send(html);
279
281
  // Exchange code for tokens and close server
280
282
  try {
281
- const tokens = await exchangeCodeForToken(authConfig, code);
283
+ const tokens = await exchangeCodeForToken(authConfig, code, PORT);
282
284
  // Close all connections and server immediately after getting tokens
283
285
  if (typeof server.closeAllConnections === 'function') {
284
286
  server.closeAllConnections();
@@ -14,6 +14,7 @@ export interface ClientCredentialsResult {
14
14
  * @param clientId UAA client ID
15
15
  * @param clientSecret UAA client secret
16
16
  * @returns Promise that resolves to access token
17
+ * @internal - Internal function, not exported from package
17
18
  */
18
19
  export declare function getTokenWithClientCredentials(uaaUrl: string, clientId: string, clientSecret: string): Promise<ClientCredentialsResult>;
19
20
  //# sourceMappingURL=clientCredentialsAuth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clientCredentialsAuth.d.ts","sourceRoot":"","sources":["../../src/auth/clientCredentialsAuth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,uBAAuB,CAAC,CAoClC"}
1
+ {"version":3,"file":"clientCredentialsAuth.d.ts","sourceRoot":"","sources":["../../src/auth/clientCredentialsAuth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,uBAAuB,CAAC,CAoClC"}
@@ -17,6 +17,7 @@ const axios_1 = __importDefault(require("axios"));
17
17
  * @param clientId UAA client ID
18
18
  * @param clientSecret UAA client secret
19
19
  * @returns Promise that resolves to access token
20
+ * @internal - Internal function, not exported from package
20
21
  */
21
22
  async function getTokenWithClientCredentials(uaaUrl, clientId, clientSecret) {
22
23
  try {
@@ -12,6 +12,7 @@ export interface TokenRefreshResult {
12
12
  * @param clientId UAA client ID
13
13
  * @param clientSecret UAA client secret
14
14
  * @returns Promise that resolves to new tokens
15
+ * @internal - Internal function, not exported from package
15
16
  */
16
17
  export declare function refreshJwtToken(refreshToken: string, uaaUrl: string, clientId: string, clientSecret: string): Promise<TokenRefreshResult>;
17
18
  //# sourceMappingURL=tokenRefresher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokenRefresher.d.ts","sourceRoot":"","sources":["../../src/auth/tokenRefresher.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAqC7B"}
1
+ {"version":3,"file":"tokenRefresher.d.ts","sourceRoot":"","sources":["../../src/auth/tokenRefresher.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAqC7B"}
@@ -15,6 +15,7 @@ const axios_1 = __importDefault(require("axios"));
15
15
  * @param clientId UAA client ID
16
16
  * @param clientSecret UAA client secret
17
17
  * @returns Promise that resolves to new tokens
18
+ * @internal - Internal function, not exported from package
18
19
  */
19
20
  async function refreshJwtToken(refreshToken, uaaUrl, clientId, clientSecret) {
20
21
  try {
package/dist/index.d.ts CHANGED
@@ -6,9 +6,4 @@
6
6
  */
7
7
  export { XsuaaTokenProvider } from './providers/XsuaaTokenProvider';
8
8
  export { BtpTokenProvider } from './providers/BtpTokenProvider';
9
- export { startBrowserAuth } from './auth/browserAuth';
10
- export { getTokenWithClientCredentials } from './auth/clientCredentialsAuth';
11
- export { refreshJwtToken } from './auth/tokenRefresher';
12
- export type { ClientCredentialsResult } from './auth/clientCredentialsAuth';
13
- export type { TokenRefreshResult } from './auth/tokenRefresher';
14
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,YAAY,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC"}
package/dist/index.js CHANGED
@@ -6,16 +6,9 @@
6
6
  * Provides XSUAA and BTP token providers
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.refreshJwtToken = exports.getTokenWithClientCredentials = exports.startBrowserAuth = exports.BtpTokenProvider = exports.XsuaaTokenProvider = void 0;
9
+ exports.BtpTokenProvider = exports.XsuaaTokenProvider = void 0;
10
10
  // Token providers
11
11
  var XsuaaTokenProvider_1 = require("./providers/XsuaaTokenProvider");
12
12
  Object.defineProperty(exports, "XsuaaTokenProvider", { enumerable: true, get: function () { return XsuaaTokenProvider_1.XsuaaTokenProvider; } });
13
13
  var BtpTokenProvider_1 = require("./providers/BtpTokenProvider");
14
14
  Object.defineProperty(exports, "BtpTokenProvider", { enumerable: true, get: function () { return BtpTokenProvider_1.BtpTokenProvider; } });
15
- // Auth functions (for advanced usage)
16
- var browserAuth_1 = require("./auth/browserAuth");
17
- Object.defineProperty(exports, "startBrowserAuth", { enumerable: true, get: function () { return browserAuth_1.startBrowserAuth; } });
18
- var clientCredentialsAuth_1 = require("./auth/clientCredentialsAuth");
19
- Object.defineProperty(exports, "getTokenWithClientCredentials", { enumerable: true, get: function () { return clientCredentialsAuth_1.getTokenWithClientCredentials; } });
20
- var tokenRefresher_1 = require("./auth/tokenRefresher");
21
- Object.defineProperty(exports, "refreshJwtToken", { enumerable: true, get: function () { return tokenRefresher_1.refreshJwtToken; } });
@@ -11,6 +11,17 @@ import type { ITokenProvider, ITokenProviderOptions, ITokenProviderResult, IAuth
11
11
  * Uses browser-based OAuth2 (if no refresh token) or refresh token flow.
12
12
  */
13
13
  export declare class BtpTokenProvider implements ITokenProvider {
14
+ private readonly browserAuthPort;
15
+ constructor(browserAuthPort?: number);
16
+ /**
17
+ * Private method wrapper for browser authentication
18
+ * Proxies port from constructor to internal function
19
+ */
20
+ private startBrowserAuth;
21
+ /**
22
+ * Private method wrapper for token refresh
23
+ */
24
+ private refreshJwtToken;
14
25
  getConnectionConfig(authConfig: IAuthorizationConfig, options?: ITokenProviderOptions): Promise<ITokenProviderResult>;
15
26
  validateToken(token: string, serviceUrl?: string): Promise<boolean>;
16
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BtpTokenProvider.d.ts","sourceRoot":"","sources":["../../src/providers/BtpTokenProvider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAKlI;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,cAAc;IAC/C,mBAAmB,CACvB,UAAU,EAAE,oBAAoB,EAChC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC;IAmC1B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CA0C1E"}
1
+ {"version":3,"file":"BtpTokenProvider.d.ts","sourceRoot":"","sources":["../../src/providers/BtpTokenProvider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAW,MAAM,0BAA0B,CAAC;AAO3I;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,cAAc;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,eAAe,CAAC,EAAE,MAAM;IAKpC;;;OAGG;YACW,gBAAgB;IAQ9B;;OAEG;YACW,eAAe;IASvB,mBAAmB,CACvB,UAAU,EAAE,oBAAoB,EAChC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC;IAmC1B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CA0C1E"}
@@ -10,15 +10,34 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.BtpTokenProvider = void 0;
13
+ const axios_1 = __importDefault(require("axios"));
14
+ // Import internal functions (not exported)
13
15
  const browserAuth_1 = require("../auth/browserAuth");
14
16
  const tokenRefresher_1 = require("../auth/tokenRefresher");
15
- const axios_1 = __importDefault(require("axios"));
16
17
  /**
17
18
  * BTP/ABAP token provider implementation
18
19
  *
19
20
  * Uses browser-based OAuth2 (if no refresh token) or refresh token flow.
20
21
  */
21
22
  class BtpTokenProvider {
23
+ browserAuthPort;
24
+ constructor(browserAuthPort) {
25
+ // Default to 3001 if not specified
26
+ this.browserAuthPort = browserAuthPort ?? 3001;
27
+ }
28
+ /**
29
+ * Private method wrapper for browser authentication
30
+ * Proxies port from constructor to internal function
31
+ */
32
+ async startBrowserAuth(authConfig, browser, logger) {
33
+ return (0, browserAuth_1.startBrowserAuth)(authConfig, browser, logger, this.browserAuthPort);
34
+ }
35
+ /**
36
+ * Private method wrapper for token refresh
37
+ */
38
+ async refreshJwtToken(refreshToken, uaaUrl, clientId, clientSecret) {
39
+ return (0, tokenRefresher_1.refreshJwtToken)(refreshToken, uaaUrl, clientId, clientSecret);
40
+ }
22
41
  async getConnectionConfig(authConfig, options) {
23
42
  const logger = options?.logger;
24
43
  const browser = options?.browser || 'system';
@@ -28,14 +47,14 @@ class BtpTokenProvider {
28
47
  if (logger) {
29
48
  logger.debug('No refresh token found. Starting browser authentication...');
30
49
  }
31
- result = await (0, browserAuth_1.startBrowserAuth)(authConfig, browser, logger);
50
+ result = await this.startBrowserAuth(authConfig, browser, logger);
32
51
  }
33
52
  else {
34
53
  // Use refresh token to get new access token
35
54
  if (logger) {
36
55
  logger.debug('Refreshing token using refresh token...');
37
56
  }
38
- result = await (0, tokenRefresher_1.refreshJwtToken)(authConfig.refreshToken, authConfig.uaaUrl, authConfig.uaaClientId, authConfig.uaaClientSecret);
57
+ result = await this.refreshJwtToken(authConfig.refreshToken, authConfig.uaaUrl, authConfig.uaaClientId, authConfig.uaaClientSecret);
39
58
  }
40
59
  return {
41
60
  connectionConfig: {
@@ -11,6 +11,10 @@ import type { ITokenProvider, ITokenProviderOptions, ITokenProviderResult, IAuth
11
11
  * Uses client_credentials grant type - no browser, no refresh token needed.
12
12
  */
13
13
  export declare class XsuaaTokenProvider implements ITokenProvider {
14
+ /**
15
+ * Private method wrapper for client credentials authentication
16
+ */
17
+ private getTokenWithClientCredentials;
14
18
  getConnectionConfig(authConfig: IAuthorizationConfig, options?: ITokenProviderOptions): Promise<ITokenProviderResult>;
15
19
  validateToken(token: string, serviceUrl?: string): Promise<boolean>;
16
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"XsuaaTokenProvider.d.ts","sourceRoot":"","sources":["../../src/providers/XsuaaTokenProvider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAIlI;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACjD,mBAAmB,CACvB,UAAU,EAAE,oBAAoB,EAChC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC;IAyB1B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAgD1E"}
1
+ {"version":3,"file":"XsuaaTokenProvider.d.ts","sourceRoot":"","sources":["../../src/providers/XsuaaTokenProvider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAMlI;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD;;OAEG;YACW,6BAA6B;IAQrC,mBAAmB,CACvB,UAAU,EAAE,oBAAoB,EAChC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC;IAyB1B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAgD1E"}
@@ -10,21 +10,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.XsuaaTokenProvider = void 0;
13
- const clientCredentialsAuth_1 = require("../auth/clientCredentialsAuth");
14
13
  const axios_1 = __importDefault(require("axios"));
14
+ // Import internal function (not exported)
15
+ const clientCredentialsAuth_1 = require("../auth/clientCredentialsAuth");
15
16
  /**
16
17
  * XSUAA token provider implementation
17
18
  *
18
19
  * Uses client_credentials grant type - no browser, no refresh token needed.
19
20
  */
20
21
  class XsuaaTokenProvider {
22
+ /**
23
+ * Private method wrapper for client credentials authentication
24
+ */
25
+ async getTokenWithClientCredentials(uaaUrl, clientId, clientSecret) {
26
+ return (0, clientCredentialsAuth_1.getTokenWithClientCredentials)(uaaUrl, clientId, clientSecret);
27
+ }
21
28
  async getConnectionConfig(authConfig, options) {
22
29
  const logger = options?.logger;
23
30
  if (logger) {
24
31
  logger.debug('Using client_credentials grant type for XSUAA...');
25
32
  }
26
33
  // XSUAA uses client_credentials - no refresh token needed
27
- const result = await (0, clientCredentialsAuth_1.getTokenWithClientCredentials)(authConfig.uaaUrl, authConfig.uaaClientId, authConfig.uaaClientSecret);
34
+ const result = await this.getTokenWithClientCredentials(authConfig.uaaUrl, authConfig.uaaClientId, authConfig.uaaClientSecret);
28
35
  // XSUAA doesn't provide serviceUrl in authorization config
29
36
  // It's provided separately (from YAML, parameter, or request header)
30
37
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-abap-adt/auth-providers",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Token providers for MCP ABAP ADT auth-broker - XSUAA and BTP token providers",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",