arc-1 0.1.4 → 0.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.
Files changed (57) hide show
  1. package/LICENSE +1 -0
  2. package/dist/adt/btp.js +1 -1
  3. package/dist/adt/client.d.ts +5 -1
  4. package/dist/adt/client.d.ts.map +1 -1
  5. package/dist/adt/client.js +30 -3
  6. package/dist/adt/client.js.map +1 -1
  7. package/dist/adt/config.d.ts +7 -1
  8. package/dist/adt/config.d.ts.map +1 -1
  9. package/dist/adt/config.js +1 -1
  10. package/dist/adt/config.js.map +1 -1
  11. package/dist/adt/errors.d.ts +8 -0
  12. package/dist/adt/errors.d.ts.map +1 -1
  13. package/dist/adt/errors.js +34 -1
  14. package/dist/adt/errors.js.map +1 -1
  15. package/dist/adt/features.d.ts +11 -2
  16. package/dist/adt/features.d.ts.map +1 -1
  17. package/dist/adt/features.js +37 -12
  18. package/dist/adt/features.js.map +1 -1
  19. package/dist/adt/http.d.ts +7 -0
  20. package/dist/adt/http.d.ts.map +1 -1
  21. package/dist/adt/http.js +14 -4
  22. package/dist/adt/http.js.map +1 -1
  23. package/dist/adt/oauth.d.ts +120 -0
  24. package/dist/adt/oauth.d.ts.map +1 -0
  25. package/dist/adt/oauth.js +321 -0
  26. package/dist/adt/oauth.js.map +1 -0
  27. package/dist/adt/types.d.ts +14 -0
  28. package/dist/adt/types.d.ts.map +1 -1
  29. package/dist/adt/xml-parser.d.ts +8 -1
  30. package/dist/adt/xml-parser.d.ts.map +1 -1
  31. package/dist/adt/xml-parser.js +54 -1
  32. package/dist/adt/xml-parser.js.map +1 -1
  33. package/dist/handlers/intent.d.ts +3 -0
  34. package/dist/handlers/intent.d.ts.map +1 -1
  35. package/dist/handlers/intent.js +154 -9
  36. package/dist/handlers/intent.js.map +1 -1
  37. package/dist/handlers/tools.d.ts +5 -0
  38. package/dist/handlers/tools.d.ts.map +1 -1
  39. package/dist/handlers/tools.js +187 -59
  40. package/dist/handlers/tools.js.map +1 -1
  41. package/dist/server/audit.d.ts +2 -0
  42. package/dist/server/audit.d.ts.map +1 -1
  43. package/dist/server/audit.js.map +1 -1
  44. package/dist/server/config.d.ts.map +1 -1
  45. package/dist/server/config.js +9 -1
  46. package/dist/server/config.js.map +1 -1
  47. package/dist/server/http.js +1 -1
  48. package/dist/server/http.js.map +1 -1
  49. package/dist/server/server.d.ts +2 -1
  50. package/dist/server/server.d.ts.map +1 -1
  51. package/dist/server/server.js +34 -6
  52. package/dist/server/server.js.map +1 -1
  53. package/dist/server/types.d.ts +5 -0
  54. package/dist/server/types.d.ts.map +1 -1
  55. package/dist/server/types.js +3 -1
  56. package/dist/server/types.js.map +1 -1
  57. package/package.json +7 -2
