@mcp-abap-adt/adt-clients 10.0.1 → 10.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +17 -1
  2. package/dist/core/accessControl/activation.d.ts +3 -0
  3. package/dist/core/accessControl/activation.d.ts.map +1 -1
  4. package/dist/core/accessControl/activation.js +2 -34
  5. package/dist/core/appendStructure/activation.d.ts.map +1 -1
  6. package/dist/core/appendStructure/activation.js +2 -34
  7. package/dist/core/authorizationField/activation.d.ts.map +1 -1
  8. package/dist/core/authorizationField/activation.js +2 -35
  9. package/dist/core/dataElement/activation.d.ts +3 -0
  10. package/dist/core/dataElement/activation.d.ts.map +1 -1
  11. package/dist/core/dataElement/activation.js +2 -34
  12. package/dist/core/dataElement/update.d.ts.map +1 -1
  13. package/dist/core/dataElement/update.js +1 -1
  14. package/dist/core/domain/update.d.ts.map +1 -1
  15. package/dist/core/domain/update.js +1 -1
  16. package/dist/core/featureToggle/activation.d.ts.map +1 -1
  17. package/dist/core/featureToggle/activation.js +2 -35
  18. package/dist/core/functionGroup/update.js +1 -3
  19. package/dist/core/metadataExtension/activate.d.ts +2 -2
  20. package/dist/core/metadataExtension/activate.js +2 -2
  21. package/dist/core/metadataExtension/check.d.ts +2 -2
  22. package/dist/core/metadataExtension/check.js +2 -2
  23. package/dist/core/metadataExtension/create.d.ts +2 -2
  24. package/dist/core/metadataExtension/create.js +2 -2
  25. package/dist/core/metadataExtension/delete.d.ts +2 -2
  26. package/dist/core/metadataExtension/delete.js +2 -2
  27. package/dist/core/metadataExtension/lock.d.ts +2 -2
  28. package/dist/core/metadataExtension/lock.js +2 -2
  29. package/dist/core/metadataExtension/read.d.ts +4 -4
  30. package/dist/core/metadataExtension/read.js +4 -4
  31. package/dist/core/metadataExtension/unlock.d.ts +2 -2
  32. package/dist/core/metadataExtension/unlock.js +2 -2
  33. package/dist/core/metadataExtension/update.d.ts +3 -3
  34. package/dist/core/metadataExtension/update.js +3 -3
  35. package/dist/core/package/update.d.ts.map +1 -1
  36. package/dist/core/package/update.js +1 -1
  37. package/dist/core/scalarFunction/activation.d.ts.map +1 -1
  38. package/dist/core/scalarFunction/activation.js +2 -34
  39. package/dist/core/scalarFunctionImplementation/activation.d.ts.map +1 -1
  40. package/dist/core/scalarFunctionImplementation/activation.js +2 -34
  41. package/dist/core/serviceDefinition/activation.d.ts +3 -0
  42. package/dist/core/serviceDefinition/activation.d.ts.map +1 -1
  43. package/dist/core/serviceDefinition/activation.js +2 -34
  44. package/dist/core/shared/groupActivation.d.ts +2 -2
  45. package/dist/core/shared/groupActivation.js +2 -2
  46. package/dist/core/tabletype/update.d.ts.map +1 -1
  47. package/dist/core/tabletype/update.js +1 -1
  48. package/dist/core/transformation/activation.d.ts +3 -0
  49. package/dist/core/transformation/activation.d.ts.map +1 -1
  50. package/dist/core/transformation/activation.js +2 -34
  51. package/dist/utils/activationUtils.d.ts +21 -0
  52. package/dist/utils/activationUtils.d.ts.map +1 -1
  53. package/dist/utils/activationUtils.js +45 -9
  54. package/dist/utils/xmlPatch.d.ts +65 -6
  55. package/dist/utils/xmlPatch.d.ts.map +1 -1
  56. package/dist/utils/xmlPatch.js +117 -20
  57. package/package.json +1 -1
package/README.md CHANGED
@@ -364,7 +364,23 @@ implementations pass it internally on reads after create/update.
364
364
  See the caveat above — on the system measured, the flag had no effect on object
