@apistudio/apim-cli
Version:
CLI for API Management Products
109 lines (108 loc) • 4.25 kB
JavaScript
/**
* Copyright Super iPaaS Integration LLC, an IBM Company 2024
*/
import { KindEnums } from '@apic/api-model/common/StudioEnums.js';
import { checkForNullOrUndefined, equalsIgnoreCase, isNullOrUndefined } from '../../common/data-helper.js';
import { getSubDirectory } from '../../common/fs-helper.js';
import { searchAsset } from '../build-helper.js';
import { showError } from '../../common/message-helper.js';
import { AssetCache } from '../../../cache/asset-cache.js';
import { COMMA } from '../../../constants/app-constants.js';
import { getOtherProjectsNames } from '../root-dir-helper.js';
var Kinds;
(function (Kinds) {
Kinds["DataPowerAssembly"] = "DataPowerAssembly";
Kinds["FreeFlowPolicySequence"] = "FreeFlowPolicySequence";
Kinds["StagedPolicySequence"] = "StagedPolicySequence";
Kinds["API"] = "API";
})(Kinds || (Kinds = {}));
const isPolicyKind = (kind) => {
if (typeof kind !== 'string') {
return false;
}
const policyKinds = [
KindEnums.Log,
KindEnums.ErrorProcessing,
KindEnums.IdentifyAndAuthorize,
KindEnums.SetContextVariable,
KindEnums.MonitorTraffic,
KindEnums.CacheServiceResult,
KindEnums.RateLimiter,
KindEnums.InvokeAWSLambdaFunction,
KindEnums.DataMasking,
KindEnums.HTTPInvoke,
KindEnums.InvokeMessagingExtension,
KindEnums.TransformRequest,
KindEnums.TransformResponse,
KindEnums.ValidateAPISpecification,
KindEnums.Route,
KindEnums.Transport,
KindEnums.OutboundAlias,
KindEnums.OutboundAnonymous,
KindEnums.OutboundBasicAuth,
KindEnums.OutboundIncomingJWT,
KindEnums.OutboundKerberosAuth,
KindEnums.OutboundNTLMAuth,
KindEnums.OutboundOAuth2,
KindEnums.Scope,
KindEnums.WebMethodsISService,
KindEnums.CustomHttpHeader,
KindEnums.InboundBulkHead,
KindEnums.AuthorizeUser,
KindEnums.SetMediaType,
"Invoke"
];
return policyKinds.some((policyKind) => equalsIgnoreCase(policyKind, kind));
};
const isProjectBelongsToDataPower = (assets) => {
if (isNullOrUndefined(assets)) {
return false;
}
for (const asset of assets) {
if (Kinds.DataPowerAssembly.toString() === asset.kind) {
return true;
}
}
return false;
};
const isProjectBelongsToDataPowerNanoGw = (assets) => {
if (isNullOrUndefined(assets)) {
return false;
}
for (const asset of assets) {
if (Kinds.FreeFlowPolicySequence.toString() === asset.kind) {
return true;
}
}
return false;
};
const findPolicyKind = (apiAsset) => {
const projectNames = AssetCache.getInstance().getProjectNames();
let currentProjects = new Set(projectNames.split(COMMA));
const rootDirPath = AssetCache.getInstance().getRootDirPath();
const otherProjects = getOtherProjectsNames(rootDirPath, projectNames);
// Combine current projects with other projects (if any)
const allProjects = otherProjects !== null
? new Set([...currentProjects, ...otherProjects])
: currentProjects;
for (const project of allProjects) {
const projectDirPath = getSubDirectory(rootDirPath, project);
let spec = checkForNullOrUndefined(apiAsset.spec, `Spec is not defined for the asset with kind 'API' and name '${apiAsset.metadata?.name}'`);
const policySeq = spec["policy-sequence"];
if (!policySeq || policySeq.length === 0) {
showError('No policy-sequence is defined');
return '';
}
if (searchAsset(Kinds.DataPowerAssembly, policySeq[0].$ref, projectDirPath)) {
return Kinds.DataPowerAssembly.toString();
}
else if (searchAsset(Kinds.FreeFlowPolicySequence, policySeq[0].$ref, projectDirPath)) {
return Kinds.FreeFlowPolicySequence.toString();
}
else if (searchAsset(Kinds.StagedPolicySequence, policySeq[0].$ref, projectDirPath)) {
return Kinds.StagedPolicySequence.toString();
}
}
return '';
};
export { isPolicyKind, isProjectBelongsToDataPower, isProjectBelongsToDataPowerNanoGw, findPolicyKind, Kinds };