@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 +26 -0
- package/README.md +8 -1
- package/dist/auth/browserAuth.d.ts +3 -1
- package/dist/auth/browserAuth.d.ts.map +1 -1
- package/dist/auth/browserAuth.js +7 -5
- package/dist/auth/clientCredentialsAuth.d.ts +1 -0
- package/dist/auth/clientCredentialsAuth.d.ts.map +1 -1
- package/dist/auth/clientCredentialsAuth.js +1 -0
- package/dist/auth/tokenRefresher.d.ts +1 -0
- package/dist/auth/tokenRefresher.d.ts.map +1 -1
- package/dist/auth/tokenRefresher.js +1 -0
- package/dist/index.d.ts +0 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -8
- package/dist/providers/BtpTokenProvider.d.ts +11 -0
- package/dist/providers/BtpTokenProvider.d.ts.map +1 -1
- package/dist/providers/BtpTokenProvider.js +22 -3
- package/dist/providers/XsuaaTokenProvider.d.ts +4 -0
- package/dist/providers/XsuaaTokenProvider.d.ts.map +1 -1
- package/dist/providers/XsuaaTokenProvider.js +9 -2
- package/package.json +1 -1
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(), //
|
|
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
|
|
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"}
|
package/dist/auth/browserAuth.js
CHANGED
|
@@ -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 =
|
|
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 =
|
|
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
|
|
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
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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
|
|
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.
|
|
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,
|
|
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
|
|
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
|
|
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;
|
|
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
|
|
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