365
365
  reads at all.
366
366
 
367
- **Note:** Long polling is automatically used in `create()` and `update()` methods of all `AdtObject` implementations to ensure objects are ready before proceeding with subsequent operations.
367
+ **Note:** `create()` and `update()` request long polling on their follow-up reads
368
+ where the handler supports it. Read that as "asked for", not "ensured" — the
369
+ caveat above stands, and nothing in this library can make the system answer
370
+ sooner than it does.
371
+
372
+ What the library does guarantee is that a read which came back empty is not
373
+ written back. ADT answers a read of a not-yet-ready object with **HTTP 200 and
374
+ an empty body**, never a 404, so a read-modify-write update used to patch that
375
+ empty body — changing nothing, because there was nothing to change — and PUT the
376
+ result. Since 10.1.0 that read fails with `XmlPatchError`, naming the object:
377
+
378
+ ```
379
+ Cannot update domain ZAC_DOM01: the read returned an empty body.
380
+ ```
381
+
382
+ A slow system therefore surfaces as a read error, not as a write the server
383
+ rejects for a reason that points nowhere near the cause.
368
384
 
369
385
  ### Creating Behavior Implementation Classes
370
386
 
@@ -1,4 +1,7 @@
1
1
  import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
2
+ /**
3
+ * Parse activation response
4
+ */
2
5
  /**
3
6
  * Activate access control
4
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/accessControl/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAwD9E;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC,CAyBvB"}
1
+ {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/accessControl/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAe9E;;GAEG;AAEH;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC,CAoBvB"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.activateAccessControl = activateAccessControl;
4
- const fast_xml_parser_1 = require("fast-xml-parser");
4
+ const activationUtils_1 = require("../../utils/activationUtils");
5
5
  const internalUtils_1 = require("../../utils/internalUtils");
6
6
  const timeouts_1 = require("../../utils/timeouts");
7
7
  /**
@@ -16,35 +16,6 @@ function buildActivationXml(accessControlName) {
16
16
  /**
17
17
  * Parse activation response
18
18
  */
19
- function parseActivationResponse(response) {
20
- const parser = new fast_xml_parser_1.XMLParser({
21
- ignoreAttributes: false,
22
- attributeNamePrefix: '',
23
- });
24
- try {
25
- const result = parser.parse(response.data);
26
- const properties = result['chkl:messages']?.['chkl:properties'];
27
- if (properties) {
28
- const activated = properties.activationExecuted === 'true' ||
29
- properties.activationExecuted === true;
30
- const checked = properties.checkExecuted === 'true' ||
31
- properties.checkExecuted === true;
32
- return {
33
- success: activated && checked,
34
- message: activated
35
- ? 'Access control activated successfully'
36
- : 'Activation failed',
37
- };
38
- }
39
- return { success: false, message: 'Unknown activation status' };
40
- }
41
- catch (error) {
42
- return {
43
- success: false,
44
- message: `Failed to parse activation response: ${error}`,
45
- };
46
- }
47
- }
48
19
  /**
49
20
  * Activate access control
50
21
  */
@@ -62,9 +33,6 @@ async function activateAccessControl(connection, accessControlName) {
62
33
  data: xmlBody,
63
34
  headers,
64
35
  });
65
- const activationResult = parseActivationResponse(response);
66
- if (!activationResult.success) {
67
- throw new Error(`Access control activation failed: ${activationResult.message}`);
68
- }
36
+ (0, activationUtils_1.assertActivationSucceeded)('Access control', response.data);
69
37
  return response;
