arc-1 1.1.2 → 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 (357) hide show
  1. package/README.md +16 -6
  2. package/bin/start-cf.sh +32 -0
  3. package/dist/adt/atc-batch.d.ts +71 -0
  4. package/dist/adt/atc-batch.d.ts.map +1 -0
  5. package/dist/adt/atc-batch.js +182 -0
  6. package/dist/adt/atc-batch.js.map +1 -0
  7. package/dist/adt/atc.d.ts +34 -0
  8. package/dist/adt/atc.d.ts.map +1 -1
  9. package/dist/adt/atc.js +58 -12
  10. package/dist/adt/atc.js.map +1 -1
  11. package/dist/adt/aunit.d.ts.map +1 -1
  12. package/dist/adt/aunit.js +50 -7
  13. package/dist/adt/aunit.js.map +1 -1
  14. package/dist/adt/bounded-response.d.ts +12 -0
  15. package/dist/adt/bounded-response.d.ts.map +1 -0
  16. package/dist/adt/bounded-response.js +242 -0
  17. package/dist/adt/bounded-response.js.map +1 -0
  18. package/dist/adt/ci-quality-xml.d.ts +44 -0
  19. package/dist/adt/ci-quality-xml.d.ts.map +1 -0
  20. package/dist/adt/ci-quality-xml.js +98 -0
  21. package/dist/adt/ci-quality-xml.js.map +1 -0
  22. package/dist/adt/ci-quality.d.ts +64 -0
  23. package/dist/adt/ci-quality.d.ts.map +1 -0
  24. package/dist/adt/ci-quality.js +132 -0
  25. package/dist/adt/ci-quality.js.map +1 -0
  26. package/dist/adt/client.d.ts +55 -34
  27. package/dist/adt/client.d.ts.map +1 -1
  28. package/dist/adt/client.js +130 -169
  29. package/dist/adt/client.js.map +1 -1
  30. package/dist/adt/config.d.ts +6 -0
  31. package/dist/adt/config.d.ts.map +1 -1
  32. package/dist/adt/config.js +3 -0
  33. package/dist/adt/config.js.map +1 -1
  34. package/dist/adt/data-result-context.d.ts +46 -0
  35. package/dist/adt/data-result-context.d.ts.map +1 -0
  36. package/dist/adt/data-result-context.js +118 -0
  37. package/dist/adt/data-result-context.js.map +1 -0
  38. package/dist/adt/data-source-name.d.ts +60 -0
  39. package/dist/adt/data-source-name.d.ts.map +1 -0
  40. package/dist/adt/data-source-name.js +156 -0
  41. package/dist/adt/data-source-name.js.map +1 -0
  42. package/dist/adt/data-source-policy.d.ts +139 -0
  43. package/dist/adt/data-source-policy.d.ts.map +1 -0
  44. package/dist/adt/data-source-policy.js +759 -0
  45. package/dist/adt/data-source-policy.js.map +1 -0
  46. package/dist/adt/ddic-xml.d.ts +78 -4
  47. package/dist/adt/ddic-xml.d.ts.map +1 -1
  48. package/dist/adt/ddic-xml.js +647 -54
  49. package/dist/adt/ddic-xml.js.map +1 -1
  50. package/dist/adt/devtools.d.ts +1 -0
  51. package/dist/adt/devtools.d.ts.map +1 -1
  52. package/dist/adt/devtools.js +24 -4
  53. package/dist/adt/devtools.js.map +1 -1
  54. package/dist/adt/errors.d.ts +10 -0
  55. package/dist/adt/errors.d.ts.map +1 -1
  56. package/dist/adt/errors.js +17 -0
  57. package/dist/adt/errors.js.map +1 -1
  58. package/dist/adt/http-deadline.d.ts +10 -0
  59. package/dist/adt/http-deadline.d.ts.map +1 -1
  60. package/dist/adt/http-deadline.js +7 -0
  61. package/dist/adt/http-deadline.js.map +1 -1
  62. package/dist/adt/http.d.ts +6 -3
  63. package/dist/adt/http.d.ts.map +1 -1
  64. package/dist/adt/http.js +94 -55
  65. package/dist/adt/http.js.map +1 -1
  66. package/dist/adt/internal-data-operations.d.ts +56 -0
  67. package/dist/adt/internal-data-operations.d.ts.map +1 -0
  68. package/dist/adt/internal-data-operations.js +99 -0
  69. package/dist/adt/internal-data-operations.js.map +1 -0
  70. package/dist/adt/package-contents.d.ts +12 -0
  71. package/dist/adt/package-contents.d.ts.map +1 -0
  72. package/dist/adt/package-contents.js +19 -0
  73. package/dist/adt/package-contents.js.map +1 -0
  74. package/dist/adt/relation-objects.d.ts +385 -0
  75. package/dist/adt/relation-objects.d.ts.map +1 -0
  76. package/dist/adt/relation-objects.js +262 -0
  77. package/dist/adt/relation-objects.js.map +1 -0
  78. package/dist/adt/repository-relations.d.ts +41 -0
  79. package/dist/adt/repository-relations.d.ts.map +1 -0
  80. package/dist/adt/repository-relations.js +246 -0
  81. package/dist/adt/repository-relations.js.map +1 -0
  82. package/dist/adt/request-attempt-budget.d.ts +26 -0
  83. package/dist/adt/request-attempt-budget.d.ts.map +1 -0
  84. package/dist/adt/request-attempt-budget.js +63 -0
  85. package/dist/adt/request-attempt-budget.js.map +1 -0
  86. package/dist/adt/result-limits.d.ts +3 -0
  87. package/dist/adt/result-limits.d.ts.map +1 -0
  88. package/dist/adt/result-limits.js +7 -0
  89. package/dist/adt/result-limits.js.map +1 -0
  90. package/dist/adt/safety.d.ts +2 -0
  91. package/dist/adt/safety.d.ts.map +1 -1
  92. package/dist/adt/safety.js +6 -0
  93. package/dist/adt/safety.js.map +1 -1
  94. package/dist/adt/server-driven.d.ts +6 -1
  95. package/dist/adt/server-driven.d.ts.map +1 -1
  96. package/dist/adt/server-driven.js +24 -20
  97. package/dist/adt/server-driven.js.map +1 -1
  98. package/dist/adt/sql-source-analyzer.d.ts +12 -0
  99. package/dist/adt/sql-source-analyzer.d.ts.map +1 -0
  100. package/dist/adt/sql-source-analyzer.js +158 -0
  101. package/dist/adt/sql-source-analyzer.js.map +1 -0
  102. package/dist/adt/table-query.d.ts +43 -0
  103. package/dist/adt/table-query.d.ts.map +1 -0
  104. package/dist/adt/table-query.js +160 -0
  105. package/dist/adt/table-query.js.map +1 -0
  106. package/dist/adt/text-elements.d.ts +48 -0
  107. package/dist/adt/text-elements.d.ts.map +1 -0
  108. package/dist/adt/text-elements.js +116 -0
  109. package/dist/adt/text-elements.js.map +1 -0
  110. package/dist/adt/types.d.ts +16 -0
  111. package/dist/adt/types.d.ts.map +1 -1
  112. package/dist/adt/uiad.d.ts +19 -0
  113. package/dist/adt/uiad.d.ts.map +1 -0
  114. package/dist/adt/uiad.js +173 -0
  115. package/dist/adt/uiad.js.map +1 -0
  116. package/dist/adt/xml-parser.d.ts +12 -15
  117. package/dist/adt/xml-parser.d.ts.map +1 -1
  118. package/dist/adt/xml-parser.js +44 -12
  119. package/dist/adt/xml-parser.js.map +1 -1
  120. package/dist/authz/policy.d.ts.map +1 -1
  121. package/dist/authz/policy.js +4 -1
  122. package/dist/authz/policy.js.map +1 -1
  123. package/dist/cache/cache.d.ts +3 -23
  124. package/dist/cache/cache.d.ts.map +1 -1
  125. package/dist/cache/cache.js +2 -3
  126. package/dist/cache/cache.js.map +1 -1
  127. package/dist/cache/caching-layer.d.ts +6 -25
  128. package/dist/cache/caching-layer.d.ts.map +1 -1
  129. package/dist/cache/caching-layer.js +3 -45
  130. package/dist/cache/caching-layer.js.map +1 -1
  131. package/dist/cache/memory.d.ts +1 -4
  132. package/dist/cache/memory.d.ts.map +1 -1
  133. package/dist/cache/memory.js +1 -10
  134. package/dist/cache/memory.js.map +1 -1
  135. package/dist/cache/sqlite.d.ts +1 -3
  136. package/dist/cache/sqlite.d.ts.map +1 -1
  137. package/dist/cache/sqlite.js +2 -17
  138. package/dist/cache/sqlite.js.map +1 -1
  139. package/dist/cli-checks.d.ts +3 -0
  140. package/dist/cli-checks.d.ts.map +1 -1
  141. package/dist/cli-checks.js +16 -0
  142. package/dist/cli-checks.js.map +1 -1
  143. package/dist/cli.d.ts.map +1 -1
  144. package/dist/cli.js +7 -2
  145. package/dist/cli.js.map +1 -1
  146. package/dist/context/compressor.d.ts +2 -3
  147. package/dist/context/compressor.d.ts.map +1 -1
  148. package/dist/context/compressor.js +30 -49
  149. package/dist/context/compressor.js.map +1 -1
  150. package/dist/context/contract.d.ts +5 -0
  151. package/dist/context/contract.d.ts.map +1 -1
  152. package/dist/context/contract.js +2 -2
  153. package/dist/context/contract.js.map +1 -1
  154. package/dist/context/deps.d.ts +11 -0
  155. package/dist/context/deps.d.ts.map +1 -1
  156. package/dist/context/deps.js +2 -2
  157. package/dist/context/deps.js.map +1 -1
  158. package/dist/context/parse-cache.d.ts +23 -0
  159. package/dist/context/parse-cache.d.ts.map +1 -0
  160. package/dist/context/parse-cache.js +71 -0
  161. package/dist/context/parse-cache.js.map +1 -0
  162. package/dist/context/relation-walk.d.ts +48 -0
  163. package/dist/context/relation-walk.d.ts.map +1 -0
  164. package/dist/context/relation-walk.js +137 -0
  165. package/dist/context/relation-walk.js.map +1 -0
  166. package/dist/context/types.d.ts +4 -4
  167. package/dist/context/types.d.ts.map +1 -1
  168. package/dist/handlers/activate.d.ts +1 -1
  169. package/dist/handlers/activate.d.ts.map +1 -1
  170. package/dist/handlers/activate.js +33 -56
  171. package/dist/handlers/activate.js.map +1 -1
  172. package/dist/handlers/activation-results.d.ts +3 -0
  173. package/dist/handlers/activation-results.d.ts.map +1 -0
  174. package/dist/handlers/activation-results.js +8 -0
  175. package/dist/handlers/activation-results.js.map +1 -0
  176. package/dist/handlers/context.d.ts.map +1 -1
  177. package/dist/handlers/context.js +8 -32
  178. package/dist/handlers/context.js.map +1 -1
  179. package/dist/handlers/data-element-fields.d.ts +26 -0
  180. package/dist/handlers/data-element-fields.d.ts.map +1 -0
  181. package/dist/handlers/data-element-fields.js +27 -0
  182. package/dist/handlers/data-element-fields.js.map +1 -0
  183. package/dist/handlers/diagnose-ci.d.ts +9 -0
  184. package/dist/handlers/diagnose-ci.d.ts.map +1 -0
  185. package/dist/handlers/diagnose-ci.js +120 -0
  186. package/dist/handlers/diagnose-ci.js.map +1 -0
  187. package/dist/handlers/diagnose-fields.d.ts +51 -0
  188. package/dist/handlers/diagnose-fields.d.ts.map +1 -0
  189. package/dist/handlers/diagnose-fields.js +48 -0
  190. package/dist/handlers/diagnose-fields.js.map +1 -0
  191. package/dist/handlers/diagnose.d.ts +4 -1
  192. package/dist/handlers/diagnose.d.ts.map +1 -1
  193. package/dist/handlers/diagnose.js +41 -6
  194. package/dist/handlers/diagnose.js.map +1 -1
  195. package/dist/handlers/dispatch.d.ts +3 -1
  196. package/dist/handlers/dispatch.d.ts.map +1 -1
  197. package/dist/handlers/dispatch.js +96 -11
  198. package/dist/handlers/dispatch.js.map +1 -1
  199. package/dist/handlers/feature-cache.d.ts +4 -3
  200. package/dist/handlers/feature-cache.d.ts.map +1 -1
  201. package/dist/handlers/feature-cache.js +4 -3
  202. package/dist/handlers/feature-cache.js.map +1 -1
  203. package/dist/handlers/hyperfocused.js +1 -1
  204. package/dist/handlers/live-relations.d.ts +5 -0
  205. package/dist/handlers/live-relations.d.ts.map +1 -0
  206. package/dist/handlers/live-relations.js +89 -0
  207. package/dist/handlers/live-relations.js.map +1 -0
  208. package/dist/handlers/manage.d.ts.map +1 -1
  209. package/dist/handlers/manage.js +7 -4
  210. package/dist/handlers/manage.js.map +1 -1
  211. package/dist/handlers/navigate.d.ts +1 -1
  212. package/dist/handlers/navigate.d.ts.map +1 -1
  213. package/dist/handlers/navigate.js +33 -7
  214. package/dist/handlers/navigate.js.map +1 -1
  215. package/dist/handlers/object-types.d.ts +6 -4
  216. package/dist/handlers/object-types.d.ts.map +1 -1
  217. package/dist/handlers/object-types.js +45 -10
  218. package/dist/handlers/object-types.js.map +1 -1
  219. package/dist/handlers/query-errors.d.ts +9 -1
  220. package/dist/handlers/query-errors.d.ts.map +1 -1
  221. package/dist/handlers/query-errors.js +40 -28
  222. package/dist/handlers/query-errors.js.map +1 -1
  223. package/dist/handlers/query.d.ts +2 -2
  224. package/dist/handlers/query.d.ts.map +1 -1
  225. package/dist/handlers/query.js +15 -22
  226. package/dist/handlers/query.js.map +1 -1
  227. package/dist/handlers/read.d.ts +1 -1
  228. package/dist/handlers/read.d.ts.map +1 -1
  229. package/dist/handlers/read.js +112 -23
  230. package/dist/handlers/read.js.map +1 -1
  231. package/dist/handlers/relation-input.d.ts +42 -0
  232. package/dist/handlers/relation-input.d.ts.map +1 -0
  233. package/dist/handlers/relation-input.js +22 -0
  234. package/dist/handlers/relation-input.js.map +1 -0
  235. package/dist/handlers/relation-tool.d.ts +5 -0
  236. package/dist/handlers/relation-tool.d.ts.map +1 -0
  237. package/dist/handlers/relation-tool.js +36 -0
  238. package/dist/handlers/relation-tool.js.map +1 -0
  239. package/dist/handlers/schemas.d.ts +119 -62
  240. package/dist/handlers/schemas.d.ts.map +1 -1
  241. package/dist/handlers/schemas.js +150 -13
  242. package/dist/handlers/schemas.js.map +1 -1
  243. package/dist/handlers/search.d.ts +1 -1
  244. package/dist/handlers/search.d.ts.map +1 -1
  245. package/dist/handlers/search.js +43 -8
  246. package/dist/handlers/search.js.map +1 -1
  247. package/dist/handlers/tool-descriptions.d.ts.map +1 -1
  248. package/dist/handlers/tool-descriptions.js +12 -13
  249. package/dist/handlers/tool-descriptions.js.map +1 -1
  250. package/dist/handlers/tool-registry.d.ts +1 -0
  251. package/dist/handlers/tool-registry.d.ts.map +1 -1
  252. package/dist/handlers/tool-registry.js +4 -0
  253. package/dist/handlers/tool-registry.js.map +1 -1
  254. package/dist/handlers/tools.d.ts +2 -3
  255. package/dist/handlers/tools.d.ts.map +1 -1
  256. package/dist/handlers/tools.js +139 -84
  257. package/dist/handlers/tools.js.map +1 -1
  258. package/dist/handlers/where-used.d.ts +2 -0
  259. package/dist/handlers/where-used.d.ts.map +1 -1
  260. package/dist/handlers/where-used.js +23 -5
  261. package/dist/handlers/where-used.js.map +1 -1
  262. package/dist/handlers/write/batch-results.d.ts +28 -0
  263. package/dist/handlers/write/batch-results.d.ts.map +1 -0
  264. package/dist/handlers/write/batch-results.js +106 -0
  265. package/dist/handlers/write/batch-results.js.map +1 -0
  266. package/dist/handlers/write/create-transport.d.ts +7 -0
  267. package/dist/handlers/write/create-transport.d.ts.map +1 -0
  268. package/dist/handlers/write/create-transport.js +38 -0
  269. package/dist/handlers/write/create-transport.js.map +1 -0
  270. package/dist/handlers/write/create.d.ts.map +1 -1
  271. package/dist/handlers/write/create.js +276 -413
  272. package/dist/handlers/write/create.js.map +1 -1
  273. package/dist/handlers/write/uiad.d.ts +8 -0
  274. package/dist/handlers/write/uiad.d.ts.map +1 -0
  275. package/dist/handlers/write/uiad.js +115 -0
  276. package/dist/handlers/write/uiad.js.map +1 -0
  277. package/dist/handlers/write/update-delete.d.ts +6 -6
  278. package/dist/handlers/write/update-delete.d.ts.map +1 -1
  279. package/dist/handlers/write/update-delete.js +46 -15
  280. package/dist/handlers/write/update-delete.js.map +1 -1
  281. package/dist/handlers/write-helpers.d.ts +0 -6
  282. package/dist/handlers/write-helpers.d.ts.map +1 -1
  283. package/dist/handlers/write-helpers.js +88 -80
  284. package/dist/handlers/write-helpers.js.map +1 -1
  285. package/dist/handlers/write.d.ts.map +1 -1
  286. package/dist/handlers/write.js +5 -1
  287. package/dist/handlers/write.js.map +1 -1
  288. package/dist/public/index.d.ts +1 -1
  289. package/dist/public/index.d.ts.map +1 -1
  290. package/dist/public/index.js +1 -1
  291. package/dist/public/index.js.map +1 -1
  292. package/dist/public/ui/app.js +0 -2
  293. package/dist/server/audit.d.ts +42 -1
  294. package/dist/server/audit.d.ts.map +1 -1
  295. package/dist/server/audit.js.map +1 -1
  296. package/dist/server/config.d.ts +4 -0
  297. package/dist/server/config.d.ts.map +1 -1
  298. package/dist/server/config.js +67 -0
  299. package/dist/server/config.js.map +1 -1
  300. package/dist/server/context.d.ts +5 -0
  301. package/dist/server/context.d.ts.map +1 -1
  302. package/dist/server/context.js.map +1 -1
  303. package/dist/server/destination-registry.d.ts +10 -2
  304. package/dist/server/destination-registry.d.ts.map +1 -1
  305. package/dist/server/destination-registry.js +12 -3
  306. package/dist/server/destination-registry.js.map +1 -1
  307. package/dist/server/effective-policy-log.d.ts +2 -1
  308. package/dist/server/effective-policy-log.d.ts.map +1 -1
  309. package/dist/server/effective-policy-log.js +18 -2
  310. package/dist/server/effective-policy-log.js.map +1 -1
  311. package/dist/server/http.d.ts +1 -1
  312. package/dist/server/http.d.ts.map +1 -1
  313. package/dist/server/http.js +1 -0
  314. package/dist/server/http.js.map +1 -1
  315. package/dist/server/logger.d.ts.map +1 -1
  316. package/dist/server/logger.js +4 -1
  317. package/dist/server/logger.js.map +1 -1
  318. package/dist/server/multi-target-runtime.d.ts.map +1 -1
  319. package/dist/server/multi-target-runtime.js +7 -2
  320. package/dist/server/multi-target-runtime.js.map +1 -1
  321. package/dist/server/multi-target-tools.d.ts.map +1 -1
  322. package/dist/server/multi-target-tools.js +3 -1
  323. package/dist/server/multi-target-tools.js.map +1 -1
  324. package/dist/server/runtime-memory.d.ts +13 -0
  325. package/dist/server/runtime-memory.d.ts.map +1 -0
  326. package/dist/server/runtime-memory.js +42 -0
  327. package/dist/server/runtime-memory.js.map +1 -0
  328. package/dist/server/server-instructions.d.ts +2 -0
  329. package/dist/server/server-instructions.d.ts.map +1 -0
  330. package/dist/server/server-instructions.js +33 -0
  331. package/dist/server/server-instructions.js.map +1 -0
  332. package/dist/server/server.d.ts +3 -2
  333. package/dist/server/server.d.ts.map +1 -1
  334. package/dist/server/server.js +42 -78
  335. package/dist/server/server.js.map +1 -1
  336. package/dist/server/shutdown.d.ts +6 -0
  337. package/dist/server/shutdown.d.ts.map +1 -0
  338. package/dist/server/shutdown.js +52 -0
  339. package/dist/server/shutdown.js.map +1 -0
  340. package/dist/server/sinks/btp-auditlog.d.ts +10 -8
  341. package/dist/server/sinks/btp-auditlog.d.ts.map +1 -1
  342. package/dist/server/sinks/btp-auditlog.js +86 -68
  343. package/dist/server/sinks/btp-auditlog.js.map +1 -1
  344. package/dist/server/sinks/file.d.ts +1 -1
  345. package/dist/server/sinks/file.d.ts.map +1 -1
  346. package/dist/server/sinks/file.js +12 -21
  347. package/dist/server/sinks/file.js.map +1 -1
  348. package/dist/server/types.d.ts +8 -0
  349. package/dist/server/types.d.ts.map +1 -1
  350. package/dist/server/types.js +4 -0
  351. package/dist/server/types.js.map +1 -1
  352. package/dist/server/ui-state.d.ts.map +1 -1
  353. package/dist/server/ui-state.js +1 -0
  354. package/dist/server/ui-state.js.map +1 -1
  355. package/dist/server/ui.js +0 -2
  356. package/dist/server/ui.js.map +1 -1
  357. package/package.json +15 -13
