@mcp-abap-adt/core 4.8.2 → 4.8.3
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/CHANGELOG.md +9 -0
- package/dist/handlers/data_element/high/handleCreateDataElement.d.ts.map +1 -1
- package/dist/handlers/data_element/high/handleCreateDataElement.js +16 -43
- package/dist/handlers/data_element/high/handleCreateDataElement.js.map +1 -1
- package/dist/handlers/domain/high/handleCreateDomain.d.ts.map +1 -1
- package/dist/handlers/domain/high/handleCreateDomain.js +14 -41
- package/dist/handlers/domain/high/handleCreateDomain.js.map +1 -1
- package/docs/development/tests/TESTING_GUIDE.md +11 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [4.8.3] - 2026-04-04
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- Domain/DataElement create handlers: use lock + read-modify-write update pattern instead of full chain (fixes intermittent "description is missing" errors)
|
|
9
|
+
- Update `@mcp-abap-adt/adt-clients` to 3.14.4 (fixes DataElement create XML)
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- Add `shared:setup` prerequisite step to testing documentation
|
|
13
|
+
|
|
5
14
|
## [4.8.2] - 2026-04-04
|
|
6
15
|
|
|
7
16
|
### Changed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleCreateDataElement.d.ts","sourceRoot":"","sources":["../../../../src/handlers/data_element/high/handleCreateDataElement.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAUvE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmGlB,CAAC;AAEX,UAAU,eAAe;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EACN,QAAQ,GACR,oBAAoB,GACpB,yBAAyB,GACzB,qBAAqB,GACrB,eAAe,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,eAAe;;;;;;
|
|
1
|
+
{"version":3,"file":"handleCreateDataElement.d.ts","sourceRoot":"","sources":["../../../../src/handlers/data_element/high/handleCreateDataElement.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAUvE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmGlB,CAAC;AAEX,UAAU,eAAe;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EACN,QAAQ,GACR,oBAAoB,GACpB,yBAAyB,GACzB,qBAAqB,GACrB,eAAe,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,eAAe;;;;;;GA6JtB"}
|
|
@@ -122,20 +122,19 @@ async function handleCreateDataElement(context, args) {
|
|
|
122
122
|
// Connection is managed and cached per session, with proper token refresh via AuthBroker
|
|
123
123
|
const dataElementName = typedArgs.data_element_name.toUpperCase();
|
|
124
124
|
logger?.info(`Starting data element creation: ${dataElementName}`);
|
|
125
|
-
let lockHandle;
|
|
126
125
|
const client = (0, clients_1.createAdtClient)(connection);
|
|
126
|
+
const shouldActivate = typedArgs.activate !== false;
|
|
127
|
+
const typeKind = typedArgs.type_kind || 'domain';
|
|
128
|
+
let lockHandle;
|
|
127
129
|
try {
|
|
128
|
-
const shouldActivate = typedArgs.activate !== false; // Default to true if not specified
|
|
129
130
|
// Validate
|
|
130
131
|
await client.getDataElement().validate({
|
|
131
132
|
dataElementName,
|
|
132
133
|
packageName: typedArgs.package_name,
|
|
133
134
|
description: typedArgs.description || dataElementName,
|
|
134
135
|
});
|
|
135
|
-
//
|
|
136
|
-
|
|
137
|
-
// Create
|
|
138
|
-
const createState = await client.getDataElement().create({
|
|
136
|
+
// Create (registers bare object in SAP)
|
|
137
|
+
await client.getDataElement().create({
|
|
139
138
|
dataElementName,
|
|
140
139
|
description: typedArgs.description || dataElementName,
|
|
141
140
|
packageName: typedArgs.package_name,
|
|
@@ -148,8 +147,8 @@ async function handleCreateDataElement(context, args) {
|
|
|
148
147
|
});
|
|
149
148
|
// Lock
|
|
150
149
|
lockHandle = await client.getDataElement().lock({ dataElementName });
|
|
151
|
-
// Update with properties
|
|
152
|
-
|
|
150
|
+
// Update with read-modify-write: reads current XML from SAP, patches with properties, PUTs back
|
|
151
|
+
await client.getDataElement().update({
|
|
153
152
|
dataElementName,
|
|
154
153
|
packageName: typedArgs.package_name,
|
|
155
154
|
description: typedArgs.description || dataElementName,
|
|
@@ -166,10 +165,10 @@ async function handleCreateDataElement(context, args) {
|
|
|
166
165
|
searchHelpParameter: typedArgs.search_help_parameter,
|
|
167
166
|
setGetParameter: typedArgs.set_get_parameter,
|
|
168
167
|
transportRequest: typedArgs.transport_request,
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
168
|
+
}, { lockHandle });
|
|
169
|
+
// Unlock
|
|
170
|
+
await client.getDataElement().unlock({ dataElementName }, lockHandle);
|
|
171
|
+
lockHandle = undefined;
|
|
173
172
|
// Check
|
|
174
173
|
try {
|
|
175
174
|
await (0, utils_1.safeCheckOperation)(() => client.getDataElement().check({ dataElementName }), dataElementName, {
|
|
@@ -177,32 +176,15 @@ async function handleCreateDataElement(context, args) {
|
|
|
177
176
|
});
|
|
178
177
|
}
|
|
179
178
|
catch (checkError) {
|
|
180
|
-
// If error was marked as "already checked", continue silently
|
|
181
179
|
if (!checkError.isAlreadyChecked) {
|
|
182
|
-
// Real check error - rethrow
|
|
183
180
|
throw checkError;
|
|
184
181
|
}
|
|
185
182
|
}
|
|
186
|
-
// Unlock
|
|
187
|
-
await client.getDataElement().unlock({ dataElementName }, lockHandle);
|
|
188
183
|
// Activate if requested
|
|
189
184
|
if (shouldActivate) {
|
|
190
185
|
await client.getDataElement().activate({ dataElementName });
|
|
191
186
|
}
|
|
192
|
-
|
|
193
|
-
const createResult = createState.createResult;
|
|
194
|
-
let dataElementDetails = null;
|
|
195
|
-
if (createResult?.data &&
|
|
196
|
-
typeof createResult.data === 'object' &&
|
|
197
|
-
'data_element_details' in createResult.data) {
|
|
198
|
-
dataElementDetails = createResult.data.data_element_details;
|
|
199
|
-
}
|
|
200
|
-
// Extract version and other details from response
|
|
201
|
-
const version = createResult?.data &&
|
|
202
|
-
typeof createResult.data === 'object' &&
|
|
203
|
-
'version' in createResult.data
|
|
204
|
-
? createResult.data.version
|
|
205
|
-
: 'unknown';
|
|
187
|
+
logger?.info(`✅ CreateDataElement completed: ${dataElementName}`);
|
|
206
188
|
return (0, utils_1.return_response)({
|
|
207
189
|
data: JSON.stringify({
|
|
208
190
|
success: true,
|
|
@@ -210,30 +192,21 @@ async function handleCreateDataElement(context, args) {
|
|
|
210
192
|
package: typedArgs.package_name,
|
|
211
193
|
transport_request: typedArgs.transport_request,
|
|
212
194
|
data_type: typedArgs.data_type || null,
|
|
213
|
-
status: 'active',
|
|
214
|
-
|
|
215
|
-
message: `Data element ${dataElementName} created and activated successfully`,
|
|
216
|
-
data_element_details: dataElementDetails,
|
|
195
|
+
status: shouldActivate ? 'active' : 'inactive',
|
|
196
|
+
message: `Data element ${dataElementName} created${shouldActivate ? ' and activated' : ''} successfully`,
|
|
217
197
|
}, null, 2),
|
|
218
|
-
status: 200,
|
|
219
|
-
statusText: 'OK',
|
|
220
|
-
headers: {},
|
|
221
|
-
config: {},
|
|
222
198
|
});
|
|
223
199
|
}
|
|
224
200
|
catch (error) {
|
|
225
|
-
// Try to unlock if lock was acquired
|
|
226
201
|
if (lockHandle) {
|
|
227
202
|
try {
|
|
228
203
|
await client.getDataElement().unlock({ dataElementName }, lockHandle);
|
|
229
|
-
logger?.debug(`Unlocked data element ${dataElementName} after error`);
|
|
230
204
|
}
|
|
231
205
|
catch (_unlockError) {
|
|
232
|
-
// Ignore unlock errors
|
|
206
|
+
// Ignore unlock errors during cleanup
|
|
233
207
|
}
|
|
234
208
|
}
|
|
235
209
|
logger?.error(`Error creating data element ${dataElementName}: ${error?.message || error}`);
|
|
236
|
-
// Check if data element already exists
|
|
237
210
|
if (error.message?.includes('already exists') ||
|
|
238
211
|
error.response?.data?.includes('ExceptionResourceAlreadyExists')) {
|
|
239
212
|
throw new utils_1.McpError(utils_1.ErrorCode.InvalidParams, `Data element ${dataElementName} already exists. Please delete it first or use a different name.`);
|
|
@@ -241,7 +214,7 @@ async function handleCreateDataElement(context, args) {
|
|
|
241
214
|
const errorMessage = error.response?.data
|
|
242
215
|
? typeof error.response.data === 'string'
|
|
243
216
|
? error.response.data
|
|
244
|
-
:
|
|
217
|
+
: String(error.response.data).substring(0, 500)
|
|
245
218
|
: error.message || String(error);
|
|
246
219
|
throw new utils_1.McpError(utils_1.ErrorCode.InternalError, `Failed to create data element ${dataElementName}: ${errorMessage}`);
|
|
247
220
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleCreateDataElement.js","sourceRoot":"","sources":["../../../../src/handlers/data_element/high/handleCreateDataElement.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAiJH,
|
|
1
|
+
{"version":3,"file":"handleCreateDataElement.js","sourceRoot":"","sources":["../../../../src/handlers/data_element/high/handleCreateDataElement.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleCreateDomain.d.ts","sourceRoot":"","sources":["../../../../src/handlers/domain/high/handleCreateDomain.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAWvE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0FlB,CAAC;AAEX,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,UAAU;;;;;;
|
|
1
|
+
{"version":3,"file":"handleCreateDomain.d.ts","sourceRoot":"","sources":["../../../../src/handlers/domain/high/handleCreateDomain.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAWvE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0FlB,CAAC;AAEX,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,UAAU;;;;;;GAiJjB"}
|
|
@@ -117,18 +117,18 @@ async function handleCreateDomain(context, args) {
|
|
|
117
117
|
const typedArgs = args;
|
|
118
118
|
const domainName = typedArgs.domain_name.toUpperCase();
|
|
119
119
|
logger?.info(`Starting domain creation: ${domainName}`);
|
|
120
|
-
let lockHandle;
|
|
121
120
|
const client = (0, clients_1.createAdtClient)(connection);
|
|
121
|
+
const shouldActivate = typedArgs.activate !== false;
|
|
122
|
+
let lockHandle;
|
|
122
123
|
try {
|
|
123
|
-
const shouldActivate = typedArgs.activate !== false; // Default to true if not specified
|
|
124
124
|
// Validate
|
|
125
125
|
await client.getDomain().validate({
|
|
126
126
|
domainName,
|
|
127
127
|
packageName: typedArgs.package_name,
|
|
128
128
|
description: typedArgs.description || domainName,
|
|
129
129
|
});
|
|
130
|
-
// Create
|
|
131
|
-
|
|
130
|
+
// Create (registers bare object in SAP)
|
|
131
|
+
await client.getDomain().create({
|
|
132
132
|
domainName,
|
|
133
133
|
description: typedArgs.description || domainName,
|
|
134
134
|
packageName: typedArgs.package_name,
|
|
@@ -136,7 +136,7 @@ async function handleCreateDomain(context, args) {
|
|
|
136
136
|
});
|
|
137
137
|
// Lock
|
|
138
138
|
lockHandle = await client.getDomain().lock({ domainName });
|
|
139
|
-
// Update with properties
|
|
139
|
+
// Update with read-modify-write: reads current XML from SAP, patches with properties, PUTs back
|
|
140
140
|
await client.getDomain().update({
|
|
141
141
|
domainName,
|
|
142
142
|
packageName: typedArgs.package_name,
|
|
@@ -151,6 +151,9 @@ async function handleCreateDomain(context, args) {
|
|
|
151
151
|
fixed_values: typedArgs.fixed_values,
|
|
152
152
|
transportRequest: typedArgs.transport_request,
|
|
153
153
|
}, { lockHandle });
|
|
154
|
+
// Unlock
|
|
155
|
+
await client.getDomain().unlock({ domainName }, lockHandle);
|
|
156
|
+
lockHandle = undefined;
|
|
154
157
|
// Check
|
|
155
158
|
try {
|
|
156
159
|
await (0, utils_1.safeCheckOperation)(() => client.getDomain().check({ domainName }), domainName, {
|
|
@@ -158,32 +161,14 @@ async function handleCreateDomain(context, args) {
|
|
|
158
161
|
});
|
|
159
162
|
}
|
|
160
163
|
catch (checkError) {
|
|
161
|
-
|
|
162
|
-
if (checkError.isAlreadyChecked) {
|
|
163
|
-
logger?.debug(`Domain ${domainName} was already checked - continuing`);
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
// Real check error - rethrow
|
|
164
|
+
if (!checkError.isAlreadyChecked) {
|
|
167
165
|
throw checkError;
|
|
168
166
|
}
|
|
169
167
|
}
|
|
170
|
-
// Unlock
|
|
171
|
-
await client.getDomain().unlock({ domainName }, lockHandle);
|
|
172
168
|
// Activate if requested
|
|
173
169
|
if (shouldActivate) {
|
|
174
170
|
await client.getDomain().activate({ domainName });
|
|
175
171
|
}
|
|
176
|
-
else {
|
|
177
|
-
logger?.debug(`Skipping activation for: ${domainName}`);
|
|
178
|
-
}
|
|
179
|
-
// Get domain details from create result (createDomain already does verification)
|
|
180
|
-
const createResult = createState.createResult;
|
|
181
|
-
let domainDetails = null;
|
|
182
|
-
if (createResult?.data &&
|
|
183
|
-
typeof createResult.data === 'object' &&
|
|
184
|
-
'domain_details' in createResult.data) {
|
|
185
|
-
domainDetails = createResult.data.domain_details;
|
|
186
|
-
}
|
|
187
172
|
logger?.info(`✅ CreateDomain completed: ${domainName}`);
|
|
188
173
|
return (0, utils_1.return_response)({
|
|
189
174
|
data: JSON.stringify({
|
|
@@ -193,41 +178,29 @@ async function handleCreateDomain(context, args) {
|
|
|
193
178
|
transport_request: typedArgs.transport_request,
|
|
194
179
|
status: shouldActivate ? 'active' : 'inactive',
|
|
195
180
|
message: `Domain ${domainName} created${shouldActivate ? ' and activated' : ''} successfully`,
|
|
196
|
-
domain_details: domainDetails,
|
|
197
181
|
}),
|
|
198
182
|
});
|
|
199
183
|
}
|
|
200
184
|
catch (error) {
|
|
201
|
-
// Try to unlock if lock was acquired
|
|
202
185
|
if (lockHandle) {
|
|
203
186
|
try {
|
|
204
187
|
await client.getDomain().unlock({ domainName }, lockHandle);
|
|
205
|
-
logger?.debug(`Unlocked domain ${domainName} after error`);
|
|
206
188
|
}
|
|
207
189
|
catch (_unlockError) {
|
|
208
|
-
// Ignore unlock errors
|
|
190
|
+
// Ignore unlock errors during cleanup
|
|
209
191
|
}
|
|
210
192
|
}
|
|
211
193
|
logger?.error(`Error creating domain ${domainName}: ${error?.message || error}`);
|
|
212
|
-
// Check if domain already exists
|
|
213
194
|
if (error.message?.includes('already exists') ||
|
|
214
195
|
error.response?.data?.includes('ExceptionResourceAlreadyExists')) {
|
|
215
196
|
throw new utils_1.McpError(utils_1.ErrorCode.InvalidParams, `Domain ${domainName} already exists. Please delete it first or use a different name.`);
|
|
216
197
|
}
|
|
217
|
-
// Safely extract error message
|
|
218
198
|
let errorMessage;
|
|
219
199
|
if (error.response?.data) {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
try {
|
|
225
|
-
errorMessage = JSON.stringify(error.response.data);
|
|
226
|
-
}
|
|
227
|
-
catch (_e) {
|
|
228
|
-
errorMessage = String(error.response.data).substring(0, 500);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
200
|
+
errorMessage =
|
|
201
|
+
typeof error.response.data === 'string'
|
|
202
|
+
? error.response.data
|
|
203
|
+
: String(error.response.data).substring(0, 500);
|
|
231
204
|
}
|
|
232
205
|
else {
|
|
233
206
|
errorMessage = error.message || String(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleCreateDomain.js","sourceRoot":"","sources":["../../../../src/handlers/domain/high/handleCreateDomain.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAiIH,
|
|
1
|
+
{"version":3,"file":"handleCreateDomain.js","sourceRoot":"","sources":["../../../../src/handlers/domain/high/handleCreateDomain.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,7 +45,17 @@ Optional (cloud/BTP, JWT token refresh):
|
|
|
45
45
|
|
|
46
46
|
All other values (object names, timeouts, CDS sources, unit test code) have working defaults.
|
|
47
47
|
|
|
48
|
-
### 3.
|
|
48
|
+
### 3. Create shared objects (first run only)
|
|
49
|
+
|
|
50
|
+
Some tests depend on shared SAP objects (tables, CDS views, classes). Create them before running tests for the first time:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm run shared:setup
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Verify with `npm run shared:check`. These objects persist across test runs — no need to re-create unless deleted via `npm run shared:teardown`.
|
|
57
|
+
|
|
58
|
+
### 4. Run tests
|
|
49
59
|
|
|
50
60
|
```bash
|
|
51
61
|
# Build first
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcp-abap-adt/core",
|
|
3
3
|
"mcpName": "io.github.fr0ster/mcp-abap-adt",
|
|
4
|
-
"version": "4.8.
|
|
4
|
+
"version": "4.8.3",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"exports": {
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
"yaml": "^2.8.1"
|
|
137
137
|
},
|
|
138
138
|
"dependencies": {
|
|
139
|
-
"@mcp-abap-adt/adt-clients": "^3.14.
|
|
139
|
+
"@mcp-abap-adt/adt-clients": "^3.14.4",
|
|
140
140
|
"@mcp-abap-adt/auth-broker": "^1.0.5",
|
|
141
141
|
"@mcp-abap-adt/auth-providers": "^1.0.5",
|
|
142
142
|
"@mcp-abap-adt/auth-stores": "^1.0.4",
|