70
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/appendStructure/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AA8C9E,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAgBvB"}
1
+ {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/appendStructure/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAY9E,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAWvB"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.activateAppendStructure = activateAppendStructure;
4
- const fast_xml_parser_1 = require("fast-xml-parser");
4
+ const activationUtils_1 = require("../../utils/activationUtils");
5
5
  const internalUtils_1 = require("../../utils/internalUtils");
6
6
  const timeouts_1 = require("../../utils/timeouts");
7
7
  function buildActivationXml(name) {
@@ -10,35 +10,6 @@ function buildActivationXml(name) {
10
10
  <adtcore:objectReference adtcore:uri="/sap/bc/adt/ddic/structures/${(0, internalUtils_1.encodeSapObjectName)(name.toLowerCase())}" adtcore:name="${name.toUpperCase()}"/>
11
11
  </adtcore:objectReferences>`;
12
12
  }
13
- function parseActivationResponse(response) {
14
- const parser = new fast_xml_parser_1.XMLParser({
15
- ignoreAttributes: false,
16
- attributeNamePrefix: '',
17
- });
18
- try {
19
- const result = parser.parse(response.data);
20
- const properties = result['chkl:messages']?.['chkl:properties'];
21
- if (properties) {
22
- const activated = properties.activationExecuted === 'true' ||
23
- properties.activationExecuted === true;
24
- const checked = properties.checkExecuted === 'true' ||
25
- properties.checkExecuted === true;
26
- return {
27
- success: activated && checked,
28
- message: activated
29
- ? 'Append structure activated successfully'
30
- : 'Activation failed',
31
- };
32
- }
33
- return { success: false, message: 'Unknown activation status' };
34
- }
35
- catch (error) {
36
- return {
37
- success: false,
38
- message: `Failed to parse activation response: ${error}`,
39
- };
40
- }
41
- }
42
13
  async function activateAppendStructure(connection, name) {
43
14
  const url = `/sap/bc/adt/activation?method=activate&preauditRequested=true`;
44
15
  const response = await connection.makeAdtRequest({
@@ -48,9 +19,6 @@ async function activateAppendStructure(connection, name) {
48
19
  data: buildActivationXml(name),
49
20
  headers: { Accept: 'application/xml', 'Content-Type': 'application/xml' },
50
21
  });
51
- const activationResult = parseActivationResponse(response);
52
- if (!activationResult.success) {
53
- throw new Error(`Append structure activation failed: ${activationResult.message}`);
54
- }
22
+ (0, activationUtils_1.assertActivationSucceeded)('Append structure', response.data);
55
23
  return response;
56
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/authorizationField/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAqD9E;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CA2BvB"}
1
+ {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/authorizationField/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAc9E;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAsBvB"}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.activateAuthorizationField = activateAuthorizationField;
7
- const fast_xml_parser_1 = require("fast-xml-parser");
7
+ const activationUtils_1 = require("../../utils/activationUtils");
8
8
  const internalUtils_1 = require("../../utils/internalUtils");
9
9
  const timeouts_1 = require("../../utils/timeouts");
10
10
  function buildActivationXml(name) {
@@ -15,36 +15,6 @@ function buildActivationXml(name) {
15
15
  <adtcore:objectReference adtcore:uri="/sap/bc/adt/aps/iam/auth/${encoded}" adtcore:name="${upper}"/>
16
16
  </adtcore:objectReferences>`;
17
17
  }
18
- function parseActivationResponse(response) {
19
- const parser = new fast_xml_parser_1.XMLParser({
20
- ignoreAttributes: false,
21
- attributeNamePrefix: '',
22
- });
23
- try {
24
- const result = parser.parse(response.data);
25
- const properties = result['chkl:messages']?.['chkl:properties'];
26
- if (properties) {
27
- const activated = properties.activationExecuted === 'true' ||
28
- properties.activationExecuted === true;
29
- const checked = properties.checkExecuted === 'true' ||
30
- properties.checkExecuted === true;
31
- return {
32
- success: activated && checked,
33
- message: activated
34
- ? 'Authorization field activated successfully'
35
- : 'Activation failed',
36
- };
37
- }
38
- // When the response body is empty, SAP treats activation as successful.
39
- return { success: true, message: 'Authorization field activated' };
40
- }
41
- catch (error) {
42
- return {
43
- success: false,
44
- message: `Failed to parse activation response: ${error}`,
45
- };
46
- }
47
- }
48
18
  /**
49
19
  * Activate an authorization field.
50
20
  */
@@ -64,9 +34,6 @@ async function activateAuthorizationField(connection, name) {
64
34
  'Content-Type': 'application/xml',
65
35
  },
66
36
  });
