arc-1 0.2.0 → 0.4.1

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 (159) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +77 -199
  3. package/dist/adt/btp.d.ts +2 -2
  4. package/dist/adt/btp.d.ts.map +1 -1
  5. package/dist/adt/btp.js +1 -1
  6. package/dist/adt/btp.js.map +1 -1
  7. package/dist/adt/client.d.ts +13 -1
  8. package/dist/adt/client.d.ts.map +1 -1
  9. package/dist/adt/client.js +40 -1
  10. package/dist/adt/client.js.map +1 -1
  11. package/dist/adt/codeintel.d.ts +41 -0
  12. package/dist/adt/codeintel.d.ts.map +1 -1
  13. package/dist/adt/codeintel.js +99 -27
  14. package/dist/adt/codeintel.js.map +1 -1
  15. package/dist/adt/config.d.ts +6 -0
  16. package/dist/adt/config.d.ts.map +1 -1
  17. package/dist/adt/config.js.map +1 -1
  18. package/dist/adt/cookies.d.ts.map +1 -1
  19. package/dist/adt/cookies.js.map +1 -1
  20. package/dist/adt/crud.d.ts.map +1 -1
  21. package/dist/adt/crud.js.map +1 -1
  22. package/dist/adt/devtools.d.ts +14 -0
  23. package/dist/adt/devtools.d.ts.map +1 -1
  24. package/dist/adt/devtools.js +28 -3
  25. package/dist/adt/devtools.js.map +1 -1
  26. package/dist/adt/diagnostics.d.ts +101 -0
  27. package/dist/adt/diagnostics.d.ts.map +1 -0
  28. package/dist/adt/diagnostics.js +349 -0
  29. package/dist/adt/diagnostics.js.map +1 -0
  30. package/dist/adt/errors.d.ts.map +1 -1
  31. package/dist/adt/errors.js.map +1 -1
  32. package/dist/adt/features.d.ts +11 -2
  33. package/dist/adt/features.d.ts.map +1 -1
  34. package/dist/adt/features.js +37 -12
  35. package/dist/adt/features.js.map +1 -1
  36. package/dist/adt/http.d.ts +33 -7
  37. package/dist/adt/http.d.ts.map +1 -1
  38. package/dist/adt/http.js +148 -84
  39. package/dist/adt/http.js.map +1 -1
  40. package/dist/adt/oauth.d.ts +120 -0
  41. package/dist/adt/oauth.d.ts.map +1 -0
  42. package/dist/adt/oauth.js +321 -0
  43. package/dist/adt/oauth.js.map +1 -0
  44. package/dist/adt/safety.d.ts.map +1 -1
  45. package/dist/adt/safety.js.map +1 -1
  46. package/dist/adt/transport.d.ts.map +1 -1
  47. package/dist/adt/transport.js.map +1 -1
  48. package/dist/adt/types.d.ts +143 -0
  49. package/dist/adt/types.d.ts.map +1 -1
  50. package/dist/adt/types.js.map +1 -1
  51. package/dist/adt/xml-parser.d.ts +37 -1
  52. package/dist/adt/xml-parser.d.ts.map +1 -1
  53. package/dist/adt/xml-parser.js +147 -0
  54. package/dist/adt/xml-parser.js.map +1 -1
  55. package/dist/cache/cache.d.ts +47 -4
  56. package/dist/cache/cache.d.ts.map +1 -1
  57. package/dist/cache/cache.js +16 -5
  58. package/dist/cache/cache.js.map +1 -1
  59. package/dist/cache/caching-layer.d.ts +82 -0
  60. package/dist/cache/caching-layer.d.ts.map +1 -0
  61. package/dist/cache/caching-layer.js +134 -0
  62. package/dist/cache/caching-layer.js.map +1 -0
  63. package/dist/cache/memory.d.ts +14 -2
  64. package/dist/cache/memory.d.ts.map +1 -1
  65. package/dist/cache/memory.js +72 -5
  66. package/dist/cache/memory.js.map +1 -1
  67. package/dist/cache/sqlite.d.ts +10 -1
  68. package/dist/cache/sqlite.d.ts.map +1 -1
  69. package/dist/cache/sqlite.js +90 -2
  70. package/dist/cache/sqlite.js.map +1 -1
  71. package/dist/cache/warmup.d.ts +41 -0
  72. package/dist/cache/warmup.d.ts.map +1 -0
  73. package/dist/cache/warmup.js +286 -0
  74. package/dist/cache/warmup.js.map +1 -0
  75. package/dist/cli.d.ts.map +1 -1
  76. package/dist/cli.js.map +1 -1
  77. package/dist/context/cds-deps.d.ts +35 -0
  78. package/dist/context/cds-deps.d.ts.map +1 -0
  79. package/dist/context/cds-deps.js +201 -0
  80. package/dist/context/cds-deps.js.map +1 -0
  81. package/dist/context/compressor.d.ts +20 -1
  82. package/dist/context/compressor.d.ts.map +1 -1
  83. package/dist/context/compressor.js +178 -17
  84. package/dist/context/compressor.js.map +1 -1
  85. package/dist/context/contract.d.ts.map +1 -1
  86. package/dist/context/contract.js.map +1 -1
  87. package/dist/context/deps.d.ts.map +1 -1
  88. package/dist/context/deps.js.map +1 -1
  89. package/dist/context/method-surgery.d.ts +91 -0
  90. package/dist/context/method-surgery.d.ts.map +1 -0
  91. package/dist/context/method-surgery.js +441 -0
  92. package/dist/context/method-surgery.js.map +1 -0
  93. package/dist/context/types.d.ts +7 -0
  94. package/dist/context/types.d.ts.map +1 -1
  95. package/dist/context/types.js.map +1 -1
  96. package/dist/handlers/hyperfocused.d.ts +35 -0
  97. package/dist/handlers/hyperfocused.d.ts.map +1 -0
  98. package/dist/handlers/hyperfocused.js +104 -0
  99. package/dist/handlers/hyperfocused.js.map +1 -0
  100. package/dist/handlers/intent.d.ts +5 -1
  101. package/dist/handlers/intent.d.ts.map +1 -1
  102. package/dist/handlers/intent.js +462 -44
  103. package/dist/handlers/intent.js.map +1 -1
  104. package/dist/handlers/tools.d.ts +5 -0
  105. package/dist/handlers/tools.d.ts.map +1 -1
  106. package/dist/handlers/tools.js +270 -87
  107. package/dist/handlers/tools.js.map +1 -1
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js.map +1 -1
  110. package/dist/lint/config-builder.d.ts +60 -0
  111. package/dist/lint/config-builder.d.ts.map +1 -0
  112. package/dist/lint/config-builder.js +187 -0
  113. package/dist/lint/config-builder.js.map +1 -0
  114. package/dist/lint/lint.d.ts +43 -0
  115. package/dist/lint/lint.d.ts.map +1 -1
  116. package/dist/lint/lint.js +77 -2
  117. package/dist/lint/lint.js.map +1 -1
  118. package/dist/lint/presets/cloud.d.ts +16 -0
  119. package/dist/lint/presets/cloud.d.ts.map +1 -0
  120. package/dist/lint/presets/cloud.js +111 -0
  121. package/dist/lint/presets/cloud.js.map +1 -0
  122. package/dist/lint/presets/onprem.d.ts +17 -0
  123. package/dist/lint/presets/onprem.d.ts.map +1 -0
  124. package/dist/lint/presets/onprem.js +82 -0
  125. package/dist/lint/presets/onprem.js.map +1 -0
  126. package/dist/server/audit.d.ts +1 -0
  127. package/dist/server/audit.d.ts.map +1 -1
  128. package/dist/server/audit.js.map +1 -1
  129. package/dist/server/config.d.ts.map +1 -1
  130. package/dist/server/config.js +20 -0
  131. package/dist/server/config.js.map +1 -1
  132. package/dist/server/context.d.ts.map +1 -1
  133. package/dist/server/context.js.map +1 -1
  134. package/dist/server/elicit.d.ts.map +1 -1
  135. package/dist/server/elicit.js.map +1 -1
  136. package/dist/server/http.d.ts.map +1 -1
  137. package/dist/server/http.js +4 -1
  138. package/dist/server/http.js.map +1 -1
  139. package/dist/server/logger.d.ts.map +1 -1
  140. package/dist/server/logger.js.map +1 -1
  141. package/dist/server/server.d.ts +4 -2
  142. package/dist/server/server.d.ts.map +1 -1
  143. package/dist/server/server.js +121 -8
  144. package/dist/server/server.js.map +1 -1
  145. package/dist/server/sinks/btp-auditlog.d.ts.map +1 -1
  146. package/dist/server/sinks/btp-auditlog.js.map +1 -1
  147. package/dist/server/sinks/file.d.ts.map +1 -1
  148. package/dist/server/sinks/file.js.map +1 -1
  149. package/dist/server/sinks/stderr.d.ts.map +1 -1
  150. package/dist/server/sinks/stderr.js.map +1 -1
  151. package/dist/server/sinks/types.d.ts.map +1 -1
  152. package/dist/server/sinks/types.js.map +1 -1
  153. package/dist/server/types.d.ts +19 -0
  154. package/dist/server/types.d.ts.map +1 -1
  155. package/dist/server/types.js +8 -0
  156. package/dist/server/types.js.map +1 -1
  157. package/dist/server/xsuaa.d.ts.map +1 -1
  158. package/dist/server/xsuaa.js.map +1 -1
  159. package/package.json +14 -6
