@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.
- package/README.md +17 -1
- package/dist/core/accessControl/activation.d.ts +3 -0
- package/dist/core/accessControl/activation.d.ts.map +1 -1
- package/dist/core/accessControl/activation.js +2 -34
- package/dist/core/appendStructure/activation.d.ts.map +1 -1
- package/dist/core/appendStructure/activation.js +2 -34
- package/dist/core/authorizationField/activation.d.ts.map +1 -1
- package/dist/core/authorizationField/activation.js +2 -35
- package/dist/core/dataElement/activation.d.ts +3 -0
- package/dist/core/dataElement/activation.d.ts.map +1 -1
- package/dist/core/dataElement/activation.js +2 -34
- package/dist/core/dataElement/update.d.ts.map +1 -1
- package/dist/core/dataElement/update.js +1 -1
- package/dist/core/domain/update.d.ts.map +1 -1
- package/dist/core/domain/update.js +1 -1
- package/dist/core/featureToggle/activation.d.ts.map +1 -1
- package/dist/core/featureToggle/activation.js +2 -35
- package/dist/core/functionGroup/update.js +1 -3
- package/dist/core/metadataExtension/activate.d.ts +2 -2
- package/dist/core/metadataExtension/activate.js +2 -2
- package/dist/core/metadataExtension/check.d.ts +2 -2
- package/dist/core/metadataExtension/check.js +2 -2
- package/dist/core/metadataExtension/create.d.ts +2 -2
- package/dist/core/metadataExtension/create.js +2 -2
- package/dist/core/metadataExtension/delete.d.ts +2 -2
- package/dist/core/metadataExtension/delete.js +2 -2
- package/dist/core/metadataExtension/lock.d.ts +2 -2
- package/dist/core/metadataExtension/lock.js +2 -2
- package/dist/core/metadataExtension/read.d.ts +4 -4
- package/dist/core/metadataExtension/read.js +4 -4
- package/dist/core/metadataExtension/unlock.d.ts +2 -2
- package/dist/core/metadataExtension/unlock.js +2 -2
- package/dist/core/metadataExtension/update.d.ts +3 -3
- package/dist/core/metadataExtension/update.js +3 -3
- package/dist/core/package/update.d.ts.map +1 -1
- package/dist/core/package/update.js +1 -1
- package/dist/core/scalarFunction/activation.d.ts.map +1 -1
- package/dist/core/scalarFunction/activation.js +2 -34
- package/dist/core/scalarFunctionImplementation/activation.d.ts.map +1 -1
- package/dist/core/scalarFunctionImplementation/activation.js +2 -34
- package/dist/core/serviceDefinition/activation.d.ts +3 -0
- package/dist/core/serviceDefinition/activation.d.ts.map +1 -1
- package/dist/core/serviceDefinition/activation.js +2 -34
- package/dist/core/shared/groupActivation.d.ts +2 -2
- package/dist/core/shared/groupActivation.js +2 -2
- package/dist/core/tabletype/update.d.ts.map +1 -1
- package/dist/core/tabletype/update.js +1 -1
- package/dist/core/transformation/activation.d.ts +3 -0
- package/dist/core/transformation/activation.d.ts.map +1 -1
- package/dist/core/transformation/activation.js +2 -34
- package/dist/utils/activationUtils.d.ts +21 -0
- package/dist/utils/activationUtils.d.ts.map +1 -1
- package/dist/utils/activationUtils.js +45 -9
- package/dist/utils/xmlPatch.d.ts +65 -6
- package/dist/utils/xmlPatch.d.ts.map +1 -1
- package/dist/utils/xmlPatch.js +117 -20
- 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:**
|
|
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 +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;
|
|
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
|
|
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
|
-
|
|
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;
|
|
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
|
|
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
|
-
|
|
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;
|
|
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
|
|
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
|
-
|
|
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
|
}
|
|
@@ -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;
|
|
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
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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;
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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., '
|
|
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, '
|
|
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., '
|
|
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, '
|
|
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., '
|
|
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, '
|
|
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., '
|
|
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, '
|
|
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: '
|
|
19
|
+
* name: 'ZDEMO_C_CDS_MDE',
|
|
20
20
|
* description: 'First metadata extension',
|
|
21
|
-
* packageName: '
|
|
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: '
|
|
23
|
+
* name: 'ZDEMO_C_CDS_MDE',
|
|
24
24
|
* description: 'First metadata extension',
|
|
25
|
-
* packageName: '
|
|
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., '
|
|
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, '
|
|
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., '
|
|
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, '
|
|
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., '
|
|
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, '
|
|
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., '
|
|
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, '
|
|
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., '
|
|
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, '
|
|
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., '
|
|
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, '
|
|
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., '
|
|
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, '
|
|
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., '
|
|
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, '
|
|
51
|
+
* const response = await readMetadataExtensionSource(connection, 'ZDEMO_C_CDS_MDE');
|
|
52
52
|
* const sourceCode = response.data;
|
|
53
53
|
* ```
|
|
54
54
|
*/
|