import type { OperationResult, RequestDispatchOptions } from '../client'; import type { Client } from '../generated/client'; import { templatesContentGet, templatesDelete, templatesGet, templatesList, } from '../generated/sdk.gen'; import type { ListTemplatesResponse, Template } from '../generated/types.gen'; import type { FilesResource } from './files'; type Dispatch = ( call: () => Promise>, options?: RequestDispatchOptions ) => Promise; type SignalOptions = { signal?: AbortSignal }; type UploadOptions = SignalOptions & { /** Required only when `file` is a nameless Blob. */ filename?: string; name?: string; description?: string; }; type FileIdOptions = SignalOptions & { name?: string; description?: string; }; const TEMPORARY_UPLOAD_CLEANUP_TIMEOUT_MS = 10_000; function temporaryUploadCleanupSignal(): AbortSignal { return AbortSignal.timeout(TEMPORARY_UPLOAD_CLEANUP_TIMEOUT_MS); } function filenameFor(file: Blob | File, filename?: string): string { const resolved = filename ?? (typeof File !== 'undefined' && file instanceof File ? file.name : undefined); if (!resolved) throw new Error('filename is required when uploading a Blob'); return resolved; } export class TemplatesResource { constructor( private readonly client: Client, private readonly dispatch: Dispatch, private readonly files: FilesResource ) {} async list( options: SignalOptions & { limit?: number; offset?: number } = {} ): Promise { return this.dispatch(() => templatesList({ client: this.client, query: { limit: options.limit, offset: options.offset }, signal: options.signal, }) ); } async get(templateId: string, options: SignalOptions = {}): Promise