@cosmicjs/sdk
Version:
The official client module for Cosmic. This module helps you easily add dynamic content to your website or application using the Cosmic headless CMS.
408 lines (389 loc) • 13.8 kB
TypeScript
/**
* Browser-compatible EventEmitter implementation
* This provides the same API as Node.js EventEmitter but works in browser environments
*/
declare class EventEmitter {
private events;
on(event: string, listener: Function): this;
emit(event: string, ...args: any[]): boolean;
off(event: string, listener?: Function): this;
removeListener(event: string, listener: Function): this;
removeAllListeners(event?: string): this;
listeners(event: string): Function[];
listenerCount(event: string): number;
once(event: string, listener: Function): this;
}
type APIConfig = {
apiUrl: string;
uploadUrl: string;
};
type BucketConfig = {
bucketSlug: string;
readKey: string;
writeKey?: string;
apiVersion?: 'v3';
apiEnvironment?: 'staging' | 'production';
custom?: APIConfig;
};
interface GenerateTextOptions {
prompt?: string;
media_url?: string;
model?: string;
max_tokens?: number;
stream?: boolean;
messages?: Array<{
role: 'user' | 'assistant';
content: string;
}>;
}
interface GenerateImageOptions {
prompt: string;
model?: 'gemini-3.1-flash-image-preview' | 'gemini-3-pro-image-preview' | 'dall-e-3' | (string & {});
metadata?: Record<string, any>;
folder?: string;
alt_text?: string;
}
interface GenerateVideoOptions {
prompt: string;
model?: 'veo-3.1-fast-generate-preview' | 'veo-3.1-generate-preview';
duration?: 4 | 6 | 8;
resolution?: '720p' | '1080p';
reference_images?: string[];
metadata?: Record<string, any>;
folder?: string;
}
interface ExtendVideoOptions {
prompt: string;
media_id: string;
model?: 'veo-3.1-fast-generate-preview' | 'veo-3.1-generate-preview';
metadata?: Record<string, any>;
folder?: string;
}
interface GenerateAudioOptions {
prompt: string;
voice?: 'alloy' | 'ash' | 'coral' | 'echo' | 'fable' | 'nova' | 'onyx' | 'sage' | 'shimmer';
model?: 'tts-1' | 'tts-1-hd';
metadata?: Record<string, any>;
folder?: string;
}
interface AudioGenerationResponse {
media: {
id: string;
name: string;
original_name: string;
size: number;
type: string;
bucket: string;
created_at: string;
created_by: string | null;
modified_at: string;
modified_by: string | null;
alt_text?: string;
url: string;
imgix_url: string;
metadata?: {
prompt: string;
model: string;
voice: string;
duration_estimate: string;
[key: string]: any;
};
folder?: string | null;
};
usage: {
input_tokens: number;
output_tokens: number;
total_tokens: number;
};
}
interface TextGenerationResponseBase {
text: string;
usage: {
input_tokens: number;
output_tokens: number;
};
}
type TextGenerationResponse = TextGenerationResponseBase;
interface ImageGenerationResponse {
media: {
id: string;
name: string;
original_name: string;
size: number;
type: string;
bucket: string;
created_at: string;
created_by: string | null;
modified_at: string;
modified_by: string | null;
width: number;
height: number;
alt_text?: string;
url: string;
imgix_url: string;
metadata?: Record<string, any>;
folder?: string | null;
};
revised_prompt: string;
}
interface VideoGenerationResponse {
media: {
id: string;
name: string;
original_name: string;
size: number;
type: string;
bucket: string;
created_at: string;
created_by: string | null;
modified_at: string;
modified_by: string | null;
alt_text?: string;
url: string;
imgix_url: string;
location?: string;
metadata?: {
duration: number;
resolution: string;
generation_time_seconds: number;
[key: string]: any;
};
folder?: string | null;
};
usage: {
input_tokens: number;
output_tokens: number;
total_tokens: number;
};
generation_time_seconds: number;
}
interface VideoExtensionResponse {
media: {
id: string;
name: string;
original_name: string;
size: number;
type: string;
bucket: string;
created_at: string;
created_by: string | null;
modified_at: string;
modified_by: string | null;
alt_text?: string;
url: string;
imgix_url: string;
location?: string;
metadata?: {
duration: number;
resolution: string;
generation_time_seconds: number;
is_extension: boolean;
source_media_id: string;
source_veo_uri: string;
veo_file_uri: string;
[key: string]: any;
};
folder?: string | null;
};
usage: {
input_tokens: number;
output_tokens: number;
total_tokens: number;
};
generation_time_seconds: number;
source_media_id: string;
is_extension: boolean;
}
/**
* A class for handling streaming text generation responses
* with an Anthropic-like API.
*/
declare class TextStreamingResponse extends EventEmitter implements TextGenerationResponseBase {
private stream;
private usageInfo;
text: string;
constructor(stream: any);
private setupListeners;
/**
* Get the usage information if available
*/
get usage(): any;
/**
* Implement AsyncIterator interface to support for-await loops
*/
[Symbol.asyncIterator](): {
next: () => Promise<IteratorResult<any>>;
};
}
type GenericObject = Record<string, any>;
type NonEmptyObject<T extends Record<string, unknown>> = T extends Record<string, never> ? never : T;
type InsertMediaType = {
media: File | Blob | Buffer | {
buffer: Buffer;
originalname: string;
type?: string;
};
filename?: string;
contentType?: string;
folder?: string;
metadata?: GenericObject;
trigger_webhook?: boolean;
};
type PromiseFn<T> = (value: any) => T | PromiseLike<T>;
type PromiseFnType<T> = PromiseFn<T> | null;
declare class MethodChaining {
endpoint: string;
opts: any;
constructor(endpoint: string);
props(props: string | Array<string>): this;
private parseGraphQLProps;
sort(sort: string): this;
skip(skip: number): this;
useCache(): this;
}
declare class FindOneChaining$2 extends MethodChaining {
then<FulfilledResult = any, RejectedResult = never>(onFulfilled?: PromiseFnType<FulfilledResult>, onRejected?: PromiseFnType<RejectedResult>): Promise<void>;
}
declare class FindChaining$2 extends MethodChaining {
limit(limit: number): this;
then<FulfilledResult = any, RejectedResult = never>(onFulfilled?: PromiseFnType<FulfilledResult>, onRejected?: PromiseFnType<RejectedResult>): Promise<void>;
}
type InsertObjectRevisionType = {
title?: string;
slug?: string;
content?: string;
publish_at?: number;
unpublish_at?: number;
metadata?: GenericObject;
locale?: string;
thumbnail?: string;
trigger_webhook?: boolean;
pretty?: boolean;
};
/**
* Options for fetching object data.
* @property {Object} media - Options for media objects.
* @property {string} media.props - Comma-separated list of additional properties to fetch for media objects.
* @typedef {Object} MediaType
* @property {string} all - All media properties.
* @property {string} id - The unique identifier of the media object.
* @property {string} name - The name of the media file.
* @property {string} original_name - The original name of the media file.
* @property {number} size - The size of the media file in bytes.
* @property {string} type - The MIME type of the media file.
* @property {string} bucket - The bucket identifier.
* @property {string} created_at - The creation date of the media object.
* @property {string} folder - The folder where the media is stored.
* @property {string} url - The URL of the media file.
* @property {string} imgix_url - The Imgix URL of the media file.
* @property {string} alt_text - The alternative text for the media.
*/
type OptionsType$1 = {
media: {
props: string;
};
};
declare class Chaining$1 extends MethodChaining {
depth(depth: number): this;
status(status: string): this;
after(after: string): this;
options(options: OptionsType$1): this;
}
declare class FindOneChaining$1 extends Chaining$1 {
private bucketConfig;
constructor(endpoint: string, bucketConfig: BucketConfig);
then<FulfilledResult = any, RejectedResult = never>(onFulfilled?: PromiseFnType<FulfilledResult>, onRejected?: PromiseFnType<RejectedResult>): Promise<void>;
}
declare class FindChaining$1 extends Chaining$1 {
private bucketConfig;
constructor(endpoint: string, bucketConfig: BucketConfig);
limit(limit: number): this;
then<FulfilledResult = any, RejectedResult = never>(onFulfilled?: PromiseFnType<FulfilledResult>, onRejected?: PromiseFnType<RejectedResult>): Promise<void>;
}
/**
* Options for fetching object data.
* @property {Object} media - Options for media objects.
* @property {string} media.props - Comma-separated list of additional properties to fetch for media objects.
* @typedef {Object} MediaType
* @property {string} all - All media properties.
* @property {string} id - The unique identifier of the media object.
* @property {string} name - The name of the media file.
* @property {string} original_name - The original name of the media file.
* @property {number} size - The size of the media file in bytes.
* @property {string} type - The MIME type of the media file.
* @property {string} bucket - The bucket identifier.
* @property {string} created_at - The creation date of the media object.
* @property {string} folder - The folder where the media is stored.
* @property {string} url - The URL of the media file.
* @property {string} imgix_url - The Imgix URL of the media file.
* @property {string} alt_text - The alternative text for the media.
*/
type OptionsType = {
media: {
props: string;
};
};
declare class Chaining extends MethodChaining {
depth(depth: number): this;
status(status: string): this;
after(after: string): this;
options(options: OptionsType): this;
}
declare class FindChaining extends Chaining {
private bucketConfig;
constructor(endpoint: string, bucketConfig: BucketConfig);
limit(limit: number): this;
then<FulfilledResult = any, RejectedResult = never>(onFulfilled?: PromiseFnType<FulfilledResult>, onRejected?: PromiseFnType<RejectedResult>): Promise<void>;
}
declare class FindOneChaining extends Chaining {
private bucketConfig;
constructor(endpoint: string, bucketConfig: BucketConfig);
then<FulfilledResult = any, RejectedResult = never>(onFulfilled?: PromiseFnType<FulfilledResult>, onRejected?: PromiseFnType<RejectedResult>): Promise<void>;
}
type BatchOperation = {
method: 'add' | 'edit' | 'delete';
object_id?: string;
object?: GenericObject;
trigger_webhook?: boolean;
};
declare const createBucketClient: (config: BucketConfig) => {
objects: {
find(query: GenericObject): FindChaining;
findOne<T extends Record<string, unknown>>(query: NonEmptyObject<T>): FindOneChaining;
insertOne(data: GenericObject): Promise<any>;
updateOne(id: string, updates: GenericObject): Promise<any>;
deleteOne(id: string, triggerWebhook?: boolean): Promise<any>;
batch(operations: BatchOperation[]): Promise<any>;
};
objectTypes: {
find(): Promise<any>;
findOne(slug: string): Promise<any>;
insertOne(data: GenericObject): Promise<any>;
updateOne(slug: string, updates: GenericObject): Promise<any>;
deleteOne(slug: string): Promise<any>;
};
objectRevisions: {
find(objectId: string): FindChaining$1;
findOne({ objectId, revisionId }: {
objectId: string;
revisionId: string;
}): FindOneChaining$1;
insertOne(objectId: string, data: InsertObjectRevisionType): Promise<any>;
};
media: {
find(query?: GenericObject | undefined): FindChaining$2;
findOne<T_1 extends Record<string, unknown>>(query: NonEmptyObject<T_1>): FindOneChaining$2;
insertOne(params: InsertMediaType): Promise<any>;
updateOne(id: string, updates: GenericObject): Promise<any>;
deleteOne(id: string, triggerWebhook?: boolean): Promise<any>;
};
ai: {
generateText: (options: GenerateTextOptions) => Promise<TextGenerationResponseBase | TextStreamingResponse>;
stream: (options: Omit<GenerateTextOptions, "stream">) => Promise<TextStreamingResponse>;
generateImage: (options: GenerateImageOptions) => Promise<ImageGenerationResponse>;
generateVideo: (options: GenerateVideoOptions) => Promise<VideoGenerationResponse>;
extendVideo: (options: ExtendVideoOptions) => Promise<VideoExtensionResponse>;
generateAudio: (options: GenerateAudioOptions) => Promise<AudioGenerationResponse>;
};
};
export { APIConfig, AudioGenerationResponse, BatchOperation, BucketConfig, ExtendVideoOptions, GenerateAudioOptions, GenerateImageOptions, GenerateTextOptions, GenerateVideoOptions, GenericObject, ImageGenerationResponse, PromiseFnType, TextGenerationResponse, TextStreamingResponse, VideoExtensionResponse, VideoGenerationResponse, createBucketClient };