67
- const activationResult = parseActivationResponse(response);
68
- if (!activationResult.success) {
69
- throw new Error(`Authorization field activation failed: ${activationResult.message}`);
70
- }
37
+ (0, activationUtils_1.assertActivationSucceeded)('Authorization field', response.data);
71
38
  return response;
72
39
  }
@@ -2,6 +2,9 @@
2
2
  * DataElement activation operations
3
3
  */
4
4
  import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
5
+ /**
6
+ * Parse activation response
7
+ */
5
8
  /**
6
9
  * Activate data element
7
10
  * Makes data element active and usable in SAP system
@@ -1 +1 @@
1
- {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/dataElement/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAwD9E;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,eAAe,EAC3B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,YAAY,CAAC,CAyBvB"}
1
+ {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/dataElement/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAe9E;;GAEG;AAEH;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,eAAe,EAC3B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,YAAY,CAAC,CAoBvB"}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.activateDataElement = activateDataElement;
7
- const fast_xml_parser_1 = require("fast-xml-parser");
7
+ const activationUtils_1 = require("../../utils/activationUtils");
8
8
  const internalUtils_1 = require("../../utils/internalUtils");
9
9
  const timeouts_1 = require("../../utils/timeouts");
10
10
  /**
@@ -19,35 +19,6 @@ function buildActivationXml(dataElementName) {
19
19
  /**
20
20
  * Parse activation response
21
21
  */
