arc-1 1.4.0 → 1.5.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 (235) hide show
  1. package/dist/adt/abapgit.d.ts.map +1 -1
  2. package/dist/adt/abapgit.js +64 -7
  3. package/dist/adt/abapgit.js.map +1 -1
  4. package/dist/adt/aunit.js +4 -4
  5. package/dist/adt/aunit.js.map +1 -1
  6. package/dist/adt/class-structure.d.ts +4 -2
  7. package/dist/adt/class-structure.d.ts.map +1 -1
  8. package/dist/adt/class-structure.js +18 -9
  9. package/dist/adt/class-structure.js.map +1 -1
  10. package/dist/adt/client.d.ts +18 -52
  11. package/dist/adt/client.d.ts.map +1 -1
  12. package/dist/adt/client.js +69 -92
  13. package/dist/adt/client.js.map +1 -1
  14. package/dist/adt/config.d.ts +5 -0
  15. package/dist/adt/config.d.ts.map +1 -1
  16. package/dist/adt/config.js.map +1 -1
  17. package/dist/adt/crud.d.ts +3 -3
  18. package/dist/adt/crud.d.ts.map +1 -1
  19. package/dist/adt/crud.js +21 -6
  20. package/dist/adt/crud.js.map +1 -1
  21. package/dist/adt/data-source-policy.d.ts +20 -8
  22. package/dist/adt/data-source-policy.d.ts.map +1 -1
  23. package/dist/adt/data-source-policy.js +55 -109
  24. package/dist/adt/data-source-policy.js.map +1 -1
  25. package/dist/adt/ddic-xml.d.ts +9 -0
  26. package/dist/adt/ddic-xml.d.ts.map +1 -1
  27. package/dist/adt/ddic-xml.js +17 -3
  28. package/dist/adt/ddic-xml.js.map +1 -1
  29. package/dist/adt/devtools.js +3 -3
  30. package/dist/adt/devtools.js.map +1 -1
  31. package/dist/adt/diagnostics.js +4 -4
  32. package/dist/adt/diagnostics.js.map +1 -1
  33. package/dist/adt/enhancements.d.ts +7 -0
  34. package/dist/adt/enhancements.d.ts.map +1 -0
  35. package/dist/adt/enhancements.js +89 -0
  36. package/dist/adt/enhancements.js.map +1 -0
  37. package/dist/adt/errors.d.ts +19 -10
  38. package/dist/adt/errors.d.ts.map +1 -1
  39. package/dist/adt/errors.js +73 -53
  40. package/dist/adt/errors.js.map +1 -1
  41. package/dist/adt/fm-signature.d.ts +1 -1
  42. package/dist/adt/fm-signature.d.ts.map +1 -1
  43. package/dist/adt/fm-signature.js +9 -1
  44. package/dist/adt/fm-signature.js.map +1 -1
  45. package/dist/adt/http.d.ts +7 -27
  46. package/dist/adt/http.d.ts.map +1 -1
  47. package/dist/adt/http.js +23 -28
  48. package/dist/adt/http.js.map +1 -1
  49. package/dist/adt/internal-data-operations.d.ts +3 -2
  50. package/dist/adt/internal-data-operations.d.ts.map +1 -1
  51. package/dist/adt/internal-data-operations.js +8 -1
  52. package/dist/adt/internal-data-operations.js.map +1 -1
  53. package/dist/adt/lock-object.d.ts +92 -0
  54. package/dist/adt/lock-object.d.ts.map +1 -0
  55. package/dist/adt/lock-object.js +195 -0
  56. package/dist/adt/lock-object.js.map +1 -0
  57. package/dist/adt/rap-generate.d.ts +5 -1
  58. package/dist/adt/rap-generate.d.ts.map +1 -1
  59. package/dist/adt/rap-generate.js +112 -100
  60. package/dist/adt/rap-generate.js.map +1 -1
  61. package/dist/adt/server-driven.d.ts +42 -10
  62. package/dist/adt/server-driven.d.ts.map +1 -1
  63. package/dist/adt/server-driven.js +98 -18
  64. package/dist/adt/server-driven.js.map +1 -1
  65. package/dist/adt/source-precondition.d.ts +3 -0
  66. package/dist/adt/source-precondition.d.ts.map +1 -0
  67. package/dist/adt/source-precondition.js +12 -0
  68. package/dist/adt/source-precondition.js.map +1 -0
  69. package/dist/adt/text-search.js +5 -5
  70. package/dist/adt/text-search.js.map +1 -1
  71. package/dist/adt/transport.js +3 -3
  72. package/dist/adt/transport.js.map +1 -1
  73. package/dist/adt/types.d.ts +19 -1
  74. package/dist/adt/types.d.ts.map +1 -1
  75. package/dist/adt/user-agent.d.ts +4 -0
  76. package/dist/adt/user-agent.d.ts.map +1 -0
  77. package/dist/adt/user-agent.js +11 -0
  78. package/dist/adt/user-agent.js.map +1 -0
  79. package/dist/adt/xml-entities.d.ts +3 -0
  80. package/dist/adt/xml-entities.d.ts.map +1 -0
  81. package/dist/adt/xml-entities.js +19 -0
  82. package/dist/adt/xml-entities.js.map +1 -0
  83. package/dist/adt/xml-parser.d.ts +7 -30
  84. package/dist/adt/xml-parser.d.ts.map +1 -1
  85. package/dist/adt/xml-parser.js +25 -54
  86. package/dist/adt/xml-parser.js.map +1 -1
  87. package/dist/authz/policy.d.ts.map +1 -1
  88. package/dist/authz/policy.js +2 -0
  89. package/dist/authz/policy.js.map +1 -1
  90. package/dist/cache/caching-layer.d.ts.map +1 -1
  91. package/dist/cache/caching-layer.js +5 -10
  92. package/dist/cache/caching-layer.js.map +1 -1
  93. package/dist/cli.js +1 -1
  94. package/dist/cli.js.map +1 -1
  95. package/dist/context/grep.d.ts +14 -0
  96. package/dist/context/grep.d.ts.map +1 -1
  97. package/dist/context/grep.js +49 -0
  98. package/dist/context/grep.js.map +1 -1
  99. package/dist/context/unit-surgery.d.ts +3 -1
  100. package/dist/context/unit-surgery.d.ts.map +1 -1
  101. package/dist/context/unit-surgery.js +52 -5
  102. package/dist/context/unit-surgery.js.map +1 -1
  103. package/dist/handlers/activate.d.ts.map +1 -1
  104. package/dist/handlers/activate.js +7 -20
  105. package/dist/handlers/activate.js.map +1 -1
  106. package/dist/handlers/diagnose.d.ts.map +1 -1
  107. package/dist/handlers/diagnose.js +8 -29
  108. package/dist/handlers/diagnose.js.map +1 -1
  109. package/dist/handlers/dispatch.d.ts.map +1 -1
  110. package/dist/handlers/dispatch.js +20 -4
  111. package/dist/handlers/dispatch.js.map +1 -1
  112. package/dist/handlers/editable-source.d.ts +6 -0
  113. package/dist/handlers/editable-source.d.ts.map +1 -0
  114. package/dist/handlers/editable-source.js +53 -0
  115. package/dist/handlers/editable-source.js.map +1 -0
  116. package/dist/handlers/feature-cache.d.ts +2 -0
  117. package/dist/handlers/feature-cache.d.ts.map +1 -1
  118. package/dist/handlers/feature-cache.js +8 -0
  119. package/dist/handlers/feature-cache.js.map +1 -1
  120. package/dist/handlers/hyperfocused.js +1 -1
  121. package/dist/handlers/hyperfocused.js.map +1 -1
  122. package/dist/handlers/lint.js +1 -1
  123. package/dist/handlers/lint.js.map +1 -1
  124. package/dist/handlers/object-types.d.ts +2 -3
  125. package/dist/handlers/object-types.d.ts.map +1 -1
  126. package/dist/handlers/object-types.js +13 -5
  127. package/dist/handlers/object-types.js.map +1 -1
  128. package/dist/handlers/read.d.ts.map +1 -1
  129. package/dist/handlers/read.js +38 -7
  130. package/dist/handlers/read.js.map +1 -1
  131. package/dist/handlers/schemas.d.ts +39 -0
  132. package/dist/handlers/schemas.d.ts.map +1 -1
  133. package/dist/handlers/schemas.js +50 -7
  134. package/dist/handlers/schemas.js.map +1 -1
  135. package/dist/handlers/syntax.d.ts +5 -0
  136. package/dist/handlers/syntax.d.ts.map +1 -0
  137. package/dist/handlers/syntax.js +35 -0
  138. package/dist/handlers/syntax.js.map +1 -0
  139. package/dist/handlers/tool-descriptions.d.ts.map +1 -1
  140. package/dist/handlers/tool-descriptions.js +7 -5
  141. package/dist/handlers/tool-descriptions.js.map +1 -1
  142. package/dist/handlers/tool-registry.d.ts +4 -4
  143. package/dist/handlers/tool-registry.d.ts.map +1 -1
  144. package/dist/handlers/tool-registry.js +4 -0
  145. package/dist/handlers/tool-registry.js.map +1 -1
  146. package/dist/handlers/tools.d.ts +1 -16
  147. package/dist/handlers/tools.d.ts.map +1 -1
  148. package/dist/handlers/tools.js +40 -51
  149. package/dist/handlers/tools.js.map +1 -1
  150. package/dist/handlers/transport.d.ts.map +1 -1
  151. package/dist/handlers/transport.js +17 -3
  152. package/dist/handlers/transport.js.map +1 -1
  153. package/dist/handlers/where-used.d.ts.map +1 -1
  154. package/dist/handlers/where-used.js +0 -5
  155. package/dist/handlers/where-used.js.map +1 -1
  156. package/dist/handlers/write/class-edit.d.ts +16 -0
  157. package/dist/handlers/write/class-edit.d.ts.map +1 -0
  158. package/dist/handlers/write/class-edit.js +55 -0
  159. package/dist/handlers/write/class-edit.js.map +1 -0
  160. package/dist/handlers/write/class-surgery.d.ts +2 -2
  161. package/dist/handlers/write/class-surgery.d.ts.map +1 -1
  162. package/dist/handlers/write/class-surgery.js +189 -220
  163. package/dist/handlers/write/class-surgery.js.map +1 -1
  164. package/dist/handlers/write/context.d.ts +1 -8
  165. package/dist/handlers/write/context.d.ts.map +1 -1
  166. package/dist/handlers/write/create.d.ts.map +1 -1
  167. package/dist/handlers/write/create.js +11 -4
  168. package/dist/handlers/write/create.js.map +1 -1
  169. package/dist/handlers/write/metadata-update.d.ts +4 -0
  170. package/dist/handlers/write/metadata-update.d.ts.map +1 -0
  171. package/dist/handlers/write/metadata-update.js +58 -0
  172. package/dist/handlers/write/metadata-update.js.map +1 -0
  173. package/dist/handlers/write/rap.d.ts.map +1 -1
  174. package/dist/handlers/write/rap.js +132 -155
  175. package/dist/handlers/write/rap.js.map +1 -1
  176. package/dist/handlers/write/unit-surgery.d.ts +2 -2
  177. package/dist/handlers/write/unit-surgery.d.ts.map +1 -1
  178. package/dist/handlers/write/unit-surgery.js +14 -8
  179. package/dist/handlers/write/unit-surgery.js.map +1 -1
  180. package/dist/handlers/write/update-delete.d.ts.map +1 -1
  181. package/dist/handlers/write/update-delete.js +34 -82
  182. package/dist/handlers/write/update-delete.js.map +1 -1
  183. package/dist/handlers/write-helpers.d.ts +3 -2
  184. package/dist/handlers/write-helpers.d.ts.map +1 -1
  185. package/dist/handlers/write-helpers.js +118 -15
  186. package/dist/handlers/write-helpers.js.map +1 -1
  187. package/dist/handlers/write.d.ts.map +1 -1
  188. package/dist/handlers/write.js +12 -27
  189. package/dist/handlers/write.js.map +1 -1
  190. package/dist/public/read-only-client.d.ts +6 -0
  191. package/dist/public/read-only-client.d.ts.map +1 -0
  192. package/dist/public/read-only-client.js +66 -0
  193. package/dist/public/read-only-client.js.map +1 -0
  194. package/dist/public/types.d.ts +2 -13
  195. package/dist/public/types.d.ts.map +1 -1
  196. package/dist/server/audit.d.ts +6 -1
  197. package/dist/server/audit.d.ts.map +1 -1
  198. package/dist/server/audit.js.map +1 -1
  199. package/dist/server/config.d.ts.map +1 -1
  200. package/dist/server/config.js +3 -0
  201. package/dist/server/config.js.map +1 -1
  202. package/dist/server/deny-actions.d.ts +2 -1
  203. package/dist/server/deny-actions.d.ts.map +1 -1
  204. package/dist/server/deny-actions.js +13 -2
  205. package/dist/server/deny-actions.js.map +1 -1
  206. package/dist/server/logger.d.ts +3 -3
  207. package/dist/server/logger.d.ts.map +1 -1
  208. package/dist/server/logger.js +7 -7
  209. package/dist/server/logger.js.map +1 -1
  210. package/dist/server/multi-target-basic-auth.d.ts.map +1 -1
  211. package/dist/server/multi-target-basic-auth.js +1 -0
  212. package/dist/server/multi-target-basic-auth.js.map +1 -1
  213. package/dist/server/multi-target-runtime.d.ts.map +1 -1
  214. package/dist/server/multi-target-runtime.js +1 -0
  215. package/dist/server/multi-target-runtime.js.map +1 -1
  216. package/dist/server/plugin-loader.d.ts.map +1 -1
  217. package/dist/server/plugin-loader.js +1 -3
  218. package/dist/server/plugin-loader.js.map +1 -1
  219. package/dist/server/safe-http-client.d.ts +6 -12
  220. package/dist/server/safe-http-client.d.ts.map +1 -1
  221. package/dist/server/safe-http-client.js +28 -63
  222. package/dist/server/safe-http-client.js.map +1 -1
  223. package/dist/server/server.d.ts +5 -4
  224. package/dist/server/server.d.ts.map +1 -1
  225. package/dist/server/server.js +30 -23
  226. package/dist/server/server.js.map +1 -1
  227. package/dist/server/types.d.ts +1 -0
  228. package/dist/server/types.d.ts.map +1 -1
  229. package/dist/server/types.js +2 -0
  230. package/dist/server/types.js.map +1 -1
  231. package/dist/version.d.ts +3 -0
  232. package/dist/version.d.ts.map +1 -0
  233. package/dist/version.js +3 -0
  234. package/dist/version.js.map +1 -0
  235. package/package.json +7 -7
