@apistudio/apim-cli
Version:
CLI for API Management Products
283 lines (267 loc) • 8.1 kB
text/typescript
/**
* Copyright IBM Corp. 2024, 2025
*/
import { Variable as Variable_Ref } from '@apic/api-model/test/common/Variable.js';
import {
Test_Environment as Environment_Ref,
Test_Assertions,
Test_Auth,
Test_Auth_BasicAuth,
Test_Headers,
Test_Parameters,
Test_Payload,
Test_Request,
} from '@apic/api-model/test/Test.js';
// import { Metadata as Metadata_Ref } from '@apic/api-model/common/Metadata.js';
import { PolicySequence_Spec } from '@apic/api-model/policy/PolicySeq.js';
import { Assert } from '@apic/api-model/test/common/Assert.js';
import { Ref as Reference } from '@apic/api-model/common/Ref.js';
import { KindEnums } from '@apic/api-model/common/StudioEnums.js';
import { RefAndEndpoint } from '@apic/api-model/test/common/RefAndEndpoint.js';
import { PayLoadIdentifier } from '@apic/api-model/policy/common/PayLoadIdentifier.js';
import { CORS_Spec } from '@apic/api-model/policy/ResProcessing/CORS.js';
import { AuthorizeUser_Spec } from '@apic/api-model/policy/iam/AuthorizeUser.js';
import { Api } from '@apic/api-model/api/Api.js';
import { Xsl } from '@apic/api-model/policy/common/Xsl.js';
// type WithRequired<Type, Key extends keyof Type> = Type & {
// [Property in Key]-?: Type[Property];
// };
export type Metadata = KindMetadata;
// WithRequired<Metadata_Ref, 'name' | 'version'>;
export interface KindMetadata {
name: string;
version: string;
tags?: string[];
namespace?: string;
type?: string;
description?: string;
labels?: {
gatewayTypes: string[];
};
}
export type API_Spec_Ref = {
$ref: string;
$path: string;
};
export type Path = {
path: string;
};
export type PolicySequenceSpec = PolicySequence_Spec;
export type TestAssertions = Test_Assertions;
export type AssertSpec = Assert;
export type Cors_Spec = CORS_Spec;
export type Authorize_Spec = AuthorizeUser_Spec;
export type TestBasicAuth = Test_Auth_BasicAuth;
export type TestHeaders = Test_Headers;
export type TestParamters = Test_Parameters;
export type TestPayload = Test_Payload;
export type TestAuth = Test_Auth;
export type RefEndpoint = RefAndEndpoint;
export type Ref = Required<Reference>;
export type Variable = Required<Variable_Ref>;
export type Environment = Environment_Ref;
export type PolicySequence = PolicySequence_Spec;
export type Expression = Required<Assert>;
export type Assertion = Required<Test_Assertions>;
// Extend the Test_Request type to ensure var is properly typed
export type Request = Required<Test_Request> & {
var?: TestVariable[] | string;
endpoint?: string;
};
export type Specification = {
'api-spec'?: API_Spec_Ref | string;
'policy-sequence'?: Ref[];
api?: Ref | string;
scopes?: Ref[];
environment?: Ref | Environment;
request?: Request[];
};
export type BaseAsset = {
kind: string;
apiVersion?: string;
metadata: Metadata;
spec: Specification | string | any;
paths?: any;
info?: any;
};
export type ApiObject = Api;
export type IAMPayloadIdentifier = PayLoadIdentifier;
export type XSL = Xsl;
export const AssetKinds = {
API: 'API',
Scope: 'Scope',
PolicySequence: 'PolicySequence',
CORS: 'CORS',
Test: 'Test',
Assertion: 'Assertion',
Environment: 'Environment',
Plan: 'Plan',
Product: 'Product',
Quota: 'Quota',
Properties: 'Properties',
URISchemes: 'URISchemes',
DataPowerAssembly: 'DataPowerAssembly',
FreeFlowPolicySequence: 'FreeFlowPolicySequence',
StagedPolicySequence: 'StagedPolicySequence',
Telemetry: 'Telemetry',
Invoke: 'Invoke',
LoadBalancer: 'LoadBalancer',
InboundBulkHead: 'InboundBulkHead',
InboundMessaging: 'InboundMessaging',
SetMediaType: 'SetMediaType',
AuthorizeUser: 'AuthorizeUser',
SetContextVariable: 'SetContextVariable',
WebMethodsISService: 'WebMethodsISService',
Log: 'Log',
IAM: 'IAM',
Authorize: 'Authorize',
TransformResponse: 'TransformResponse',
TransformRequest: 'TransformRequest',
MonitorTraffic: 'MonitorTraffic',
SetAuthorization: 'SetAuthorization',
OutboundAnonymous: 'OutboundAnonymous',
OutboundAlias: 'OutboundAlias',
CacheServiceResult: 'CacheServiceResult',
ValidateAPISpecification: 'ValidateAPISpecification',
ErrorProcessing: 'ErrorProcessing',
HTTPEndpoint: 'HTTPEndpoint',
HandlebarsTemplate: 'HandlebarsTemplate',
Route: 'Route',
SQLInjectionFilter: 'SQLInjectionFilter',
MessageConfig: 'MessageConfig',
LuaScript: 'LuaScript',
Set: 'Set',
RateLimitDef: 'RateLimitDef',
RateLimit: 'RateLimit',
Return: 'Return',
GlobalPolicy: 'GlobalPolicy',
DataMasking: 'DataMasking',
InvokeMessagingExtension: 'InvokeMessagingExtension',
HTTPInvoke: 'HTTPInvoke',
CountLimit: 'CountLimit',
CountLimitDef: 'CountLimitDef',
Redact: 'Redact',
Remove: 'Remove',
Throw: 'Throw',
Block: 'Block',
Transform: 'Transform',
Switch: 'Switch',
If: 'If',
OperationSwitch: 'OperationSwitch',
InvokeAWSLambda: 'InvokeAWSLambda',
WatsonXAIInvoke: 'WatsonXAIInvoke',
OpenAIInvoke: 'OpenAIInvoke',
ExtractIdentity: 'ExtractIdentity',
EnforceCircuitBreaker: 'EnforceCircuitBreaker',
Parse: 'Parse',
Retry: 'Retry',
IBMCloudLogin: 'IBMCloudLogin',
Authenticate: 'Authenticate',
Cache: 'Cache',
Try: 'Try',
} as const;
export const POLICY_KINDS: string[] = [
KindEnums.Log,
KindEnums.Route,
KindEnums.Transport,
KindEnums.CacheServiceResult,
KindEnums.ErrorProcessing,
KindEnums.IdentifyAndAuthorize,
KindEnums.InvokeMessagingExtension,
KindEnums.InvokeAWSLambdaFunction,
KindEnums.MonitorTraffic,
KindEnums.RateLimiter,
KindEnums.SetContextVariable,
KindEnums.TransformRequest,
KindEnums.ValidateAPISpecification,
KindEnums.HTTPEndpoint,
KindEnums.TransformResponse,
KindEnums.SetMediaType,
KindEnums.WebMethodsISService,
KindEnums.InboundBulkHead,
KindEnums.InboundMessaging,
KindEnums.AuthorizeUser,
KindEnums.CustomHttpHeader,
KindEnums.MessageConfig,
KindEnums.OutboundAlias,
KindEnums.OutboundAnonymous,
KindEnums.OutboundBasicAuth,
KindEnums.OutboundOAuth2,
KindEnums.OutboundIncomingJWT,
KindEnums.OutboundNTLMAuth,
KindEnums.OutboundKerberosAuth,
AssetKinds.SetAuthorization,
AssetKinds.Invoke,
AssetKinds.LoadBalancer,
AssetKinds.URISchemes,
AssetKinds.Properties,
AssetKinds.CORS,
AssetKinds.Log,
AssetKinds.MonitorTraffic,
AssetKinds.OutboundAnonymous,
AssetKinds.OutboundAlias,
AssetKinds.CacheServiceResult,
AssetKinds.RateLimitDef,
AssetKinds.RateLimit,
AssetKinds.IAM,
AssetKinds.Set,
AssetKinds.Return,
AssetKinds.LuaScript,
AssetKinds.CountLimit,
AssetKinds.HTTPInvoke,
AssetKinds.CountLimitDef,
AssetKinds.Redact,
AssetKinds.Remove,
AssetKinds.Block,
AssetKinds.InvokeAWSLambda,
AssetKinds.EnforceCircuitBreaker,
AssetKinds.Parse,
AssetKinds.Switch,
AssetKinds.InvokeMessagingExtension,
AssetKinds.DataMasking,
AssetKinds.If,
AssetKinds.OperationSwitch,
AssetKinds.HTTPInvoke,
AssetKinds.Switch,
AssetKinds.If,
AssetKinds.ExtractIdentity,
AssetKinds.SQLInjectionFilter,
AssetKinds.Retry,
AssetKinds.IBMCloudLogin,
AssetKinds.Throw,
AssetKinds.Authenticate,
AssetKinds.Cache,
AssetKinds.Try,
];
export type AssetKindsType = keyof typeof AssetKinds;
export const NANO_GW_POLICY_KINDS: string[] = [
AssetKinds.Invoke,
AssetKinds.HandlebarsTemplate,
AssetKinds.LoadBalancer,
AssetKinds.Telemetry,
AssetKinds.Authorize,
AssetKinds.Transform
];
type ExtensionInfo = {
[K in keyof typeof AssetKinds]?: {
versions: string[];
defaultVersion: string;
};
};
export const CommonModelExtensionInfo: ExtensionInfo = {
[AssetKinds.Invoke]: {
versions: ['api.ibm.com/v1'],
defaultVersion: 'api.ibm.com/v1',
},
};
export { KindEnums as AssetModelKindConstants };
export class AssetModelInternalKindConstants {
public static readonly POLICY: string = 'Policy';
public static readonly MOCK_END_POINT: string = 'MockEndpoint';
public static readonly MOCK_RESPONSE: string = 'MockResponse';
}
// Define a specific type for test variables that includes name, key, and value
export interface TestVariable {
key: string;
value: string;
}