22
- function parseActivationResponse(response) {
23
- const parser = new fast_xml_parser_1.XMLParser({
24
- ignoreAttributes: false,
25
- attributeNamePrefix: '',
26
- });
27
- try {
28
- const result = parser.parse(response.data);
29
- const properties = result['chkl:messages']?.['chkl:properties'];
30
- if (properties) {
31
- const activated = properties.activationExecuted === 'true' ||
32
- properties.activationExecuted === true;
33
- const checked = properties.checkExecuted === 'true' ||
34
- properties.checkExecuted === true;
35
- return {
36
- success: activated && checked,
37
- message: activated
38
- ? 'Data element activated successfully'
39
- : 'Activation failed',
40
- };
41
- }
42
- return { success: false, message: 'Unknown activation status' };
43
- }
44
- catch (error) {
45
- return {
46
- success: false,
47
- message: `Failed to parse activation response: ${error}`,
48
- };
49
- }
50
- }
51
22
  /**
52
23
  * Activate data element
53
24
  * Makes data element active and usable in SAP system
@@ -66,9 +37,6 @@ async function activateDataElement(connection, dataElementName) {
66
37
  data: xmlBody,
67
38
  headers,
68
39
  });
69
- const activationResult = parseActivationResponse(response);
70
- if (!activationResult.success) {
71
- throw new Error(`Data element activation failed: ${activationResult.message}`);
72
- }
40
+ (0, activationUtils_1.assertActivationSucceeded)('Data element', response.data);
73
41
  return response;
74
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/core/dataElement/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,OAAO,EACR,MAAM,0BAA0B,CAAC;AAgBlC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAIxD;;GAEG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,eAAe,EAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAmCjE;AAqID;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,wBAAwB,EAChC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,YAAY,CAAC,CAkEvB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,wBAAwB,EAC9B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EACnE,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,YAAY,CAAC,CAEvB"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/core/dataElement/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,OAAO,EACR,MAAM,0BAA0B,CAAC;AAgBlC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAIxD;;GAEG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,eAAe,EAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAmCjE;AAqID;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,wBAAwB,EAChC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,YAAY,CAAC,CAqEvB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,wBAAwB,EAC9B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EACnE,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,YAAY,CAAC,CAEvB"}
@@ -171,7 +171,7 @@ async function updateDataElement(connection, params, lockHandle, logger) {
171
171
  timeout: (0, timeouts_1.getTimeout)('default'),
172
172
  headers: { Accept: contentTypes_1.ACCEPT_DATA_ELEMENT },
173
173
  });
174
- const currentXml = (0, xmlPatch_1.extractXmlString)(currentResponse.data);
174
+ const currentXml = (0, xmlPatch_1.extractXmlString)(currentResponse.data, `data element ${params.data_element_name}`);
175
175
  // 2. Patch only changed fields
176
176
  const updatedXml = patchDataElementXml(currentXml, params);
177
177
  // Debug: log XML when DEBUG_ADT_LIBS is enabled
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/core/domain/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAe9E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAsEnD;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,mBAAmB,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CAiCvB"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/core/domain/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAe9E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAsEnD;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,mBAAmB,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CAoCvB"}
@@ -69,7 +69,7 @@ async function updateDomain(connection, args, lockHandle) {
69
69
  timeout: (0, timeouts_1.getTimeout)('default'),
70
70
  headers: { Accept: contentTypes_1.ACCEPT_DOMAIN },
71
71
  });
72
- const currentXml = (0, xmlPatch_1.extractXmlString)(currentResponse.data);
72
+ const currentXml = (0, xmlPatch_1.extractXmlString)(currentResponse.data, `domain ${args.domain_name}`);
73
73
  // 2. Patch only changed fields
74
74
  const updatedXml = patchDomainXml(currentXml, args);
75
75
  // 3. PUT
@@ -1 +1 @@
1
- {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/featureToggle/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAqD9E;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CA2BvB"}
1
+ {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/featureToggle/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAc9E;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAsBvB"}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.activateFeatureToggle = activateFeatureToggle;
7
- const fast_xml_parser_1 = require("fast-xml-parser");
7
+ const activationUtils_1 = require("../../utils/activationUtils");
8
8
  const internalUtils_1 = require("../../utils/internalUtils");
9
9
  const timeouts_1 = require("../../utils/timeouts");
10
10
  function buildActivationXml(name) {
@@ -15,36 +15,6 @@ function buildActivationXml(name) {
15
15
  <adtcore:objectReference adtcore:uri="/sap/bc/adt/sfw/featuretoggles/${encoded}" adtcore:name="${name.toUpperCase()}"/>
16
16
  </adtcore:objectReferences>`;
17
17
  }
18
- function parseActivationResponse(response) {
19
- const parser = new fast_xml_parser_1.XMLParser({
20
- ignoreAttributes: false,
21
- attributeNamePrefix: '',
22
- });
23
- try {
24
- const result = parser.parse(response.data);
25
- const properties = result['chkl:messages']?.['chkl:properties'];
26
- if (properties) {
27
- const activated = properties.activationExecuted === 'true' ||
28
- properties.activationExecuted === true;
29
- const checked = properties.checkExecuted === 'true' ||
30
- properties.checkExecuted === true;
31
- return {
32
- success: activated && checked,
33
- message: activated
34
- ? 'Feature toggle activated successfully'
35
- : 'Activation failed',
36
- };
37
- }
38
- // When the response body is empty, SAP treats activation as successful.
39
- return { success: true, message: 'Feature toggle activated' };
40
- }
41
- catch (error) {
42
- return {
43
- success: false,
44
- message: `Failed to parse activation response: ${error}`,
45
- };
46
- }
47
- }
48
18
  /**
49
19
  * Activate a feature toggle.
50
20
  */
@@ -64,9 +34,6 @@ async function activateFeatureToggle(connection, name) {
64
34
  'Content-Type': 'application/xml',
65
35
  },
66
36
  });
67
- const activationResult = parseActivationResponse(response);
68
- if (!activationResult.success) {
69
- throw new Error(`Feature toggle activation failed: ${activationResult.message}`);
70
- }
37
+ (0, activationUtils_1.assertActivationSucceeded)('Feature toggle', response.data);
71
38
  return response;
72
39
  }
@@ -60,9 +60,7 @@ async function updateFunctionGroup(connection, params, contentTypes) {
60
60
  }
61
61
  // Get current XML
62
62
  const currentResponse = await (0, read_1.getFunctionGroup)(connection, params.function_group_name, undefined);