@@ -0,0 +1,349 @@
1
+ /**
2
+ * Runtime diagnostics for SAP ADT.
3
+ *
4
+ * - Short dumps (ST22): list and read ABAP runtime errors
5
+ * - ABAP traces: list and analyze profiler trace files
6
+ *
7
+ * All operations are read-only (GET requests).
8
+ * Follows the same pure-function pattern as devtools.ts.
9
+ */
10
+ import { checkOperation, OperationType } from './safety.js';
11
+ /**
12
+ * List ABAP short dumps (ST22 equivalent).
13
+ *
14
+ * Endpoint: GET /sap/bc/adt/runtime/dumps
15
+ * Returns an Atom feed with dump entries.
16
+ */
17
+ export async function listDumps(http, safety, options) {
18
+ checkOperation(safety, OperationType.Read, 'ListDumps');
19
+ const params = [];
20
+ if (options?.maxResults) {
21
+ params.push(`$top=${options.maxResults}`);
22
+ }
23
+ if (options?.user) {
24
+ params.push(`$query=${encodeURIComponent(`and(equals(user,${options.user}))`)}`);
25
+ }
26
+ const queryString = params.length > 0 ? `?${params.join('&')}` : '';
27
+ const resp = await http.get(`/sap/bc/adt/runtime/dumps${queryString}`, {
28
+ Accept: 'application/atom+xml;type=feed',
29
+ });
30
+ return parseDumpList(resp.body);
31
+ }
32
+ /**
33
+ * Get full dump detail including formatted text.
34
+ *
35
+ * Makes two requests:
36
+ * 1. XML metadata (chapters, links, attributes)
37
+ * 2. Formatted plain text (full dump content)
38
+ *
39
+ * The dump ID is the URL-encoded path segment from the listing.
40
+ */
41
+ export async function getDump(http, safety, dumpId) {
42
+ checkOperation(safety, OperationType.Read, 'GetDump');
43
+ // Fetch XML metadata and formatted text in parallel
44
+ const [xmlResp, textResp] = await Promise.all([
45
+ http.get(`/sap/bc/adt/runtime/dump/${dumpId}`, {
46
+ Accept: 'application/vnd.sap.adt.runtime.dump.v1+xml',
47
+ }),
48
+ http.get(`/sap/bc/adt/runtime/dump/${dumpId}/formatted`, {
49
+ Accept: 'text/plain',
50
+ }),
51
+ ]);
52
+ return parseDumpDetail(xmlResp.body, textResp.body, dumpId);
53
+ }
54
+ // ─── ABAP Traces ────────────────────────────────────────────────────
55
+ /**
56
+ * List ABAP profiler trace files.
57
+ *
58
+ * Endpoint: GET /sap/bc/adt/runtime/traces/abaptraces
59
+ * Returns an Atom feed with trace entries.
60
+ */
61
+ export async function listTraces(http, safety) {
62
+ checkOperation(safety, OperationType.Read, 'ListTraces');
63
+ const resp = await http.get('/sap/bc/adt/runtime/traces/abaptraces', {
64
+ Accept: 'application/atom+xml;type=feed',
65
+ });
66
+ return parseTraceList(resp.body);
67
+ }
68
+ /**
69
+ * Get trace hitlist (execution hot spots).
70
+ *
71
+ * Returns the most expensive procedures sorted by gross time.
72
+ */
73
+ export async function getTraceHitlist(http, safety, traceId) {
74
+ checkOperation(safety, OperationType.Read, 'GetTraceHitlist');
75
+ const resp = await http.get(`/sap/bc/adt/runtime/traces/abaptraces/${traceId}/hitlist`, {
76
+ Accept: 'application/xml',
77
+ });
78
+ return parseTraceHitlist(resp.body);
79
+ }
80
+ /**
81
+ * Get trace call tree (statements).
82
+ *
83
+ * Returns the hierarchical call tree with timing data.
84
+ */
85
+ export async function getTraceStatements(http, safety, traceId) {
86
+ checkOperation(safety, OperationType.Read, 'GetTraceStatements');
87
+ const resp = await http.get(`/sap/bc/adt/runtime/traces/abaptraces/${traceId}/statements`, {
88
+ Accept: 'application/xml',
89
+ });
90
+ return parseTraceStatements(resp.body);
91
+ }
92
+ /**
93
+ * Get trace database accesses.
94
+ *
95
+ * Returns table access statistics (which tables, how many times, buffered vs not).
96
+ */
97
+ export async function getTraceDbAccesses(http, safety, traceId) {
98
+ checkOperation(safety, OperationType.Read, 'GetTraceDbAccesses');
99
+ const resp = await http.get(`/sap/bc/adt/runtime/traces/abaptraces/${traceId}/dbAccesses`, {
100
+ Accept: 'application/xml',
101
+ });
102
+ return parseTraceDbAccesses(resp.body);
103
+ }
104
+ // ─── Parsers ────────────────────────────────────────────────────────
105
+ /**
106
+ * Parse dump listing Atom feed.
107
+ *
108
+ * Each atom:entry contains:
109
+ * - atom:author/atom:name → user
110
+ * - atom:category term="..." label="ABAP runtime error" → error type
111
+ * - atom:category term="..." label="Terminated ABAP program" → program
112
+ * - atom:published → timestamp
113
+ * - atom:link rel="self" href → contains dump ID path
114
+ */
115
+ export function parseDumpList(xml) {
116
+ const entries = [];
117
+ const entryRegex = /<atom:entry[\s\S]*?<\/atom:entry>/g;
118
+ let match;
119
+ while ((match = entryRegex.exec(xml)) !== null) {
120
+ const entry = match[0];
121
+ const user = extractTag(entry, 'atom:name') || '';
122
+ const error = extractAttrValue(entry, 'term', 'ABAP runtime error');
123
+ const program = extractAttrValue(entry, 'term', 'Terminated ABAP program');
124
+ const timestamp = extractTag(entry, 'atom:published') || '';
125
+ // Extract dump ID from the self link (rel="self" type="text/plain")
126
+ const selfMatch = entry.match(/href="(?:adt:\/\/[^/]+)?\/sap\/bc\/adt\/runtime\/dump\/([^"]*)"[^>]*rel="self"/);
127
+ const id = selfMatch?.[1] || '';
128
+ if (id) {
129
+ entries.push({ id, timestamp, user, error, program });
130
+ }
131
+ }
132
+ return entries;
133
+ }
134
+ /**
135
+ * Parse dump detail XML metadata + formatted text.
136
+ *
137
+ * The XML response has attributes on the root dump:dump element:
138
+ * - error, author, exception, terminatedProgram, datetime
139
+ *
140
+ * And dump:chapter elements with name, title, category attributes.
141
+ */
142
+ export function parseDumpDetail(xml, formattedText, dumpId) {
143
+ // Extract root attributes
144
+ const error = extractAttrSimple(xml, 'error') || '';
145
+ const exception = extractAttrSimple(xml, 'exception') || '';
146
+ const program = extractAttrSimple(xml, 'terminatedProgram') || '';
147
+ const user = extractAttrSimple(xml, 'author') || '';
148
+ const timestamp = extractAttrSimple(xml, 'datetime') || '';
149
+ // Extract termination source URI
150
+ const termMatch = xml.match(/relation="http:\/\/www\.sap\.com\/adt\/relations\/runtime\/dump\/termination"[^>]*uri="([^"]*)"/);
151
+ const terminationUri = termMatch?.[1];
152
+ // Extract chapters
153
+ const chapters = [];
154
+ const chapterRegex = /<dump:chapter[^>]*name="([^"]*)"[^>]*title="([^"]*)"[^>]*category="([^"]*)"/g;
155
+ let chMatch;
156
+ while ((chMatch = chapterRegex.exec(xml)) !== null) {
157
+ chapters.push({
158
+ name: chMatch[1],
159
+ title: chMatch[2],
160
+ category: chMatch[3],
161
+ });
162
+ }
163
+ return {
164
+ id: dumpId,
165
+ error,
166
+ exception,
167
+ program,
168
+ user,
169
+ timestamp,
170
+ chapters,
171
+ formattedText,
172
+ terminationUri,
173
+ };
174
+ }
175
+ /**
176
+ * Parse trace listing Atom feed.
177
+ *
178
+ * Trace entries may contain extended attributes in a trc: namespace.
179
+ */
180
+ export function parseTraceList(xml) {
181
+ const entries = [];
182
+ const entryRegex = /<atom:entry[\s\S]*?<\/atom:entry>/g;
183
+ let match;
184
+ while ((match = entryRegex.exec(xml)) !== null) {
185
+ const entry = match[0];
186
+ const title = extractTag(entry, 'atom:title') || '';
187
+ const timestamp = extractTag(entry, 'atom:updated') || extractTag(entry, 'atom:published') || '';
188
+ // Extract trace ID from self link
189
+ const selfMatch = entry.match(/href="(?:adt:\/\/[^/]+)?\/sap\/bc\/adt\/runtime\/traces\/abaptraces\/([^"]*)"[^>]*rel="self"/);
190
+ const id = selfMatch?.[1] || '';
191
+ // Extended trace data (namespace-prefixed attributes)
192
+ const state = extractAttrSimple(entry, 'state');
193
+ const objectName = extractAttrSimple(entry, 'objectName');
194
+ const runtimeStr = extractAttrSimple(entry, 'runtime');
195
+ if (id || title) {
196
+ entries.push({
197
+ id,
198
+ title,
199
+ timestamp,
200
+ state: state || undefined,
201
+ objectName: objectName || undefined,
202
+ runtime: runtimeStr ? Number(runtimeStr) : undefined,
203
+ });
204
+ }
205
+ }
206
+ return entries;
207
+ }
208
+ /**
209
+ * Parse trace hitlist XML.
210
+ *
211
+ * Hitlist entries contain procedure names and timing data.
212
+ */
213
+ export function parseTraceHitlist(xml) {
214
+ const entries = [];
215
+ const entryRegex = /<hitListEntry[^>]*callingProgram="([^"]*)"[^>]*calledProgram="([^"]*)"[^>]*hitCount="(\d+)"[^>]*grossTime="(\d+)"[^>]*(?:traceEventNetTime|netTime)="(\d+)"/g;
216
+ let match;
217
+ while ((match = entryRegex.exec(xml)) !== null) {
218
+ entries.push({
219
+ callingProgram: match[1],
220
+ calledProgram: match[2],
221
+ hitCount: Number(match[3]),
222
+ grossTime: Number(match[4]),
223
+ netTime: Number(match[5]),
224
+ });
225
+ }
226
+ // Fallback: try generic attribute extraction if regex didn't match
227
+ if (entries.length === 0) {
228
+ const genericRegex = /<(?:hitListEntry|entry)[^>]+>/g;
229
+ let gMatch;
230
+ while ((gMatch = genericRegex.exec(xml)) !== null) {
231
+ const tag = gMatch[0];
232
+ const callingProgram = extractAttrSimple(tag, 'callingProgram') || '';
233
+ const calledProgram = extractAttrSimple(tag, 'calledProgram') || '';
234
+ const hitCount = extractAttrSimple(tag, 'hitCount');
235
+ if (callingProgram || calledProgram) {
236
+ entries.push({
237
+ callingProgram,
238
+ calledProgram,
239
+ hitCount: hitCount ? Number(hitCount) : 0,
240
+ grossTime: Number(extractAttrSimple(tag, 'grossTime') || '0'),
241
+ netTime: Number(extractAttrSimple(tag, 'traceEventNetTime') || extractAttrSimple(tag, 'netTime') || '0'),
242
+ });
243
+ }
244
+ }
245
+ }
246
+ return entries;
247
+ }
248
+ /**
249
+ * Parse trace statements (call tree) XML.
250
+ */
251
+ export function parseTraceStatements(xml) {
252
+ const entries = [];
253
+ // Extract self-closing tags, handling > inside attribute values
254
+ for (const tag of extractSelfClosingTags(xml, 'traceStatement', 'statement')) {
255
+ const callLevel = extractAttrSimple(tag, 'callLevel');
256
+ if (callLevel === null)
257
+ continue;
258
+ entries.push({
259
+ callLevel: Number(callLevel),
260
+ hitCount: Number(extractAttrSimple(tag, 'hitCount') || '0'),
261
+ isProceduralUnit: extractAttrSimple(tag, 'isProceduralUnit') === 'true',
262
+ grossTime: Number(extractAttrSimple(tag, 'grossTime') || '0'),
263
+ description: extractAttrSimple(tag, 'description') || extractAttrSimple(tag, 'name') || '',
264
+ });
265
+ }
266
+ return entries;
267
+ }
268
+ /**
269
+ * Parse trace database accesses XML.
270
+ */
271
+ export function parseTraceDbAccesses(xml) {
272
+ const entries = [];
273
+ const entryRegex = /<(?:dbAccess|access)[^>]*tableName="([^"]*)"[^>]*/g;
274
+ let match;
275
+ while ((match = entryRegex.exec(xml)) !== null) {
276
+ const tag = xml.slice(match.index, xml.indexOf('>', match.index + match[0].length) + 1);
277
+ entries.push({
278
+ tableName: match[1],
279
+ statement: extractAttrSimple(tag, 'statement') || '',
280
+ type: extractAttrSimple(tag, 'type') || '',
281
+ totalCount: Number(extractAttrSimple(tag, 'totalCount') || '0'),
282
+ bufferedCount: Number(extractAttrSimple(tag, 'bufferedCount') || '0'),
283
+ accessTime: Number(extractAttrSimple(tag, 'accessTime') || '0'),
284
+ });
285
+ }
286
+ return entries;
287
+ }
288
+ // ─── Helpers ────────────────────────────────────────────────────────
289
+ /**
290
+ * Extract self-closing XML tags by name, handling > inside attribute values.
291
+ * Standard regex [^>]* breaks on attributes like description="CL_TEST=>MAIN".
292
+ */
293
+ function extractSelfClosingTags(xml, ...tagNames) {
294
+ const tags = [];
295
+ for (const tagName of tagNames) {
296
+ let searchFrom = 0;
297
+ while (true) {
298
+ const startIdx = xml.indexOf(`<${tagName} `, searchFrom);
299
+ if (startIdx === -1)
300
+ break;
301
+ // Find the closing /> by scanning past attribute values
302
+ let i = startIdx + tagName.length + 2;
303
+ while (i < xml.length) {
304
+ if (xml[i] === '"') {
305
+ // Skip quoted attribute value (may contain >)
306
+ i++;
307
+ while (i < xml.length && xml[i] !== '"')
308
+ i++;
309
+ i++; // skip closing quote
310
+ }
311
+ else if (xml[i] === '/' && xml[i + 1] === '>') {
312
+ tags.push(xml.slice(startIdx, i + 2));
313
+ i += 2;
314
+ break;
315
+ }
316
+ else if (xml[i] === '>' && xml[i - 1] !== '/') {
317
+ // Opening tag without self-close; skip
318
+ i++;
319
+ break;
320
+ }
321
+ else {
322
+ i++;
323
+ }
324
+ }
325
+ searchFrom = i;
326
+ }
327
+ }
328
+ return tags;
329
+ }
330
+ /** Extract text content between opening and closing XML tags */
331
+ function extractTag(xml, tagName) {
332
+ const regex = new RegExp(`<${tagName}[^>]*>([^<]*)</${tagName}>`);
333
+ const match = xml.match(regex);
334
+ return match?.[1] ?? null;
335
+ }
336
+ /** Extract attribute value from an element where another attribute has a specific value */
337
+ function extractAttrValue(xml, attrName, labelValue) {
338
+ // Match: attrName="VALUE" ... label="labelValue" or label="labelValue" ... attrName="VALUE"
339
+ const regex = new RegExp(`${attrName}="([^"]*)"[^>]*label="${labelValue}"`);
340
+ const match = xml.match(regex);
341
+ return match?.[1] || '';
342
+ }
343
+ /** Extract a simple attribute value by name */
344
+ function extractAttrSimple(xml, attr) {
345
+ const regex = new RegExp(`(?:^|\\s|:)${attr}="([^"]*)"`);
346
+ const match = xml.match(regex);
347
+ return match?.[1] ?? null;
348
+ }
349
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/adt/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../ts-src/adt/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,4CAA4C;AAC5C,qBAAa,QAAS,SAAQ,KAAK;gBACrB,OAAO,EAAE,MAAM;CAI5B;AAED,wCAAwC;AACxC,qBAAa,WAAY,SAAQ,QAAQ;aAGrB,UAAU,EAAE,MAAM;aAClB,IAAI,EAAE,MAAM;aACZ,YAAY,CAAC,EAAE,MAAM;gBAHrC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,YAAA;IAQvC;;;;;;OAMG;IACH,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IA6B/C,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;;OAIG;IACH,IAAI,gBAAgB,IAAI,OAAO,CAM9B;CACF;AAED,6DAA6D;AAC7D,qBAAa,eAAgB,SAAQ,QAAQ;aAGzB,KAAK,CAAC,EAAE,KAAK;gBAD7B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED,0CAA0C;AAC1C,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAErD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE3D"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/adt/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,4CAA4C;AAC5C,qBAAa,QAAS,SAAQ,KAAK;gBACrB,OAAO,EAAE,MAAM;CAI5B;AAED,wCAAwC;AACxC,qBAAa,WAAY,SAAQ,QAAQ;aAGrB,UAAU,EAAE,MAAM;aAClB,IAAI,EAAE,MAAM;aACZ,YAAY,CAAC,EAAE,MAAM;gBAHrC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,YAAA;IAQvC;;;;;;OAMG;IACH,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IA6B/C,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;;OAIG;IACH,IAAI,gBAAgB,IAAI,OAAO,CAM9B;CACF;AAED,6DAA6D;AAC7D,qBAAa,eAAgB,SAAQ,QAAQ;aAGzB,KAAK,CAAC,EAAE,KAAK;gBAD7B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED,0CAA0C;AAC1C,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAErD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../ts-src/adt/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/adt/errors.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@
19
19
  import { Version } from '@abaplint/core';