@@ -0,0 +1,262 @@
1
+ /** Live-verified identity adapters, not a registry of everything SAP can display. */
2
+ export const RELATION_OBJECTS = [
3
+ {
4
+ type: 'CLAS',
5
+ native: 'CLAS/OC',
6
+ path: 'oo/classes',
7
+ metadataRoot: 'abapClass',
8
+ resolve: 'path',
9
+ nameCase: 'lower',
10
+ },
11
+ {
12
+ type: 'INTF',
13
+ native: 'INTF/OI',
14
+ path: 'oo/interfaces',
15
+ metadataRoot: 'abapInterface',
16
+ resolve: 'path',
17
+ nameCase: 'lower',
18
+ },
19
+ {
20
+ type: 'DDLS',
21
+ native: 'DDLS/DF',
22
+ path: 'ddic/ddl/sources',
23
+ metadataRoot: 'ddlSource',
24
+ resolve: 'path',
25
+ nameCase: 'lower',
26
+ },
27
+ {
28
+ type: 'DCLS',
29
+ native: 'DCLS/DL',
30
+ path: 'acm/dcl/sources',
31
+ metadataRoot: 'dclSource',
32
+ resolve: 'path',
33
+ nameCase: 'lower',
34
+ },
35
+ {
36
+ type: 'BDEF',
37
+ native: 'BDEF/BDO',
38
+ path: 'bo/behaviordefinitions',
39
+ metadataRoot: 'blueSource',
40
+ resolve: 'path',
41
+ nameCase: 'lower',
42
+ },
43
+ {
44
+ type: 'SRVD',
45
+ native: 'SRVD/SRV',
46
+ path: 'ddic/srvd/sources',
47
+ metadataRoot: 'srvdSource',
48
+ resolve: 'path',
49
+ nameCase: 'lower',
50
+ },
51
+ {
52
+ type: 'TABL',
53
+ native: 'TABL/DT',
54
+ path: 'ddic/tables',
55
+ metadataRoot: 'blueSource',
56
+ resolve: 'quickSearch',
57
+ nameCase: 'lower',
58
+ },
59
+ {
60
+ type: 'TABL',
61
+ native: 'TABL/DS',
62
+ path: 'ddic/structures',
63
+ metadataRoot: 'blueSource',
64
+ resolve: 'quickSearch',
65
+ nameCase: 'lower',
66
+ },
67
+ {
68
+ type: 'TTYP',
69
+ native: 'TTYP/DA',
70
+ path: 'ddic/tabletypes',
71
+ metadataRoot: 'tableType',
72
+ resolve: 'path',
73
+ nameCase: 'lower',
74
+ },
75
+ {
76
+ type: 'DTEL',
77
+ native: 'DTEL/DE',
78
+ path: 'ddic/dataelements',
79
+ metadataRoot: 'wbobj',
80
+ resolve: 'path',
81
+ nameCase: 'lower',
82
+ },
83
+ { type: 'DOMA', native: 'DOMA/DD', path: 'ddic/domains', metadataRoot: 'domain', resolve: 'path', nameCase: 'lower' },
84
+ {
85
+ type: 'PROG',
86
+ native: 'PROG/P',
87
+ path: 'programs/programs',
88
+ metadataRoot: 'abapProgram',
89
+ resolve: 'path',
90
+ nameCase: 'lower',
91
+ },
92
+ {
93
+ type: 'INCL',
94
+ native: 'PROG/I',
95
+ path: 'programs/includes',
96
+ metadataRoot: 'abapInclude',
97
+ resolve: 'path',
98
+ nameCase: 'lower',
99
+ },
100
+ {
101
+ type: 'FUGR',
102
+ native: 'FUGR/F',
103
+ path: 'functions/groups',
104
+ metadataRoot: 'abapFunctionGroup',
105
+ resolve: 'path',
106
+ nameCase: 'lower',
107
+ },
108
+ {
109
+ type: 'FUNC',
110
+ native: 'FUGR/FF',
111
+ path: 'functions/groups',
112
+ metadataRoot: 'abapFunctionModule',
113
+ resolve: 'quickSearch',
114
+ nameCase: 'lower',
115
+ },
116
+ {
117
+ type: 'VIEW',
118
+ native: 'VIEW/DV',
119
+ path: 'vit/wb/object_type/viewdv/object_name',
120
+ metadataRoot: 'mainObject',
121
+ resolve: 'quickSearch',
122
+ nameCase: 'upper',
123
+ },
124
+ {
125
+ type: 'ENHO',
126
+ native: 'ENHO/XHB',
127
+ path: 'enhancements/enhoxhb',
128
+ metadataRoot: 'objectData',
129
+ resolve: 'path',
130
+ nameCase: 'lower',
131
+ },
132
+ {
133
+ type: 'MSAG',
134
+ native: 'MSAG/N',
135
+ path: 'messageclass',
136
+ metadataRoot: 'messageClass',
137
+ resolve: 'path',
138
+ nameCase: 'lower',
139
+ },
140
+ {
141
+ type: 'TRAN',
142
+ native: 'TRAN/T',
143
+ path: 'vit/wb/object_type/trant/object_name',
144
+ metadataRoot: 'mainObject',
145
+ resolve: 'quickSearch',
146
+ nameCase: 'upper',
147
+ },
148
+ {
149
+ type: 'SHLP',
150
+ native: 'SHLP/DH',
151
+ path: 'vit/wb/object_type/shlpdh/object_name',
152
+ metadataRoot: 'mainObject',
153
+ resolve: 'quickSearch',
154
+ nameCase: 'upper',
155
+ },
156
+ {
157
+ type: 'SKTD',
158
+ native: 'SKTD/TYP',
159
+ path: 'documentation/ktd/documents',
160
+ metadataRoot: 'docu',
161
+ resolve: 'path',
162
+ nameCase: 'lower',
163
+ },
164
+ {
165
+ type: 'ENHS',
166
+ native: 'ENHS/XSB',
167
+ path: 'enhancements/enhsxsb',
168
+ metadataRoot: 'objectData',
169
+ resolve: 'path',
170
+ nameCase: 'lower',
171
+ },
172
+ {
173
+ type: 'ENQU',
174
+ native: 'ENQU/DL',
175
+ path: 'ddic/lockobjects/sources',
176
+ metadataRoot: 'lockobject',
177
+ resolve: 'path',
178
+ nameCase: 'lower',
179
+ },
180
+ {
181
+ type: 'TYPE',
182
+ native: 'TYPE/DG',
183
+ path: 'ddic/typegroups',
184
+ metadataRoot: 'abapTypeGroup',
185
+ resolve: 'path',
186
+ nameCase: 'lower',
187
+ },
188
+ {
189
+ type: 'EVTB',
190
+ native: 'EVTB/EVB',
191
+ path: 'businessservices/evtbevb',
192
+ metadataRoot: 'blueSource',
193
+ resolve: 'path',
194
+ nameCase: 'lower',
195
+ },
196
+ {
197
+ type: 'DSFD',
198
+ native: 'DSFD/SCF',
199
+ path: 'ddic/dsfd/sources',
200
+ metadataRoot: 'blueSource',
201
+ resolve: 'path',
202
+ nameCase: 'lower',
203
+ },
204
+ ];
205
+ export const RELATION_ROOT_TYPES = [...new Set(RELATION_OBJECTS.map(({ type }) => type))];
206
+ export const RELATION_NAME = /^(?:\/[A-Z0-9_]+\/)?[A-Z0-9_$]+$/i;
207
+ export class RelationProtocolError extends Error {
208
+ constructor(message) {
209
+ super(`Experimental live relations: ${message}`);
210
+ this.name = 'RelationProtocolError';
211
+ }
212
+ }
213
+ export function relationObjectSpec(type) {
214
+ return RELATION_OBJECTS.find((spec) => spec.native === type || spec.type === type);
215
+ }
216
+ function validName(name) {
217
+ if (name.length > 120 || !RELATION_NAME.test(name))
218
+ throw new RelationProtocolError('invalid object name.');
219
+ return name;
220
+ }
221
+ /** Reconstruct a fixed read-only object path; never follow arbitrary SAP-returned hrefs. */
222
+ export function relationObjectUri(type, name, group) {
223
+ const spec = relationObjectSpec(type);
224
+ if (!spec)
225
+ throw new RelationProtocolError('unsupported relation object type.');
226
+ const encoded = encodeURIComponent(validName(name)[spec.nameCase === 'upper' ? 'toUpperCase' : 'toLowerCase']());
227
+ const base = `/sap/bc/adt/${spec.path}`;
228
+ if (spec.type === 'FUNC') {
229
+ if (!group)
230
+ throw new RelationProtocolError('function module requires a resolved function group.');
231
+ return `${base}/${encodeURIComponent(validName(group).toLowerCase())}/fmodules/${encoded}`;
232
+ }
233
+ return `${base}/${encoded}`;
234
+ }
235
+ /** Group/name can be decoded only after the caller canonicalizes the host-relative ADT URI. */
236
+ export function relationFunctionIdentity(uri) {
237
+ const match = /^\/sap\/bc\/adt\/functions\/groups\/([^/]+)\/fmodules\/([^/]+)$/.exec(uri);
238
+ if (!match)
239
+ throw new RelationProtocolError('invalid function module URI.');
240
+ const group = validName(decodeURIComponent(match[1])).toUpperCase();
241
+ const name = validName(decodeURIComponent(match[2])).toUpperCase();
242
+ if (relationObjectUri('FUNC', name, group) !== uri)
243
+ throw new RelationProtocolError('function URI mismatch.');
244
+ return { group, name };
245
+ }
246
+ /** SAP 7.58 may prefix the module with its group or function pool, padded to 40 chars.
247
+ * Example: group /ACME/GROUP → pool /ACME/SAPLGROUP; either prefix + spaces + ZFUNCTION.
248
+ * Validate the entire prefix, not just the module suffix: a different parent is not this object.
249
+ */
250
+ export function relationReferenceName(name, type, uri) {
251
+ if (type !== 'FUGR/FF')
252
+ return name;
253
+ const identity = relationFunctionIdentity(uri);
254
+ const pool = identity.group.startsWith('/')
255
+ ? identity.group.replace(/^(\/[^/]+\/)/, '$1SAPL')
256
+ : `SAPL${identity.group}`;
257
+ if (![identity.name, `${pool.padEnd(40)}${identity.name}`, `${identity.group.padEnd(40)}${identity.name}`].includes(name.toUpperCase())) {
258
+ throw new RelationProtocolError('function reference name/URI mismatch.');
259
+ }
260
+ return identity.name;
261
+ }
262
+ //# sourceMappingURL=relation-objects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-objects.js","sourceRoot":"","sources":["../../src/adt/relation-objects.ts"],"names":[],"mappings":"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"}
@@ -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"}