63
- const currentXml = typeof currentResponse.data === 'string'
64
- ? currentResponse.data
65
- : JSON.stringify(currentResponse.data);
63
+ const currentXml = (0, xmlPatch_1.extractXmlString)(currentResponse.data, `function group ${params.function_group_name}`);
66
64
  // Update metadata
67
65
  const updateResponse = await updateFunctionGroupMetadata(connection, params.function_group_name, currentXml, params.description, lockHandle, params.transport_request, contentTypes);
68
66
  // Unlock if we locked it
@@ -8,14 +8,14 @@ import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
8
8
  * Activate a metadata extension
9
9
  *
10
10
  * @param connection - ABAP connection instance
11
- * @param name - Metadata extension name (e.g., 'ZOK_C_CDS_TEST_0001')
11
+ * @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
12
12
  * @param sessionId - Session ID for request tracking
13
13
  * @param preaudit - Request pre-audit before activation (default: true)
14
14
  * @returns Axios response with activation result
15
15
  *
16
16
  * @example
17
17
  * ```typescript
18
- * await activateMetadataExtension(connection, 'ZOK_C_CDS_TEST_0001', sessionId);
18
+ * await activateMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sessionId);
19
19
  * ```
20
20
  */
21
21
  export declare function activateMetadataExtension(connection: IAbapConnection, name: string, preaudit?: boolean): Promise<IAdtResponse>;
@@ -11,14 +11,14 @@ const activationUtils_1 = require("../../utils/activationUtils");
11
11
  * Activate a metadata extension
12
12
  *
13
13
  * @param connection - ABAP connection instance
14
- * @param name - Metadata extension name (e.g., 'ZOK_C_CDS_TEST_0001')
14
+ * @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
15
15
  * @param sessionId - Session ID for request tracking
16
16
  * @param preaudit - Request pre-audit before activation (default: true)
17
17
  * @returns Axios response with activation result
18
18
  *
19
19
  * @example
20
20
  * ```typescript
21
- * await activateMetadataExtension(connection, 'ZOK_C_CDS_TEST_0001', sessionId);
21
+ * await activateMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sessionId);
22
22
  * ```
23
23
  */
