import {z} from 'zod' export type Variable = {id?: string | undefined, projectId?: string | undefined, projectName?: string | undefined, name?: string | undefined, description?: string | undefined, type?: ('HEADER' | 'PARAMETER' | 'BODY' | 'CONTEXT_VALUES' | 'CUSTOM') | undefined, headerName?: string | undefined, paramType?: ('QUERY' | 'PATH' | 'FORM') | undefined, paramName?: string | undefined, paramPath?: string | undefined, formName?: string | undefined, xpathValue?: string | undefined, jsonPathValue?: string | undefined, messageContentType?: ('XML' | 'JSON' | 'ALL_BODY') | undefined, contextValue?: ('REQUEST_REMOTE_ADDRESS' | 'REQUEST_HTTP_METHOD' | 'REQUEST_CONTENT_TYPE' | 'REQUEST_PATH_INFO' | 'REQUEST_CONTEXT_PATH' | 'REQUEST_QUERY_STRING' | 'REQUEST_REMOTE_USER' | 'REQUEST_USERNAME_KEY' | 'REQUEST_REQUESTED_SESSION_ID' | 'REQUEST_REQUEST_URI' | 'REQUEST_CHARACTER_ENCODING' | 'REQUEST_CHARSET' | 'REQUEST_CONTENT_LENGTH' | 'REQUEST_PROTOCOL' | 'REQUEST_SCHEME' | 'REQUEST_SERVER_NAME' | 'REQUEST_SERVER_PORT' | 'REQUEST_REMOTE_HOST' | 'REQUEST_REMOTE_PORT' | 'REQUEST_LOCAL_NAME' | 'REQUEST_LOCAL_ADDR' | 'REQUEST_LOCAL_PORT' | 'REQUEST_XFORWARDED_FOR' | 'REQUEST_ESTIMATED_TOKEN_COUNT' | 'REQUEST_MCP_TOOL_NAME' | 'REQUEST_OAUTH_CLIENT_ID' | 'REQUEST_IS_SOAP_TO_REST' | 'REQUEST_IS_APIPROXY' | 'REQUEST_IS_APIPROXYGROUP' | 'REQUEST_IS_XWWW_FORM_URL_ENCODED' | 'REQUEST_IS_FORM_DATA' | 'REQUEST_IS_BYTE_ARRAY' | 'REQUEST_HAS_ATTACHMENT' | 'REQUEST_GZIP' | 'REQUEST_DEFLATE' | 'REQUEST_BR' | 'REQUEST_ZSTD' | 'REQUEST_IDENTITY' | 'REQUEST_COMPRESS' | 'REQUEST_HTTP_SERVLET' | 'RESPONSE_IS_BYTE_ARRAY' | 'RESPONSE_GZIP' | 'RESPONSE_DEFLATE' | 'RESPONSE_BR' | 'RESPONSE_ZSTD' | 'RESPONSE_IDENTITY' | 'RESPONSE_COMPRESS' | 'RESPONSE_BACKEND_CONTENT_ENCODING' | 'RESPONSE_CHARSET' | 'RESPONSE_STATUS_CODE' | 'RESPONSE_HTTP_SERVLET' | 'ERROR_CATEGORY' | 'ERROR_TYPE' | 'ERROR_PARENT' | 'ERROR_RESULT_TYPE' | 'ERROR_MESSAGE' | 'ERROR_CODE' | 'ERROR_HTTP_CODE' | 'MESSAGE_CORRELATION_ID' | 'MESSAGE_CACHE_HIT' | 'ENVIRONMENT_ID' | 'ENVIRONMENT_NAME' | 'ENVIRONMENT_CERTIFICATE' | 'ENVIRONMENT_PRIVATEKEY' | 'ENVIRONMENT_PUBLICKEY' | 'ENVIRONMENT_SECRETKEY' | 'ENVIRONMENT_KEYSTORE' | 'ENVIRONMENT_JWK' | 'APIPROXYGROUP_ID' | 'APIPROXYGROUP_NAME' | 'APIPROXY_ID' | 'APIPROXY_NAME' | 'APIPROXY_RELATIVE_PATH' | 'APIMETHOD_ID' | 'APIMETHOD_NAME' | 'APIMETHOD_SOAP_ACTION' | 'APIMETHOD_HTTPMETHOD' | 'APIMETHOD_ENDPOINT' | 'APIMETHOD_BACKEND_HTTPMETHOD' | 'APIMETHOD_BACKEND_ENDPOINT' | 'DATETIME_YEAR' | 'DATETIME_MONTH' | 'DATETIME_DAY_OF_WEEK' | 'DATETIME_DAY_OF_MONTH' | 'DATETIME_HOUR' | 'DATETIME_MINUTE' | 'DATETIME_SECOND' | 'DATETIME_EPOCH_MILLIS' | 'DATETIME_FORMATTED_TEXT' | 'DATE_FORMATTED_TEXT' | 'TIME_FORMATTED_TEXT' | 'CREDENTIAL_USERNAME' | 'CREDENTIAL_EMAIL' | 'CREDENTIAL_FULLNAME' | 'CREDENTIAL_SECRETKEY' | 'CREDENTIAL_CERTIFICATE' | 'CREDENTIAL_PUBLICKEY' | 'CREDENTIAL_PRIVATEKEY' | 'CREDENTIAL_KEYSTORE' | 'CREDENTIAL_TRUSTSTORE' | 'CREDENTIAL_JWK_SIGNANDVALIDATION' | 'CREDENTIAL_JWK_ENCRYPTIONANDDECRYPTION') | undefined, zoneId?: string | undefined, initWithScript?: boolean | undefined, scriptLanguage?: ('GROOVY' | 'JAVASCRIPT') | undefined, scriptBody?: string | undefined}; export type ConditionRule = {conditionCriteria?: ('VALUE' | 'NOT' | 'AND' | 'OR') | undefined, firstVariable?: Variable | undefined, variableDataType?: ('NUMERIC' | 'STRING' | 'DATE') | undefined, dateFormat?: string | undefined, valueComparisonOperator?: ('LT' | 'LE' | 'GT' | 'GE' | 'EQ' | 'NE' | 'EQ_IGNORE_CASE' | 'NE_IGNORE_CASE' | 'STARTS_WITH' | 'NOT_STARTS_WITH' | 'STARTS_WITH_IGNORE_CASE' | 'NOT_STARTS_WITH_IGNORE_CASE' | 'ENDS_WITH' | 'NOT_ENDS_WITH' | 'ENDS_WITH_IGNORE_CASE' | 'NOT_ENDS_WITH_IGNORE_CASE' | 'CONTAINS' | 'NOT_CONTAINS' | 'CONTAINS_IGNORE_CASE' | 'NOT_CONTAINS_IGNORE_CASE' | 'IS_EMPTY' | 'IS_NOT_EMPTY' | 'EXISTS_AND_EMPTY' | 'IS_EXISTS' | 'IS_NOT_EXISTS' | 'IN' | 'NOT_IN' | 'IN_IGNORE_CASE' | 'NOT_IN_IGNORE_CASE') | undefined, secondValueSource?: ('VALUE' | 'VARIABLE') | undefined, secondValue?: string | undefined, secondVariable?: Variable | undefined}; export type PolicyCondition = {conditionRuleList?: Array | undefined}; export type AiPrimaryEntry = {llmProviderRef?: string | undefined, llmProviderRefName?: string | undefined, modelId?: string | undefined, weight?: number | undefined, displayName?: string | undefined, connectionPoolSize?: number | undefined, idleConnectionTimeout?: number | undefined}; export type ConditionalRouteVariant = {name?: string | undefined, condition?: PolicyCondition | undefined, llmProviderRef?: string | undefined, llmProviderRefName?: string | undefined, modelId?: string | undefined, semanticUtterances?: Array | undefined, semanticThreshold?: number | undefined, classifierLabel?: string | undefined, classifierDescription?: string | undefined, targetPool?: Array | undefined, enumAiRoutingAlgorithm?: ('ROUND_ROBIN' | 'WEIGHTED' | 'RANDOM' | 'LRU' | 'LEAST_COST' | 'LEAST_LATENCY' | 'PREFIX_AFFINITY') | undefined, affinityKeyHeader?: string | undefined, affinityLoadFactor?: number | undefined, connectionPoolSize?: number | undefined, idleConnectionTimeout?: number | undefined}; export type AiFailoverEntry = {llmProviderRef?: string | undefined, llmProviderRefName?: string | undefined, modelId?: string | undefined, timeoutMs?: number | undefined, orderIndex?: number | undefined, displayName?: string | undefined, maxCostUsd?: number | undefined, weight?: number | undefined, connectionPoolSize?: number | undefined, idleConnectionTimeout?: number | undefined}; export type CustomQueryCriteria = {id?: string | undefined, conditionType?: ('VALUE' | 'NOT' | 'AND' | 'OR') | undefined, criteriaType?: ('API_PROXY_NAME' | 'API_TYPE' | 'CACHE_HIT' | 'CLIENT_IP' | 'ERROR_TYPE' | 'HTTP_METHOD' | 'KEYWORD' | 'SIZE' | 'STATUS_CODE' | 'TIME' | 'USERNAME_APIKEY' | 'RESULT_TYPE' | 'ENDPOINT' | 'CORRELATION_ID' | 'ROUTING_ADDRESS' | 'ROUTING_RETRY_COUNT' | 'ROUTING_FAILOVER_COUNT' | 'BACKEND_STATUS_CODE' | 'ROUTING_FAILURE_REASON' | 'API_PROXY_GROUP' | 'CANARY_REQUEST' | 'CANARY_STATUS' | 'MIRROR_TRAFFIC' | 'AI_PROVIDER' | 'AI_MODEL' | 'AI_INPUT_TOKENS' | 'AI_OUTPUT_TOKENS' | 'AI_CACHED_TOKENS' | 'AI_COST' | 'AI_TTFT' | 'AI_TPOT' | 'AI_TOTAL_LATENCY' | 'AI_DEPLOYMENT_TYPE' | 'AI_FAILOVER' | 'AI_FINISH_REASON' | 'AI_STREAMING' | 'AI_SEMANTIC_CACHE' | 'AI_GUARDRAIL' | 'AI_GUARDRAIL_CATEGORY' | 'AI_GUARDRAIL_VERDICT' | 'AI_PII' | 'MCP_TOOL_NAME' | 'MCP_RESULT_CLASS' | 'MCP_TOOL_CALL_COUNT_OUT' | 'MCP_JSONRPC_ID' | 'A2A_AGENT_CALL_COUNT_OUT' | 'A2A_TASK_STATE' | 'A2A_TASK_ID' | 'A2A_CONTEXT_ID') | undefined, messageLocation?: ('REQUEST' | 'RESPONSE' | 'ANY') | undefined, messagePart?: ('ANY' | 'REQ_PRM_FROM_CLIENT' | 'REQ_HDR_FROM_CLIENT' | 'REQ_BODY_FROM_CLIENT' | 'REQ_PRM_TO_BACKEND' | 'REQ_HDR_TO_BACKEND' | 'REQ_BODY_TO_BACKEND' | 'RESP_HDR_FROM_BACKEND' | 'RESP_BODY_FROM_BACKEND' | 'RESP_HDR_TO_CLIENT' | 'RESP_BODY_TO_CLIENT') | undefined, timePart?: ('REQUEST_PIPELINE' | 'RESPONSE_PIPELINE' | 'ROUTING' | 'ALL') | undefined, parentErrorType?: ('API_PROXY' | 'APICREATOR' | 'FAKE_API' | 'KPS_API' | 'CONDITION_ERR' | 'CONDITION_EX' | 'POLICY_GROUP' | 'POLICY_AUTHENTICATION' | 'POLICY_OIDC' | 'POLICY_AUTHORIZATION' | 'POLICY_API_AUTHENTICATION' | 'POLICY_THROTTLING_PER_CLIENT' | 'POLICY_APIBASEDTHROTTLING' | 'POLICY_ENDPOINTRATELIMIT' | 'POLICY_APIBASEDQUOTA' | 'POLICY_CLIENTBASEDTHROTTLING' | 'POLICY_CLIENTBASEDQUOTA' | 'POLICY_CLIENTBANNER' | 'POLICY_QUOTA_PER_CLIENT' | 'POLICY_SCRIPT' | 'POLICY_OAUTH2' | 'POLICY_SAML' | 'POLICY_JOSE_IMPLEMENTATION' | 'POLICY_JOSE_VALIDATION' | 'POLICY_MTLS_AUTHENTICATION' | 'POLICY_CONTENTFILTER' | 'POLICY_IPWHITE' | 'POLICY_IPBLACK' | 'POLICY_ALLOWEDHOUR' | 'POLICY_MINMESSAGESIZE' | 'POLICY_MAXMESSAGESIZE' | 'POLICY_JSONSCHEMAVALIDATION' | 'POLICY_XMLSCHEMAVALIDATION' | 'POLICY_JSONTRANSFORMATION' | 'POLICY_XMLTRANSFORMATION' | 'POLICY_JSONRESPONSEMESSAGETRANS' | 'POLICY_XMLRESPONSEMESSAGETRANS' | 'POLICY_REST2SOAP_TRANSFORMATION' | 'POLICY_CACHE' | 'POLICY_ROUTING' | 'POLICY_REDACTION' | 'POLICY_CORS' | 'POLICY_ENCRYPTION' | 'POLICY_DECRYPTION' | 'POLICY_ROLE_GROUP' | 'POLICY_DIGITALSIGN' | 'POLICY_DIGITALSIGNVALIDATION' | 'POLICY_RESTAPI' | 'POLICY_WSSECURITY' | 'POLICY_WSSECURITY_ENCRYPT' | 'POLICY_WSSECURITY_DECRYPT' | 'POLICY_WSSECURITY_USERNAME' | 'POLICY_WSSECURITY_TIMESTAMP' | 'POLICY_WSSECURITY_SIGN' | 'POLICY_WSSECURITY_SIGN_VALIDATION' | 'POLICY_WSSECURITY_STSTOKEN' | 'POLICY_BUSINESS_RULE' | 'POLICY_MESSAGE_BUILDER' | 'POLICY_LOG' | 'POLICY_AI_PII_MASK' | 'POLICY_AI_PROMPT_GUARD' | 'POLICY_AI_TOKEN_RATE_LIMIT' | 'POLICY_AI_SEMANTIC_CACHE' | 'POLICY_AI_MCP_TOOL_CALL' | 'POLICY_AI_A2A_AGENT_CALL' | 'POLICY_AI_RAG_INJECTION' | 'POLICY_AI_DLP_GUARD' | 'POLICY_AI_LOOP_GUARD' | 'POLICY_AI_TOPIC_GUARD' | 'POLICY_AI_CONTEXT_INTEGRITY' | 'POLICY_AI_ROUTING' | 'POLICY_AI_A2A_AGENT_INVOKE' | 'POLICY_AI_MCP_TOOL_INVOKE' | 'POLICY_AI_PROMPT_DECORATOR' | 'POLICY_AI_PROMPT_TEMPLATE' | 'POLICY_AI_GROUNDEDNESS_GUARD' | 'LICENSE') | undefined, operator?: ('LT' | 'LE' | 'GT' | 'GE' | 'EQ' | 'NE' | 'STARTS_WITH' | 'ENDS_WITH' | 'BETWEEN' | 'CONTAINS' | 'NOT_CONTAINS' | 'IS_EMPTY' | 'IS_NOT_EMPTY' | 'IS_EXISTS' | 'IS_NOT_EXISTS' | 'IN' | 'NOT_IN' | 'CONTAINS_WORD') | undefined, httpMethod?: ('GET' | 'POST' | 'PUT' | 'HEAD' | 'OPTIONS' | 'DELETE' | 'PATCH' | 'TRACE' | 'ALL' | 'QUERY') | undefined, firstValue?: number | undefined, secondValue?: number | undefined, messagePartKeyValue?: string | undefined, textValue?: string | undefined, apiProxyIds?: Array | undefined, apiTypes?: Array | undefined}; export type ProxyFilter = {name?: string | undefined, id?: string | undefined, description?: string | undefined}; export type OrderFilter = {property?: string | undefined, sortOrder?: string | undefined}; export type CustomQueryFilter = {id?: string | undefined, projectId?: string | undefined, name?: string | undefined, description?: string | undefined, proxyList?: Array | undefined, fromDate?: string | undefined, toDate?: string | undefined, resultTypeList?: (Array<'BLOCKED' | 'ERROR' | 'SUCCESS'>) | undefined, orderList?: Array | undefined}; export type CustomQuery = {id?: string | undefined, name?: string | undefined, description?: string | undefined, projectId?: string | undefined, criteriaList?: Array | undefined, filterList?: Array | undefined, visibility?: ('PERSONAL' | 'PROJECT') | undefined, ownerUsername?: string | undefined, notEmptyCriteriaList?: boolean | undefined}; export type RoutingMTLSSettings = {enabled?: boolean | undefined, skipSslVerification?: boolean | undefined, keyStoreId?: string | undefined, trustStoreId?: string | undefined, certificateId?: string | undefined, supportedProtocolList?: (Array<'TLS_1_3' | 'TLS_1_2' | 'TLS_1_1' | 'TLS_1_0' | 'SSL_3_0'>) | undefined, hostnameVerifierType?: ('NOOP' | 'DEFAULT' | 'STRICT' | 'BROWSER_COMPAT') | undefined}; export type AiRouting = {connectTimeoutSeconds?: number | undefined, streamTimeoutSeconds?: number | undefined, maxResponseBytes?: number | undefined, maxChunks?: number | undefined, retryCount?: number | undefined, connectionPoolManagementType?: ('GENERAL' | 'CUSTOM' | 'NONE') | undefined, customConnectionPoolSize?: number | undefined, idleConnectionTimeout?: number | undefined, llmProviderRef?: string | undefined, llmProviderRefName?: string | undefined, modelId?: string | undefined, timeoutSeconds?: number | undefined, streaming?: boolean | undefined, clientStreamPresentBehavior?: ('USE_CLIENT' | 'OVERWRITE') | undefined, clientModelPresentBehavior?: ('USE_CLIENT' | 'OVERWRITE' | 'ERROR') | undefined, clientModelAbsentBehavior?: ('KEEP_ABSENT' | 'ADD_ROUTING_MODEL' | 'ERROR') | undefined, contextWindowAction?: ('REJECT' | 'TRUNCATE' | 'PASS') | undefined, contextKeepTurns?: number | undefined, contextRagAction?: ('KEEP' | 'TRIM_END') | undefined, contextLastUserMessageAction?: ('KEEP' | 'TRIM_MIDDLE') | undefined, conditionalRoutes?: Array | undefined, providerFailoverChain?: Array | undefined, failoverStrategy?: ('SEQUENTIAL' | 'CONDITIONAL' | 'PRIORITY_STRICT' | 'ROUND_ROBIN') | undefined, primaryPool?: Array | undefined, enumAiRoutingAlgorithm?: ('ROUND_ROBIN' | 'WEIGHTED' | 'RANDOM' | 'LRU' | 'LEAST_COST' | 'LEAST_LATENCY' | 'PREFIX_AFFINITY') | undefined, leastCostOutputRatio?: number | undefined, affinityKeyHeader?: string | undefined, affinityLoadFactor?: number | undefined, semanticEmbeddingProviderRef?: string | undefined, semanticEmbeddingProviderRefName?: string | undefined, semanticEmbeddingModelId?: string | undefined, classifierProviderRef?: string | undefined, classifierProviderRefName?: string | undefined, classifierModelId?: string | undefined, classifierTimeoutMs?: number | undefined, classifierDecisionMode?: ('STANDARD' | 'REASONING') | undefined, classifierReasoningBudget?: number | undefined, classifierMaxInputChars?: number | undefined, classifierInstructions?: string | undefined, retryDelayType?: ('NO_DELAY' | 'FIXED' | 'EXPONENTIAL') | undefined, retryFixedDelayMs?: number | undefined, retryInitialDelayMs?: number | undefined, retryMaxDelayMs?: number | undefined, retryBackoffMultiplier?: number | undefined, failoverStatusCodeList?: Array | undefined, failoverRetryCount?: number | undefined, trySiblingPoolTargets?: boolean | undefined, circuitBreakerEnabled?: boolean | undefined, errorWindow?: number | undefined, errorThresholdValue?: number | undefined, enumErrorThresholdType?: ('COUNT' | 'PERCENT') | undefined, sleepWindow?: number | undefined, halfOpenEnabled?: boolean | undefined, conditionalLatencyThresholdMs?: number | undefined, traceMode?: ('NONE' | 'LIVE_TRACE') | undefined, enableAiTrace?: boolean | undefined, aiTraceStartTime?: string | undefined, aiTraceStopTime?: string | undefined, aiTraceEnvironmentName?: string | undefined, aiTraceCustomQueryId?: string | undefined, aiTraceCustomQuery?: CustomQuery | undefined, aiTraceMaxDurationSeconds?: number | undefined, disableSslValidation?: boolean | undefined, proxyEnabled?: boolean | undefined, proxyHost?: string | undefined, proxyPort?: number | undefined, proxyAuthorizationNeeded?: boolean | undefined, proxyUsername?: string | undefined, proxyPassword?: string | undefined, blockAnonymousRequests?: boolean | undefined, failoverRetryCountRaw?: number | undefined, connectTimeoutSecondsRaw?: number | undefined, streamTimeoutSecondsRaw?: number | undefined, retryCountRaw?: number | undefined, mTLSSettings?: RoutingMTLSSettings | undefined}; export type UpdateApiApiopsProjectsProjectNameApiProxiesApiProxyNameAiRoutingArgs = {projectName: string, apiProxyName: string, body: AiRouting}; export type UpdateApiApiopsProjectsProjectNameApiProxiesApiProxyNameAiRoutingOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const deploymentResult = z.object({envName: z.string().optional(), podName: z.string().optional(), podIp: z.string().optional(), success: z.boolean().optional(), detail: z.string().optional(), responseTime: z.number().int().optional(), detailList: z.array(z.unknown()).optional(), firstFromApiResultList: z.unknown()}); export const apiOpsAdvisoryDTO = z.object({level: z.string().optional(), key: z.string().optional(), params: z.record(z.string(), z.unknown()).optional()}); export const apiOpsResponseSuccess = z.object({status: z.enum(["SUCCESS", "FAILURE"]).optional(), resultMessage: z.string().optional(), resultList: z.array(z.string()).optional(), resultCount: z.number().int().optional(), deploymentResult: deploymentResult.optional(), unresolvedReferences: z.array(z.string()).optional(), advisories: z.array(apiOpsAdvisoryDTO).optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Update the AI Routing config of an AI API Proxy * * PUT /apiops/projects/{projectName}/apiProxies/{apiProxyName}/ai-routing/ */ export const updateApiApiopsProjectsProjectNameApiProxiesApiProxyNameAiRouting = async (args: UpdateApiApiopsProjectsProjectNameApiProxiesApiProxyNameAiRoutingArgs, options?: UpdateApiApiopsProjectsProjectNameApiProxiesApiProxyNameAiRoutingOptions) => { const {baseUrl = "http://167.86.118.166:32080", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/apiops/projects/${encodeURIComponent(String(args.projectName))}/apiProxies/${encodeURIComponent(String(args.apiProxyName))}/ai-routing/${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PUT", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(apiOpsResponseSuccess, await res.json()) };