@mcp-abap-adt/core 2.4.1 → 2.4.2

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 (81) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/handlers/service_binding/high/handleCreateServiceBinding.d.ts +83 -0
  3. package/dist/handlers/service_binding/high/handleCreateServiceBinding.d.ts.map +1 -0
  4. package/dist/handlers/service_binding/high/handleCreateServiceBinding.js +147 -0
  5. package/dist/handlers/service_binding/high/handleCreateServiceBinding.js.map +1 -0
  6. package/dist/handlers/service_binding/high/handleDeleteServiceBinding.d.ts +39 -0
  7. package/dist/handlers/service_binding/high/handleDeleteServiceBinding.d.ts.map +1 -0
  8. package/dist/handlers/service_binding/high/handleDeleteServiceBinding.js +67 -0
  9. package/dist/handlers/service_binding/high/handleDeleteServiceBinding.js.map +1 -0
  10. package/dist/handlers/service_binding/high/handleGetServiceBinding.d.ts +35 -0
  11. package/dist/handlers/service_binding/high/handleGetServiceBinding.d.ts.map +1 -0
  12. package/dist/handlers/service_binding/high/handleGetServiceBinding.js +63 -0
  13. package/dist/handlers/service_binding/high/handleGetServiceBinding.js.map +1 -0
  14. package/dist/handlers/service_binding/high/handleListServiceBindingTypes.d.ts +28 -0
  15. package/dist/handlers/service_binding/high/handleListServiceBindingTypes.d.ts.map +1 -0
  16. package/dist/handlers/service_binding/high/handleListServiceBindingTypes.js +46 -0
  17. package/dist/handlers/service_binding/high/handleListServiceBindingTypes.js.map +1 -0
  18. package/dist/handlers/service_binding/high/handleListServiceBindings.d.ts +44 -0
  19. package/dist/handlers/service_binding/high/handleListServiceBindings.d.ts.map +1 -0
  20. package/dist/handlers/service_binding/high/handleListServiceBindings.js +211 -0
  21. package/dist/handlers/service_binding/high/handleListServiceBindings.js.map +1 -0
  22. package/dist/handlers/service_binding/high/handleUpdateServiceBinding.d.ts +59 -0
  23. package/dist/handlers/service_binding/high/handleUpdateServiceBinding.d.ts.map +1 -0
  24. package/dist/handlers/service_binding/high/handleUpdateServiceBinding.js +98 -0
  25. package/dist/handlers/service_binding/high/handleUpdateServiceBinding.js.map +1 -0
  26. package/dist/handlers/service_binding/high/handleValidateServiceBinding.d.ts +47 -0
  27. package/dist/handlers/service_binding/high/handleValidateServiceBinding.d.ts.map +1 -0
  28. package/dist/handlers/service_binding/high/handleValidateServiceBinding.js +74 -0
  29. package/dist/handlers/service_binding/high/handleValidateServiceBinding.js.map +1 -0
  30. package/dist/handlers/service_binding/high/serviceBindingPayloadUtils.d.ts +4 -0
  31. package/dist/handlers/service_binding/high/serviceBindingPayloadUtils.d.ts.map +1 -0
  32. package/dist/handlers/service_binding/high/serviceBindingPayloadUtils.js +48 -0
  33. package/dist/handlers/service_binding/high/serviceBindingPayloadUtils.js.map +1 -0
  34. package/dist/handlers/service_binding/high/serviceBindingXmlBuilder.d.ts +11 -0
  35. package/dist/handlers/service_binding/high/serviceBindingXmlBuilder.d.ts.map +1 -0
  36. package/dist/handlers/service_binding/high/serviceBindingXmlBuilder.js +27 -0
  37. package/dist/handlers/service_binding/high/serviceBindingXmlBuilder.js.map +1 -0
  38. package/dist/handlers/system/readonly/handleGetAllTypes.d.ts +1 -5
  39. package/dist/handlers/system/readonly/handleGetAllTypes.d.ts.map +1 -1
  40. package/dist/handlers/system/readonly/handleGetAllTypes.js +6 -8
  41. package/dist/handlers/system/readonly/handleGetAllTypes.js.map +1 -1
  42. package/dist/handlers/system/readonly/handleGetObjectStructure.d.ts +7 -6
  43. package/dist/handlers/system/readonly/handleGetObjectStructure.d.ts.map +1 -1
  44. package/dist/handlers/system/readonly/handleGetObjectStructure.js +13 -11
  45. package/dist/handlers/system/readonly/handleGetObjectStructure.js.map +1 -1
  46. package/dist/handlers/system/readonly/handleGetSqlQuery.d.ts +0 -5
  47. package/dist/handlers/system/readonly/handleGetSqlQuery.d.ts.map +1 -1
  48. package/dist/handlers/system/readonly/handleGetSqlQuery.js +5 -10
  49. package/dist/handlers/system/readonly/handleGetSqlQuery.js.map +1 -1
  50. package/dist/handlers/system/readonly/handleRuntimeAnalyzeDump.d.ts +40 -0
  51. package/dist/handlers/system/readonly/handleRuntimeAnalyzeDump.d.ts.map +1 -0
  52. package/dist/handlers/system/readonly/handleRuntimeAnalyzeDump.js +111 -0
  53. package/dist/handlers/system/readonly/handleRuntimeAnalyzeDump.js.map +1 -0
  54. package/dist/handlers/system/readonly/handleRuntimeAnalyzeProfilerTrace.d.ts +43 -0
  55. package/dist/handlers/system/readonly/handleRuntimeAnalyzeProfilerTrace.d.ts.map +1 -0
  56. package/dist/handlers/system/readonly/handleRuntimeAnalyzeProfilerTrace.js +137 -0
  57. package/dist/handlers/system/readonly/handleRuntimeAnalyzeProfilerTrace.js.map +1 -0
  58. package/dist/handlers/system/readonly/handleRuntimeGetDumpById.d.ts +7 -0
  59. package/dist/handlers/system/readonly/handleRuntimeGetDumpById.d.ts.map +1 -1
  60. package/dist/handlers/system/readonly/handleRuntimeGetDumpById.js +11 -1
  61. package/dist/handlers/system/readonly/handleRuntimeGetDumpById.js.map +1 -1
  62. package/dist/handlers/system/readonly/handleRuntimeRunClassWithProfiling.d.ts +84 -0
  63. package/dist/handlers/system/readonly/handleRuntimeRunClassWithProfiling.d.ts.map +1 -0
  64. package/dist/handlers/system/readonly/handleRuntimeRunClassWithProfiling.js +85 -0
  65. package/dist/handlers/system/readonly/handleRuntimeRunClassWithProfiling.js.map +1 -0
  66. package/dist/handlers/system/readonly/handleRuntimeRunProgramWithProfiling.d.ts +84 -0
  67. package/dist/handlers/system/readonly/handleRuntimeRunProgramWithProfiling.d.ts.map +1 -0
  68. package/dist/handlers/system/readonly/handleRuntimeRunProgramWithProfiling.js +85 -0
  69. package/dist/handlers/system/readonly/handleRuntimeRunProgramWithProfiling.js.map +1 -0
  70. package/dist/handlers/system/readonly/runtimeDumpReadCompat.d.ts +8 -0
  71. package/dist/handlers/system/readonly/runtimeDumpReadCompat.d.ts.map +1 -0
  72. package/dist/handlers/system/readonly/runtimeDumpReadCompat.js +55 -0
  73. package/dist/handlers/system/readonly/runtimeDumpReadCompat.js.map +1 -0
  74. package/dist/lib/handlers/groups/HighLevelHandlersGroup.d.ts.map +1 -1
  75. package/dist/lib/handlers/groups/HighLevelHandlersGroup.js +145 -88
  76. package/dist/lib/handlers/groups/HighLevelHandlersGroup.js.map +1 -1
  77. package/dist/lib/handlers/groups/SystemHandlersGroup.d.ts.map +1 -1
  78. package/dist/lib/handlers/groups/SystemHandlersGroup.js +36 -0
  79. package/dist/lib/handlers/groups/SystemHandlersGroup.js.map +1 -1
  80. package/docs/development/tests/test-config.yaml.template +36 -0
  81. package/package.json +9 -9
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TOOL_DEFINITION = void 0;
4
+ exports.handleListServiceBindings = handleListServiceBindings;
5
+ const fast_xml_parser_1 = require("fast-xml-parser");
6
+ const utils_1 = require("../../../lib/utils");
7
+ const serviceBindingPayloadUtils_1 = require("./serviceBindingPayloadUtils");
8
+ exports.TOOL_DEFINITION = {
9
+ name: 'ListServiceBindings',
10
+ description: 'List ABAP service bindings feed from ADT Business Services endpoint with optional paging/filter query.',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ top: {
15
+ type: 'number',
16
+ description: 'Maximum number of entries to return.',
17
+ },
18
+ skip: {
19
+ type: 'number',
20
+ description: 'Number of entries to skip.',
21
+ },
22
+ query: {
23
+ type: 'string',
24
+ description: 'Optional ADT feed query expression (passed as "query" URL parameter).',
25
+ },
26
+ response_format: {
27
+ type: 'string',
28
+ enum: ['xml', 'json', 'plain'],
29
+ description: 'Preferred response format. "json" requests JSON from endpoint, "xml" parses XML payload, "plain" returns raw text.',
30
+ default: 'xml',
31
+ },
32
+ },
33
+ },
34
+ };
35
+ function isUriMappingError(error) {
36
+ const raw = String(error?.response?.data || error?.message || '');
37
+ return (raw.includes('uriMappingError') ||
38
+ raw.includes('URI-Mapping cannot be performed'));
39
+ }
40
+ function isNotAcceptableError(error) {
41
+ const status = Number(error?.response?.status ?? 0);
42
+ if (status === 406) {
43
+ return true;
44
+ }
45
+ const raw = String(error?.response?.data || error?.message || '');
46
+ return (raw.includes('ExceptionResourceNotAcceptable') ||
47
+ raw.includes('The message content is not acceptable'));
48
+ }
49
+ function extractSrvbCollectionFromDiscoveryXml(xml) {
50
+ const byRegex = /<app:collection[^>]*href="([^"]+)"[^>]*>[\s\S]*?<atom:category[^>]*term="srvb"[^>]*>[\s\S]*?<\/app:collection>/i.exec(xml) ||
51
+ /<app:collection[^>]*href="([^"]+)"[\s\S]*?<atom:category[^>]*term="srvb"/i.exec(xml);
52
+ if (byRegex?.[1]) {
53
+ return byRegex[1];
54
+ }
55
+ try {
56
+ const parser = new fast_xml_parser_1.XMLParser({
57
+ ignoreAttributes: false,
58
+ attributeNamePrefix: '@_',
59
+ });
60
+ const parsed = parser.parse(xml);
61
+ const findCollection = (value) => {
62
+ if (!value || typeof value !== 'object') {
63
+ return undefined;
64
+ }
65
+ if (Array.isArray(value)) {
66
+ for (const item of value) {
67
+ const found = findCollection(item);
68
+ if (found) {
69
+ return found;
70
+ }
71
+ }
72
+ return undefined;
73
+ }
74
+ const obj = value;
75
+ const href = obj['@_href'];
76
+ const category = obj['atom:category'];
77
+ const categories = Array.isArray(category)
78
+ ? category
79
+ : category
80
+ ? [category]
81
+ : [];
82
+ const hasSrvbCategory = categories.some((entry) => entry?.['@_term'] === 'srvb');
83
+ if (typeof href === 'string' && hasSrvbCategory) {
84
+ return href;
85
+ }
86
+ for (const nested of Object.values(obj)) {
87
+ const found = findCollection(nested);
88
+ if (found) {
89
+ return found;
90
+ }
91
+ }
92
+ return undefined;
93
+ };
94
+ return findCollection(parsed);
95
+ }
96
+ catch {
97
+ return undefined;
98
+ }
99
+ }
100
+ async function resolveServiceBindingsEndpoint(context) {
101
+ const { connection } = context;
102
+ let discoveryResponse;
103
+ try {
104
+ discoveryResponse = await connection.makeAdtRequest({
105
+ method: 'GET',
106
+ url: '/sap/bc/adt/discovery',
107
+ timeout: 30000,
108
+ headers: {
109
+ Accept: 'application/atomsvc+xml',
110
+ },
111
+ });
112
+ }
113
+ catch (error) {
114
+ // Fallback for systems that accept generic XML only.
115
+ discoveryResponse = await connection.makeAdtRequest({
116
+ method: 'GET',
117
+ url: '/sap/bc/adt/discovery',
118
+ timeout: 30000,
119
+ headers: {
120
+ Accept: 'application/xml',
121
+ },
122
+ });
123
+ }
124
+ const xml = typeof discoveryResponse.data === 'string'
125
+ ? discoveryResponse.data
126
+ : JSON.stringify(discoveryResponse.data);
127
+ return extractSrvbCollectionFromDiscoveryXml(xml);
128
+ }
129
+ async function handleListServiceBindings(context, args = {}) {
130
+ const { connection, logger } = context;
131
+ try {
132
+ const responseFormat = args.response_format ?? 'xml';
133
+ const requestedAccept = (0, serviceBindingPayloadUtils_1.resolveServiceBindingAcceptHeader)(responseFormat);
134
+ const listFeedAccept = 'application/atomsvc+xml';
135
+ const searchParams = new URLSearchParams();
136
+ if (args.top !== undefined) {
137
+ searchParams.set('top', String(args.top));
138
+ }
139
+ if (args.skip !== undefined) {
140
+ searchParams.set('skip', String(args.skip));
141
+ }
142
+ if (args.query?.trim()) {
143
+ searchParams.set('query', args.query.trim());
144
+ }
145
+ const qs = searchParams.toString();
146
+ const defaultEndpoint = '/sap/bc/adt/businessservices/bindings';
147
+ const buildUrl = (base) => (qs ? `${base}?${qs}` : base);
148
+ let endpointUsed = defaultEndpoint;
149
+ let acceptUsed = requestedAccept;
150
+ let response;
151
+ const fetchList = async (baseUrl, acceptHeader) => connection.makeAdtRequest({
152
+ method: 'GET',
153
+ url: buildUrl(baseUrl),
154
+ timeout: 30000,
155
+ headers: {
156
+ Accept: acceptHeader,
157
+ },
158
+ });
159
+ try {
160
+ response = await fetchList(defaultEndpoint, requestedAccept);
161
+ }
162
+ catch (error) {
163
+ if (isNotAcceptableError(error) && requestedAccept !== listFeedAccept) {
164
+ acceptUsed = listFeedAccept;
165
+ response = await fetchList(defaultEndpoint, listFeedAccept);
166
+ }
167
+ else if (!isUriMappingError(error)) {
168
+ throw error;
169
+ }
170
+ else {
171
+ const resolvedEndpoint = await resolveServiceBindingsEndpoint(context);
172
+ if (!resolvedEndpoint) {
173
+ throw new Error('Service binding endpoint is not available on this system (srvb collection not found in ADT discovery).');
174
+ }
175
+ endpointUsed = resolvedEndpoint;
176
+ try {
177
+ response = await fetchList(resolvedEndpoint, requestedAccept);
178
+ }
179
+ catch (resolvedError) {
180
+ if (isNotAcceptableError(resolvedError) &&
181
+ requestedAccept !== listFeedAccept) {
182
+ acceptUsed = listFeedAccept;
183
+ response = await fetchList(resolvedEndpoint, listFeedAccept);
184
+ }
185
+ else {
186
+ throw resolvedError;
187
+ }
188
+ }
189
+ }
190
+ }
191
+ return (0, utils_1.return_response)({
192
+ data: JSON.stringify({
193
+ success: true,
194
+ response_format: responseFormat,
195
+ endpoint_used: endpointUsed,
196
+ accept_used: acceptUsed,
197
+ status: response.status,
198
+ payload: (0, serviceBindingPayloadUtils_1.parseServiceBindingPayload)(response.data, responseFormat),
199
+ }, null, 2),
200
+ status: response.status,
201
+ statusText: response.statusText,
202
+ headers: response.headers,
203
+ config: response.config,
204
+ });
205
+ }
206
+ catch (error) {
207
+ logger?.error('Error listing service bindings:', error);
208
+ return (0, utils_1.return_error)(error);
209
+ }
210
+ }
211
+ //# sourceMappingURL=handleListServiceBindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleListServiceBindings.js","sourceRoot":"","sources":["../../../../src/handlers/service_binding/high/handleListServiceBindings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { HandlerContext } from '../../../lib/handlers/interfaces';
2
+ import { type ServiceBindingResponseFormat } from './serviceBindingPayloadUtils';
3
+ type DesiredPublicationStateInput = 'published' | 'unpublished' | 'unchanged';
4
+ type ServiceTypeInput = 'ODataV2' | 'ODataV4';
5
+ export declare const TOOL_DEFINITION: {
6
+ readonly name: "UpdateServiceBinding";
7
+ readonly description: "Update publication state for ABAP service binding via AdtServiceBinding workflow.";
8
+ readonly inputSchema: {
9
+ readonly type: "object";
10
+ readonly properties: {
11
+ readonly service_binding_name: {
12
+ readonly type: "string";
13
+ readonly description: "Service binding name to update.";
14
+ };
15
+ readonly desired_publication_state: {
16
+ readonly type: "string";
17
+ readonly enum: readonly ["published", "unpublished", "unchanged"];
18
+ readonly description: "Target publication state.";
19
+ };
20
+ readonly service_type: {
21
+ readonly type: "string";
22
+ readonly enum: readonly ["ODataV2", "ODataV4"];
23
+ readonly description: "OData service type for publish/unpublish action routing.";
24
+ readonly default: "ODataV4";
25
+ };
26
+ readonly service_name: {
27
+ readonly type: "string";
28
+ readonly description: "Published service name.";
29
+ };
30
+ readonly service_version: {
31
+ readonly type: "string";
32
+ readonly description: "Published service version. Optional.";
33
+ };
34
+ readonly response_format: {
35
+ readonly type: "string";
36
+ readonly enum: readonly ["xml", "json", "plain"];
37
+ readonly default: "xml";
38
+ };
39
+ };
40
+ readonly required: readonly ["service_binding_name", "desired_publication_state", "service_type", "service_name"];
41
+ };
42
+ };
43
+ interface UpdateServiceBindingArgs {
44
+ service_binding_name: string;
45
+ desired_publication_state: DesiredPublicationStateInput;
46
+ service_type: ServiceTypeInput;
47
+ service_name: string;
48
+ service_version?: string;
49
+ response_format?: ServiceBindingResponseFormat;
50
+ }
51
+ export declare function handleUpdateServiceBinding(context: HandlerContext, args: UpdateServiceBindingArgs): Promise<{
52
+ isError: boolean;
53
+ content: {
54
+ type: string;
55
+ text: any;
56
+ }[];
57
+ }>;
58
+ export {};
59
+ //# sourceMappingURL=handleUpdateServiceBinding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleUpdateServiceBinding.d.ts","sourceRoot":"","sources":["../../../../src/handlers/service_binding/high/handleUpdateServiceBinding.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,8BAA8B,CAAC;AAEtC,KAAK,4BAA4B,GAAG,WAAW,GAAG,aAAa,GAAG,WAAW,CAAC;AAC9E,KAAK,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9C,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2ClB,CAAC;AAEX,UAAU,wBAAwB;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yBAAyB,EAAE,4BAA4B,CAAC;IACxD,YAAY,EAAE,gBAAgB,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,4BAA4B,CAAC;CAChD;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,wBAAwB;;;;;;GAsD/B"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TOOL_DEFINITION = void 0;
4
+ exports.handleUpdateServiceBinding = handleUpdateServiceBinding;
5
+ const adt_clients_1 = require("@mcp-abap-adt/adt-clients");
6
+ const utils_1 = require("../../../lib/utils");
7
+ const serviceBindingPayloadUtils_1 = require("./serviceBindingPayloadUtils");
8
+ exports.TOOL_DEFINITION = {
9
+ name: 'UpdateServiceBinding',
10
+ description: 'Update publication state for ABAP service binding via AdtServiceBinding workflow.',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ service_binding_name: {
15
+ type: 'string',
16
+ description: 'Service binding name to update.',
17
+ },
18
+ desired_publication_state: {
19
+ type: 'string',
20
+ enum: ['published', 'unpublished', 'unchanged'],
21
+ description: 'Target publication state.',
22
+ },
23
+ service_type: {
24
+ type: 'string',
25
+ enum: ['ODataV2', 'ODataV4'],
26
+ description: 'OData service type for publish/unpublish action routing.',
27
+ default: 'ODataV4',
28
+ },
29
+ service_name: {
30
+ type: 'string',
31
+ description: 'Published service name.',
32
+ },
33
+ service_version: {
34
+ type: 'string',
35
+ description: 'Published service version. Optional.',
36
+ },
37
+ response_format: {
38
+ type: 'string',
39
+ enum: ['xml', 'json', 'plain'],
40
+ default: 'xml',
41
+ },
42
+ },
43
+ required: [
44
+ 'service_binding_name',
45
+ 'desired_publication_state',
46
+ 'service_type',
47
+ 'service_name',
48
+ ],
49
+ },
50
+ };
51
+ async function handleUpdateServiceBinding(context, args) {
52
+ const { connection, logger } = context;
53
+ try {
54
+ if (!args?.service_binding_name) {
55
+ throw new Error('service_binding_name is required');
56
+ }
57
+ if (!args?.desired_publication_state) {
58
+ throw new Error('desired_publication_state is required');
59
+ }
60
+ if (!args?.service_name) {
61
+ throw new Error('service_name is required');
62
+ }
63
+ const serviceBindingName = args.service_binding_name.trim().toUpperCase();
64
+ const responseFormat = args.response_format ?? 'xml';
65
+ const serviceType = args.service_type === 'ODataV2' ? 'odatav2' : 'odatav4';
66
+ const serviceName = args.service_name.trim().toUpperCase();
67
+ const client = new adt_clients_1.AdtClient(connection, logger);
68
+ const response = await client.getServiceBinding().updateServiceBinding({
69
+ bindingName: serviceBindingName,
70
+ desiredPublicationState: args.desired_publication_state,
71
+ serviceType,
72
+ serviceName,
73
+ serviceVersion: args.service_version?.trim() || undefined,
74
+ });
75
+ return (0, utils_1.return_response)({
76
+ data: JSON.stringify({
77
+ success: true,
78
+ service_binding_name: serviceBindingName,
79
+ desired_publication_state: args.desired_publication_state,
80
+ service_type: args.service_type,
81
+ service_name: serviceName,
82
+ service_version: args.service_version || null,
83
+ response_format: responseFormat,
84
+ status: response.status,
85
+ payload: (0, serviceBindingPayloadUtils_1.parseServiceBindingPayload)(response.data, responseFormat),
86
+ }, null, 2),
87
+ status: response.status,
88
+ statusText: response.statusText,
89
+ headers: response.headers,
90
+ config: response.config,
91
+ });
92
+ }
93
+ catch (error) {
94
+ logger?.error('Error updating service binding:', error);
95
+ return (0, utils_1.return_error)(error);
96
+ }
97
+ }
98
+ //# sourceMappingURL=handleUpdateServiceBinding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleUpdateServiceBinding.js","sourceRoot":"","sources":["../../../../src/handlers/service_binding/high/handleUpdateServiceBinding.ts"],"names":[],"mappings":";;;AAiEA,gEAwDC;AAzHD,2DAAsD;AAEtD,8CAAmE;AACnE,6EAGsC;AAKzB,QAAA,eAAe,GAAG;IAC7B,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,mFAAmF;IACrF,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,oBAAoB,EAAE;gBACpB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aAC/C;YACD,yBAAyB,EAAE;gBACzB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC;gBAC/C,WAAW,EAAE,2BAA2B;aACzC;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;gBAC5B,WAAW,EAAE,0DAA0D;gBACvE,OAAO,EAAE,SAAS;aACnB;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yBAAyB;aACvC;YACD,eAAe,EAAE;gBACf,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sCAAsC;aACpD;YACD,eAAe,EAAE;gBACf,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;gBAC9B,OAAO,EAAE,KAAK;aACf;SACF;QACD,QAAQ,EAAE;YACR,sBAAsB;YACtB,2BAA2B;YAC3B,cAAc;YACd,cAAc;SACf;KACF;CACO,CAAC;AAWJ,KAAK,UAAU,0BAA0B,CAC9C,OAAuB,EACvB,IAA8B;IAE9B,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEvC,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,yBAAyB,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1E,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3D,MAAM,MAAM,GAAG,IAAI,uBAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC,oBAAoB,CAAC;YACrE,WAAW,EAAE,kBAAkB;YAC/B,uBAAuB,EAAE,IAAI,CAAC,yBAAyB;YACvD,WAAW;YACX,WAAW;YACX,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,SAAS;SAC1D,CAAC,CAAC;QAEH,OAAO,IAAA,uBAAe,EAAC;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;gBACE,OAAO,EAAE,IAAI;gBACb,oBAAoB,EAAE,kBAAkB;gBACxC,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;gBACzD,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,YAAY,EAAE,WAAW;gBACzB,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI;gBAC7C,eAAe,EAAE,cAAc;gBAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,IAAA,uDAA0B,EAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;aACnE,EACD,IAAI,EACJ,CAAC,CACF;YACD,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,EAAE,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,IAAA,oBAAY,EAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { HandlerContext } from '../../../lib/handlers/interfaces';
2
+ export declare const TOOL_DEFINITION: {
3
+ readonly name: "ValidateServiceBinding";
4
+ readonly description: "Validate service binding parameters (name, service definition, package, version) via ADT validation endpoint.";
5
+ readonly inputSchema: {
6
+ readonly type: "object";
7
+ readonly properties: {
8
+ readonly service_binding_name: {
9
+ readonly type: "string";
10
+ readonly description: "Service binding name to validate.";
11
+ };
12
+ readonly description: {
13
+ readonly type: "string";
14
+ readonly description: "Optional description used during validation.";
15
+ };
16
+ readonly service_definition_name: {
17
+ readonly type: "string";
18
+ readonly description: "Service definition linked to binding.";
19
+ };
20
+ readonly package_name: {
21
+ readonly type: "string";
22
+ readonly description: "ABAP package for the binding.";
23
+ };
24
+ readonly service_binding_version: {
25
+ readonly type: "string";
26
+ readonly description: "Service binding version (for example: 1.0).";
27
+ };
28
+ };
29
+ readonly required: readonly ["service_binding_name", "service_definition_name"];
30
+ };
31
+ };
32
+ interface ValidateServiceBindingArgs {
33
+ service_binding_name: string;
34
+ description?: string;
35
+ service_definition_name?: string;
36
+ package_name?: string;
37
+ service_binding_version?: string;
38
+ }
39
+ export declare function handleValidateServiceBinding(context: HandlerContext, args: ValidateServiceBindingArgs): Promise<{
40
+ isError: boolean;
41
+ content: {
42
+ type: string;
43
+ text: any;
44
+ }[];
45
+ }>;
46
+ export {};
47
+ //# sourceMappingURL=handleValidateServiceBinding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleValidateServiceBinding.d.ts","sourceRoot":"","sources":["../../../../src/handlers/service_binding/high/handleValidateServiceBinding.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAIvE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BlB,CAAC;AAEX,UAAU,0BAA0B;IAClC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,0BAA0B;;;;;;GA0CjC"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TOOL_DEFINITION = void 0;
4
+ exports.handleValidateServiceBinding = handleValidateServiceBinding;
5
+ const adt_clients_1 = require("@mcp-abap-adt/adt-clients");
6
+ const utils_1 = require("../../../lib/utils");
7
+ const serviceBindingPayloadUtils_1 = require("./serviceBindingPayloadUtils");
8
+ exports.TOOL_DEFINITION = {
9
+ name: 'ValidateServiceBinding',
10
+ description: 'Validate service binding parameters (name, service definition, package, version) via ADT validation endpoint.',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ service_binding_name: {
15
+ type: 'string',
16
+ description: 'Service binding name to validate.',
17
+ },
18
+ description: {
19
+ type: 'string',
20
+ description: 'Optional description used during validation.',
21
+ },
22
+ service_definition_name: {
23
+ type: 'string',
24
+ description: 'Service definition linked to binding.',
25
+ },
26
+ package_name: {
27
+ type: 'string',
28
+ description: 'ABAP package for the binding.',
29
+ },
30
+ service_binding_version: {
31
+ type: 'string',
32
+ description: 'Service binding version (for example: 1.0).',
33
+ },
34
+ },
35
+ required: ['service_binding_name', 'service_definition_name'],
36
+ },
37
+ };
38
+ async function handleValidateServiceBinding(context, args) {
39
+ const { connection, logger } = context;
40
+ try {
41
+ if (!args?.service_binding_name) {
42
+ throw new Error('service_binding_name is required');
43
+ }
44
+ if (!args?.service_definition_name) {
45
+ throw new Error('service_definition_name is required');
46
+ }
47
+ const serviceBindingName = args.service_binding_name.trim().toUpperCase();
48
+ const client = new adt_clients_1.AdtClient(connection, logger);
49
+ const response = await client.getServiceBinding().validateServiceBinding({
50
+ objname: serviceBindingName,
51
+ serviceDefinition: args.service_definition_name.trim().toUpperCase(),
52
+ serviceBindingVersion: args.service_binding_version?.trim() || undefined,
53
+ description: args.description?.trim() || undefined,
54
+ package: args.package_name?.trim().toUpperCase() || undefined,
55
+ });
56
+ return (0, utils_1.return_response)({
57
+ data: JSON.stringify({
58
+ success: true,
59
+ service_binding_name: serviceBindingName,
60
+ status: response.status,
61
+ payload: (0, serviceBindingPayloadUtils_1.parseServiceBindingPayload)(response.data, 'xml'),
62
+ }, null, 2),
63
+ status: response.status,
64
+ statusText: response.statusText,
65
+ headers: response.headers,
66
+ config: response.config,
67
+ });
68
+ }
69
+ catch (error) {
70
+ logger?.error('Error validating service binding:', error);
71
+ return (0, utils_1.return_error)(error);
72
+ }
73
+ }
74
+ //# sourceMappingURL=handleValidateServiceBinding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleValidateServiceBinding.js","sourceRoot":"","sources":["../../../../src/handlers/service_binding/high/handleValidateServiceBinding.ts"],"names":[],"mappings":";;;AA6CA,oEA4CC;AAzFD,2DAAsD;AAEtD,8CAAmE;AACnE,6EAA0E;AAE7D,QAAA,eAAe,GAAG;IAC7B,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,+GAA+G;IACjH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,oBAAoB,EAAE;gBACpB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mCAAmC;aACjD;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8CAA8C;aAC5D;YACD,uBAAuB,EAAE;gBACvB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;aACrD;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+BAA+B;aAC7C;YACD,uBAAuB,EAAE;gBACvB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6CAA6C;aAC3D;SACF;QACD,QAAQ,EAAE,CAAC,sBAAsB,EAAE,yBAAyB,CAAC;KAC9D;CACO,CAAC;AAUJ,KAAK,UAAU,4BAA4B,CAChD,OAAuB,EACvB,IAAgC;IAEhC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEvC,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,uBAAuB,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,uBAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC,sBAAsB,CAAC;YACvE,OAAO,EAAE,kBAAkB;YAC3B,iBAAiB,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YACpE,qBAAqB,EAAE,IAAI,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,SAAS;YACxE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,SAAS;YAClD,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,SAAS;SAC9D,CAAC,CAAC;QAEH,OAAO,IAAA,uBAAe,EAAC;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;gBACE,OAAO,EAAE,IAAI;gBACb,oBAAoB,EAAE,kBAAkB;gBACxC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,IAAA,uDAA0B,EAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;aAC1D,EACD,IAAI,EACJ,CAAC,CACF;YACD,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,EAAE,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC1D,OAAO,IAAA,oBAAY,EAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type ServiceBindingResponseFormat = 'xml' | 'json' | 'plain';
2
+ export declare function resolveServiceBindingAcceptHeader(format: ServiceBindingResponseFormat): string;
3
+ export declare function parseServiceBindingPayload(payload: unknown, format: ServiceBindingResponseFormat): unknown;
4
+ //# sourceMappingURL=serviceBindingPayloadUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceBindingPayloadUtils.d.ts","sourceRoot":"","sources":["../../../../src/handlers/service_binding/high/serviceBindingPayloadUtils.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,4BAA4B,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpE,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,4BAA4B,GACnC,MAAM,CAQR;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAkCT"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveServiceBindingAcceptHeader = resolveServiceBindingAcceptHeader;
4
+ exports.parseServiceBindingPayload = parseServiceBindingPayload;
5
+ const fast_xml_parser_1 = require("fast-xml-parser");
6
+ function resolveServiceBindingAcceptHeader(format) {
7
+ if (format === 'json') {
8
+ return 'application/json';
9
+ }
10
+ if (format === 'plain') {
11
+ return 'text/plain';
12
+ }
13
+ return 'application/vnd.sap.adt.businessservices.servicebinding.v2+xml';
14
+ }
15
+ function parseServiceBindingPayload(payload, format) {
16
+ if (format === 'plain') {
17
+ return payload;
18
+ }
19
+ if (format === 'json') {
20
+ if (typeof payload === 'string') {
21
+ try {
22
+ return JSON.parse(payload);
23
+ }
24
+ catch {
25
+ return payload;
26
+ }
27
+ }
28
+ return payload;
29
+ }
30
+ if (typeof payload !== 'string') {
31
+ return payload;
32
+ }
33
+ const trimmed = payload.trim();
34
+ if (!trimmed.startsWith('<')) {
35
+ return payload;
36
+ }
37
+ try {
38
+ const parser = new fast_xml_parser_1.XMLParser({
39
+ ignoreAttributes: false,
40
+ attributeNamePrefix: '',
41
+ });
42
+ return parser.parse(trimmed);
43
+ }
44
+ catch {
45
+ return payload;
46
+ }
47
+ }
48
+ //# sourceMappingURL=serviceBindingPayloadUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceBindingPayloadUtils.js","sourceRoot":"","sources":["../../../../src/handlers/service_binding/high/serviceBindingPayloadUtils.ts"],"names":[],"mappings":";;AAIA,8EAUC;AAED,gEAqCC;AArDD,qDAA4C;AAI5C,SAAgB,iCAAiC,CAC/C,MAAoC;IAEpC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,gEAAgE,CAAC;AAC1E,CAAC;AAED,SAAgB,0BAA0B,CACxC,OAAgB,EAChB,MAAoC;IAEpC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,2BAAS,CAAC;YAC3B,gBAAgB,EAAE,KAAK;YACvB,mBAAmB,EAAE,EAAE;SACxB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type ServiceBindingType = 'ODataV2' | 'ODataV4';
2
+ export interface IServiceBindingXmlConfig {
3
+ serviceBindingName: string;
4
+ serviceDefinitionName: string;
5
+ packageName: string;
6
+ description?: string;
7
+ bindingType?: ServiceBindingType;
8
+ serviceBindingVersion?: string;
9
+ }
10
+ export declare function buildServiceBindingXml(config: IServiceBindingXmlConfig): string;
11
+ //# sourceMappingURL=serviceBindingXmlBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceBindingXmlBuilder.d.ts","sourceRoot":"","sources":["../../../../src/handlers/service_binding/high/serviceBindingXmlBuilder.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,wBAAwB;IACvC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAWD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,wBAAwB,GAC/B,MAAM,CAeR"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildServiceBindingXml = buildServiceBindingXml;
4
+ function escapeXml(value) {
5
+ return value
6
+ .replaceAll('&', '&amp;')
7
+ .replaceAll('<', '&lt;')
8
+ .replaceAll('>', '&gt;')
9
+ .replaceAll('"', '&quot;')
10
+ .replaceAll("'", '&apos;');
11
+ }
12
+ function buildServiceBindingXml(config) {
13
+ const bindingType = config.bindingType ?? 'ODataV4';
14
+ const serviceBindingVersion = config.serviceBindingVersion?.trim() || '1';
15
+ const description = config.description?.trim() || config.serviceBindingName;
16
+ return `<?xml version="1.0" encoding="UTF-8"?>
17
+ <srvb:serviceBinding
18
+ xmlns:srvb="http://www.sap.com/adt/businessservices/servicebindings"
19
+ xmlns:adtcore="http://www.sap.com/adt/core"
20
+ adtcore:name="${escapeXml(config.serviceBindingName)}"
21
+ adtcore:description="${escapeXml(description)}"
22
+ srvb:serviceDefinition="${escapeXml(config.serviceDefinitionName)}"
23
+ srvb:package="${escapeXml(config.packageName)}"
24
+ srvb:bindingType="${escapeXml(bindingType)}"
25
+ srvb:serviceBindingVersion="${escapeXml(serviceBindingVersion)}" />`;
26
+ }
27
+ //# sourceMappingURL=serviceBindingXmlBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceBindingXmlBuilder.js","sourceRoot":"","sources":["../../../../src/handlers/service_binding/high/serviceBindingXmlBuilder.ts"],"names":[],"mappings":";;AAoBA,wDAiBC;AA1BD,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK;SACT,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,SAAgB,sBAAsB,CACpC,MAAgC;IAEhC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,SAAS,CAAC;IACpD,MAAM,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC;IAC1E,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,kBAAkB,CAAC;IAE5E,OAAO;;;;kBAIS,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC;yBAC7B,SAAS,CAAC,WAAW,CAAC;4BACnB,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC;kBACjD,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;sBACzB,SAAS,CAAC,WAAW,CAAC;gCACZ,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC;AACvE,CAAC"}
@@ -1,9 +1,5 @@
1
1
  /**
2
- * Handler for retrieving all valid ADT object types and validating a type
3
- *
4
- * @TODO Migrate to infrastructure module
5
- * Endpoint: /sap/bc/adt/repository/informationsystem/objecttypes
6
- * This handler uses makeAdtRequestWithTimeout directly and should be moved to adt-clients infrastructure module
2
+ * Handler for retrieving all valid ADT object types and validating a type.
7
3
  */
8
4
  import type { HandlerContext } from '../../../lib/handlers/interfaces';
9
5
  export declare const TOOL_DEFINITION: {