24
24
  async function activateMetadataExtension(connection, name, preaudit = true) {
@@ -8,7 +8,7 @@ import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
8
8
  * Check metadata extension syntax
9
9
  *
10
10
  * @param connection - ABAP connection instance
11
- * @param name - Metadata extension name (e.g., 'ZOK_C_CDS_TEST_0001')
11
+ * @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
12
12
  * @param sessionId - Session ID for request tracking
13
13
  * @param version - Version to check ('active' or 'inactive', default 'inactive')
14
14
  * @param sourceCode - Optional source code to validate before saving
@@ -16,7 +16,7 @@ import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
16
16
  *
17
17
  * @example
18
18
  * ```typescript
19
- * const checkResult = await checkMetadataExtension(connection, 'ZOK_C_CDS_TEST_0001', sessionId);
19
+ * const checkResult = await checkMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sessionId);
20
20
  * ```
21
21
  */
22
22
  export declare function checkMetadataExtension(connection: IAbapConnection, name: string, version?: 'active' | 'inactive', sourceCode?: string): Promise<IAdtResponse>;
@@ -11,7 +11,7 @@ const checkRun_1 = require("../../utils/checkRun");
11
11
  * Check metadata extension syntax
12
12
  *
13
13
  * @param connection - ABAP connection instance
14
- * @param name - Metadata extension name (e.g., 'ZOK_C_CDS_TEST_0001')
14
+ * @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
15
15
  * @param sessionId - Session ID for request tracking
16
16
  * @param version - Version to check ('active' or 'inactive', default 'inactive')
17
17
  * @param sourceCode - Optional source code to validate before saving
@@ -19,7 +19,7 @@ const checkRun_1 = require("../../utils/checkRun");
19
19
  *
20
20
  * @example
21
21
  * ```typescript
22
- * const checkResult = await checkMetadataExtension(connection, 'ZOK_C_CDS_TEST_0001', sessionId);
22
+ * const checkResult = await checkMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sessionId);
23
23
  * ```
24
24
  */
25
25
  async function checkMetadataExtension(connection, name, version = 'inactive', sourceCode) {
@@ -16,9 +16,9 @@ import type { IMetadataExtensionCreateParams } from './types';
16
16
  * @example
17
17
  * ```typescript
18
18
  * const response = await createMetadataExtension(connection, {
19
- * name: 'ZOK_C_CDS_TEST_0001',
19
+ * name: 'ZDEMO_C_CDS_MDE',
20
20
  * description: 'First metadata extension',
21
- * packageName: 'ZOK_TEST_000222',
21
+ * packageName: 'ZDEMO_PKG',
22
22
  * transportRequest: 'TRLK900123'
23
23
  * }, sessionId);
24
24
  * ```
@@ -20,9 +20,9 @@ const timeouts_1 = require("../../utils/timeouts");
20
20
  * @example
21
21
  * ```typescript
22
22
  * const response = await createMetadataExtension(connection, {
23
- * name: 'ZOK_C_CDS_TEST_0001',
23
+ * name: 'ZDEMO_C_CDS_MDE',
24
24
  * description: 'First metadata extension',
25
- * packageName: 'ZOK_TEST_000222',
25
+ * packageName: 'ZDEMO_PKG',
26
26
  * transportRequest: 'TRLK900123'
27
27
  * }, sessionId);
28
28
  * ```
@@ -8,14 +8,14 @@ import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
8
8
  * Delete a metadata extension
9
9
  *
10
10
  * @param connection - ABAP connection instance
11
- * @param name - Metadata extension name (e.g., 'ZOK_C_CDS_TEST_0001')
11
+ * @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
12
12
  * @param transportRequest - Transport request number (optional for local objects)
13
13
  * @param sessionId - Session ID for request tracking
14
14
  * @returns Axios response
15
15
  *
16
16
  * @example
17
17
  * ```typescript
18
- * await deleteMetadataExtension(connection, 'ZOK_C_CDS_TEST_0001', 'TRLK900123', sessionId);
18
+ * await deleteMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', 'TRLK900123', sessionId);
19
19
  * ```
20
20
  */
21
21
  export declare function deleteMetadataExtension(connection: IAbapConnection, name: string, transportRequest: string | undefined): Promise<IAdtResponse>;
@@ -11,14 +11,14 @@ const timeouts_1 = require("../../utils/timeouts");
11
11
  * Delete a metadata extension
12
12
  *
13
13
  * @param connection - ABAP connection instance
14
- * @param name - Metadata extension name (e.g., 'ZOK_C_CDS_TEST_0001')
14
+ * @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
15
15
  * @param transportRequest - Transport request number (optional for local objects)
16
16
  * @param sessionId - Session ID for request tracking
17
17
  * @returns Axios response
18
18
  *
19
19
  * @example
20
20
  * ```typescript
21
- * await deleteMetadataExtension(connection, 'ZOK_C_CDS_TEST_0001', 'TRLK900123', sessionId);
21
+ * await deleteMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', 'TRLK900123', sessionId);
22
22
  * ```
23
23
  */
24
24
  async function deleteMetadataExtension(connection, name, transportRequest) {
@@ -8,13 +8,13 @@ import type { IAbapConnection } from '@mcp-abap-adt/interfaces';
8
8
  * Lock a metadata extension for modification
9
9
  *
10
10
  * @param connection - ABAP connection instance
11
- * @param name - Metadata extension name (e.g., 'ZOK_C_CDS_TEST_0001')
11
+ * @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
12
12
  * @param sessionId - Session ID for request tracking
13
13
  * @returns Lock handle string
14
14
  *
15
15
  * @example
16
16
  * ```typescript
17
- * const lockHandle = await lockMetadataExtension(connection, 'ZOK_C_CDS_TEST_0001', sessionId);
17
+ * const lockHandle = await lockMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sessionId);
18
18
  * ```
19
19
  */
20
20
  export declare function lockMetadataExtension(connection: IAbapConnection, name: string): Promise<string>;
@@ -13,13 +13,13 @@ const timeouts_1 = require("../../utils/timeouts");
13
13
  * Lock a metadata extension for modification
14
14
  *
15
15
  * @param connection - ABAP connection instance
16
- * @param name - Metadata extension name (e.g., 'ZOK_C_CDS_TEST_0001')
16
+ * @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
17
17
  * @param sessionId - Session ID for request tracking
18
18
  * @returns Lock handle string
19
19
  *
20
20
  * @example
21
21
  * ```typescript
22
- * const lockHandle = await lockMetadataExtension(connection, 'ZOK_C_CDS_TEST_0001', sessionId);
22
+ * const lockHandle = await lockMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sessionId);
23
23
  * ```
24
24
  */
25
25
  async function lockMetadataExtension(connection, name) {
@@ -10,12 +10,12 @@ import type { IReadOptions } from '../shared/types';
10
10
  * Read metadata extension metadata
11
11
  *
12
12
  * @param connection - ABAP connection instance
13
- * @param name - Metadata extension name (e.g., 'ZOK_C_CDS_TEST_0001')
13
+ * @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
14
14
  * @returns Axios response with metadata extension metadata
15
15
  *
16
16
  * @example
17
17
  * ```typescript
18
- * const metadata = await readMetadataExtension(connection, 'ZOK_C_CDS_TEST_0001');
18
+ * const metadata = await readMetadataExtension(connection, 'ZDEMO_C_CDS_MDE');
19
19
  * ```
20
20
  */
21
21
  export declare function readMetadataExtension(connection: IAbapConnection, name: string, options?: IReadOptions, logger?: ILogger): Promise<IAdtResponse>;
@@ -23,13 +23,13 @@ export declare function readMetadataExtension(connection: IAbapConnection, name:
23
23
  * Read metadata extension source code
24
24
  *
25
25
  * @param connection - ABAP connection instance
26
- * @param name - Metadata extension name (e.g., 'ZOK_C_CDS_TEST_0001')
26
+ * @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
27
27
  * @param version - Version to read ('active' or 'inactive', default 'active')
28
28
  * @returns Axios response with source code as string
29
29
  *
30
30
  * @example
31
31
  * ```typescript
32
- * const response = await readMetadataExtensionSource(connection, 'ZOK_C_CDS_TEST_0001');
32
+ * const response = await readMetadataExtensionSource(connection, 'ZDEMO_C_CDS_MDE');
33
33
  * const sourceCode = response.data;
34
34
  * ```
35
35
  */
@@ -16,12 +16,12 @@ const timeouts_1 = require("../../utils/timeouts");
16
16
  * Read metadata extension metadata
17
17
  *
18
18
  * @param connection - ABAP connection instance
19
- * @param name - Metadata extension name (e.g., 'ZOK_C_CDS_TEST_0001')
19
+ * @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
20
20
  * @returns Axios response with metadata extension metadata
21
21
  *
22
22
  * @example
23
23
  * ```typescript
24
- * const metadata = await readMetadataExtension(connection, 'ZOK_C_CDS_TEST_0001');
24
+ * const metadata = await readMetadataExtension(connection, 'ZDEMO_C_CDS_MDE');
25
25
  * ```
26
26
  */
27
27
  async function readMetadataExtension(connection, name, options, logger) {
@@ -42,13 +42,13 @@ async function readMetadataExtension(connection, name, options, logger) {
42
42
  * Read metadata extension source code
43
43
  *
44
44
  * @param connection - ABAP connection instance
45
- * @param name - Metadata extension name (e.g., 'ZOK_C_CDS_TEST_0001')
45
+ * @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
46
46
  * @param version - Version to read ('active' or 'inactive', default 'active')
47
47
  * @returns Axios response with source code as string
48
48
  *
49
49
  * @example
50
50
  * ```typescript
51
- * const response = await readMetadataExtensionSource(connection, 'ZOK_C_CDS_TEST_0001');
51
+ * const response = await readMetadataExtensionSource(connection, 'ZDEMO_C_CDS_MDE');
52
52
  * const sourceCode = response.data;
53
53
  * ```
54
54
  */