UNPKG

@sap/subaccount-destination-service-provider

Version:

Provide service consumption of SAP subaccount services

176 lines 9.16 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.C4cRetrieve = void 0; const vkbeautify = require("vkbeautify"); const service_provider_apis_1 = require("@sap/service-provider-apis"); const systemUtils_1 = require("../../utils/systemUtils"); const c4cDestinationProviderSystem_1 = require("../providers/c4cDestinationProviderSystem"); const c4cService_1 = require("../type/c4cService"); const utils_1 = require("../utils/utils"); const messages_1 = require("../../i18n/messages"); const baseRetriever_1 = require("../../common/baseRetriever"); const errorUtils_1 = require("../../common/utils/errorUtils"); const C4C_GET_SERVICE_SUFFIX_URL = "/sap/c4c/odata/v1/odataservicecatalog/ODataServiceCollection"; const DEPRECATED_SERVICES_NAME = ["c4codata"]; const SUPER_SERVICE = "c4codataapi"; const SUPER_SERVICES_SUFFIX_URL = `/sap/c4c/odata/v1/odata_apihub_services/GetIndividualServices?VirtualServiceName='c4codataapi'`; const METADATA_FILTER = "?$filter="; class C4cRetrieve extends baseRetriever_1.BaseRetriever { constructor(connectivityProvider) { super(connectivityProvider); } retrieveAnnotations(systemName, serviceId, credentials) { return __awaiter(this, void 0, void 0, function* () { throw new Error(messages_1.messages.METHOD_NOT_IMPLEMENTED()); }); } retrieveDestinations(filter) { return __awaiter(this, void 0, void 0, function* () { try { const c4cFilter = (0, utils_1.getC4cDestinationFilter)(filter); const c4cDestinations = yield this.connectivityProvider.getSubAccountDestinations(); const systems = []; c4cDestinations.forEach((destinationConfiguration) => { if ((0, systemUtils_1.filterDestination)(destinationConfiguration, c4cFilter)) { systems.push(this.DestinationListInfoToC4cProviderSystem(destinationConfiguration)); } }); return systems; } catch (e) { const error = e; throw new service_provider_apis_1.ServiceProviderError(service_provider_apis_1.ServiceProviderErrorCode.RETRIEVE_DATA, error); } }); } retrieveServices(systemName, systemUrl, credentials, filter) { return __awaiter(this, void 0, void 0, function* () { try { const basHeader = (0, systemUtils_1.getCredentialsHeader)(credentials); const rawServices = yield this.getRawServices(C4C_GET_SERVICE_SUFFIX_URL, basHeader, systemName); let superService; const services = []; rawServices.forEach((rawService) => { if (DEPRECATED_SERVICES_NAME.includes(rawService.ServiceName)) { return; } else if (SUPER_SERVICE === rawService.ServiceName) { superService = new c4cService_1.C4cService(rawService); return; } services.push(new c4cService_1.C4cService(rawService)); }); if (!superService) { return services; } const additionalService = yield this.superServiceToServices(superService, SUPER_SERVICES_SUFFIX_URL, basHeader, systemName); return [...services, ...additionalService]; } catch (e) { (0, errorUtils_1.handleProviderError)(e, service_provider_apis_1.messages.SYS_ERROR_FAIL_RETRIEVE_SERVICES, this.logger); } }); } superServiceToServices(superService, url, headers, destinationName) { return __awaiter(this, void 0, void 0, function* () { let rawSuperServiceList; try { rawSuperServiceList = yield this.getRawServices(url, headers, destinationName); } catch (e) { return [superService]; } return rawSuperServiceList.map((rawSuperService) => { const rawService = { ServiceName: (0, utils_1.addSpaceBeforeCapitalLetter)(rawSuperService.LeadingEntityTypeName), Namespace: superService.namespace, MetadataURL: superService.url, metadataFilter: `${METADATA_FILTER}${rawSuperService.LeadingEntityTypeName}`, }; return new c4cService_1.C4cService(rawService); }); }); } retrieveMetadata(systemName, serviceUrl, encoding, credentials) { return __awaiter(this, void 0, void 0, function* () { try { if (encoding !== service_provider_apis_1.EncodingMode.XML) { const e = new Error(`${service_provider_apis_1.messages.SYS_ERROR_FAIL_PARSE_RESPONSE}`); throw new service_provider_apis_1.ServiceProviderError(service_provider_apis_1.ServiceProviderErrorCode.RETRIEVE_DATA, e); } const basHeader = this.getMetadataHeaders(credentials); const connProviderParams = { urlPath: serviceUrl, responseType: "text", method: "get", headers: basHeader, }; const connectivityResponse = yield this.connectivityProvider.sendRequestViaDestination(connProviderParams, systemName); return { data: vkbeautify.xml(connectivityResponse), encoding: service_provider_apis_1.EncodingMode.XML, }; } catch (e) { (0, errorUtils_1.handleProviderError)(e, service_provider_apis_1.messages.SYS_ERROR_FAIL_RETRIEVE_METADATA, this.logger); } }); } retrieveLiveData(systemName, serviceUrl, entityName, encoding, filter, credentials, headerParameters) { return __awaiter(this, void 0, void 0, function* () { const requestParams = (0, service_provider_apis_1.getRequestParamString)(filter); const liveDataUrl = `${serviceUrl}/${entityName}${requestParams}`; try { const basHeader = (0, systemUtils_1.getCredentialsHeader)(credentials); const connProviderParams = { urlPath: liveDataUrl, responseType: "json", method: "get", headers: basHeader, }; const connectivityResponse = yield this.connectivityProvider.sendRequestViaDestination(connProviderParams, systemName); return { data: JSON.stringify(connectivityResponse), encoding: service_provider_apis_1.EncodingMode.JSON, }; } catch (e) { (0, errorUtils_1.handleProviderError)(e, service_provider_apis_1.messages.SYS_ERROR_FAIL_RETRIEVE_ENTITY_DATA(entityName), this.logger); } }); } getRawServices(url, headers, destinationName) { return __awaiter(this, void 0, void 0, function* () { const connProviderParams = { urlPath: url, responseType: "json", method: "get", headers, }; const connectivityResponse = yield this.connectivityProvider.sendRequestViaDestination(connProviderParams, destinationName); if (connectivityResponse && connectivityResponse.d && connectivityResponse.d.results) { return connectivityResponse.d.results; } return []; }); } DestinationListInfoToC4cProviderSystem(destination) { return new c4cDestinationProviderSystem_1.C4cDestinationProviderSystem(destination.name, destination.host, service_provider_apis_1.DataType.CATALOG_C4C, (0, systemUtils_1.getProxyType)(destination.proxyType), destination.credentials.authentication, this, destination["product.name"] || destination.productName, destination.description); } getMetadataHeaders(credentials) { const headers = (0, systemUtils_1.getCredentialsHeader)(credentials); headers.Accept = systemUtils_1.APPLICATION_XML_HEADER; return headers; } } exports.C4cRetrieve = C4cRetrieve; //# sourceMappingURL=c4cRetrieve.js.map