import {z} from 'zod' export type CreateApiV1JobsArgs = {body: {model: 'bytedance-seedream' | 'bytedance-seedream-v4-edit' | 'bytedance-seedream-v4-text-to-image' | 'claude-opus-4-6' | 'claude-opus-4-7' | 'claude-opus-4-8' | 'claude-sonnet-4-6' | 'elevenlabs-sfx' | 'elevenlabs-tts-multilingual' | 'elevenlabs-tts-turbo' | 'flux-2-flex-i2i' | 'flux-2-flex-t2i' | 'flux-2-pro-i2i' | 'flux-2-pro-t2i' | 'google-imagen4' | 'gpt-image-1.5-i2i' | 'gpt-image-1.5-t2i' | 'gpt-image-2-i2i' | 'gpt-image-2-t2i' | 'grok-imagine-i2i' | 'grok-imagine-i2v' | 'grok-imagine-t2i' | 'grok-imagine-t2v' | 'hailuo-02-pro-i2v' | 'hailuo-02-pro-t2v' | 'hailuo-02-standard-i2v' | 'hailuo-02-standard-t2v' | 'hailuo-2.3-pro-i2v' | 'hailuo-2.3-standard-i2v' | 'happyhorse-1-0-i2v' | 'happyhorse-1-0-r2v' | 'happyhorse-1-0-t2v' | 'happyhorse-1-0-v2v-edit' | 'ideogram-character' | 'ideogram-character-edit' | 'ideogram-character-remix' | 'ideogram-v3-reframe' | 'kling-3.0' | 'kling-3.0-motion-control' | 'kling-avatar-pro' | 'kling-avatar-standard' | 'kling-v2.1-master-i2v' | 'kling-v2.1-master-t2v' | 'kling-v2.1-pro-i2v' | 'kling-v2.1-standard-i2v' | 'kling-v2.5-turbo-i2v' | 'kling-v2.5-turbo-t2v' | 'kling-v2.6-motion-control' | 'kling-v2.6-pro-i2v' | 'kling-v2.6-pro-t2v' | 'ltxv-2' | 'ltxv-2-fast' | 'luma-ray2-v2v' | 'nano-banana-2-i2i' | 'nano-banana-2-t2i' | 'nano-banana-pro-i2i' | 'nano-banana-pro-t2i' | 'qwen-i2i' | 'qwen-image-edit' | 'qwen-t2i' | 'qwen2-image-edit' | 'qwen2-t2i' | 'recraft-crisp-upscale' | 'recraft-remove-background' | 'runway-i2v' | 'runway-t2v' | 'seedance-2' | 'seedance-2-5' | 'seedance-2-fast' | 'seedance-v1-lite-i2v' | 'seedance-v1-lite-t2v' | 'seedance-v1-pro-fast-i2v' | 'seedance-v1-pro-i2v' | 'seedance-v1-pro-t2v' | 'seedance-v1.5-pro-i2v' | 'seedance-v1.5-pro-t2v' | 'seedream-4-5-edit' | 'seedream-4-5-text-to-image' | 'seedream-5-lite-edit' | 'seedream-5-lite-t2i' | 'suno' | 'suno-add-instrumental' | 'suno-add-vocals' | 'suno-lyrics' | 'suno-sounds' | 'topaz-image-upscale' | 'topaz-video-upscale' | 'veo3-i2v' | 'veo3-ref2v' | 'veo3-t2v' | 'wan-2-2-animate-move' | 'wan-2-2-animate-replace' | 'wan-2-2-speech-to-video' | 'wan-2-2-turbo-i2v' | 'wan-2-2-turbo-t2v' | 'wan-2-6-i2v' | 'wan-2-6-t2v' | 'wan-2-6-v2v' | 'wan-2-7-i2v' | 'wan-2-7-r2v' | 'wan-2-7-t2v', action?: string | undefined, parent_job_id?: string | undefined, params?: {[key: string]: unknown} | undefined} | {model?: ('bytedance-seedream' | 'bytedance-seedream-v4-edit' | 'bytedance-seedream-v4-text-to-image' | 'claude-opus-4-6' | 'claude-opus-4-7' | 'claude-opus-4-8' | 'claude-sonnet-4-6' | 'elevenlabs-sfx' | 'elevenlabs-tts-multilingual' | 'elevenlabs-tts-turbo' | 'flux-2-flex-i2i' | 'flux-2-flex-t2i' | 'flux-2-pro-i2i' | 'flux-2-pro-t2i' | 'google-imagen4' | 'gpt-image-1.5-i2i' | 'gpt-image-1.5-t2i' | 'gpt-image-2-i2i' | 'gpt-image-2-t2i' | 'grok-imagine-i2i' | 'grok-imagine-i2v' | 'grok-imagine-t2i' | 'grok-imagine-t2v' | 'hailuo-02-pro-i2v' | 'hailuo-02-pro-t2v' | 'hailuo-02-standard-i2v' | 'hailuo-02-standard-t2v' | 'hailuo-2.3-pro-i2v' | 'hailuo-2.3-standard-i2v' | 'happyhorse-1-0-i2v' | 'happyhorse-1-0-r2v' | 'happyhorse-1-0-t2v' | 'happyhorse-1-0-v2v-edit' | 'ideogram-character' | 'ideogram-character-edit' | 'ideogram-character-remix' | 'ideogram-v3-reframe' | 'kling-3.0' | 'kling-3.0-motion-control' | 'kling-avatar-pro' | 'kling-avatar-standard' | 'kling-v2.1-master-i2v' | 'kling-v2.1-master-t2v' | 'kling-v2.1-pro-i2v' | 'kling-v2.1-standard-i2v' | 'kling-v2.5-turbo-i2v' | 'kling-v2.5-turbo-t2v' | 'kling-v2.6-motion-control' | 'kling-v2.6-pro-i2v' | 'kling-v2.6-pro-t2v' | 'ltxv-2' | 'ltxv-2-fast' | 'luma-ray2-v2v' | 'nano-banana-2-i2i' | 'nano-banana-2-t2i' | 'nano-banana-pro-i2i' | 'nano-banana-pro-t2i' | 'qwen-i2i' | 'qwen-image-edit' | 'qwen-t2i' | 'qwen2-image-edit' | 'qwen2-t2i' | 'recraft-crisp-upscale' | 'recraft-remove-background' | 'runway-i2v' | 'runway-t2v' | 'seedance-2' | 'seedance-2-5' | 'seedance-2-fast' | 'seedance-v1-lite-i2v' | 'seedance-v1-lite-t2v' | 'seedance-v1-pro-fast-i2v' | 'seedance-v1-pro-i2v' | 'seedance-v1-pro-t2v' | 'seedance-v1.5-pro-i2v' | 'seedance-v1.5-pro-t2v' | 'seedream-4-5-edit' | 'seedream-4-5-text-to-image' | 'seedream-5-lite-edit' | 'seedream-5-lite-t2i' | 'suno' | 'suno-add-instrumental' | 'suno-add-vocals' | 'suno-lyrics' | 'suno-sounds' | 'topaz-image-upscale' | 'topaz-video-upscale' | 'veo3-i2v' | 'veo3-ref2v' | 'veo3-t2v' | 'wan-2-2-animate-move' | 'wan-2-2-animate-replace' | 'wan-2-2-speech-to-video' | 'wan-2-2-turbo-i2v' | 'wan-2-2-turbo-t2v' | 'wan-2-6-i2v' | 'wan-2-6-t2v' | 'wan-2-6-v2v' | 'wan-2-7-i2v' | 'wan-2-7-r2v' | 'wan-2-7-t2v') | undefined, action?: string | undefined, parent_job_id: string, params?: {[key: string]: unknown} | undefined}}; export type CreateApiV1JobsOptions = {baseUrl?: string | undefined, BearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const createApiV1JobsResponse = z.object({id: z.string().optional(), status: z.enum(["pending", "submitted", "polling", "processing", "completed", "failed"]).optional(), action: z.string().optional(), parent_job_id: z.string().nullable().optional(), model: z.string().optional(), estimated_cost: z.union([z.string(), z.number()]).nullable().optional(), created_at: z.string().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 }; /** * Create a new job * * POST /v1/jobs */ export const createApiV1Jobs = async (args: CreateApiV1JobsArgs, options?: CreateApiV1JobsOptions) => { const {baseUrl = "https://api.glio.io", fetch: fetchFn = fetch, BearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (BearerAuth !== undefined) headers.set('authorization', `Bearer ${BearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/v1/jobs${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(createApiV1JobsResponse, await res.json()) };