@@ -32,9 +32,9 @@ export declare function updateObject(http: AdtHttpClient, safety: SafetyConfig,
32
32
  export declare function deleteObject(http: AdtHttpClient, safety: SafetyConfig, objectUrl: string, lockHandle: string, transport?: string): Promise<void>;
33
33
  /**
34
34
  * High-level: update source with guaranteed unlock.
35
- * lock → updateSource → unlock (in try-finally)
35
+ * lock → optional fresh read/transform and hash check → updateSource → unlock (in try-finally)
36
36
  */
37
- export declare function safeUpdateSource(http: AdtHttpClient, safety: SafetyConfig, objectUrl: string, sourceUrl: string, source: string, transport?: string, abapRelease?: string): Promise<void>;
37
+ export declare function safeUpdateSource(http: AdtHttpClient, safety: SafetyConfig, objectUrl: string, sourceUrl: string, source: string | ((current: string, session: AdtHttpClient) => Promise<string>), transport?: string, abapRelease?: string, expectedSourceHash?: string): Promise<void>;
38
38
  /**
39
39
  * Initialise (create) an empty class-local include (CCDEF/CCIMP/CCMAC/CCAU).
40
40
  *
@@ -75,7 +75,7 @@ export declare function initClassInclude(http: AdtHttpClient, safety: SafetyConf
75
75
  * Returns `{ initialized }` so the handler can tell the caller whether the
76
76
  * include was created as part of this write.
77
77
  */
78
- export declare function safeUpdateClassInclude(http: AdtHttpClient, safety: SafetyConfig, classObjectUrl: string, includeUrl: string, source: string, transport?: string, abapRelease?: string): Promise<{
78
+ export declare function safeUpdateClassInclude(http: AdtHttpClient, safety: SafetyConfig, classObjectUrl: string, includeUrl: string, source: string, transport?: string, abapRelease?: string, expectedSourceHash?: string): Promise<{
79
79
  initialized: boolean;
80
80
  }>;
81
81
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../../src/adt/crud.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../../src/adt/crud.ts"],"names":[],"mappings":"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"}
package/dist/adt/crud.js CHANGED
@@ -12,6 +12,7 @@
12
12
  import { postCreate } from './create-request.js';
13
13
  import { AdtApiError, extractExceptionType, isNotFoundError } from './errors.js';
14
14
  import { checkOperation, OperationType } from './safety.js';
15
+ import { assertSourceHash } from './source-precondition.js';
15
16
  /** Lock an ABAP object for editing */
16
17
  export async function lockObject(http, safety, objectUrl, accessMode = 'MODIFY', abapRelease, systemType) {
17
18
  if (accessMode === 'MODIFY') {
@@ -150,14 +151,25 @@ export async function deleteObject(http, safety, objectUrl, lockHandle, transpor
150
151
  }
151
152
  /**
152
153
  * High-level: update source with guaranteed unlock.
153
- * lock → updateSource → unlock (in try-finally)
154
+ * lock → optional fresh read/transform and hash check → updateSource → unlock (in try-finally)
154
155
  */
155
- export async function safeUpdateSource(http, safety, objectUrl, sourceUrl, source, transport, abapRelease) {
156
+ export async function safeUpdateSource(http, safety, objectUrl, sourceUrl, source, transport, abapRelease, expectedSourceHash) {
157
+ checkOperation(safety, OperationType.Update, 'UpdateSource');
156
158
  await http.withStatefulSession(async (session) => {
157
159
  const lock = await lockObject(session, safety, objectUrl, 'MODIFY', abapRelease);
158
160
  const effectiveTransport = transport ?? (lock.corrNr || undefined);
159
161
  try {
160
- await updateSource(session, safety, sourceUrl, source, lock.lockHandle, effectiveTransport);
162
+ let replacement;
163
+ if (expectedSourceHash !== undefined || typeof source === 'function') {
164
+ checkOperation(safety, OperationType.Read, 'GetSource');
165
+ const current = await session.get(sourceUrl, { 'Cache-Control': 'no-cache' });
166
+ assertSourceHash(current.body, expectedSourceHash, sourceUrl);
167
+ replacement = typeof source === 'function' ? await source(current.body, session) : source;
168
+ }
169
+ else {
170
+ replacement = source;
171
+ }
172
+ await updateSource(session, safety, sourceUrl, replacement, lock.lockHandle, effectiveTransport);
161
173
  }
162
174
  finally {
163
175
  await unlockObject(session, objectUrl, lock.lockHandle);
@@ -213,7 +225,8 @@ export async function initClassInclude(http, safety, includeUrl, lockHandle, tra
213
225
  * Returns `{ initialized }` so the handler can tell the caller whether the
214
226
  * include was created as part of this write.
215
227
  */
216
- export async function safeUpdateClassInclude(http, safety, classObjectUrl, includeUrl, source, transport, abapRelease) {
228
+ export async function safeUpdateClassInclude(http, safety, classObjectUrl, includeUrl, source, transport, abapRelease, expectedSourceHash) {
229
+ checkOperation(safety, OperationType.Update, 'UpdateSource');
217
230
  return await http.withStatefulSession(async (session) => {
218
231
  const lock = await lockObject(session, safety, classObjectUrl, 'MODIFY', abapRelease);
219
232
  const effectiveTransport = transport ?? (lock.corrNr || undefined);
@@ -222,10 +235,12 @@ export async function safeUpdateClassInclude(http, safety, classObjectUrl, inclu
222
235
  // Probe whether the include exists. 404 → not initialised yet.
223
236
  let exists = true;
224
237
  try {
225
- await session.get(includeUrl, undefined, { suppressNotFoundLog: true });
238
+ checkOperation(safety, OperationType.Read, 'GetClassInclude');
239
+ const current = await session.get(includeUrl, { 'Cache-Control': 'no-cache' }, { suppressNotFoundLog: true });
240
+ assertSourceHash(current.body, expectedSourceHash, includeUrl);
226
241
  }
227
242
  catch (err) {
228
- if (isNotFoundError(err)) {
243
+ if (isNotFoundError(err) && expectedSourceHash === undefined) {
229
244
  exists = false;
230
245
  }
231
246
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"crud.js","sourceRoot":"","sources":["../../src/adt/crud.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crud.js","sourceRoot":"","sources":["../../src/adt/crud.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ export declare class DataSourcePolicyError extends AdtSafetyError {
22
22
  readonly decisionId: string;
23
23
  readonly matchedSource?: string;
24
24
  readonly reason: string;
25
- /** Always false: every policy denial happens before the SAP data request is submitted. */
25
+ /** Always false: the requested data query has not run; metadata reads may have run. */
26
26
  readonly executed = false;
27
27
  constructor(code: DataSourcePolicyErrorCode, directSource: string, sourcePath: string[], reason: string, options?: {
28
28
  decisionId?: string;
@@ -73,9 +73,7 @@ export type ResolvedDirectDataSource = {
73
73
  };
74
74
  export interface DataSourcePolicyResolver {
75
75
  resolveDirectSource(name: string): Promise<ResolvedDirectDataSource>;
76
- /** True = advertised, false = absent from loaded discovery, undefined = discovery unknown. */
77
- canonicalTableSourceAvailable?: boolean;
78
- readTableSource(name: string): Promise<string>;
76
+ readTableReplacement(name: string): Promise<TableReplacement | PhysicalTableContainer | undefined>;
79
77
  readCdsDependencyGraph(ddlSource: string): Promise<CdsDependencyNode>;
80
78
  }
81
79
  export interface DataSourcePolicyBackend {
@@ -84,8 +82,7 @@ export interface DataSourcePolicyBackend {
84
82
  objectType: string;
85
83
  uri: string;
86
84
  }>>;
87
- canonicalTableSourceAvailable: boolean | undefined;
88
- readTableSource(name: string): Promise<string>;
85
+ readTableReplacement(name: string): Promise<TableReplacement | PhysicalTableContainer | undefined>;
89
86
  dependencyGraphAccept(): string | undefined;
90
87
  readDependencyGraph(path: string, accept: string): Promise<string>;
91
88
  }
@@ -132,8 +129,23 @@ export declare const CDS_DEPENDENCY_GRAPH_PATH = "/sap/bc/adt/ddic/ddl/dependenc
132
129
  * not the protection.
133
130
  */
134
131
  export declare function parseCdsDependencyGraph(xml: string): CdsDependencyNode;
135
- /** Return a table's active CDS replacement object; malformed or duplicate annotations fail closed. */
136
- export declare function extractReplacementObject(source: string): string | undefined;
132
+ /** The SQL view identifies the graph root; the DDLS source selects its graph resource. */
133
+ export interface TableReplacement {
134
+ name: string;
135
+ ddlSource: string;
136
+ }
137
+ /**
138
+ * A pooled or cluster table has no replacement object (SAP forbids one) but stores its rows in a
139
+ * physical table pool/cluster, which is checked as its lineage node.
140
+ */
141
+ export interface PhysicalTableContainer {
142
+ container: string;
143
+ }
144
+ /**
145
+ * A bounded catalog result must prove one active transparent table with at most one replacement, or one
146
+ * active pooled/cluster table without replacement metadata and with its physical container.
147
+ */
148
+ export declare function parseTableReplacement(table: string, rows: Record<string, string>[]): TableReplacement | PhysicalTableContainer | undefined;
137
149
  /** Evaluate direct sources and their active lineage before a data-preview request is sent. */
138
150
  export declare function enforceBlockedDataSources(directSources: string[], configuredBlockedSources: string[], resolver: DataSourcePolicyResolver): Promise<void>;
139
151
  //# sourceMappingURL=data-source-policy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-source-policy.d.ts","sourceRoot":"","sources":["../../src/adt/data-source-policy.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAMrF,OAAO,EAAgC,cAAc,EAAE,MAAM,aAAa,CAAC;AA+B3E;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,yBAAyB,GACjC,qBAAqB,GACrB,yBAAyB,GACzB,yBAAyB,GACzB,sBAAsB,CAAC;AAE3B,kGAAkG;AAClG,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,qBAAa,qBAAsB,SAAQ,cAAc;IAQrD,QAAQ,CAAC,IAAI,EAAE,yBAAyB;IACxC,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE;IAT/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,0FAA0F;IAC1F,QAAQ,CAAC,QAAQ,SAAS;IAE1B,YACW,IAAI,EAAE,yBAAyB,EAC/B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAAE,EAC7B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,EAiB9D;IAED;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,CAQ5C;IAED,4DAA4D;IAC5D,OAAO,CAAC,eAAe;CAYxB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,YAAI,UAAU,EAAE,OAAO,EAAE,oBAAoB,CAAU,CAAC;AACnF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAqB1D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iGAAiG;IACjG,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,cAAc,GAAG,WAAW,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE,MAAM,WAAW,wBAAwB;IACvC,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACrE,8FAA8F;IAC9F,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC3E,6BAA6B,EAAE,OAAO,GAAG,SAAS,CAAC;IACnD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAAC;IAC5C,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpE;AAED,oFAAoF;AACpF,qBAAa,wBAAwB;IAMjC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,mGAAmG;IACnG,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,UAAU,CAAK;IAEvB,YACmB,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,EAAE,uBAAuB,EAC/C;IAEJ;;;;;OAKG;YACW,MAAM;IA8Dd,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B/E;IAED;;;;;;OAMG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBzD;IAED,OAAO,CAAC,cAAc;IAahB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3D;IAED,iGAAiG;YACnF,QAAQ;YAYR,mBAAmB;YA+CnB,sBAAsB;CA0BrC;AAED,wDAAwD;AACxD,eAAO,MAAM,yBAAyB,gDAAgD,CAAC;AA+BvF;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAwItE;AA+ED,sGAAsG;AACtG,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoB3E;AAiBD,8FAA8F;AAC9F,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,MAAM,EAAE,EACvB,wBAAwB,EAAE,MAAM,EAAE,EAClC,QAAQ,EAAE,wBAAwB,GACjC,OAAO,CAAC,IAAI,CAAC,CA4Kf"}
1
+ {"version":3,"file":"data-source-policy.d.ts","sourceRoot":"","sources":["../../src/adt/data-source-policy.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { XMLParser } from 'fast-xml-parser';
4
4
  import { logger } from '../server/logger.js';
5
5
  import { canonicalDataSourceName, DataSourceNameError, dataSourcePolicyFingerprint } from './data-source-name.js';
6
6
  import { AdtApiError, AdtNetworkError, AdtSafetyError } from './errors.js';
7
+ import { INTERNAL_DATA_OPERATIONS } from './internal-data-operations.js';
7
8
  import { analyzeSqlDataSources } from './sql-source-analyzer.js';
8
9
  const MAX_GRAPH_XML_CHARS = 5_000_000;
9
10
  const MAX_GRAPH_DEPTH = 64;
@@ -11,8 +12,6 @@ const MAX_GRAPH_NODES = 1_000;
11
12
  const MAX_DIRECT_SOURCES = 64;
12
13
  const MAX_REPLACEMENT_SOURCES = 256;
13
14
  const MAX_RESOLUTION_ROOTS = 64;
14
- const TABLE_SOURCE_UNAVAILABLE_REASON = 'the connected SAP system does not advertise the transparent-table source metadata required to prove replacement-object lineage; the standard ADT resource is available from SAP_BASIS 7.52 onward';
15
- const TABLE_SOURCE_UNKNOWN_404_REASON = 'ADT discovery was unavailable and the canonical transparent-table source request returned HTTP 404, so replacement-object lineage support could not be established; the standard ADT resource is available from SAP_BASIS 7.52 onward';
16
15
  const graphParser = new XMLParser({
17
16
  ignoreAttributes: false,
18
17
  attributeNamePrefix: '@_',
@@ -39,13 +38,13 @@ export class DataSourcePolicyError extends AdtSafetyError {
39
38
  decisionId;
40
39
  matchedSource;
41
40
  reason;
42
- /** Always false: every policy denial happens before the SAP data request is submitted. */
41
+ /** Always false: the requested data query has not run; metadata reads may have run. */
43
42
  executed = false;
44
43
  constructor(code, directSource, sourcePath, reason, options = {}) {
45
44
  const path = sourcePath.length > 0 ? sourcePath.join(' -> ') : directSource;
46
45
  const decisionId = options.decisionId ?? newDecisionId();
47
46
  const operatorAction = code === 'DATA_POLICY_UNAVAILABLE'
48
- ? 'Keep data access disabled until this target can supply the canonical table-source metadata (normally SAP_BASIS 7.52 or newer). Clearing SAP_BLOCKED_DATA_SOURCES leaves every otherwise authorized source eligible and requires security approval.'
47
+ ? 'Keep data access disabled until this target can supply the required catalog metadata. Clearing SAP_BLOCKED_DATA_SOURCES leaves every otherwise authorized source eligible and requires security approval.'
49
48
  : 'Use a permitted static source, or change SAP_BLOCKED_DATA_SOURCES only after security review.';
50
49
  super(`${code}: request denied before data execution (executed=false, decisionId=${decisionId}). ` +
51
50
  `Source path: ${path}. Reason: ${reason}. ` +
@@ -74,8 +73,8 @@ export class DataSourcePolicyError extends AdtSafetyError {
74
73
  clientMessage(minimalErrors) {
75
74
  if (!minimalErrors)
76
75
  return this.message;
77
- return (`${this.code}: the request was denied by the administrator's data-source policy before any SAP ` +
78
- `data request was executed (executed=false, decisionId=${this.decisionId}). ` +
76
+ return (`${this.code}: the request was denied by the administrator's data-source policy before the requested SAP ` +
77
+ `data query was executed (executed=false, decisionId=${this.decisionId}). ` +
79
78
  `${this.safeAlternative()} Details are recorded in the server audit log; ask an operator to ` +
80
79
  'correlate the decision id.');
81
80
  }
@@ -85,7 +84,7 @@ export class DataSourcePolicyError extends AdtSafetyError {
85
84
  case 'DATA_SQL_UNSUPPORTED':
86
85
  return 'Rewrite the request as one complete static SELECT/WITH without comments, host expressions or dynamic sources, or use the structured SAPRead(type="TABLE_QUERY") parameters.';
87
86
  case 'DATA_POLICY_UNAVAILABLE':
88
- return 'This SAP target did not supply the metadata the policy needs (normally SAP_BASIS 7.52 or newer). Retrying unchanged will be denied; ask an operator.';
87
+ return 'This SAP target did not supply the metadata the policy needs. Retrying unchanged will be denied; ask an operator.';
89
88
  case 'DATA_LINEAGE_UNRESOLVED':
90
89
  return 'Query a source whose lineage ARC-1 can resolve, or use the structured SAPRead(type="TABLE_QUERY") parameters.';
91
90
  default:
@@ -249,10 +248,9 @@ export class DataSourceBlocklistGuard {
249
248
  async evaluate(directSources) {
250
249
  await enforceBlockedDataSources(directSources, this.blockedSources, {
251
250
  resolveDirectSource: (name) => this.resolveDirectSource(name),
252
- canonicalTableSourceAvailable: this.backend.canonicalTableSourceAvailable,
253
- readTableSource: (name) => {
251
+ readTableReplacement: (name) => {
254
252
  this.metadataRequests += 1;
255
- return this.backend.readTableSource(name);
253
+ return this.backend.readTableReplacement(name);
256
254
  },
257
255
  readCdsDependencyGraph: (ddlSource) => this.readCdsDependencyGraph(ddlSource),
258
256
  });
@@ -502,98 +500,39 @@ export function parseCdsDependencyGraph(xml) {
502
500
  }
503
501
  }
504
502
  /**
505
- * Mask comments and quoted literals while retaining their original offsets.
506
- * Authorization annotations are then found only in active DDL syntax.
503
+ * A bounded catalog result must prove one active transparent table with at most one replacement, or one
504
+ * active pooled/cluster table without replacement metadata and with its physical container.
507
505
  */
508
- function scanDdlStructure(source) {
509
- const structural = source.split('');
510
- const strings = [];
511
- let cursor = 0;
512
- const mask = (index) => {
513
- if (structural[index] !== '\n' && structural[index] !== '\r')
514
- structural[index] = ' ';
515
- };
516
- while (cursor < source.length) {
517
- if (source[cursor] === '/' && source[cursor + 1] === '/') {
518
- mask(cursor++);
519
- mask(cursor++);
520
- while (cursor < source.length && source[cursor] !== '\n' && source[cursor] !== '\r')
521
- mask(cursor++);
522
- continue;
506
+ export function parseTableReplacement(table, rows) {
507
+ const row = rows[0];
508
+ const fields = ['TABNAME', 'TABCLASS', 'VIEWREF', 'VIEWREF_ERR', 'SQLTAB', 'DDLNAME'];
509
+ if (rows.length !== 1 || !row || fields.some((field) => typeof row[field] !== 'string')) {
510
+ throw new DataSourceLineageError('replacement catalog returned missing or ambiguous metadata');
511
+ }
512
+ const tableClass = row.TABCLASS.trim();
513
+ if (row.TABNAME.trim() !== table || !['TRANSP', 'POOL', 'CLUSTER'].includes(tableClass) || row.VIEWREF_ERR.trim()) {
514
+ throw new DataSourceLineageError('replacement catalog did not confirm a valid active transparent, pooled or cluster table');
515
+ }
516
+ const name = row.VIEWREF.trim();
517
+ const ddlSource = row.DDLNAME.trim();
518
+ if (tableClass !== 'TRANSP') {
519
+ if (name || ddlSource) {
520
+ throw new DataSourceLineageError('replacement catalog reported replacement metadata for a pooled or cluster table');
523
521
  }
524
- if (source[cursor] === '/' && source[cursor + 1] === '*') {
525
- mask(cursor++);
526
- mask(cursor++);
527
- let closed = false;
528
- while (cursor < source.length) {
529
- if (source[cursor] === '*' && source[cursor + 1] === '/') {
530
- mask(cursor++);
531
- mask(cursor++);
532
- closed = true;
533
- break;
534
- }
535
- mask(cursor++);
536
- }
537
- if (!closed)
538
- throw new DataSourceLineageError('table DDL contains an unterminated block comment');
539
- continue;
522
+ try {
523
+ return { container: canonicalDataSourceName(row.SQLTAB) };
540
524
  }
541
- if (source[cursor] === "'") {
542
- const start = cursor;
543
- let value = '';
544
- let closed = false;
545
- mask(cursor++);
546
- while (cursor < source.length) {
547
- const char = source[cursor];
548
- if (char === '\\' && cursor + 1 < source.length) {
549
- value += source[cursor + 1];
550
- mask(cursor++);
551
- mask(cursor++);
552
- continue;
553
- }
554
- if (char === "'") {
555
- mask(cursor++);
556
- if (source[cursor] === "'") {
557
- value += "'";
558
- mask(cursor++);
559
- continue;
560
- }
561
- closed = true;
562
- break;
563
- }
564
- value += char;
565
- mask(cursor++);
566
- }
567
- if (!closed)
568
- throw new DataSourceLineageError('table DDL contains an unterminated string literal');
569
- strings.push({ start, value });
570
- continue;
525
+ catch {
526
+ throw new DataSourceLineageError('replacement catalog did not supply the physical table pool or cluster');
571
527
  }
572
- cursor += 1;
573
528
  }
574
- return { structural: structural.join(''), strings };
575
- }
576
- /** Return a table's active CDS replacement object; malformed or duplicate annotations fail closed. */
577
- export function extractReplacementObject(source) {
578
- const { structural, strings } = scanDdlStructure(source);
579
- const markers = [...structural.matchAll(/@\s*AbapCatalog\s*\.\s*replacementObject\b/gi)];
580
- if (markers.length === 0)
529
+ if (!name && !ddlSource)
581
530
  return undefined;
582
- const annotations = [...structural.matchAll(/@\s*AbapCatalog\s*\.\s*replacementObject\s*:/gi)];
583
- if (markers.length !== 1 || annotations.length !== 1 || markers[0].index !== annotations[0].index) {
584
- throw new DataSourceLineageError('replacementObject annotation is duplicated or malformed');
585
- }
586
- const annotation = annotations[0];
587
- const valueStart = annotation.index + annotation[0].length;
588
- const valueSpan = strings.find((span) => span.start >= valueStart);
589
- if (!valueSpan || structural.slice(valueStart, valueSpan.start).trim().length > 0) {
590
- throw new DataSourceLineageError('replacementObject annotation is present but malformed');
591
- }
592
531
  try {
593
- return canonicalDataSourceName(valueSpan.value);
532
+ return { name: canonicalDataSourceName(name), ddlSource: canonicalDataSourceName(ddlSource) };
594
533
  }
595
534
  catch {
596
- throw new DataSourceLineageError('replacementObject annotation value is not an exact technical name');
535
+ throw new DataSourceLineageError('replacement catalog did not supply exact SQL-view and DDLS identities');
597
536
  }
598
537
  }
599
538
  function safeLineageFailureReason(error) {
@@ -647,40 +586,48 @@ export async function enforceBlockedDataSources(directSources, configuredBlocked
647
586
  if (replacementCache.size >= MAX_REPLACEMENT_SOURCES) {
648
587
  throw new DataSourceLineageError(`replacement inspection exceeds source limit ${MAX_REPLACEMENT_SOURCES}`);
649
588
  }
650
- const replacement = extractReplacementObject(await resolver.readTableSource(table));
589
+ const replacement = await resolver.readTableReplacement(table);
651
590
  replacementCache.set(table, replacement);
652
591
  return replacement;
653
592
  };
654
593
  const replacementAt = async (directSource, table, path) => {
655
- if (resolver.canonicalTableSourceAvailable === false) {
656
- throw new DataSourcePolicyError('DATA_POLICY_UNAVAILABLE', directSource, path, TABLE_SOURCE_UNAVAILABLE_REASON);
657
- }
658
594
  try {
659
- return await replacementFor(table);
595
+ for (const source of INTERNAL_DATA_OPERATIONS.replacement_lineage.sources) {
596
+ checkBlocked(directSource, [...path, source], [source]);
597
+ }
598
+ const lineage = await replacementFor(table);
599
+ if (lineage && 'container' in lineage) {
600
+ // Blocking the pool/cluster blocks every logical table stored in it.
601
+ checkBlocked(directSource, [...path, lineage.container], [lineage.container]);
602
+ return undefined;
603
+ }
604
+ return lineage;
660
605
  }
661
606
  catch (error) {
662
607
  if (error instanceof DataSourcePolicyError)
663
608
  throw error;
664
- if (resolver.canonicalTableSourceAvailable === undefined &&
665
- error instanceof AdtApiError &&
666
- error.statusCode === 404) {
667
- throw new DataSourcePolicyError('DATA_POLICY_UNAVAILABLE', directSource, path, TABLE_SOURCE_UNKNOWN_404_REASON);
609
+ if (error instanceof AdtApiError && error.statusCode === 404) {
610
+ throw new DataSourcePolicyError('DATA_POLICY_UNAVAILABLE', directSource, path, 'SAP did not provide the data-preview endpoint needed to read replacement catalog metadata');
668
611
  }
669
612
  throw unresolved(directSource, path, safeLineageFailureReason(error));
670
613
  }
671
614
  };
615
+ const evaluateReplacement = async (directSource, replacement, path) => {
616
+ await evaluateRoot(directSource, replacement.name, [...path, replacement.name], { kind: 'cds', ...replacement });
617
+ };
672
618
  const evaluateResolved = async (directSource, resolved, path) => {
673
619
  checkBlocked(directSource, path, [canonicalDataSourceName(resolved.name)]);
674
620
  if (resolved.kind === 'table') {
675
621
  const table = canonicalDataSourceName(resolved.name);
676
622
  const replacement = await replacementAt(directSource, table, path);
677
623
  if (replacement)
678
- await evaluateRoot(directSource, replacement, [...path, replacement]);
624
+ await evaluateReplacement(directSource, replacement, path);
679
625
  return;
680
626
  }
681
627
  if (resolved.kind !== 'cds') {
682
628
  throw unresolved(directSource, path, `source kind ${resolved.kind} has no proven lineage in the experimental policy`);
683
629
  }
630
+ checkBlocked(directSource, path, [canonicalDataSourceName(resolved.ddlSource)]);
684
631
  const graph = await resolver.readCdsDependencyGraph(canonicalDataSourceName(resolved.ddlSource));
685
632
  const normalizedGraphAliases = graph.aliases.map((alias) => canonicalDataSourceName(alias));
686
633
  if (!normalizedGraphAliases.includes(canonicalDataSourceName(resolved.name))) {
@@ -712,15 +659,14 @@ export async function enforceBlockedDataSources(directSources, configuredBlocked
712
659
  for (const child of node.children)
713
660
  validateGraph(child, [...nodePath, child.name], false);
714
661
  };
715
- // Check the complete graph before any table-source reads. This preserves the
716
- // strongest denial on old releases where canonical replacement metadata may
717
- // be unavailable for an earlier sibling table.
662
+ // Check the complete graph before catalog reads so a blocked sibling wins
663
+ // over unavailable metadata for an earlier table.
718
664
  validateGraph(graph, graphPath, true);
719
665
  const expandReplacements = async (node, nodePath) => {
720
666
  if (node.kind === 'TABLE') {
721
667
  const replacement = await replacementAt(directSource, node.name, nodePath);
722
668
  if (replacement)
723
- await evaluateRoot(directSource, replacement, [...nodePath, replacement]);
669
+ await evaluateReplacement(directSource, replacement, nodePath);
724
670
  return;
725
671
  }
726
672
  for (const child of node.children)
@@ -728,7 +674,7 @@ export async function enforceBlockedDataSources(directSources, configuredBlocked
728
674
  };
729
675
  await expandReplacements(graph, graphPath);
730
676
  };
731
- const evaluateRoot = async (directSource, name, path) => {
677
+ const evaluateRoot = async (directSource, name, path, replacement) => {
732
678
  checkBlocked(directSource, path, [name]);
733
679
  if (activeResolution.size >= MAX_RESOLUTION_ROOTS) {
734
680
  throw unresolved(directSource, path, `replacement lineage exceeds depth limit ${MAX_RESOLUTION_ROOTS}`);
@@ -738,7 +684,7 @@ export async function enforceBlockedDataSources(directSources, configuredBlocked
738
684
  throw unresolved(directSource, path, `replacement cycle detected at ${name}`);
739
685
  activeResolution.add(cycleKey);
740
686
  try {
741
- const resolved = await resolver.resolveDirectSource(name);
687
+ const resolved = replacement ?? (await resolver.resolveDirectSource(name));
742
688
  await evaluateResolved(directSource, resolved, path);
743
689
  }
744
690
  finally {