arc-1 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/README.md +7 -5
  2. package/dist/adt/atc-batch.d.ts +71 -0
  3. package/dist/adt/atc-batch.d.ts.map +1 -0
  4. package/dist/adt/atc-batch.js +182 -0
  5. package/dist/adt/atc-batch.js.map +1 -0
  6. package/dist/adt/atc.d.ts +34 -0
  7. package/dist/adt/atc.d.ts.map +1 -1
  8. package/dist/adt/atc.js +58 -12
  9. package/dist/adt/atc.js.map +1 -1
  10. package/dist/adt/aunit.d.ts.map +1 -1
  11. package/dist/adt/aunit.js +50 -7
  12. package/dist/adt/aunit.js.map +1 -1
  13. package/dist/adt/bounded-response.d.ts +4 -1
  14. package/dist/adt/bounded-response.d.ts.map +1 -1
  15. package/dist/adt/bounded-response.js +33 -7
  16. package/dist/adt/bounded-response.js.map +1 -1
  17. package/dist/adt/ci-quality-xml.d.ts +44 -0
  18. package/dist/adt/ci-quality-xml.d.ts.map +1 -0
  19. package/dist/adt/ci-quality-xml.js +98 -0
  20. package/dist/adt/ci-quality-xml.js.map +1 -0
  21. package/dist/adt/ci-quality.d.ts +64 -0
  22. package/dist/adt/ci-quality.d.ts.map +1 -0
  23. package/dist/adt/ci-quality.js +132 -0
  24. package/dist/adt/ci-quality.js.map +1 -0
  25. package/dist/adt/client.d.ts +20 -16
  26. package/dist/adt/client.d.ts.map +1 -1
  27. package/dist/adt/client.js +35 -70
  28. package/dist/adt/client.js.map +1 -1
  29. package/dist/adt/data-source-policy.d.ts +6 -15
  30. package/dist/adt/data-source-policy.d.ts.map +1 -1
  31. package/dist/adt/data-source-policy.js +18 -11
  32. package/dist/adt/data-source-policy.js.map +1 -1
  33. package/dist/adt/ddic-xml.d.ts +78 -4
  34. package/dist/adt/ddic-xml.d.ts.map +1 -1
  35. package/dist/adt/ddic-xml.js +647 -54
  36. package/dist/adt/ddic-xml.js.map +1 -1
  37. package/dist/adt/devtools.d.ts +1 -0
  38. package/dist/adt/devtools.d.ts.map +1 -1
  39. package/dist/adt/devtools.js +24 -4
  40. package/dist/adt/devtools.js.map +1 -1
  41. package/dist/adt/http-deadline.d.ts +5 -0
  42. package/dist/adt/http-deadline.d.ts.map +1 -1
  43. package/dist/adt/http-deadline.js +2 -2
  44. package/dist/adt/http-deadline.js.map +1 -1
  45. package/dist/adt/http.d.ts +6 -3
  46. package/dist/adt/http.d.ts.map +1 -1
  47. package/dist/adt/http.js +57 -15
  48. package/dist/adt/http.js.map +1 -1
  49. package/dist/adt/internal-data-operations.d.ts +9 -4
  50. package/dist/adt/internal-data-operations.d.ts.map +1 -1
  51. package/dist/adt/internal-data-operations.js +11 -7
  52. package/dist/adt/internal-data-operations.js.map +1 -1
  53. package/dist/adt/package-contents.d.ts +12 -0
  54. package/dist/adt/package-contents.d.ts.map +1 -0
  55. package/dist/adt/package-contents.js +19 -0
  56. package/dist/adt/package-contents.js.map +1 -0
  57. package/dist/adt/relation-objects.d.ts +385 -0
  58. package/dist/adt/relation-objects.d.ts.map +1 -0
  59. package/dist/adt/relation-objects.js +262 -0
  60. package/dist/adt/relation-objects.js.map +1 -0
  61. package/dist/adt/repository-relations.d.ts +41 -0
  62. package/dist/adt/repository-relations.d.ts.map +1 -0
  63. package/dist/adt/repository-relations.js +246 -0
  64. package/dist/adt/repository-relations.js.map +1 -0
  65. package/dist/adt/request-attempt-budget.d.ts +26 -0
  66. package/dist/adt/request-attempt-budget.d.ts.map +1 -0
  67. package/dist/adt/request-attempt-budget.js +63 -0
  68. package/dist/adt/request-attempt-budget.js.map +1 -0
  69. package/dist/adt/result-limits.d.ts +3 -0
  70. package/dist/adt/result-limits.d.ts.map +1 -0
  71. package/dist/adt/result-limits.js +7 -0
  72. package/dist/adt/result-limits.js.map +1 -0
  73. package/dist/adt/server-driven.d.ts +6 -1
  74. package/dist/adt/server-driven.d.ts.map +1 -1
  75. package/dist/adt/server-driven.js +24 -20
  76. package/dist/adt/server-driven.js.map +1 -1
  77. package/dist/adt/table-query.d.ts +2 -0
  78. package/dist/adt/table-query.d.ts.map +1 -1
  79. package/dist/adt/table-query.js +61 -0
  80. package/dist/adt/table-query.js.map +1 -1
  81. package/dist/adt/text-elements.d.ts +48 -0
  82. package/dist/adt/text-elements.d.ts.map +1 -0
  83. package/dist/adt/text-elements.js +116 -0
  84. package/dist/adt/text-elements.js.map +1 -0
  85. package/dist/adt/types.d.ts +16 -0
  86. package/dist/adt/types.d.ts.map +1 -1
  87. package/dist/adt/uiad.d.ts +19 -0
  88. package/dist/adt/uiad.d.ts.map +1 -0
  89. package/dist/adt/uiad.js +173 -0
  90. package/dist/adt/uiad.js.map +1 -0
  91. package/dist/adt/xml-parser.d.ts +2 -0
  92. package/dist/adt/xml-parser.d.ts.map +1 -1
  93. package/dist/adt/xml-parser.js +20 -1
  94. package/dist/adt/xml-parser.js.map +1 -1
  95. package/dist/authz/policy.d.ts.map +1 -1
  96. package/dist/authz/policy.js +4 -1
  97. package/dist/authz/policy.js.map +1 -1
  98. package/dist/cache/cache.d.ts +3 -23
  99. package/dist/cache/cache.d.ts.map +1 -1
  100. package/dist/cache/cache.js +2 -3
  101. package/dist/cache/cache.js.map +1 -1
  102. package/dist/cache/caching-layer.d.ts +6 -25
  103. package/dist/cache/caching-layer.d.ts.map +1 -1
  104. package/dist/cache/caching-layer.js +3 -45
  105. package/dist/cache/caching-layer.js.map +1 -1
  106. package/dist/cache/memory.d.ts +1 -4
  107. package/dist/cache/memory.d.ts.map +1 -1
  108. package/dist/cache/memory.js +1 -10
  109. package/dist/cache/memory.js.map +1 -1
  110. package/dist/cache/sqlite.d.ts +1 -3
  111. package/dist/cache/sqlite.d.ts.map +1 -1
  112. package/dist/cache/sqlite.js +2 -17
  113. package/dist/cache/sqlite.js.map +1 -1
  114. package/dist/cli-checks.d.ts +3 -0
  115. package/dist/cli-checks.d.ts.map +1 -1
  116. package/dist/cli-checks.js +16 -0
  117. package/dist/cli-checks.js.map +1 -1
  118. package/dist/cli.d.ts.map +1 -1
  119. package/dist/cli.js +5 -2
  120. package/dist/cli.js.map +1 -1
  121. package/dist/context/compressor.d.ts +2 -3
  122. package/dist/context/compressor.d.ts.map +1 -1
  123. package/dist/context/compressor.js +30 -49
  124. package/dist/context/compressor.js.map +1 -1
  125. package/dist/context/contract.d.ts +5 -0
  126. package/dist/context/contract.d.ts.map +1 -1
  127. package/dist/context/contract.js +2 -2
  128. package/dist/context/contract.js.map +1 -1
  129. package/dist/context/deps.d.ts +11 -0
  130. package/dist/context/deps.d.ts.map +1 -1
  131. package/dist/context/deps.js +2 -2
  132. package/dist/context/deps.js.map +1 -1
  133. package/dist/context/parse-cache.d.ts +23 -0
  134. package/dist/context/parse-cache.d.ts.map +1 -0
  135. package/dist/context/parse-cache.js +71 -0
  136. package/dist/context/parse-cache.js.map +1 -0
  137. package/dist/context/relation-walk.d.ts +48 -0
  138. package/dist/context/relation-walk.d.ts.map +1 -0
  139. package/dist/context/relation-walk.js +137 -0
  140. package/dist/context/relation-walk.js.map +1 -0
  141. package/dist/context/types.d.ts +4 -4
  142. package/dist/context/types.d.ts.map +1 -1
  143. package/dist/handlers/activate.d.ts +1 -1
  144. package/dist/handlers/activate.d.ts.map +1 -1
  145. package/dist/handlers/activate.js +33 -56
  146. package/dist/handlers/activate.js.map +1 -1
  147. package/dist/handlers/activation-results.d.ts +3 -0
  148. package/dist/handlers/activation-results.d.ts.map +1 -0
  149. package/dist/handlers/activation-results.js +8 -0
  150. package/dist/handlers/activation-results.js.map +1 -0
  151. package/dist/handlers/context.d.ts.map +1 -1
  152. package/dist/handlers/context.js +8 -32
  153. package/dist/handlers/context.js.map +1 -1
  154. package/dist/handlers/data-element-fields.d.ts +26 -0
  155. package/dist/handlers/data-element-fields.d.ts.map +1 -0
  156. package/dist/handlers/data-element-fields.js +27 -0
  157. package/dist/handlers/data-element-fields.js.map +1 -0
  158. package/dist/handlers/diagnose-ci.d.ts +9 -0
  159. package/dist/handlers/diagnose-ci.d.ts.map +1 -0
  160. package/dist/handlers/diagnose-ci.js +120 -0
  161. package/dist/handlers/diagnose-ci.js.map +1 -0
  162. package/dist/handlers/diagnose-fields.d.ts +51 -0
  163. package/dist/handlers/diagnose-fields.d.ts.map +1 -0
  164. package/dist/handlers/diagnose-fields.js +48 -0
  165. package/dist/handlers/diagnose-fields.js.map +1 -0
  166. package/dist/handlers/diagnose.d.ts +4 -1
  167. package/dist/handlers/diagnose.d.ts.map +1 -1
  168. package/dist/handlers/diagnose.js +28 -6
  169. package/dist/handlers/diagnose.js.map +1 -1
  170. package/dist/handlers/dispatch.d.ts.map +1 -1
  171. package/dist/handlers/dispatch.js +22 -5
  172. package/dist/handlers/dispatch.js.map +1 -1
  173. package/dist/handlers/feature-cache.d.ts +4 -3
  174. package/dist/handlers/feature-cache.d.ts.map +1 -1
  175. package/dist/handlers/feature-cache.js +4 -3
  176. package/dist/handlers/feature-cache.js.map +1 -1
  177. package/dist/handlers/hyperfocused.js +1 -1
  178. package/dist/handlers/live-relations.d.ts +5 -0
  179. package/dist/handlers/live-relations.d.ts.map +1 -0
  180. package/dist/handlers/live-relations.js +89 -0
  181. package/dist/handlers/live-relations.js.map +1 -0
  182. package/dist/handlers/manage.d.ts.map +1 -1
  183. package/dist/handlers/manage.js +7 -4
  184. package/dist/handlers/manage.js.map +1 -1
  185. package/dist/handlers/navigate.d.ts +1 -1
  186. package/dist/handlers/navigate.d.ts.map +1 -1
  187. package/dist/handlers/navigate.js +11 -5
  188. package/dist/handlers/navigate.js.map +1 -1
  189. package/dist/handlers/object-types.d.ts +2 -0
  190. package/dist/handlers/object-types.d.ts.map +1 -1
  191. package/dist/handlers/object-types.js +41 -6
  192. package/dist/handlers/object-types.js.map +1 -1
  193. package/dist/handlers/query-errors.d.ts +9 -1
  194. package/dist/handlers/query-errors.d.ts.map +1 -1
  195. package/dist/handlers/query-errors.js +40 -28
  196. package/dist/handlers/query-errors.js.map +1 -1
  197. package/dist/handlers/query.d.ts +1 -1
  198. package/dist/handlers/query.d.ts.map +1 -1
  199. package/dist/handlers/query.js +2 -2
  200. package/dist/handlers/query.js.map +1 -1
  201. package/dist/handlers/read.d.ts +1 -1
  202. package/dist/handlers/read.d.ts.map +1 -1
  203. package/dist/handlers/read.js +48 -15
  204. package/dist/handlers/read.js.map +1 -1
  205. package/dist/handlers/relation-input.d.ts +42 -0
  206. package/dist/handlers/relation-input.d.ts.map +1 -0
  207. package/dist/handlers/relation-input.js +22 -0
  208. package/dist/handlers/relation-input.js.map +1 -0
  209. package/dist/handlers/relation-tool.d.ts +5 -0
  210. package/dist/handlers/relation-tool.d.ts.map +1 -0
  211. package/dist/handlers/relation-tool.js +36 -0
  212. package/dist/handlers/relation-tool.js.map +1 -0
  213. package/dist/handlers/schemas.d.ts +119 -62
  214. package/dist/handlers/schemas.d.ts.map +1 -1
  215. package/dist/handlers/schemas.js +150 -13
  216. package/dist/handlers/schemas.js.map +1 -1
  217. package/dist/handlers/search.d.ts +1 -1
  218. package/dist/handlers/search.d.ts.map +1 -1
  219. package/dist/handlers/search.js +18 -5
  220. package/dist/handlers/search.js.map +1 -1
  221. package/dist/handlers/tool-descriptions.d.ts.map +1 -1
  222. package/dist/handlers/tool-descriptions.js +12 -13
  223. package/dist/handlers/tool-descriptions.js.map +1 -1
  224. package/dist/handlers/tool-registry.d.ts +1 -0
  225. package/dist/handlers/tool-registry.d.ts.map +1 -1
  226. package/dist/handlers/tool-registry.js +4 -0
  227. package/dist/handlers/tool-registry.js.map +1 -1
  228. package/dist/handlers/tools.d.ts +2 -3
  229. package/dist/handlers/tools.d.ts.map +1 -1
  230. package/dist/handlers/tools.js +127 -72
  231. package/dist/handlers/tools.js.map +1 -1
  232. package/dist/handlers/write/batch-results.d.ts +28 -0
  233. package/dist/handlers/write/batch-results.d.ts.map +1 -0
  234. package/dist/handlers/write/batch-results.js +106 -0
  235. package/dist/handlers/write/batch-results.js.map +1 -0
  236. package/dist/handlers/write/create-transport.d.ts +7 -0
  237. package/dist/handlers/write/create-transport.d.ts.map +1 -0
  238. package/dist/handlers/write/create-transport.js +38 -0
  239. package/dist/handlers/write/create-transport.js.map +1 -0
  240. package/dist/handlers/write/create.d.ts.map +1 -1
  241. package/dist/handlers/write/create.js +276 -413
  242. package/dist/handlers/write/create.js.map +1 -1
  243. package/dist/handlers/write/uiad.d.ts +8 -0
  244. package/dist/handlers/write/uiad.d.ts.map +1 -0
  245. package/dist/handlers/write/uiad.js +115 -0
  246. package/dist/handlers/write/uiad.js.map +1 -0
  247. package/dist/handlers/write/update-delete.d.ts +6 -6
  248. package/dist/handlers/write/update-delete.d.ts.map +1 -1
  249. package/dist/handlers/write/update-delete.js +46 -15
  250. package/dist/handlers/write/update-delete.js.map +1 -1
  251. package/dist/handlers/write-helpers.d.ts +0 -6
  252. package/dist/handlers/write-helpers.d.ts.map +1 -1
  253. package/dist/handlers/write-helpers.js +88 -80
  254. package/dist/handlers/write-helpers.js.map +1 -1
  255. package/dist/handlers/write.d.ts.map +1 -1
  256. package/dist/handlers/write.js +5 -1
  257. package/dist/handlers/write.js.map +1 -1
  258. package/dist/public/ui/app.js +0 -2
  259. package/dist/server/audit.d.ts +1 -1
  260. package/dist/server/audit.d.ts.map +1 -1
  261. package/dist/server/http.d.ts +1 -1
  262. package/dist/server/http.d.ts.map +1 -1
  263. package/dist/server/http.js +1 -0
  264. package/dist/server/http.js.map +1 -1
  265. package/dist/server/logger.d.ts.map +1 -1
  266. package/dist/server/logger.js +4 -1
  267. package/dist/server/logger.js.map +1 -1
  268. package/dist/server/multi-target-tools.d.ts.map +1 -1
  269. package/dist/server/multi-target-tools.js +3 -1
  270. package/dist/server/multi-target-tools.js.map +1 -1
  271. package/dist/server/server-instructions.d.ts.map +1 -1
  272. package/dist/server/server-instructions.js +11 -5
  273. package/dist/server/server-instructions.js.map +1 -1
  274. package/dist/server/server.d.ts +1 -1
  275. package/dist/server/server.d.ts.map +1 -1
  276. package/dist/server/server.js +18 -44
  277. package/dist/server/server.js.map +1 -1
  278. package/dist/server/shutdown.d.ts +6 -0
  279. package/dist/server/shutdown.d.ts.map +1 -0
  280. package/dist/server/shutdown.js +52 -0
  281. package/dist/server/shutdown.js.map +1 -0
  282. package/dist/server/sinks/btp-auditlog.d.ts +10 -8
  283. package/dist/server/sinks/btp-auditlog.d.ts.map +1 -1
  284. package/dist/server/sinks/btp-auditlog.js +76 -68
  285. package/dist/server/sinks/btp-auditlog.js.map +1 -1
  286. package/dist/server/sinks/file.d.ts +1 -1
  287. package/dist/server/sinks/file.d.ts.map +1 -1
  288. package/dist/server/sinks/file.js +12 -21
  289. package/dist/server/sinks/file.js.map +1 -1
  290. package/dist/server/ui.js +0 -2
  291. package/dist/server/ui.js.map +1 -1
  292. package/package.json +15 -13