@@ -0,0 +1,120 @@
1
+ /**
2
+ * OAuth 2.0 Authorization Code flow for BTP ABAP Environment.
3
+ *
4
+ * Implements the browser-based login flow used by Eclipse ADT and fr0ster/mcp-abap-adt:
5
+ * 1. Parse BTP service key JSON (from file or env var)
6
+ * 2. Start local callback server to receive authorization code
7
+ * 3. Open browser to XSUAA authorization endpoint
8
+ * 4. Exchange code for JWT access + refresh tokens
9
+ * 5. Cache tokens, auto-refresh before expiry
10
+ *
11
+ * The resulting Bearer token is used with `Authorization: Bearer <token>`
12
+ * on all ADT requests (replacing Basic Auth).
13
+ *
14
+ * Cross-platform: uses `open` (macOS), `xdg-open` (Linux), `start` (Windows).
15
+ */
16
+ import { type Server as HttpServer } from 'node:http';
17
+ /** BTP ABAP service key structure (from BTP Cockpit) */
18
+ export interface BTPServiceKey {
19
+ /** UAA (XSUAA) credentials for OAuth */
20
+ uaa: {
21
+ /** XSUAA base URL (e.g., "https://subdomain.authentication.eu10.hana.ondemand.com") */
22
+ url: string;
23
+ /** OAuth client ID */
24
+ clientid: string;
25
+ /** OAuth client secret */
26
+ clientsecret: string;
27
+ };
28
+ /** ABAP system URL (e.g., "https://system-id.abap.eu10.hana.ondemand.com") */
29
+ url: string;
30
+ /** Optional: ABAP-specific section */
31
+ abap?: {
32
+ url?: string;
33
+ sapClient?: string;
34
+ };
35
+ /** Optional: Binding metadata */
36
+ binding?: {
37
+ env?: string;
38
+ type?: string;
39
+ };
40
+ /** Optional: Catalog info */
41
+ catalogs?: Record<string, {
42
+ path: string;
43
+ type: string;
44
+ }>;
45
+ }
46
+ /** OAuth token response from XSUAA */
47
+ export interface OAuthTokenResponse {
48
+ access_token: string;
49
+ token_type: string;
50
+ expires_in: number;
51
+ refresh_token?: string;
52
+ scope?: string;
53
+ }
54
+ /**
55
+ * Parse a BTP ABAP service key from JSON string.
56
+ * Validates required fields.
57
+ */
58
+ export declare function parseServiceKey(json: string): BTPServiceKey;
59
+ /**
60
+ * Load service key from file path.
61
+ */
62
+ export declare function loadServiceKeyFile(filePath: string): BTPServiceKey;
63
+ /**
64
+ * Resolve service key from environment variables.
65
+ * Priority: SAP_BTP_SERVICE_KEY (inline JSON) > SAP_BTP_SERVICE_KEY_FILE (file path)
66
+ */
67
+ export declare function resolveServiceKey(): BTPServiceKey | undefined;
68
+ /**
69
+ * Exchange an authorization code for OAuth tokens.
70
+ */
71
+ export declare function exchangeCodeForToken(serviceKey: BTPServiceKey, code: string, redirectUri: string): Promise<OAuthTokenResponse>;
72
+ /**
73
+ * Refresh an OAuth access token using a refresh token.
74
+ */
75
+ export declare function refreshAccessToken(serviceKey: BTPServiceKey, refreshToken: string): Promise<OAuthTokenResponse>;
76
+ /**
77
+ * Open a URL in the user's default browser.
78
+ * Cross-platform: macOS (open), Linux (xdg-open), Windows (start).
79
+ */
80
+ export declare function openBrowser(url: string): Promise<void>;
81
+ /**
82
+ * Start a local HTTP server to receive the OAuth callback.
83
+ * Returns a promise that resolves with the authorization code.
84
+ *
85
+ * @param port Port to listen on (0 = auto-assign)
86
+ * @param timeoutMs Maximum wait time for callback (default: 120s)
87
+ */
88
+ export declare function startCallbackServer(port: number, timeoutMs?: number): {
89
+ promise: Promise<string>;
90
+ server: HttpServer;
91
+ getPort: () => number;
92
+ };
93
+ /**
94
+ * Perform the full browser-based Authorization Code flow.
95
+ *
96
+ * 1. Start local callback server
97
+ * 2. Open browser to XSUAA authorize endpoint
98
+ * 3. Wait for callback with authorization code
99
+ * 4. Exchange code for tokens
100
+ *
101
+ * @param serviceKey BTP service key
102
+ * @param callbackPort Port for callback server (0 = auto-assign)
103
+ * @returns OAuth token response
104
+ */
105
+ export declare function performBrowserLogin(serviceKey: BTPServiceKey, callbackPort?: number): Promise<OAuthTokenResponse>;
106
+ /**
107
+ * Create a bearer token provider function for the ADT HTTP client.
108
+ *
109
+ * The returned function handles:
110
+ * - First call: triggers browser login
111
+ * - Subsequent calls: returns cached token
112
+ * - Token refresh: uses refresh token when access token expires
113
+ * - Re-login: triggers browser login if refresh token also expires
114
+ *
115
+ * @param serviceKey BTP service key
116
+ * @param callbackPort Port for OAuth callback (0 = auto-assign)
117
+ * @returns Async function that returns a valid Bearer token
118
+ */
119
+ export declare function createBearerTokenProvider(serviceKey: BTPServiceKey, callbackPort?: number): () => Promise<string>;
120
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../ts-src/adt/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAgB,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AAKpE,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,GAAG,EAAE;QACH,uFAAuF;QACvF,GAAG,EAAE,MAAM,CAAC;QACZ,sBAAsB;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,0BAA0B;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,iCAAiC;IACjC,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAED,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAYD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CA8B3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAUlE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,GAAG,SAAS,CAY7D;AAID;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,aAAa,EACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAyB7B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuBrH;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B5D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,SAAS,SAAS,GACjB;IAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,MAAM,CAAA;CAAE,CAiEzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,YAAY,SAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6ClH;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,aAAa,EAAE,YAAY,SAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAsC5G"}
@@ -0,0 +1,321 @@
1
+ /**
2
+ * OAuth 2.0 Authorization Code flow for BTP ABAP Environment.
3
+ *
4
+ * Implements the browser-based login flow used by Eclipse ADT and fr0ster/mcp-abap-adt:
5
+ * 1. Parse BTP service key JSON (from file or env var)
6
+ * 2. Start local callback server to receive authorization code
7
+ * 3. Open browser to XSUAA authorization endpoint
8
+ * 4. Exchange code for JWT access + refresh tokens
9
+ * 5. Cache tokens, auto-refresh before expiry
10
+ *
11
+ * The resulting Bearer token is used with `Authorization: Bearer <token>`
12
+ * on all ADT requests (replacing Basic Auth).
13
+ *
14
+ * Cross-platform: uses `open` (macOS), `xdg-open` (Linux), `start` (Windows).
15
+ */
16
+ import { readFileSync } from 'node:fs';
17
+ import { createServer } from 'node:http';
18
+ import { logger } from '../server/logger.js';
19
+ // ─── Service Key Parsing ───────────────────────────────────────────
20
+ /**
21
+ * Parse a BTP ABAP service key from JSON string.
22
+ * Validates required fields.
23
+ */
24
+ export function parseServiceKey(json) {
25
+ let parsed;
26
+ try {
27
+ parsed = JSON.parse(json);
28
+ }
29
+ catch {
30
+ throw new Error('Invalid service key JSON: failed to parse');
31
+ }
32
+ const key = parsed;
33
+ if (!key.url || typeof key.url !== 'string') {
34
+ throw new Error('Invalid service key: missing "url" field');
35
+ }
36
+ const uaa = key.uaa;
37
+ if (!uaa || typeof uaa !== 'object') {
38
+ throw new Error('Invalid service key: missing "uaa" section');
39
+ }
40
+ if (!uaa.url || typeof uaa.url !== 'string') {
41
+ throw new Error('Invalid service key: missing "uaa.url" field');
42
+ }
43
+ if (!uaa.clientid || typeof uaa.clientid !== 'string') {
44
+ throw new Error('Invalid service key: missing "uaa.clientid" field');
45
+ }
46
+ if (!uaa.clientsecret || typeof uaa.clientsecret !== 'string') {
47
+ throw new Error('Invalid service key: missing "uaa.clientsecret" field');
48
+ }
49
+ return parsed;
50
+ }
51
+ /**
52
+ * Load service key from file path.
53
+ */
54
+ export function loadServiceKeyFile(filePath) {
55
+ try {
56
+ const content = readFileSync(filePath, 'utf-8');
57
+ return parseServiceKey(content);
58
+ }
59
+ catch (err) {
60
+ if (err instanceof Error && err.message.startsWith('Invalid service key'))
61
+ throw err;
62
+ throw new Error(`Failed to read service key file '${filePath}': ${err instanceof Error ? err.message : String(err)}`);
63
+ }
64
+ }
65
+ /**
66
+ * Resolve service key from environment variables.
67
+ * Priority: SAP_BTP_SERVICE_KEY (inline JSON) > SAP_BTP_SERVICE_KEY_FILE (file path)
68
+ */
69
+ export function resolveServiceKey() {
70
+ const inline = process.env.SAP_BTP_SERVICE_KEY;
71
+ if (inline) {
72
+ return parseServiceKey(inline);
73
+ }
74
+ const filePath = process.env.SAP_BTP_SERVICE_KEY_FILE;
75
+ if (filePath) {
76
+ return loadServiceKeyFile(filePath);
77
+ }
78
+ return undefined;
79
+ }
80
+ // ─── OAuth Token Exchange ──────────────────────────────────────────
81
+ /**
82
+ * Exchange an authorization code for OAuth tokens.
83
+ */
84
+ export async function exchangeCodeForToken(serviceKey, code, redirectUri) {
85
+ const tokenUrl = `${serviceKey.uaa.url}/oauth/token`;
86
+ const params = new URLSearchParams({
87
+ grant_type: 'authorization_code',
88
+ code,
89
+ redirect_uri: redirectUri,
90
+ client_id: serviceKey.uaa.clientid,
91
+ });
92
+ const response = await fetch(tokenUrl, {
93
+ method: 'POST',
94
+ headers: {
95
+ 'Content-Type': 'application/x-www-form-urlencoded',
96
+ Authorization: `Basic ${Buffer.from(`${serviceKey.uaa.clientid}:${serviceKey.uaa.clientsecret}`).toString('base64')}`,
97
+ },
98
+ body: params.toString(),
99
+ });
100
+ if (!response.ok) {
101
+ const body = await response.text();
102
+ throw new Error(`OAuth token exchange failed (${response.status}): ${body.slice(0, 500)}`);
103
+ }
104
+ return (await response.json());
105
+ }
106
+ /**
107
+ * Refresh an OAuth access token using a refresh token.
108
+ */
109
+ export async function refreshAccessToken(serviceKey, refreshToken) {
110
+ const tokenUrl = `${serviceKey.uaa.url}/oauth/token`;
111
+ const params = new URLSearchParams({
112
+ grant_type: 'refresh_token',
113
+ refresh_token: refreshToken,
114
+ });
115
+ const response = await fetch(tokenUrl, {
116
+ method: 'POST',
117
+ headers: {
118
+ 'Content-Type': 'application/x-www-form-urlencoded',
119
+ Authorization: `Basic ${Buffer.from(`${serviceKey.uaa.clientid}:${serviceKey.uaa.clientsecret}`).toString('base64')}`,
120
+ },
121
+ body: params.toString(),
122
+ });
123
+ if (!response.ok) {
124
+ const body = await response.text();
125
+ throw new Error(`OAuth token refresh failed (${response.status}): ${body.slice(0, 500)}`);
126
+ }
127
+ return (await response.json());
128
+ }
129
+ // ─── Browser Authorization Code Flow ───────────────────────────────
130
+ /**
131
+ * Open a URL in the user's default browser.
132
+ * Cross-platform: macOS (open), Linux (xdg-open), Windows (start).
133
+ */
134
+ export async function openBrowser(url) {
135
+ const { exec } = await import('node:child_process');
136
+ const { platform } = await import('node:os');
137
+ const os = platform();
138
+ let cmd;
139
+ switch (os) {
140
+ case 'darwin':
141
+ cmd = `open "${url}"`;
142
+ break;
143
+ case 'win32':
144
+ // Windows: 'start' needs empty title and URL in quotes
145
+ cmd = `start "" "${url}"`;
146
+ break;
147
+ default:
148
+ // Linux and other Unix-like systems
149
+ cmd = `xdg-open "${url}"`;
150
+ break;
151
+ }
152
+ return new Promise((resolve, reject) => {
153
+ exec(cmd, (err) => {
154
+ if (err) {
155
+ reject(new Error(`Failed to open browser (${os}): ${err.message}`));
156
+ }
157
+ else {
158
+ resolve();
159
+ }
160
+ });
161
+ });
162
+ }
163
+ /**
164
+ * Start a local HTTP server to receive the OAuth callback.
165
+ * Returns a promise that resolves with the authorization code.
166
+ *
167
+ * @param port Port to listen on (0 = auto-assign)
168
+ * @param timeoutMs Maximum wait time for callback (default: 120s)
169
+ */
170
+ export function startCallbackServer(port, timeoutMs = 120000) {
171
+ let resolvePromise;
172
+ let rejectPromise;
173
+ const promise = new Promise((resolve, reject) => {
174
+ resolvePromise = resolve;
175
+ rejectPromise = reject;
176
+ });
177
+ const server = createServer((req, res) => {
178
+ if (!req.url?.startsWith('/callback')) {
179
+ res.writeHead(404);
180
+ res.end('Not found');
181
+ return;
182
+ }
183
+ const url = new URL(req.url, `http://localhost:${port}`);
184
+ const code = url.searchParams.get('code');
185
+ const error = url.searchParams.get('error');
186
+ if (error) {
187
+ const errorDescription = url.searchParams.get('error_description') ?? error;
188
+ res.writeHead(400, { 'Content-Type': 'text/html' });
189
+ res.end(`<html><body><h1>Authentication Failed</h1><p>${errorDescription}</p><p>You can close this window.</p></body></html>`);
190
+ rejectPromise(new Error(`OAuth authorization failed: ${errorDescription}`));
191
+ server.close();
192
+ return;
193
+ }
194
+ if (!code) {
195
+ res.writeHead(400, { 'Content-Type': 'text/html' });
196
+ res.end('<html><body><h1>Error</h1><p>No authorization code received.</p></body></html>');
197
+ return;
198
+ }
199
+ res.writeHead(200, { 'Content-Type': 'text/html' });
200
+ res.end('<html><body><h1>Authentication Successful</h1><p>You can close this window and return to your MCP client.</p></body></html>');
201
+ resolvePromise(code);
202
+ server.close();
203
+ });
204
+ server.listen(port);
205
+ // Timeout handling
206
+ const timer = setTimeout(() => {
207
+ rejectPromise(new Error(`OAuth callback timed out after ${timeoutMs / 1000}s — no browser login received`));
208
+ server.close();
209
+ }, timeoutMs);
210
+ // Clean up timer when server closes
211
+ server.on('close', () => clearTimeout(timer));
212
+ const getPort = () => {
213
+ const addr = server.address();
214
+ if (addr && typeof addr === 'object') {
215
+ return addr.port;
216
+ }
217
+ return port;
218
+ };
219
+ return { promise, server, getPort };
220
+ }
221
+ /**
222
+ * Perform the full browser-based Authorization Code flow.
223
+ *
224
+ * 1. Start local callback server
225
+ * 2. Open browser to XSUAA authorize endpoint
226
+ * 3. Wait for callback with authorization code
227
+ * 4. Exchange code for tokens
228
+ *
229
+ * @param serviceKey BTP service key
230
+ * @param callbackPort Port for callback server (0 = auto-assign)
231
+ * @returns OAuth token response
232
+ */
233
+ export async function performBrowserLogin(serviceKey, callbackPort = 0) {
234
+ const { promise, server, getPort } = startCallbackServer(callbackPort);
235
+ // Wait for server to be listening to get the actual port
236
+ await new Promise((resolve) => {
237
+ if (server.listening) {
238
+ resolve();
239
+ }
240
+ else {
241
+ server.on('listening', resolve);
242
+ }
243
+ });
244
+ const actualPort = getPort();
245
+ const redirectUri = `http://localhost:${actualPort}/callback`;
246
+ const authorizeUrl = `${serviceKey.uaa.url}/oauth/authorize` +
247
+ `?response_type=code` +
248
+ `&client_id=${encodeURIComponent(serviceKey.uaa.clientid)}` +
249
+ `&redirect_uri=${encodeURIComponent(redirectUri)}`;
250
+ logger.info('Opening browser for SAP BTP authentication...', { port: actualPort });
251
+ logger.info(`If browser doesn't open, visit: ${authorizeUrl}`);
252
+ try {
253
+ await openBrowser(authorizeUrl);
254
+ }
255
+ catch (_err) {
256
+ // Browser failed to open — log the URL so user can copy-paste
257
+ logger.warn('Could not open browser automatically. Please open this URL manually:', {
258
+ url: authorizeUrl,
259
+ });
260
+ }
261
+ // Wait for callback
262
+ const code = await promise;
263
+ // Exchange code for tokens
264
+ const tokens = await exchangeCodeForToken(serviceKey, code, redirectUri);
265
+ logger.info('BTP ABAP authentication successful', {
266
+ expiresIn: tokens.expires_in,
267
+ hasRefreshToken: !!tokens.refresh_token,
268
+ });
269
+ return tokens;
270
+ }
271
+ // ─── Token Provider (BearerFetcher Pattern) ────────────────────────
272
+ /**
273
+ * Create a bearer token provider function for the ADT HTTP client.
274
+ *
275
+ * The returned function handles:
276
+ * - First call: triggers browser login
277
+ * - Subsequent calls: returns cached token
278
+ * - Token refresh: uses refresh token when access token expires
279
+ * - Re-login: triggers browser login if refresh token also expires
280
+ *
281
+ * @param serviceKey BTP service key
282
+ * @param callbackPort Port for OAuth callback (0 = auto-assign)
283
+ * @returns Async function that returns a valid Bearer token
284
+ */
285
+ export function createBearerTokenProvider(serviceKey, callbackPort = 0) {
286
+ let tokenCache;
287
+ return async () => {
288
+ // If we have a cached token that's still valid (with 60s buffer), return it
289
+ if (tokenCache && Date.now() < tokenCache.expiresAt - 60000) {
290
+ return tokenCache.accessToken;
291
+ }
292
+ // Try refresh if we have a refresh token
293
+ if (tokenCache?.refreshToken) {
294
+ try {
295
+ const refreshed = await refreshAccessToken(serviceKey, tokenCache.refreshToken);
296
+ tokenCache = {
297
+ accessToken: refreshed.access_token,
298
+ refreshToken: refreshed.refresh_token ?? tokenCache.refreshToken,
299
+ expiresAt: Date.now() + refreshed.expires_in * 1000,
300
+ };
301
+ logger.debug('OAuth token refreshed successfully');
302
+ return tokenCache.accessToken;
303
+ }
304
+ catch (err) {
305
+ logger.warn('OAuth token refresh failed, will re-authenticate via browser', {
306
+ error: err instanceof Error ? err.message : String(err),
307
+ });
308
+ // Fall through to browser login
309
+ }
310
+ }
311
+ // No token or refresh failed — do browser login
312
+ const tokens = await performBrowserLogin(serviceKey, callbackPort);
313
+ tokenCache = {
314
+ accessToken: tokens.access_token,
315
+ refreshToken: tokens.refresh_token,
316
+ expiresAt: Date.now() + tokens.expires_in * 1000,
317
+ };
318
+ return tokenCache.accessToken;
319
+ };
320
+ }
321
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../ts-src/adt/oauth.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,8 @@ export interface FeatureStatus {
28
28
  message?: string;
29
29
  probedAt?: string;
30
30
  }
