/** Strict implementation of the OpenAI Images REST protocol. */ import type { PrivateNetworkPolicy } from '../../../media-shared/http/index.js'; import type { GeneratedImageAsset, ImageGenerationProvider, ImageGenerationProviderCapabilities, ImageGenerationProviderConfiguredContext, ImageGenerationRequest } from './types.js'; /** Subset of the official OpenAI image response we map. */ export interface OpenAiImagesResponse { data?: Array<{ b64_json?: string; revised_prompt?: string; [k: string]: unknown; }>; [k: string]: unknown; } export interface OpenAiImagesEndpointResolution { /** Base URL without trailing slash, e.g. `https://api.openai.com/v1`. */ baseUrl: string; /** Optional override for the generations sub-path; defaults to `/images/generations`. */ generationsPath?: string; /** Optional override for the edits sub-path; defaults to `/images/edits`. */ editsPath?: string; /** Extra headers merged into the request (e.g. `api-key` for Azure). */ headers?: Record; /** * Override Authorization header logic. When omitted, the factory adds * `Authorization: Bearer ` if `apiKey` is present. */ authorization?: { kind: 'none'; } | { kind: 'bearer'; } | { kind: 'header'; headerName: string; }; /** Explicit private-host allowlist for this endpoint. Omit to use the global policy. */ privateNetworkPolicy?: PrivateNetworkPolicy; } export interface OpenAiImagesProviderOptions { id: string; label: string; defaultModel: string; models: string[]; capabilities: ImageGenerationProviderCapabilities; /** Sync env / cfg lookup that decides if the provider has any usable credential. */ isConfigured: (ctx: ImageGenerationProviderConfiguredContext) => boolean; /** Resolve API key for one request. May return null when using OAuth/header auth. */ resolveApiKey: (req: ImageGenerationRequest) => string | null | undefined | Promise; /** Resolve endpoint info per-request (region, baseUrl override, Azure deployment, …). */ resolveEndpoint: (req: ImageGenerationRequest) => OpenAiImagesEndpointResolution; /** Default per-call timeout. Combined with provider-level config in provider-http. */ defaultTimeoutMs?: number; /** Default count clamp. Provider may also enforce via `capabilities.generate.maxCount`. */ defaultCount?: number; defaultSize?: string; } export declare function createOpenAiImagesProvider(options: OpenAiImagesProviderOptions): ImageGenerationProvider; export declare function mapOpenAiImagesResponse(raw: unknown, req: ImageGenerationRequest): GeneratedImageAsset[];