@@ -0,0 +1,41 @@
1
+ import type { AdtClient } from './client.js';
2
+ import type { AdtRequestOptions } from './http-deadline.js';
3
+ export declare const RELATIONS_PATH = "/sap/bc/adt/objectrelations/network";
4
+ export declare const RELATION_XML_MAX_BYTES: number;
5
+ export declare const RELATIONS_MIME = "application/vnd.sap.adt.objectrelations.request.v1+xml";
6
+ export { RELATION_NAME, RelationProtocolError, relationObjectUri } from './relation-objects.js';
7
+ export type RelationDirection = 'incoming' | 'outgoing';
8
+ export interface RelationObject {
9
+ uri: string;
10
+ name: string;
11
+ type: string;
12
+ package: string;
13
+ version: 'active';
14
+ existence: 'metadata_validated' | 'observed_reference';
15
+ }
16
+ export interface RelationEdge {
17
+ from: string;
18
+ to: string;
19
+ kind: 'uses';
20
+ context: 'ENV' | 'WUL';
21
+ evidence: 'sap_relation_explorer';
22
+ direct: null;
23
+ }
24
+ export interface RelationNetwork {
25
+ objects: RelationObject[];
26
+ edges: RelationEdge[];
27
+ }
28
+ export declare function supportsRelations(map?: ReadonlyMap<string, string[]>): boolean;
29
+ /** Bound parser work as well as wire bytes. Reject entities and unexpectedly deep XML. */
30
+ export declare function parseRelationXml(xml: string): Record<string, unknown>;
31
+ export declare function normalizeRelationNetwork(xml: string, context: 'ENV' | 'WUL', requested: RelationObject): RelationNetwork;
32
+ export declare class NativeRelationProvider {
33
+ private readonly client;
34
+ readonly options: AdtRequestOptions;
35
+ constructor(client: AdtClient, options: AdtRequestOptions);
36
+ discover(known?: ReadonlyMap<string, string[]>): Promise<ReadonlyMap<string, string[]>>;
37
+ private resolveRootUri;
38
+ validateRoot(type: string, name: string): Promise<RelationObject>;
39
+ lookup(object: RelationObject, direction: RelationDirection): Promise<RelationNetwork>;
40
+ }
41
+ //# sourceMappingURL=repository-relations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-relations.d.ts","sourceRoot":"","sources":["../../src/adt/repository-relations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAa5D,eAAO,MAAM,cAAc,wCAAwC,CAAC;AACpE,eAAO,MAAM,sBAAsB,QAAc,CAAC;AAClD,eAAO,MAAM,cAAc,2DAA2D,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAChG,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,UAAU,CAAC;AACxD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,QAAQ,CAAC;IAClB,SAAS,EAAE,oBAAoB,GAAG,oBAAoB,CAAC;CACxD;AACD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,MAAM,EAAE,IAAI,CAAC;CACd;AACD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAE9E;AAqCD,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsBrE;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,KAAK,GAAG,KAAK,EACtB,SAAS,EAAE,cAAc,GACxB,eAAe,CA6DjB;AAED,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,QAAQ,CAAC,OAAO,EAAE,iBAAiB;IAFrC,YACmB,MAAM,EAAE,SAAS,EACzB,OAAO,EAAE,iBAAiB,EACjC;IAEE,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAgB5F;YAEa,cAAc;IAwCtB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2CtE;IAEK,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAc3F;CACF"}
@@ -0,0 +1,246 @@
1
+ /** Experimental Relation Explorer adapter. No source reads, SQL fallback or shared results. */
2
+ import { XMLValidator } from 'fast-xml-parser';
3
+ import { AdtResponseLimitError } from './errors.js';
4
+ import { canonicalHostRelativeAdtPath } from './path-safety.js';
5
+ import { RELATION_NAME, RelationProtocolError, relationFunctionIdentity, relationObjectSpec, relationObjectUri, relationReferenceName, } from './relation-objects.js';
6
+ import { checkOperation, OperationType } from './safety.js';
7
+ import { escapeXmlAttr, parseDiscoveryObject, parseXml } from './xml-parser.js';
8
+ export const RELATIONS_PATH = '/sap/bc/adt/objectrelations/network';
9
+ export const RELATION_XML_MAX_BYTES = 1024 * 1024;
10
+ export const RELATIONS_MIME = 'application/vnd.sap.adt.objectrelations.request.v1+xml';
11
+ export { RELATION_NAME, RelationProtocolError, relationObjectUri } from './relation-objects.js';
12
+ export function supportsRelations(map) {
13
+ return map?.get(RELATIONS_PATH)?.includes(RELATIONS_MIME) === true;
14
+ }
15
+ /** SAP-returned URIs remain untrusted. They are evidence, never an unrestricted HTTP target. */
16
+ function safeUri(value) {
17
+ const uri = text(value, 512);
18
+ // STOB entities are location identities, not DDLS aliases or fetchable roots. Keep the
19
+ // exact fragment so two entities in a source never collapse. Only this observed shape
20
+ // is allowed; lookup still reconstructs fixed paths for qualified object types.
21
+ const anchor = /^(\/sap\/bc\/adt\/ddic\/ddl\/sources\/[^/?#]+\/source\/main)#name=([A-Za-z0-9_$%/]+)$/.exec(uri);
22
+ if (anchor && !RELATION_NAME.test(decodeURIComponent(anchor[2])))
23
+ throw new RelationProtocolError('invalid entity anchor.');
24
+ const canonical = canonicalHostRelativeAdtPath(anchor ? anchor[1] : uri, '/sap/bc/adt/', {
25
+ allowRawEncodedSlash: true,
26
+ });
27
+ if (!canonical || canonical.includes('?') || canonical.includes('//') || /\s/.test(decodeURIComponent(canonical))) {
28
+ throw new RelationProtocolError('unsafe response URI.');
29
+ }
30
+ return `${canonical}${anchor ? `#name=${anchor[2]}` : ''}`.replace(/%[a-f0-9]{2}/gi, (part) => part.toUpperCase());
31
+ }
32
+ function containsControl(value) {
33
+ return Array.from(value).some((char) => char.charCodeAt(0) < 32 || char.charCodeAt(0) === 127);
34
+ }
35
+ function text(value, max, empty = false) {
36
+ if (typeof value !== 'string' || value.length > max || (!empty && !value.length) || containsControl(value)) {
37
+ throw new RelationProtocolError('invalid or oversized metadata field.');
38
+ }
39
+ return value;
40
+ }
41
+ function record(value) {
42
+ if (!value || typeof value !== 'object' || Array.isArray(value))
43
+ throw new RelationProtocolError('invalid XML shape.');
44
+ return value;
45
+ }
46
+ function array(value) {
47
+ return value === undefined ? [] : Array.isArray(value) ? value : [value];
48
+ }
49
+ /** Bound parser work as well as wire bytes. Reject entities and unexpectedly deep XML. */
50
+ export function parseRelationXml(xml) {
51
+ const bytes = Buffer.byteLength(xml);
52
+ if (bytes > RELATION_XML_MAX_BYTES) {
53
+ throw new AdtResponseLimitError(RELATION_XML_MAX_BYTES, bytes, 'repository-relations');
54
+ }
55
+ if (/<!DOCTYPE|<!ENTITY|<!--|<!\[CDATA\[|<\?/i.test(xml.replace(/^\s*<\?xml\s+[^<>]*\?>/i, ''))) {
56
+ throw new RelationProtocolError('XML DTDs, entities, comments, CDATA and custom processing instructions are unsupported.');
57
+ }
58
+ let depth = 0, tags = 0;
59
+ for (const match of xml.matchAll(/<([^<>]+)>/g)) {
60
+ const tag = match[1];
61
+ if (++tags > 20000)
62
+ throw new RelationProtocolError('too many XML records.');
63
+ if (tag.startsWith('?') || tag.startsWith('!'))
64
+ continue;
65
+ if (tag.startsWith('/'))
66
+ depth--;
67
+ else if (!tag.endsWith('/'))
68
+ depth++;
69
+ if (depth > 40)
70
+ throw new RelationProtocolError('XML nesting limit exceeded.');
71
+ }
72
+ if (XMLValidator.validate(xml) !== true)
73
+ throw new RelationProtocolError('malformed XML.');
74
+ return parseXml(xml);
75
+ }
76
+ export function normalizeRelationNetwork(xml, context, requested) {
77
+ const root = record(parseRelationXml(xml).networkResponse);
78
+ if (root.activeContext !== context)
79
+ throw new RelationProtocolError('SAP did not honor the requested context.');
80
+ const objects = new Map();
81
+ const refs = array(root.objectReference), relations = array(root.relation);
82
+ if (refs.length > 2000 || relations.length > 4000)
83
+ throw new RelationProtocolError('native record limit exceeded.');
84
+ for (const value of refs) {
85
+ const raw = record(value), uri = safeUri(raw['@_uri']);
86
+ const type = text(raw['@_type'], 64);
87
+ if (raw['@_version'] !== 'active' || raw['@_exists'] !== 'true') {
88
+ throw new RelationProtocolError('non-active or unresolved native reference.');
89
+ }
90
+ const object = {
91
+ uri,
92
+ name: relationReferenceName(text(raw['@_name'], type === 'FUGR/FF' ? 160 : 120), type, uri),
93
+ type,
94
+ package: text(raw['@_packageName'] ?? '', 120, true),
95
+ version: 'active',
96
+ existence: 'observed_reference',
97
+ };
98
+ const prior = objects.get(uri);
99
+ if (prior && (prior.name !== object.name || prior.type !== object.type || prior.package !== object.package)) {
100
+ throw new RelationProtocolError('conflicting native object identity.');
101
+ }
102
+ objects.set(uri, object);
103
+ }
104
+ const rootObject = objects.get(requested.uri);
105
+ if (!rootObject ||
106
+ rootObject.name.toUpperCase() !== requested.name.toUpperCase() ||
107
+ rootObject.type !== requested.type) {
108
+ throw new RelationProtocolError('native result does not match the requested root.');
109
+ }
110
+ const edges = new Map();
111
+ for (const value of relations) {
112
+ const raw = record(value);
113
+ const a = safeUri(raw.object1), b = safeUri(raw.object2);
114
+ if (raw['@_relationType'] !== 'parentChild' ||
115
+ raw['@_state'] !== 'A' ||
116
+ a !== requested.uri ||
117
+ !objects.has(a) ||
118
+ !objects.has(b))
119
+ throw new RelationProtocolError('unsupported native relationship shape.');
120
+ const from = context === 'ENV' ? a : b, to = context === 'ENV' ? b : a;
121
+ edges.set(JSON.stringify([from, to]), {
122
+ from,
123
+ to,
124
+ kind: 'uses',
125
+ context,
126
+ evidence: 'sap_relation_explorer',
127
+ direct: null,
128
+ });
129
+ }
130
+ return { objects: [...objects.values()], edges: [...edges.values()] };
131
+ }
132
+ export class NativeRelationProvider {
133
+ client;
134
+ options;
135
+ constructor(client, options) {
136
+ this.client = client;
137
+ this.options = options;
138
+ }
139
+ async discover(known) {
140
+ let map = known;
141
+ if (!map) {
142
+ checkOperation(this.client.safety, OperationType.Read, 'DiscoverRepositoryRelations');
143
+ const result = await this.client.http.get('/sap/bc/adt/discovery', { Accept: 'application/atomsvc+xml' }, this.options);
144
+ const parsed = parseRelationXml(result.body);
145
+ if (!parsed.service)
146
+ throw new RelationProtocolError('invalid discovery document.');
147
+ map = parseDiscoveryObject(parsed);
148
+ }
149
+ if (!supportsRelations(map))
150
+ throw new RelationProtocolError('Relation Explorer endpoint/MIME is not advertised by SAP.');
151
+ return map;
152
+ }
153
+ async resolveRootUri(type, name) {
154
+ if (name.length > 120 || !RELATION_NAME.test(name))
155
+ throw new RelationProtocolError('invalid root name.');
156
+ let spec = relationObjectSpec(type);
157
+ if (!spec)
158
+ throw new RelationProtocolError('unsupported root type.');
159
+ // TABL has two physical paths; FUNC requires its parent group; VIT metadata
160
+ // can echo nonexistent names as active. Resolve these identities independently,
161
+ // with the SAME deadline/attempt/byte budgets as the rest of the analysis.
162
+ let uri;
163
+ if (spec.resolve === 'quickSearch') {
164
+ checkOperation(this.client.safety, OperationType.Read, 'ResolveRepositoryRelationRoot');
165
+ const params = new URLSearchParams({
166
+ operation: 'quickSearch',
167
+ query: name,
168
+ objectType: type === 'TABL' ? 'TABL' : spec.native,
169
+ maxResults: '2',
170
+ });
171
+ const result = await this.client.http.get(`/sap/bc/adt/repository/informationsystem/search?${params}`, {}, this.options);
172
+ const references = parseRelationXml(result.body).objectReferences;
173
+ const refs = references === '' ? [] : array(record(references).objectReference).map(record);
174
+ if (refs.length !== 1 || text(refs[0]['@_name'], 120).toUpperCase() !== name.toUpperCase()) {
175
+ throw new RelationProtocolError('root resolution is missing or ambiguous. Use SAPSearch to verify the exact name and type.');
176
+ }
177
+ const resolved = relationObjectSpec(text(refs[0]['@_type'], 64));
178
+ if (!resolved || resolved.type !== type || resolved.native !== refs[0]['@_type'])
179
+ throw new RelationProtocolError('root resolution type mismatch.');
180
+ spec = resolved;
181
+ uri = safeUri(refs[0]['@_uri']);
182
+ const group = type === 'FUNC' ? relationFunctionIdentity(uri).group : undefined;
183
+ if (uri !== relationObjectUri(spec.native, name, group))
184
+ throw new RelationProtocolError('root resolution URI mismatch.');
185
+ }
186
+ else
187
+ uri = relationObjectUri(type, name);
188
+ return { spec, uri };
189
+ }
190
+ async validateRoot(type, name) {
191
+ const { spec, uri } = await this.resolveRootUri(type, name);
192
+ checkOperation(this.client.safety, OperationType.Read, 'ValidateRepositoryRelationRoot');
193
+ const response = await this.client.http.get(uri, { Accept: 'application/*' }, this.options);
194
+ const parsed = parseRelationXml(response.body);
195
+ const metadata = record(parsed[spec.metadataRoot]);
196
+ const expectedType = spec.native;
197
+ if (text(metadata['@_name'], 120).toUpperCase() !== name.toUpperCase() ||
198
+ metadata['@_type'] !== expectedType ||
199
+ metadata['@_version'] !== 'active') {
200
+ const version = metadata['@_version'];
201
+ const state = version === 'inactive' || version === 'new'
202
+ ? ` SAP returned ${version} metadata; no native lookup was performed.`
203
+ : '';
204
+ throw new RelationProtocolError(`root metadata does not match the requested active object.${state}`);
205
+ }
206
+ const pkg = metadata.packageRef === undefined
207
+ ? type === 'FUNC'
208
+ ? (record(metadata.containerRef)['@_packageName'] ?? '')
209
+ : ''
210
+ : record(metadata.packageRef)['@_name'];
211
+ if (type === 'FUNC') {
212
+ const group = relationFunctionIdentity(uri).group;
213
+ const parent = record(metadata.containerRef);
214
+ if (parent['@_type'] !== 'FUGR/F' ||
215
+ parent['@_name'] !== group ||
216
+ safeUri(parent['@_uri']) !== relationObjectUri('FUGR', group))
217
+ throw new RelationProtocolError('function metadata parent mismatch.');
218
+ }
219
+ return {
220
+ uri,
221
+ name: name.toUpperCase(),
222
+ type: expectedType,
223
+ package: text(pkg, 120, true),
224
+ version: 'active',
225
+ existence: 'metadata_validated',
226
+ };
227
+ }
228
+ async lookup(object, direction) {
229
+ // Rebuild at the sink; a returned URI can never select an arbitrary ADT operation.
230
+ const group = object.type === 'FUGR/FF' ? relationFunctionIdentity(safeUri(object.uri)).group : undefined;
231
+ const uri = relationObjectUri(object.type, object.name, group);
232
+ if (uri !== object.uri)
233
+ throw new RelationProtocolError('expansion identity/URI mismatch.');
234
+ const context = direction === 'outgoing' ? 'ENV' : 'WUL';
235
+ const body = `<or:request xmlns:or="http://www.sap.com/adt/objectrelations" xmlns:adtcore="http://www.sap.com/adt/core"><or:reference adtcore:uri="${escapeXmlAttr(uri)}"/><or:preferredContext>${context}</or:preferredContext></or:request>`;
236
+ checkOperation(this.client.safety, OperationType.Intelligence, 'RepositoryRelations');
237
+ const response = await this.client.http.post(RELATIONS_PATH, body, RELATIONS_MIME, { Accept: '*/*' }, this.options);
238
+ const network = normalizeRelationNetwork(response.body, context, object);
239
+ // Serial, request-local traversal: only a fully validated expansion proves that an
240
+ // earlier 401/session or 403/CSRF retry recovered. Headers/control requests are not proof.
241
+ if (this.options.attemptBudget)
242
+ this.options.attemptBudget.authorizationFailureObserved = false;
243
+ return network;
244
+ }
245
+ }
246
+ //# sourceMappingURL=repository-relations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-relations.js","sourceRoot":"","sources":["../../src/adt/repository-relations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type RequestInit } from 'undici';
2
+ import { AdtNetworkError } from './errors.js';
3
+ import type { AdtRequestOptions } from './http-deadline.js';
4
+ /** Typed, non-retryable exhaustion; never carries SAP response data. */
5
+ export declare class AdtRequestBudgetError extends AdtNetworkError {
6
+ readonly limit: number;
7
+ constructor(limit: number);
8
+ }
9
+ /** Analysis admission/work allowance, not a failure to reach SAP. */
10
+ export declare class AdtAnalysisDeadlineError extends AdtNetworkError {
11
+ constructor();
12
+ }
13
+ /** A time boundary may yield partial evidence; cancellation, auth and send exhaustion may not masquerade as it. */
14
+ export declare function isDeadlineFailure(error: unknown, options: AdtRequestOptions): boolean;
15
+ /** Request-local allowance, charged immediately before each direct/proxy SAP send. */
16
+ export declare class RequestAttemptBudget {
17
+ readonly limit: number;
18
+ used: number;
19
+ /** Unresolved auth evidence; only a validated native expansion may clear it after retry recovery. */
20
+ authorizationFailureObserved: boolean;
21
+ constructor(limit: number);
22
+ consume(): void;
23
+ }
24
+ /** Count below Fetch's internal 421 replay; preserve the existing dispatcher/TLS configuration. */
25
+ export declare function fetchWithAttemptBudget(url: string, init: RequestInit, budget?: RequestAttemptBudget): Promise<import("undici").Response>;
26
+ //# sourceMappingURL=request-attempt-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-attempt-budget.d.ts","sourceRoot":"","sources":["../../src/adt/request-attempt-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,wEAAwE;AACxE,qBAAa,qBAAsB,SAAQ,eAAe;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM;IAAlC,YAAqB,KAAK,EAAE,MAAM,EAGjC;CACF;AAED,qEAAqE;AACrE,qBAAa,wBAAyB,SAAQ,eAAe;IAC3D,cAGC;CACF;AAED,mHAAmH;AACnH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CASrF;AAED,sFAAsF;AACtF,qBAAa,oBAAoB;IAInB,QAAQ,CAAC,KAAK,EAAE,MAAM;IAHlC,IAAI,SAAK;IACT,qGAAqG;IACrG,4BAA4B,UAAS;IACrC,YAAqB,KAAK,EAAE,MAAM,EAEjC;IACD,OAAO,IAAI,IAAI,CAGd;CACF;AAED,mGAAmG;AACnG,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,oBAAoB,sCAazG"}
@@ -0,0 +1,63 @@
1
+ import { fetch, getGlobalDispatcher } from 'undici';
2
+ import { AdtNetworkError } from './errors.js';
3
+ /** Typed, non-retryable exhaustion; never carries SAP response data. */
4
+ export class AdtRequestBudgetError extends AdtNetworkError {
5
+ limit;
6
+ constructor(limit) {
7
+ super(`SAP HTTP attempt limit (${limit}) reached. Narrow the requested analysis.`);
8
+ this.limit = limit;
9
+ this.name = 'AdtRequestBudgetError';
10
+ }
11
+ }
12
+ /** Analysis admission/work allowance, not a failure to reach SAP. */
13
+ export class AdtAnalysisDeadlineError extends AdtNetworkError {
14
+ constructor() {
15
+ super('The live analysis time limit was reached. Narrow the analysis or wait for other analyses to finish.');
16
+ this.name = 'AdtAnalysisDeadlineError';
17
+ }
18
+ }
19
+ /** A time boundary may yield partial evidence; cancellation, auth and send exhaustion may not masquerade as it. */
20
+ export function isDeadlineFailure(error, options) {
21
+ return (error instanceof AdtNetworkError &&
22
+ !(error instanceof AdtRequestBudgetError) &&
23
+ options.deadline !== undefined &&
24
+ Date.now() >= options.deadline &&
25
+ !options.signal?.aborted &&
26
+ !options.attemptBudget?.authorizationFailureObserved);
27
+ }
28
+ /** Request-local allowance, charged immediately before each direct/proxy SAP send. */
29
+ export class RequestAttemptBudget {
30
+ limit;
31
+ used = 0;
32
+ /** Unresolved auth evidence; only a validated native expansion may clear it after retry recovery. */
33
+ authorizationFailureObserved = false;
34
+ constructor(limit) {
35
+ this.limit = limit;
36
+ if (!Number.isSafeInteger(limit) || limit < 1)
37
+ throw new RangeError('Request limit must be a positive integer.');
38
+ }
39
+ consume() {
40
+ if (this.used >= this.limit)
41
+ throw new AdtRequestBudgetError(this.limit);
42
+ this.used++;
43
+ }
44
+ }
45
+ /** Count below Fetch's internal 421 replay; preserve the existing dispatcher/TLS configuration. */
46
+ export async function fetchWithAttemptBudget(url, init, budget) {
47
+ if (!budget)
48
+ return fetch(url, init);
49
+ const dispatcher = (init.dispatcher ?? getGlobalDispatcher()).compose((dispatch) => (options, handler) => {
50
+ budget.consume();
51
+ return dispatch(options, handler);
52
+ });
53
+ try {
54
+ return await fetch(url, { ...init, dispatcher });
55
+ }
56
+ catch (error) {
57
+ // Fetch wraps dispatcher errors. Keep exhaustion typed and non-retryable for partial-result policy.
58
+ if (error instanceof TypeError && error.cause instanceof AdtRequestBudgetError)
59
+ throw error.cause;
60
+ throw error;
61
+ }
62
+ }
63
+ //# sourceMappingURL=request-attempt-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-attempt-budget.js","sourceRoot":"","sources":["../../src/adt/request-attempt-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAoB,MAAM,QAAQ,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,wEAAwE;AACxE,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IACnC,KAAK;IAA1B,YAAqB,KAAa;QAChC,KAAK,CAAC,2BAA2B,KAAK,2CAA2C,CAAC,CAAC;qBADhE,KAAK;QAExB,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,qEAAqE;AACrE,MAAM,OAAO,wBAAyB,SAAQ,eAAe;IAC3D;QACE,KAAK,CAAC,qGAAqG,CAAC,CAAC;QAC7G,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,mHAAmH;AACnH,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,OAA0B;IAC1E,OAAO,CACL,KAAK,YAAY,eAAe;QAChC,CAAC,CAAC,KAAK,YAAY,qBAAqB,CAAC;QACzC,OAAO,CAAC,QAAQ,KAAK,SAAS;QAC9B,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,QAAQ;QAC9B,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO;QACxB,CAAC,OAAO,CAAC,aAAa,EAAE,4BAA4B,CACrD,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,MAAM,OAAO,oBAAoB;IAIV,KAAK;IAH1B,IAAI,GAAG,CAAC,CAAC;IACT,qGAAqG;IACrG,4BAA4B,GAAG,KAAK,CAAC;IACrC,YAAqB,KAAa;qBAAb,KAAK;QACxB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,2CAA2C,CAAC,CAAC;IACnH,CAAC;IACD,OAAO;QACL,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;CACF;AAED,mGAAmG;AACnG,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,GAAW,EAAE,IAAiB,EAAE,MAA6B;IACxG,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;QACvG,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,oGAAoG;QACpG,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,KAAK,YAAY,qBAAqB;YAAE,MAAM,KAAK,CAAC,KAAK,CAAC;QAClG,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Keep URL limits and response metadata consistent; finite values clamp to [1, 1000]. */
2
+ export declare function clampUrlLimit(requested: number | undefined, fallback: number): number;
3
+ //# sourceMappingURL=result-limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-limits.d.ts","sourceRoot":"","sources":["../../src/adt/result-limits.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGrF"}
@@ -0,0 +1,7 @@
1
+ /** Keep URL limits and response metadata consistent; finite values clamp to [1, 1000]. */
2
+ export function clampUrlLimit(requested, fallback) {
3
+ if (requested === undefined || !Number.isFinite(requested))
4
+ return fallback;
5
+ return Math.max(1, Math.min(1000, Math.floor(requested)));
6
+ }
7
+ //# sourceMappingURL=result-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-limits.js","sourceRoot":"","sources":["../../src/adt/result-limits.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,MAAM,UAAU,aAAa,CAAC,SAA6B,EAAE,QAAgB;IAC3E,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC5E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC"}
@@ -217,10 +217,14 @@ export declare function getServerDrivenObject(http: AdtHttpClient, safety: Safet
217
217
  * it would be an ADT-ignored attribute — so the body here is exactly the form proven to create every
218
218
  * registered type.
219
219
  */
220
- export declare function buildServerDrivenMetadataXml(code: string, name: string, pkg: string, description: string): string;
220
+ export type UiadLanguageVersion = 'standard' | 'keyUser' | 'cloudDevelopment';
221
+ export declare function buildServerDrivenMetadataXml(code: string, name: string, pkg: string, description: string, uiadLanguageVersion?: UiadLanguageVersion): string;
221
222
  /** Options shared by the SDO write operations. */
222
223
  export interface ServerDrivenWriteOptions {
223
224
  transport?: string;
225
+ /** Internal mutation accounting; never a tool input. */
226
+ onSourceWrite?: (state: 'attempted' | 'confirmed') => void;
227
+ onUnlockFailure?: () => void;
224
228
  }
225
229
  /**
226
230
  * Create a server-driven object (metadata only — POST the <blue:blueSource> body to the collection
@@ -231,6 +235,7 @@ export declare function createServerDrivenObject(http: AdtHttpClient, safety: Sa
231
235
  package: string;
232
236
  description: string;
233
237
  transport?: string;
238
+ uiadLanguageVersion?: UiadLanguageVersion;
234
239
  }): Promise<string>;
235
240
  /**
236
241
  * Write the source of a server-driven object: lock → PUT …/source/main → unlock (guaranteed via
@@ -1 +1 @@
1
- {"version":3,"file":"server-driven.d.ts","sourceRoot":"","sources":["../../src/adt/server-driven.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-driven.d.ts","sourceRoot":"","sources":["../../src/adt/server-driven.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@
23
23
  * the metadata content-type varies (blues v1, EVTO=blues v2, DTDC=ddic.dtdc.v1) — all stored per
24
24
  * registry entry, verified live: the blue family on 816, DTDC create→activate on 758 + 816.
25
25
  */
26
+ import { logger } from '../server/logger.js';
26
27
  import { lockObject, unlockObject } from './crud.js';
27
28
  import { fetchDiscoveryDocument, resolveAcceptType } from './discovery.js';
28
29
  import { AdtApiError } from './errors.js';
@@ -141,9 +142,8 @@ export const SDO_REGISTRY = {
141
142
  },
142
143
  // Launchpad content: the LADI replaces the deprecated tile/target-mapping model and is the
143
144
  // developer-owned unit on ABAP Cloud. blues.v2 (v1 -> 406, verified on 816).
144
- // Read-only in practice on on-prem: create -> 400 'Editing of LADIs with ALV "Standard" not
145
- // allowed in workbench tools' (LADI edits need the ABAP Cloud language version). SAP's refusal is
146
- // clear and also covers read-only manifest-generated items, so no client-side guard.
145
+ // Manual Cloud-language items are editable, including on-prem 816. Generated items and Standard
146
+ // language items can be readonly. The UIAD writer probes the object's root configuration flag.
147
147
  UIAD: {
148
148
  href: '/sap/bc/adt/fiori/uiad',
149
149
  label: 'Launchpad App Descriptor Item (LADI)',
@@ -233,7 +233,7 @@ export async function ensureServerDrivenSupport(http, safety, code) {
233
233
  export function serverDrivenUnavailableMessage(tool, code) {
234
234
  return (`${tool} type=${code} (server-driven object): this system does not advertise ADT support for it. ` +
235
235
  'These types are discovery-gated and depend on the SAP release / support package ' +
236
- '(e.g. DTSC/CSNM/EVTO/UIAD need ABAP Platform 2025 / SAP_BASIS 8.16+, while DTDC/DSFD/EVTB also ship on S/4HANA 2023 / 758).');
236
+ '(e.g. DTSC/CSNM/EVTO ship on ABAP Platform 2025 / SAP_BASIS 8.16+, while DTDC/DSFD/EVTB and UIAD backports also ship on S/4HANA 2023 / 758).');
237
237
  }
238
238
  /**
239
239
  * Read a server-driven object: its metadata (blue:blueSource or dtdc:dtdcSource) + source (AFF JSON
@@ -256,23 +256,11 @@ export async function getServerDrivenObject(http, safety, code, name) {
256
256
  }
257
257
  return { ...metadata, source };
258
258
  }
259
- /**
260
- * Build the minimal metadata create body for a server-driven object — the per-type root element
261
- * (blue:blueSource or dtdc:dtdcSource) with the verified `createType` for `adtcore:type`
262
- * (e.g. DESD/TYP, EVTB/EVB, DTDC/DF) + the package ref.
263
- *
264
- * NOTE — no `adtcore:masterLanguage`: live-verified on a4h-2025 (816) that ADT *silently ignores*
265
- * that attribute for these objects (create with masterLanguage="DE" → object still read back as the
266
- * session language). The object's master language comes from the `sap-language` request param (the
267
- * session = `config.language` / SAP_LANGUAGE), as with other source-based objects (cf. #343). Emitting
268
- * it would be an ADT-ignored attribute — so the body here is exactly the form proven to create every
269
- * registered type.
270
- */
271
- export function buildServerDrivenMetadataXml(code, name, pkg, description) {
259
+ export function buildServerDrivenMetadataXml(code, name, pkg, description, uiadLanguageVersion) {
272
260
  const entry = sdoEntry(code);
273
261
  const [prefix] = entry.metadataRootQName.split(':');
274
262
  return `<?xml version="1.0" encoding="UTF-8"?>
275
- <${entry.metadataRootQName} xmlns:${prefix}="${entry.metadataNamespace}" xmlns:adtcore="http://www.sap.com/adt/core" adtcore:type="${escapeXmlAttr(entry.createType)}" adtcore:name="${escapeXmlAttr(name)}" adtcore:description="${escapeXmlAttr(description)}">
263
+ <${entry.metadataRootQName} xmlns:${prefix}="${entry.metadataNamespace}" xmlns:adtcore="http://www.sap.com/adt/core" adtcore:type="${escapeXmlAttr(entry.createType)}" adtcore:name="${escapeXmlAttr(name)}" adtcore:description="${escapeXmlAttr(description)}"${code === 'UIAD' && uiadLanguageVersion ? ` adtcore:abapLanguageVersion="${escapeXmlAttr(uiadLanguageVersion)}"` : ''}>
276
264
  <adtcore:packageRef adtcore:name="${escapeXmlAttr(pkg)}"/>
277
265
  </${entry.metadataRootQName}>`;
278
266
  }
@@ -284,7 +272,7 @@ export function buildServerDrivenMetadataXml(code, name, pkg, description) {
284
272
  export async function createServerDrivenObject(http, safety, code, name, opts) {
285
273
  checkOperation(safety, OperationType.Create, 'CreateServerDrivenObject');
286
274
  const entry = sdoEntry(code);
287
- const body = buildServerDrivenMetadataXml(code, name, opts.package, opts.description);
275
+ const body = buildServerDrivenMetadataXml(code, name, opts.package, opts.description, opts.uiadLanguageVersion);
288
276
  const url = opts.transport ? `${entry.href}?corrNr=${encodeURIComponent(opts.transport)}` : entry.href;
289
277
  const resp = await http.post(url, body, entry.metadataContentType);
290
278
  return resp.body;
@@ -302,15 +290,31 @@ export async function updateServerDrivenObjectSource(http, safety, code, name, s
302
290
  await http.withStatefulSession(async (session) => {
303
291
  const lock = await lockObject(session, safety, objUrl, 'MODIFY');
304
292
  const transport = opts.transport ?? (lock.corrNr || undefined);
293
+ let unlockError;
305
294
  try {
306
295
  const params = [`lockHandle=${encodeURIComponent(lock.lockHandle)}`];
307
296
  if (transport)
308
297
  params.push(`corrNr=${encodeURIComponent(transport)}`);
298
+ opts.onSourceWrite?.('attempted');
309
299
  await session.put(`${objUrl}/source/main?${params.join('&')}`, source, serverDrivenSourceContentType(code));
300
+ opts.onSourceWrite?.('confirmed');
310
301
  }
311
302
  finally {
312
- await unlockObject(session, objUrl, lock.lockHandle);
303
+ try {
304
+ await unlockObject(session, objUrl, lock.lockHandle);
305
+ }
306
+ catch (error) {
307
+ unlockError = error;
308
+ logger.warn('Server-driven object unlock failed; a SAP lock may remain.', {
309
+ objectUrl: objUrl,
310
+ ...(error instanceof AdtApiError ? { statusCode: error.statusCode } : {}),
311
+ });
312
+ opts.onUnlockFailure?.();
313
+ }
313
314
  }
315
+ // Reached only when the PUT succeeded. A failed PUT keeps its original exception.
316
+ if (unlockError !== undefined)
317
+ throw unlockError;
314
318
  });
315
319
  }
316
320
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"server-driven.js","sourceRoot":"","sources":["../../src/adt/server-driven.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-driven.js","sourceRoot":"","sources":["../../src/adt/server-driven.ts"],"names":[],"mappings":"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"}