UNPKG

@tsavo/creatify-api-ts

Version:

TypeScript client for the Creatify AI API

117 lines (105 loc) 4.3 kB
import { CreatifyApiOptions } from '../types'; import { TextToSpeech } from '../types'; import { ICreatifyApiClient } from '../types/api-client'; import { apiClientFactory } from '../client-factory'; /** * Client for interacting with the Creatify Text-to-Speech API * @see https://creatify.mintlify.app/api-reference/text-to-speech */ export class TextToSpeechApi { private client: ICreatifyApiClient; /** * Create a new TextToSpeechApi instance * @param options API client options * @param clientFactory Optional factory for creating API clients (useful for testing) */ constructor(options: CreatifyApiOptions, clientFactory = apiClientFactory) { this.client = clientFactory.createClient(options); } /** * Create a text-to-speech task to convert text into an audio file * @param params Parameters for the text-to-speech generation * @returns Promise resolving to the text-to-speech task response * @see https://creatify.mintlify.app/api-reference/text-to-speech/post-text-to-speech */ async createTextToSpeech( params: TextToSpeech.TextToSpeechParams ): Promise<TextToSpeech.TextToSpeechResponse> { return this.client.post<TextToSpeech.TextToSpeechResponse>('/api/text_to_speech/', params); } /** * Get the status and result of a text-to-speech task * @param id ID of the text-to-speech task * @returns Promise resolving to the text-to-speech task status and result * @see https://creatify.mintlify.app/api-reference/text-to-speech/get-text-to-speech- */ async getTextToSpeech(id: string): Promise<TextToSpeech.TextToSpeechResultResponse> { return this.client.get<TextToSpeech.TextToSpeechResultResponse>(`/api/text_to_speech/${id}/`); } /** * Get all text-to-speech tasks * @param page Page number (starts from 1) * @param limit Number of items per page * @returns Promise resolving to an array of text-to-speech tasks * @see https://creatify.mintlify.app/api-reference/text-to-speech/get-text-to-speech */ async getTextToSpeechList( page?: number, limit?: number ): Promise<TextToSpeech.TextToSpeechResultResponse[]> { return this.client.get<TextToSpeech.TextToSpeechResultResponse[]>('/api/text_to_speech/', { page, limit, }); } /** * Get paginated list of text-to-speech tasks * @param page Page number (starts from 1) * @param limit Number of items per page * @returns Promise resolving to paginated text-to-speech data * @see https://creatify.mintlify.app/api-reference/text-to-speech/get-text-to-speech */ async getTextToSpeechPaginated( page: number = 1, limit: number = 20 ): Promise<{ count: number; next: string | null; previous: string | null; results: TextToSpeech.TextToSpeechResultResponse[]; }> { return this.client.get('/api/text_to_speech/paginated/', { page, limit }); } /** * Helper method to create a text-to-speech and wait for completion * @param params Parameters for the text-to-speech generation * @param pollInterval Interval in milliseconds to check for completion (default: 5000) * @param maxAttempts Maximum number of polling attempts (default: 60, about 5 minutes) * @returns Promise resolving to the final text-to-speech result */ async createAndWaitForTextToSpeech( params: TextToSpeech.TextToSpeechParams, pollInterval = 5000, maxAttempts = 60 ): Promise<TextToSpeech.TextToSpeechResultResponse> { // Create the text-to-speech task const response = await this.createTextToSpeech(params); // Poll for completion let attempts = 0; let result = await this.getTextToSpeech(response.id); while (attempts < maxAttempts && result.status !== 'done' && result.status !== 'error') { // Wait for the specified interval await new Promise(resolve => setTimeout(resolve, pollInterval)); // Check the status again result = await this.getTextToSpeech(response.id); attempts++; } // Check if we reached max attempts without completion if (attempts >= maxAttempts && result.status !== 'done' && result.status !== 'error') { throw new Error( `Text-to-speech task ${response.id} did not complete within the timeout period` ); } return result; } }