import {z} from 'zod' export type UserContext = {id?: number | undefined, email?: string | undefined, role?: string | undefined, region?: string | undefined, permissions?: Array | undefined, tenant_id?: string | undefined, org_id?: string | undefined}; export type ClientContext = {id?: string | undefined, name?: string | undefined, org_id?: string | undefined, tenant_id?: string | undefined}; export type MediaContentRequest = {source: 'base64' | 'url', base64_data?: string | undefined, url?: string | undefined, mime_type: 'image/jpeg' | 'image/png' | 'image/gif' | 'image/webp'}; export type OrchestratorRequest = {request_id?: string | undefined, query: string, request_type?: string | undefined, skip_llm?: boolean | undefined, user: UserContext, client: ClientContext, context?: {[key: string]: unknown} | undefined, timestamp?: string | undefined, media?: Array | undefined}; export type CreateApiApiV1ProcessArgs = {body: OrchestratorRequest}; export type CreateApiApiV1ProcessOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const appliedPolicyDetail = z.object({policy_id: z.string().optional(), policy_name: z.string().optional(), description: z.string().optional(), action: z.string().optional(), risk_level: z.enum(["low", "medium", "high", "critical"]).optional(), allow_override: z.boolean().optional(), matched_rule: z.string().optional(), segment_id: z.string().optional()}); export const policyEvaluationResult = z.object({allowed: z.boolean().optional(), applied_policies: z.array(z.string()).optional(), risk_score: z.number().gte(0).lte(1).optional(), severity: z.enum(["critical", "high", "medium", "low"]).optional(), severity_policy_id: z.string().optional(), required_actions: z.array(z.string()).optional(), processing_time_ms: z.number().int().optional(), database_accessed: z.boolean().optional(), evaluation_error: z.boolean().optional(), segments_resolved: z.boolean().optional(), applied_policies_detail: z.array(appliedPolicyDetail).optional(), preferred_provider: z.string().optional(), allowed_providers: z.array(z.string()).optional(), routing_reason: z.string().optional()}); export const providerInfo = z.object({provider: z.enum(["openai", "azure-openai", "anthropic", "bedrock", "ollama", "gemini", "mock"]).optional(), model: z.string().optional(), response_time_ms: z.number().int().optional(), tokens_used: z.number().int().optional(), cost: z.number().optional()}); export const mediaAnalysisItemResponse = z.object({media_index: z.number().int().optional(), sha256_hash: z.string().optional(), has_faces: z.boolean().optional(), face_count: z.number().int().optional(), has_biometric_data: z.boolean().optional(), nsfw_score: z.number().gte(0).lte(1).optional(), violence_score: z.number().gte(0).lte(1).optional(), content_safe: z.boolean().optional(), document_type: z.string().optional(), is_sensitive_document: z.boolean().optional(), has_pii: z.boolean().optional(), pii_types: z.array(z.string()).optional(), has_extracted_text: z.boolean().optional(), extracted_text_length: z.number().int().optional(), scanned: z.array(z.enum(["content_safety", "document", "faces", "pii", "text"])).optional(), estimated_cost_usd: z.number().optional(), warnings: z.array(z.string()).optional(), structured_warnings: z.array(z.object({code: z.string().optional(), message: z.string().optional()})).optional()}); export const mediaAnalysisResponse = z.object({results: z.array(mediaAnalysisItemResponse).optional(), total_cost_usd: z.number().optional(), analysis_time_ms: z.number().int().optional()}); export const orchestratorResponse = z.object({request_id: z.string().optional(), success: z.boolean().optional(), data: z.unknown(), error: z.string().optional(), redacted: z.boolean().optional(), redacted_fields: z.array(z.string()).optional(), policy_info: policyEvaluationResult.optional(), provider_info: providerInfo.optional(), processing_time: z.string().optional(), media_analysis: mediaAnalysisResponse.optional(), engine: z.literal("anchored").optional(), subject_type: z.string().optional(), policy_bundle: z.string().optional(), verdict: z.enum(["allowed", "redacted", "blocked"]).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 }; /** * Process orchestrator request * * POST /api/v1/process */ export const createApiApiV1Process = async (args: CreateApiApiV1ProcessArgs, options?: CreateApiApiV1ProcessOptions) => { const {baseUrl = "https://orchestrator.getaxonflow.com", 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(/\/+$/, '')}/api/v1/process${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", 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(orchestratorResponse, await res.json()) };