20
20
  import type { FeatureConfig } from './config.js';
21
21
  import type { AdtHttpClient } from './http.js';
22
- import type { ResolvedFeatures } from './types.js';
22
+ import type { ResolvedFeatures, SystemType } from './types.js';
23
23
  /**
24
24
  * Probe all features and return resolved status.
25
25
  *
@@ -27,7 +27,7 @@ import type { ResolvedFeatures } from './types.js';
27
27
  * Each probe is a HEAD request — if it returns 2xx, the feature exists.
28
28
  * 404 or network error means the feature is not available.
29
29
  */
30
- export declare function probeFeatures(client: AdtHttpClient, config: FeatureConfig): Promise<ResolvedFeatures>;
30
+ export declare function probeFeatures(client: AdtHttpClient, config: FeatureConfig, systemTypeOverride?: string): Promise<ResolvedFeatures>;
31
31
  /**
32
32
  * Map SAP_BASIS release string to the closest @abaplint/core Version.
33
33
  *
@@ -39,6 +39,15 @@ export declare function probeFeatures(client: AdtHttpClient, config: FeatureConf
39
39
  * BTP ABAP Environment reports release like "sap_btp" or similar.
40
40
  */
41
41
  export declare function mapSapReleaseToAbaplintVersion(release: string): Version;