31
+ /** SAP system type: BTP ABAP Environment or on-premise */
32
+ export type SystemType = 'btp' | 'onprem';
31
33
  /** Resolved features after probing */
32
34
  export interface ResolvedFeatures {
33
35
  hana: FeatureStatus;
@@ -38,6 +40,8 @@ export interface ResolvedFeatures {
38
40
  transport: FeatureStatus;
39
41
  /** Detected SAP_BASIS release (e.g. "750", "757"). Populated during probe. */
40
42
  abapRelease?: string;
43
+ /** Detected system type: 'btp' (SAP_CLOUD component present) or 'onprem'. */
44
+ systemType?: SystemType;
41
45
  }
42
46
  /** System info from /sap/bc/adt/core/discovery */
43
47
  export interface SystemInfo {
@@ -80,6 +84,16 @@ export interface TransportTask {
80
84
  owner: string;
81
85
  status: string;
82
86
  }
87
+ /** Source code search result */
88
+ export interface SourceSearchResult {
89
+ objectType: string;
90
+ objectName: string;
91
+ uri: string;
92
+ matches: Array<{
93
+ line: number;
94
+ snippet: string;
95
+ }>;
96
+ }
83
97
  /** Table structure */
84
98
  export interface TableField {
85
99
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../ts-src/adt/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,4BAA4B;AAC5B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,EAAE,aAAa,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;IACpB,GAAG,EAAE,aAAa,CAAC;IACnB,SAAS,EAAE,aAAa,CAAC;IACzB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,kDAAkD;AAClD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uBAAuB;AACvB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,0BAA0B;AAC1B,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAwB;AACxB,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sBAAsB;AACtB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../ts-src/adt/types.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@
13
13
  * This decouples the XML format from our internal types, making it
14
14
  * easier to handle SAP's inconsistent XML across different endpoints.
15
15
  */
16
- import type { AdtSearchResult } from './types.js';
16
+ import type { AdtSearchResult, SourceSearchResult } from './types.js';
17
17
  /** Parse raw XML string to a JS object */
18
18
  export declare function parseXml(xml: string): Record<string, unknown>;
19
19
  /**
@@ -104,6 +104,13 @@ export declare function parseSystemInfo(xml: string, username: string): {
104
104
  href: string;
105
105
  }>;
106
106
  };
107
+ /**
108
+ * Parse ADT source/text search results.
109
+ *
110
+ * The textSearch endpoint returns results as either XML with objectReference elements
111
+ * containing match details, or an Atom-like feed. We handle both formats.
112
+ */
113
+ export declare function parseSourceSearchResults(xml: string): SourceSearchResult[];
107
114
  /** Recursively find an array by key name, anywhere in the object tree */
108
115
  export declare function findDeepNodes(obj: unknown, key: string): Array<Record<string, unknown>>;
109
116
  //# sourceMappingURL=xml-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"xml-parser.d.ts","sourceRoot":"","sources":["../../ts-src/adt/xml-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA8BlD,0CAA0C;AAC1C,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE7D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,EAAE,CAUjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,GACV,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAczE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;CAAE,CA6CrG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBnH;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAQrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CA0BvE;AAcD,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoBvF"}
1
+ {"version":3,"file":"xml-parser.d.ts","sourceRoot":"","sources":["../../ts-src/adt/xml-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA8BtE,0CAA0C;AAC1C,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE7D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,EAAE,CAUjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,GACV,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAczE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;CAAE,CA6CrG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBnH;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAQrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CA0BvE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAkD1E;AAcD,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoBvF"}
@@ -201,7 +201,7 @@ export function parseSystemInfo(xml, username) {
201
201
  // Atom service document: service > workspace > collection
202
202
  const collections = [];
203
203
  // After namespace stripping: app:service → service, app:workspace → workspace, app:collection → collection
204
- const service = (parsed.service ?? parsed['service'] ?? {});
204
+ const service = (parsed.service ?? parsed.service ?? {});
205
205
  const workspaces = Array.isArray(service.workspace)
206
206
  ? service.workspace
207
207
  : service.workspace
@@ -219,6 +219,59 @@ export function parseSystemInfo(xml, username) {
219
219
  }
220
220
  return { user: username ?? '', collections };
221
221
  }
222
+ /**
223
+ * Parse ADT source/text search results.
224
+ *
225
+ * The textSearch endpoint returns results as either XML with objectReference elements
226
+ * containing match details, or an Atom-like feed. We handle both formats.
227
+ */
228
+ export function parseSourceSearchResults(xml) {
229
+ const parsed = parseXml(xml);
230
+ const results = [];
231
+ // Try objectReferences format (similar to quickSearch)
232
+ const refs = getNestedArray(parsed, 'objectReferences', 'objectReference');
233
+ if (refs.length > 0) {
234
+ for (const ref of refs) {
235
+ results.push({
236
+ objectType: String(ref['@_type'] ?? ''),
237
+ objectName: String(ref['@_name'] ?? ''),
238
+ uri: String(ref['@_uri'] ?? ''),
239
+ matches: [],
240
+ });
241
+ }
242
+ return results;
243
+ }
244
+ // Try Atom feed format
245
+ const entries = getNestedArray(parsed, 'feed', 'entry');
246
+ for (const entry of entries) {
247
+ const uri = String(entry.id ?? entry['@_href'] ?? '');
248
+ const title = String(entry.title ?? '');
249
+ results.push({
250
+ objectType: '',
251
+ objectName: title || uri.split('/').pop() || '',
252
+ uri,
253
+ matches: [],
254
+ });
255
+ }
256
+ // Fallback: try to find any matching nodes
257
+ if (results.length === 0) {
258
+ const nodes = findDeepNodes(parsed, 'match');
259
+ for (const node of nodes) {
260
+ results.push({
261
+ objectType: String(node['@_type'] ?? ''),
262
+ objectName: String(node['@_name'] ?? node['@_objectName'] ?? ''),
263
+ uri: String(node['@_uri'] ?? ''),
264
+ matches: [
265
+ {
266
+ line: Number(node['@_line'] ?? 0),
267
+ snippet: String(node['@_snippet'] ?? node['#text'] ?? ''),
268
+ },
269
+ ],
270
+ });
271
+ }
272
+ }
273
+ return results;
274
+ }
222
275
  // ─── Helpers ────────────────────────────────────────────────────────
223
276
  /** Safely get a nested array from parsed XML */
224
277
  function getNestedArray(obj, parent, child) {
@@ -1 +1 @@
1
- {"version":3,"file":"xml-parser.js","sourceRoot":"","sources":["../../ts-src/adt/xml-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xml-parser.js","sourceRoot":"","sources":["../../ts-src/adt/xml-parser.ts"],"names":[],"mappings":"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"}