@sap/subaccount-destination-service-provider
Version:
Provide service consumption of SAP subaccount services
165 lines • 8.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SubaccountProviderUtils = exports.SubaccountAbapCatalogServiceUrl = exports.fioriAuthenticationTypeMap = exports.fioriConnectionUsageMap = exports.fioriSystemUsageMap = exports.SupportedFioriConnectionType = exports.SupportedFioriSystemType = exports.UsageType = exports.APPLICATION_XML_HEADER = exports.ANNOTATIONS_SUFFIX = exports.V4_RECOMMENDED_SERVICES_PATH = exports.V4_SERVICES_PATH = exports.ODATA_V4_CATALOG_SERVICES = exports.V2_RECOMMENDED_SERVICES_PATH = exports.V2_SERVICES_PATH = exports.ODATA_V2_CATALOG_SERVICES = exports.API_LIST_DESTINATION_PATH = void 0;
exports.getSystemType = getSystemType;
exports.getProxyType = getProxyType;
exports.buildServiceCommonResponse = buildServiceCommonResponse;
exports.filterDestination = filterDestination;
exports.getCredentialsHeader = getCredentialsHeader;
const vkbeautify = require("vkbeautify");
const service_provider_apis_1 = require("@sap/service-provider-apis");
const messages_1 = require("../i18n/messages");
const store_1 = require("@sap-ux/store");
exports.API_LIST_DESTINATION_PATH = "/api/listDestinations";
exports.ODATA_V2_CATALOG_SERVICES = "/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/";
exports.V2_SERVICES_PATH = "ServiceCollection";
exports.V2_RECOMMENDED_SERVICES_PATH = "RecommendedServiceCollection";
exports.ODATA_V4_CATALOG_SERVICES = "/sap/opu/odata4/iwfnd/config/default/iwfnd/catalog/0002/";
exports.V4_SERVICES_PATH = "ServiceGroups?$expand=DefaultSystem($expand=Services)";
exports.V4_RECOMMENDED_SERVICES_PATH = "ServiceGroups?$expand=DefaultSystem($expand=RecommendedServices)";
exports.ANNOTATIONS_SUFFIX = "/Annotations";
exports.APPLICATION_XML_HEADER = "application/xml";
var UsageType;
(function (UsageType) {
UsageType["CATALOG_USAGE"] = "odata_abap";
UsageType["SERVICE_HOST_USAGE"] = "odata_gen";
UsageType["FULL_URL"] = "full_url";
})(UsageType || (exports.UsageType = UsageType = {}));
var SupportedFioriSystemType;
(function (SupportedFioriSystemType) {
SupportedFioriSystemType["ABAP_ON_PREM"] = "OnPrem";
})(SupportedFioriSystemType || (exports.SupportedFioriSystemType = SupportedFioriSystemType = {}));
var SupportedFioriConnectionType;
(function (SupportedFioriConnectionType) {
SupportedFioriConnectionType["ABAP_CATALOG"] = "abap_catalog";
SupportedFioriConnectionType["GENERIC_HOST"] = "generic_host";
SupportedFioriConnectionType["ODATA_SERVICE"] = "odata_service";
})(SupportedFioriConnectionType || (exports.SupportedFioriConnectionType = SupportedFioriConnectionType = {}));
exports.fioriSystemUsageMap = new Map([[SupportedFioriSystemType.ABAP_ON_PREM, UsageType.CATALOG_USAGE]]);
exports.fioriConnectionUsageMap = new Map([
[SupportedFioriConnectionType.ABAP_CATALOG, UsageType.CATALOG_USAGE],
[SupportedFioriConnectionType.GENERIC_HOST, UsageType.SERVICE_HOST_USAGE],
[SupportedFioriConnectionType.ODATA_SERVICE, UsageType.FULL_URL],
]);
exports.fioriAuthenticationTypeMap = new Map([
[store_1.AuthenticationType.Basic, service_provider_apis_1.AuthenticationType.BasicAuthentication],
[store_1.AuthenticationType.OAuth2ClientCredential, service_provider_apis_1.AuthenticationType.OAuth2ClientCredentials],
]);
exports.SubaccountAbapCatalogServiceUrl = {
v2New: `${exports.ODATA_V2_CATALOG_SERVICES}${exports.V2_RECOMMENDED_SERVICES_PATH}`,
v2Old: `${exports.ODATA_V2_CATALOG_SERVICES}${exports.V2_SERVICES_PATH}`,
v4New: `${exports.ODATA_V4_CATALOG_SERVICES}${exports.V4_RECOMMENDED_SERVICES_PATH}`,
v4Old: `${exports.ODATA_V4_CATALOG_SERVICES}${exports.V4_SERVICES_PATH}`,
getV2AnnotationUrl(serviceId) {
return `${exports.SubaccountAbapCatalogServiceUrl.v2Old}('${serviceId}')${exports.ANNOTATIONS_SUFFIX}`;
},
};
exports.SubaccountProviderUtils = {
filterSystem(destinationList, dataType, WebIdeBasEnabled = true, proxyType) {
if (dataType !== service_provider_apis_1.DataType.CATALOG &&
dataType !== service_provider_apis_1.DataType.SERVICE_EP &&
dataType !== service_provider_apis_1.DataType.SERVICE_EP_FULL_URL) {
throw new service_provider_apis_1.ServiceProviderError(service_provider_apis_1.ServiceProviderErrorCode.RETRIEVE_DATA, messages_1.messages.ERROR_FAILED_UNSUPPORTED_SYSTEM_TYPE());
}
const filteredDestinationList = [];
destinationList.forEach((destinationValue) => {
if (filterEvaluation(destinationValue, dataType, WebIdeBasEnabled, proxyType)) {
filteredDestinationList.push(destinationValue);
}
});
return filteredDestinationList;
},
};
function filterEvaluation(destinationItem, dataType, WebIdeBasEnabled = true, proxyType) {
var _a, _b;
if (WebIdeBasEnabled) {
const destWebIDEEnabled = (_a = destinationItem["WebIDEEnabled"]) !== null && _a !== void 0 ? _a : "";
if (!destWebIDEEnabled || destWebIDEEnabled !== "true") {
return false;
}
}
const destSystemType = getSystemType(destinationItem);
if (destSystemType !== dataType) {
return false;
}
if (proxyType) {
const destProxyType = (_b = destinationItem["ProxyType"]) !== null && _b !== void 0 ? _b : "";
if (getProxyType(destProxyType) !== proxyType) {
return false;
}
}
return true;
}
function getSystemType(destinationConfiguration) {
let dataType = service_provider_apis_1.DataType.UNKNOWN;
const webIDEUsages = destinationConfiguration.WebIDEUsage || destinationConfiguration.usage || "";
const webIDEAdditionalData = destinationConfiguration.WebIDEAdditionalData || destinationConfiguration.additionalData || "";
if (webIDEUsages.includes(UsageType.CATALOG_USAGE)) {
dataType = service_provider_apis_1.DataType.CATALOG;
}
else {
if (webIDEUsages.includes(UsageType.FULL_URL) ||
(webIDEUsages.includes(UsageType.SERVICE_HOST_USAGE) && webIDEAdditionalData.includes(UsageType.FULL_URL))) {
dataType = service_provider_apis_1.DataType.SERVICE_EP_FULL_URL;
}
else {
if (webIDEUsages.includes(UsageType.SERVICE_HOST_USAGE) && !webIDEAdditionalData.includes(UsageType.FULL_URL)) {
dataType = service_provider_apis_1.DataType.SERVICE_EP;
}
}
}
return dataType;
}
function getProxyType(destinationProxyType) {
let proxyType = service_provider_apis_1.ProxyType.UNKNOWN;
switch (destinationProxyType) {
case "Internet": {
proxyType = service_provider_apis_1.ProxyType.INTERNET;
break;
}
case "OnPremise": {
proxyType = service_provider_apis_1.ProxyType.ONPREMISE;
break;
}
}
return proxyType;
}
function buildServiceCommonResponse(encoding, responseBody) {
switch (encoding) {
case service_provider_apis_1.EncodingMode.XML:
return {
data: vkbeautify.xml(responseBody),
encoding: encoding,
};
case service_provider_apis_1.EncodingMode.JSON:
return {
data: vkbeautify.json(responseBody),
encoding: encoding,
};
}
}
function filterDestination(destinationConfiguration, filter) {
let passFilter = true;
if (filter) {
filter.forEach((filterValues, key) => {
var _a;
const destinationValues = ((_a = destinationConfiguration[key]) !== null && _a !== void 0 ? _a : "")
.trim()
.replace(" ", "")
.split(",");
if (filterValues.filter((v) => destinationValues.includes(v)).length == 0) {
passFilter = false;
return;
}
});
}
return passFilter;
}
function getCredentialsHeader(credentials) {
const headers = {};
if (credentials) {
headers.Authorization = credentials.getEncodedBasicAuthentication();
}
return headers;
}
//# sourceMappingURL=systemUtils.js.map