42
+ /**
43
+ * Detect system type from installed components (exported for testing).
44
+ * Returns 'btp' if SAP_CLOUD component is present, 'onprem' otherwise.
45
+ */
46
+ export declare function detectSystemType(components: Array<{
47
+ name: string;
48
+ release: string;
49
+ description: string;
50
+ }>): SystemType;
42
51
  /** Get features without probing (for offline/test scenarios) */
43
52
  export declare function resolveWithoutProbing(config: FeatureConfig): ResolvedFeatures;
44
53
  //# sourceMappingURL=features.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../ts-src/adt/features.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAiB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAqClE;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+C3G;AAED;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAqBvE;AAkBD,gEAAgE;AAChE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,CAqB7E"}
1
+ {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../src/adt/features.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAiB,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAqC9E;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAqD3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAqBvE;AAkCD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GACxE,UAAU,CAGZ;AAED,gEAAgE;AAChE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,CAqB7E"}
@@ -50,7 +50,7 @@ function resolveFeature(mode, probeResult, id, description) {
50
50
  * Each probe is a HEAD request — if it returns 2xx, the feature exists.
51
51
  * 404 or network error means the feature is not available.
52
52
  */
53
- export async function probeFeatures(client, config) {
53
+ export async function probeFeatures(client, config, systemTypeOverride) {
54
54
  const modeMap = {
55
55
  hana: config.hana,
56
56
  abapGit: config.abapGit,
@@ -61,8 +61,8 @@ export async function probeFeatures(client, config) {
61
61
  };
62
62
  // Only probe features that are in "auto" mode
63
63
  const probesToRun = PROBES.filter((p) => modeMap[p.id] === 'auto');
64
- // Run feature probes + release detection in parallel
65
- const [probeResults, abapRelease] = await Promise.all([
64
+ // Run feature probes + system detection in parallel
65
+ const [probeResults, systemDetection] = await Promise.all([
66
66
  Promise.all(probesToRun.map(async (probe) => {
67
67
  try {
68
68
  const response = await client.get(probe.endpoint);
@@ -72,7 +72,7 @@ export async function probeFeatures(client, config) {
72
72
  return { id: probe.id, available: false };
73
73
  }
74
74
  })),
75
- detectAbapRelease(client),
75
+ detectSystemFromComponents(client),
76
76
  ]);
77
77
  // Build result map
78
78
  const resultMap = new Map();
@@ -87,8 +87,15 @@ export async function probeFeatures(client, config) {
87
87
  result[probe.id] = resolveFeature(mode, probeResult, probe.id, probe.description);
88
88
  }
89
89
  const resolved = result;
90
- if (abapRelease) {
91
- resolved.abapRelease = abapRelease;
90
+ if (systemDetection.abapRelease) {
91
+ resolved.abapRelease = systemDetection.abapRelease;
92
+ }
93
+ // Apply system type: manual override takes precedence over auto-detection
94
+ if (systemTypeOverride && systemTypeOverride !== 'auto') {
95
+ resolved.systemType = systemTypeOverride;
96
+ }
97
+ else if (systemDetection.systemType) {
98
+ resolved.systemType = systemDetection.systemType;
92
99
  }
93
100
  return resolved;
94
101
  }
@@ -137,22 +144,40 @@ export function mapSapReleaseToAbaplintVersion(release) {
137
144
  return Version.v700;
138
145
  }
139
146
  /**
140
- * Detect the SAP_BASIS release from installed components.
141
- * Returns the release string (e.g. "757") or undefined on failure.
147
+ * Detect SAP_BASIS release and system type from installed components.
148
+ *
149
+ * System type detection:
150
+ * - BTP ABAP Environment has `SAP_CLOUD` component (and no `SAP_ABA`)
151
+ * - On-premise has `SAP_ABA` component (and no `SAP_CLOUD`)
152
+ *
153
+ * This reuses the same `/sap/bc/adt/system/components` call — zero extra HTTP requests.
142
154
  */
143
- async function detectAbapRelease(client) {
155
+ async function detectSystemFromComponents(client) {
144
156
  try {
145
157
  const resp = await client.get('/sap/bc/adt/system/components');
146
158
  if (resp.statusCode >= 400)
147
- return undefined;
159
+ return {};
148
160
  const components = parseInstalledComponents(resp.body);
149
161
  const basis = components.find((c) => c.name.toUpperCase() === 'SAP_BASIS');
150
- return basis?.release || undefined;
162
+ const hasSapCloud = components.some((c) => c.name.toUpperCase() === 'SAP_CLOUD');
163
+ const systemType = hasSapCloud ? 'btp' : 'onprem';
164
+ return {
165
+ abapRelease: basis?.release || undefined,
166
+ systemType,
167
+ };
151
168
  }
152
169
  catch {
153
- return undefined;
170
+ return {};
154
171
  }
155
172
  }
173
+ /**
174
+ * Detect system type from installed components (exported for testing).
175
+ * Returns 'btp' if SAP_CLOUD component is present, 'onprem' otherwise.
176
+ */
177
+ export function detectSystemType(components) {
178
+ const hasSapCloud = components.some((c) => c.name.toUpperCase() === 'SAP_CLOUD');
179
+ return hasSapCloud ? 'btp' : 'onprem';
180
+ }
156
181
  /** Get features without probing (for offline/test scenarios) */
157
182
  export function resolveWithoutProbing(config) {
158
183
  const result = {};
@@ -1 +1 @@
1
- {"version":3,"file":"features.js","sourceRoot":"","sources":["../../ts-src/adt/features.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/adt/features.ts"],"names":[],"mappings":"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"}
@@ -19,11 +19,12 @@
19
19
  * 3. Stateful sessions use "X-sap-adt-sessiontype: stateful" header.
20
20
  * Lock/modify/unlock must use the same session cookies.
21
21
  * withStatefulSession() ensures session isolation.
22
- * (fr0ster uses AsyncLocalStorage for this — we use a simpler approach
23
- * with an isolated axios instance per session.)
24
22
  *
25
23
  * 4. sap-client and sap-language are added to every request as query params.
26
24
  * This is an SAP convention, not ADT-specific.
25
+ *
26
+ * 5. Uses native fetch() with undici dispatchers for proxy and TLS configuration.
27
+ * No external HTTP dependencies — undici ships with Node.js 22+.
27
28
  */
28
29
  import type { BTPProxyConfig } from './btp.js';
29
30
  /** Session type for ADT requests */
@@ -50,6 +51,13 @@ export interface AdtHttpConfig {
50
51
  sapConnectivityAuth?: string;
51
52
  /** PP Option 1: jwt-bearer exchanged token replacing Proxy-Authorization */
52
53
  ppProxyAuth?: string;
54
+ /**
55
+ * Bearer token provider for BTP ABAP Environment (OAuth 2.0).
56
+ * When set, replaces Basic Auth with `Authorization: Bearer <token>`.
57
+ * The function handles token lifecycle (caching, refresh, re-login).
58
+ * Used for direct BTP ABAP connections via service key.
59
+ */
60
+ bearerTokenProvider?: () => Promise<string>;
53
61
  }
54
62
  /** Response from an ADT HTTP request */
55
63
  export interface AdtResponse {
@@ -64,7 +72,7 @@ export interface AdtResponse {
64
72
  */
65
73
  export declare class AdtHttpClient {
66
74
  private csrfToken;
67
- private axios;
75
+ private dispatcher;
68
76
  private config;
69
77
  /**
70
78
  * Cookie jar — stores Set-Cookie headers from responses and sends them back.
@@ -78,6 +86,8 @@ export declare class AdtHttpClient {
78
86
  * (domain, path, expiry) because all requests go to the same SAP host.
79
87
  */
80
88
  private cookieJar;
89
+ /** Guard to prevent infinite retry loops for DB connection errors */
90
+ private dbRetryInProgress;
81
91
  constructor(config: AdtHttpConfig);
82
92
  /** GET request */
83
93
  get(path: string, headers?: Record<string, string>): Promise<AdtResponse>;
@@ -91,7 +101,7 @@ export declare class AdtHttpClient {
91
101
  * Execute a function within an isolated stateful session.
92
102
  * Ensures lock/modify/unlock share the same SAP session cookies.
93
103
  *
94
- * Creates a new axios instance with stateful session header,
104
+ * Creates a new client instance with stateful session header,
95
105
  * shares CSRF token with the main client.
96
106
  */
97
107
  withStatefulSession<T>(fn: (client: AdtHttpClient) => Promise<T>): Promise<T>;
@@ -105,12 +115,28 @@ export declare class AdtHttpClient {
105
115
  */
106
116
  fetchCsrfToken(): Promise<void>;
107
117
  /**
108
- * Extract and store cookies from a response's Set-Cookie headers.
109
- * Only stores the name=value part; ignores path, domain, expiry
110
- * since all requests go to the same SAP host.
118
+ * Detect "database connection is not open" error from SAP.
119
+ * This happens when a work process loses its HANA DB connection.
120
+ * SAP returns a 500 with this message in the body (plain text or XML).
121
+ */
122
+ private isDbConnectionError;
123
+ /**
124
+ * Reset HTTP session state to force SAP's ICM to assign a new work process.
125
+ * Clears session cookies and CSRF token so the next request gets a fresh session.
111
126
  */
127
+ private resetSession;
112
128
  private storeCookies;
113
129
  /** Build full URL with sap-client and sap-language query params */
114
130
  private buildUrl;
131
+ /** Apply Basic Auth header if username/password are configured (and no bearer provider) */
132
+ private applyAuthHeader;
133
+ /**
134
+ * Execute a fetch request with the configured dispatcher and timeout.
135
+ *
136
+ * Always uses undici's own fetch rather than the global fetch because
137
+ * Node 22's built-in fetch embeds an older undici version whose dispatcher
138
+ * interface is incompatible with npm undici@8 Agent/ProxyAgent instances.
139
+ */
140
+ private doFetch;
115
141
  }
116
142
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../ts-src/adt/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,oCAAoC;AACpC,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAE/D,4CAA4C;AAC5C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wCAAwC;AACxC,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,MAAM,CAAgB;IAC9B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,SAAS,CAAkC;gBAEvC,MAAM,EAAE,aAAa;IA2CjC,kBAAkB;IACZ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAI/E,yCAAyC;IACnC,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,WAAW,CAAC;IAIvB,wCAAwC;IAClC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAInH,2CAA2C;IACrC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAIlF;;;;;;OAMG;IACG,mBAAmB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAYnF,0BAA0B;YACZ,OAAO;IA6JrB,yEAAyE;IACzE,OAAO,CAAC,cAAc;IAsBtB;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAoErC;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAgBpB,mEAAmE;IACnE,OAAO,CAAC,QAAQ;CAcjB"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/adt/http.ts"],"names":[],"mappings":"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"}