UNPKG

@apistudio/apim-cli

Version:

CLI for API Management Products

328 lines (308 loc) 9.95 kB
/** * Copyright IBM Corp. 2024, 2025 */ import { Product } from '@apic/api-model/package/Product.js'; import { BaseAsset, Metadata, Ref } from '../../common/models/base-asset.model.js'; import { FileAccessType } from './api-spec-handler.interface.js'; import { Plan } from '@apic/api-model/package/Plan.js'; import { Project } from '../../lfs/models/project.model.js'; import { VCSProject } from '../../vcs/models/vcs-project.model.js'; import { AssetInfo } from '../../lfs/models/asset-info.model.js'; import { VCSAssetInfo } from '../../vcs/models/vcs-asset-info.model.js'; import { Quota } from '@apic/api-model/package/Quota.js'; import { AssemblyCountLimitViewTable } from '../store/api-plans-product.store.model.js'; import { AssemblyRateLimitViewTable } from '../store/api-plans-product.store.model.js'; import { OperationsMetadata } from '../../lfs/models/asset-metadata.model.js'; import { OverridePlanMetadata, RateLimitTable, } from '../../component-models/models/add-override-plan-quota.model.js'; import { APICProject } from '../../apic-mode/models/apic-project.model.js'; import { APICAssetInfo } from '../../apic-mode/models/apic-asset-info.model.js'; import { SqlInjectionFilterAction, DpNanoGatewayConfig, Property, HostAlias, DpNanoEnvironment, CountLimitDefs, } from '../../component-models/models/dp-nano-gateway.model.js'; import { FormViewTableData } from '../../component-models/models/form-view-table-data.model.js'; export type PlanInfo = { productContent?: Product; planContent: Plan; planFile: FileAccessType; }; export type QuotaInfo = { planContent: Plan; quotaContent: Quota; quotaFile: FileAccessType; }; export interface IApiPlansProductHandler { createProduct( metadata: Metadata, subFolderPath?: string, ): Promise<FileAccessType>; addExisitingAPI( metadata: Metadata[], productFile: FileAccessType, ): Promise<Product>; addExistingPlanAPI( metadata: Metadata[], planFile: FileAccessType, ): Promise<any>; removeAPI( productFile: FileAccessType, apiMetadata: Metadata, ): Promise<Product>; removePlanAPI(planFile: FileAccessType, apiMetadata: Metadata): Promise<any>; removeAllAPIList(planFile: FileAccessType): Promise<any>; updateAPIWithOperation( planFile: FileAccessType, apiMetadata: Metadata, selectedOperations: OperationsMetadata[], ): Promise<any>; updatePlanApiWithRateLimits( planFile: FileAccessType, formData: OverridePlanMetadata ): Promise<any>; updateNanoGatewayPlanApiWithRateLimits( planFile: FileAccessType, formData: OverridePlanMetadata, rateLimits?: RateLimitTable[], ): Promise<any>; removeOverridePlanQuota( planFile: FileAccessType, apiMetadata?: Metadata, operationMethodAndPath?: string, gatewayType?: string, ): Promise<any>; addExisitingPlan( metadata: Metadata[], productFile: FileAccessType, ): Promise<Product>; addPlan( metadata: Metadata, productFile?: FileAccessType, subFolderPath?: string, ): Promise<PlanInfo>; removePlan( productFile: FileAccessType, apiMetadata: Metadata, ): Promise<Product>; getAPIInfoForProductAsset( productAsset: Product, projects: (Project | VCSProject | APICProject)[], ): Promise<Array<AssetInfo | VCSAssetInfo | APICAssetInfo | Ref>>; getPlanInfoForProductAsset( productAsset: Product, projects: (Project | VCSProject | APICProject)[], ): Promise<Array<AssetInfo | VCSAssetInfo | APICAssetInfo>>; getAPIInfoForPlanAsset( planAsset: Plan, projects: (Project | VCSProject | APICProject)[], ): Promise<Array<AssetInfo | VCSAssetInfo | APICAssetInfo>>; updatePlanMetadata( oldPlanInfo: Metadata, newPlanInfo: Metadata, projects: (Project | VCSProject | APICProject)[], productFile?: FileAccessType, ): Promise<PlanInfo>; updatePlan( updatedPlanContent: string, planFile: FileAccessType, ): Promise<void>; addQuota( metadata: Metadata, // spec: Quota_Spec, spec : any, planFile?: FileAccessType, aliasName?: string, ): Promise<QuotaInfo>; addExisitingQuota( metadata: Metadata, projects: (Project | VCSProject | APICProject)[], planFile: FileAccessType, aliasName?: string, ): Promise<QuotaInfo>; removeRateLimitInline( planFile: FileAccessType, rateLimitName: string, ): Promise<Plan>; updateMetadata( newProductInfo: Metadata, productFile: FileAccessType, ): Promise<BaseAsset>; updateQuota( updatedQuotaContent: string, quotaFile: FileAccessType, ): Promise<void>; getRateLimitForPlan( projects: (Project | VCSProject | APICProject)[], planAsset: BaseAsset, ): Promise<any>; removeRateLimitInline( planFile: FileAccessType, rateLimitName: string, ): Promise<Plan>; updateQuotaMetadata( oldQuotaInfo: Metadata, newQuotaInfo: Metadata, projects: (Project | VCSProject | APICProject)[], planFile: FileAccessType, ): Promise<QuotaInfo>; removeQuotaList( planFile: FileAccessType, quotaMetadata: Metadata, ): Promise<Plan>; getAssemblyCountLimitsForPlan( projects: (Project | VCSProject | APICProject)[], planAsset: BaseAsset, ): Promise<any>; getAssemblyRateLimitsForPlan( projects: (Project | VCSProject | APICProject)[], planAsset: BaseAsset, ): Promise<any>; addAssemblyCountLimit( planFile: FileAccessType, data: AssemblyCountLimitViewTable[], ): Promise<Plan>; addAssemblyRateLimit( planFile: FileAccessType, data: AssemblyRateLimitViewTable[], ): Promise<Plan>; updateAssemblyCountLimit( planFile: FileAccessType, oldData: AssemblyCountLimitViewTable, newData: AssemblyCountLimitViewTable, ): Promise<Plan>; updateAssemblyRateLimit( planFile: FileAccessType, oldData: AssemblyRateLimitViewTable, newData: AssemblyRateLimitViewTable, ): Promise<Plan>; removeAssemblyCountLimit( planFile: FileAccessType, countLimitName: string, ): Promise<Plan>; removeAssemblyRateLimit( planFile: FileAccessType, rateLimitName: string, ): Promise<Plan>; removeRateLimit( planFile: FileAccessType, rateLimitMetadata: Metadata, ): Promise<Plan>; updateRatelimitMetadata( oldRateLimitInfo: Metadata, newRatelimitInfo: Metadata, projects: (Project | VCSProject | APICProject)[], planFile: FileAccessType, ): Promise<QuotaInfo>; updateProductInfo( updatedProductInfo: string, productFile: FileAccessType, ): Promise<void>; getQuotaListForPlan( projects: (Project | VCSProject | APICProject)[], planAsset: BaseAsset, ): Promise<any>; addSqlInjectionFilter( filterTypeId: string, actionId: SqlInjectionFilterAction, productFile: FileAccessType, ): Promise<Product>; removeSqlInjectionFilter( filterTypeId: string, productFile: FileAccessType, ): Promise<Product>; getSQLInjectionFiltersDataFromProduct( productAsset: Product, ): Promise<FormViewTableData[]>; /** * Updates the DataPower Nano Gateway configuration in a product * @param dpNanoGatewayConfig Configuration options for the gateway * @param productFile The product file to update * @returns Updated product */ updateDpNanoGatewayConfig( dpNanoGatewayConfig: DpNanoGatewayConfig, productFile: FileAccessType, ): Promise<Product>; /** * Adds a property to the dp-nano-gateway properties in a product * @param property The property to add * @param productFile The product file to update * @returns Updated product */ addProperty( property: Property, productFile: FileAccessType, ): Promise<Product>; /** * Removes a property from the dp-nano-gateway properties in a product * @param propertyKey The key of the property to remove * @param productFile The product file to update * @returns Updated product */ removeProperty( propertyKey: string, productFile: FileAccessType, ): Promise<Product>; /** * Gets properties data from a product * @param productAsset The product asset * @returns Array of properties */ getPropertiesFromProduct(productAsset: Product): Promise<Property[]>; addHostAlias( hostAlias: HostAlias, productFile: FileAccessType, ): Promise<Product>; removeHostAlias(ip: string, productFile: FileAccessType): Promise<Product>; getHostAliasesFromProduct(productAsset: Product): Promise<HostAlias[]>; addDpNanoEnvironment( environment: DpNanoEnvironment, productFile: FileAccessType, ): Promise<Product>; removeDpNanoEnvironment( envName: string, productFile: FileAccessType, ): Promise<Product>; getDpEnvironmentFromProduct( productAsset: Product, ): Promise<DpNanoEnvironment[]>; /** * Gets count limit definitions from a plan * @param planAsset The plan asset * @returns Array of count limit definitions */ getCountLimitDefListFromPlan( projects: (Project | VCSProject | APICProject)[], planAsset: Plan, ): Promise<CountLimitDefs[]>; /** * Add a count limit definition to the dp-nano-gateway configuration of a plan * @param countLimitDef The count limit definition metadata to add * @param aliasName The alias name for the count limit definition * @param planFile The plan file to update * @returns Updated plan */ addCountLimitDef( countLimitDef: Metadata[], aliasName: string, planFile: FileAccessType, ): Promise<Plan>; /** * Remove a count limit definition from the dp-nano-gateway configuration of a plan * @param countLimitName The name of the count limit definition to remove * @param aliasName The alias name for the count limit definition * @param planFile The plan file to update * @returns Updated plan */ removeCountLimitDef( countLimitDef: CountLimitDefs, aliasName: string, planFile: FileAccessType, ): Promise<Plan>; }