import {z} from 'zod' export type GetApiToolsToolIdArgs = {toolId: 'prompt-to-video' | 'voiceover-video' | 'ai-movie-maker' | 'ai-short-drama-generator' | 'cinematic-videos' | 'sora-2' | 'veo3' | 'seedance-2' | 'seedance-2-5' | 'video-podcast-generator' | 'kids-drawing-animation' | '2d-animation-maker' | 'ai-animation-generator-from-image' | 'ai-animation-video-generator' | 'ai-cartoon-video-generator' | 'ai-cat-video-generator' | 'ai-dog-video-generator' | 'ai-image-animator' | 'ai-movie-trailer-maker' | 'ai-superhero-generator' | 'ai-video-generator' | 'animal-ai-video-generator' | 'anime-video-generator' | 'chatgpt-video-generator' | 'create-asmr-video' | 'create-street-interview-video' | 'static-background' | 'kids-message-generator' | 'pov-video-generator' | 'video-selfie-maker' | 'voiceover-to-video-ai' | 'text-to-video' | 'faceless-ai-video-generator' | 'music-to-video' | 'lyrics-to-music-video' | 'animated-lyrics-video' | 'generative-motion-graphics' | 'instrumental-music-visualizer' | 'motion-graphics-video' | 'youtube-music-visualizer' | 'ai-drill-video-generator' | 'ai-edm-video-generator' | 'ai-hip-hop-video-generator' | 'ai-jazz-video-generator' | 'ai-lofi-video-generator' | 'ai-metal-video-generator' | 'ai-phonk-video-generator' | 'ai-rock-video-generator' | 'ai-techno-video-generator' | 'rap-video-generator' | 'soundcloud-to-video' | 'spotify-to-video' | 'suno-to-video' | 'music-videos-for-kids' | 'news-video-generator' | 'create-video-quiz' | 'gaming-video-maker' | 'media-to-story' | 'reddit-post-to-video' | 'tweet-linkedin-to-video' | 'youtube-long-to-shorts' | 'ai-reel-generator' | 'ai-roast-generator' | 'ai-youtube-shorts-generator' | 'linkedin-post-to-video' | 'long-video-to-short-video-ai' | 'repurpose-instagram-reels' | 'repurpose-youtube-shorts' | 'short-video-maker' | 'social-media-video-maker' | 'youtube-to-instagram-converter' | 'youtube-to-tiktok-converter' | 'youtube-video-summarizer' | 'tiktok-video-generator' | 'add-caption-to-video' | 'add-image-to-video' | 'add-text-to-video' | 'ai-vfx-editor' | 'flip-video' | 'increase-video-volume' | 'loop-video' | 'motion-transfer' | 'resize-video' | 'rotate-video' | 'video-face-swap' | 'voice-changer' | 'comment-silent-video' | 'translate-video' | 'image-to-video-effect' | 'ai-sports-highlights-generator' | 'ai-subtitle-generator' | 'audio-enhancer' | 'image-sequence-to-video-converter' | 'photo-to-video-converter' | 'tiktok-subtitle-generator' | 'talking-avatar' | 'reaction-video' | 'ai-celebrity-video-generator' | 'ai-debate-generator' | 'ai-deepfake-video-maker' | 'ai-santa-video-generator' | 'talking-baby-ai' | 'ai-ugc-avatar-generator' | 'voiceover-video-maker' | 'podcast-ai-clip-generator' | 'audio-video-to-video' | 'article-to-video' | 'blog-to-video-converter' | 'create-video-for-amazon-products' | 'create-business-animation-video' | 'create-product-videos-for-shopify' | 'create-product-videos-from-website' | 'product-hunt-launch-ai-video' | 'real-estate-marketing-video' | 'screenshot-to-video-ad' | 'ad-generator' | 'pdf-to-video' | 'ugc-ad-generator' | 'website-to-video' | 'food-to-nutrition-video' | 'ai-video-presentation-maker' | 'educational-video-maker' | 'explainer-video-maker' | 'whiteboard-animation-maker' | 'course-video-generator' | 'slideshow-video-maker' | 'how-to-video-maker' | 'science-explainer-video' | 'history-lesson-video-maker' | 'tutorial-video-generator' | 'ai-satisfying-video-generator' | 'create-minecraft-parkour-video' | 'italian-brainrot-generator' | 'pdf-to-brainrot' | 'space-background-video-maker' | 'subway-surfers-video-generator' | 'temple-run-video-generator' | 'text-to-brainrot-video-generator' | 'create-attack-on-titan-videos' | 'create-dragonball-videos' | 'create-dungeons-and-dragons-videos' | 'create-fortnite-videos' | 'create-star-wars-videos' | 'create-stranger-things-videos' | 'create-warhammer-40k-videos' | 'disney-pixar-video-generator' | 'create-game-of-thrones-videos' | 'create-harry-potter-videos' | 'create-manga-video' | 'create-marvel-videos' | 'create-one-piece-videos' | 'create-pokemon-videos' | 'create-rick-and-morty-videos' | 'create-short-from-your-stream' | 'ghibli-ai-video-generator' | 'minecraft-ai-video-generator' | 'naruto-ai-generator' | 'roblox-animation-maker'}; export type GetApiToolsToolIdOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const tool = z.object({id: z.string(), label: z.string(), description: z.string().optional(), category: z.string().optional(), path: z.string(), markdownPath: z.string().optional(), createHref: z.string()}); 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 }; /** * Get one Studio tool * * GET /tools/{toolId} */ export const getApiToolsToolId = async (args: GetApiToolsToolIdArgs, options?: GetApiToolsToolIdOptions) => { const {baseUrl = "https://studio.listnr.ai/api/v1", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/tools/${encodeURIComponent(String(args.toolId))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(tool, await res.json()) };