import { type OpenAPIV3 } from 'openapi-types'; import type CreativeEditorSDK from '@cesdk/cesdk-js'; import type { CreativeEngine } from '@cesdk/cesdk-js'; import { ImageOutput, RenderCustomProperty, GetBlockInput, Provider, Middleware } from '@imgly/plugin-ai-generation-web'; import { ImageQuickActionSupportMap } from '../types'; type MiddlewareType = Middleware; /** * Configuration for EachLabs image providers. */ export interface EachLabsProviderConfiguration { /** * HTTP endpoint URL for the EachLabs proxy. The proxy handles API key injection. */ proxyUrl: string; /** * Enable debug logging for provider creation and API calls. */ debug?: boolean; /** * Middleware functions to process inputs/outputs. */ middlewares?: MiddlewareType[]; /** * Override provider's default history asset source. */ history?: false | '@imgly/local' | '@imgly/indexedDB' | (string & {}); /** * Configure supported quick actions. */ supportedQuickActions?: { [quickActionId: string]: Partial[string]> | false | null; }; } /** * Options for creating an EachLabs image provider. */ interface CreateProviderOptions> { /** * EachLabs model slug (e.g., 'nano-banana-pro'). */ modelSlug: string; /** * EachLabs model version (e.g., '0.0.1'). */ modelVersion: string; /** * Unique provider identifier for registration. */ providerId: string; /** * Human-readable provider name displayed in the UI. */ name: string; /** * OpenAPI schema document describing the input parameters. */ schema: OpenAPIV3.Document; /** * JSON reference to the input schema (e.g., '#/components/schemas/Input'). */ inputReference: string; /** * User flow mode for the provider panel. */ useFlow?: 'placeholder' | 'generation-only'; /** * Initialization callback when the provider is registered. */ initialize?: (context: { cesdk?: CreativeEditorSDK; engine: CreativeEngine; }) => void; /** * Custom property renderers for the input panel. */ renderCustomProperty?: RenderCustomProperty; /** * Quick actions this provider supports. */ supportedQuickActions?: ImageQuickActionSupportMap; /** * Get block dimensions from input parameters. */ getBlockInput?: GetBlockInput<'image', I>; /** * Extract image dimensions from input parameters. */ getImageSize?: (input: I) => { width: number; height: number; }; /** * Transform input parameters to EachLabs API format. */ mapInput: (input: I) => Record; /** * Provider-specific middleware functions. */ middleware?: MiddlewareType[]; /** * Custom headers to include in API requests. */ headers?: Record; /** * CE.SDK instance for image URL conversion. */ cesdk?: CreativeEditorSDK; } /** * Creates an EachLabs image provider from schema. */ declare function createImageProvider & { image_url?: string; image_urls?: string[]; }>(options: CreateProviderOptions, config: EachLabsProviderConfiguration): Provider<'image', I, ImageOutput>; export default createImageProvider;