@audialize/sdk 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -0
- package/dist/index.cjs +807 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +506 -3
- package/dist/index.d.ts +506 -3
- package/dist/index.js +765 -9
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/http/errors.ts","../src/http/HttpClient.ts","../src/workflows/JobPoller.ts","../src/resources/jobs.ts","../src/resources/languages.ts","../src/resources/subtitles.ts","../src/utils/retry.ts","../src/utils/multipart.ts","../src/resources/files.ts","../src/workflows/localize.ts","../src/client.ts"],"names":["delay","eventListeners"],"mappings":"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","file":"index.cjs","sourcesContent":["export class AudiolizeError extends Error {\n public readonly code: string;\n\n constructor(message: string, code: string) {\n super(message);\n this.name = this.constructor.name;\n this.code = code;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class AudiolizeApiError extends AudiolizeError {\n public readonly statusCode: number;\n public readonly requestId?: string | undefined;\n\n constructor(message: string, code: string, statusCode: number, requestId?: string) {\n super(message, code);\n this.statusCode = statusCode;\n this.requestId = requestId;\n }\n}\n\nexport class AuthenticationError extends AudiolizeApiError {\n constructor(message: string, requestId?: string) {\n super(message, 'AUTHENTICATION_ERROR', 401, requestId);\n }\n}\n\nexport class AuthorizationError extends AudiolizeApiError {\n constructor(message: string, requestId?: string) {\n super(message, 'AUTHORIZATION_ERROR', 403, requestId);\n }\n}\n\nexport class NotFoundError extends AudiolizeApiError {\n constructor(message: string, requestId?: string) {\n super(message, 'NOT_FOUND_ERROR', 404, requestId);\n }\n}\n\nexport class RateLimitError extends AudiolizeApiError {\n public readonly retryAfter?: number | undefined;\n\n constructor(message: string, retryAfter?: number, requestId?: string) {\n super(message, 'RATE_LIMIT_ERROR', 429, requestId);\n this.retryAfter = retryAfter;\n }\n}\n\nexport class PaywallError extends AudiolizeApiError {\n constructor(message: string, requestId?: string) {\n super(message, 'PAYWALL_ERROR', 402, requestId);\n }\n}\n\nexport class ServerError extends AudiolizeApiError {\n constructor(message: string, statusCode: number, requestId?: string) {\n super(message, 'SERVER_ERROR', statusCode, requestId);\n }\n}\n\nexport class AudiolizeUploadError extends AudiolizeError {\n constructor(message: string) {\n super(message, 'UPLOAD_ERROR');\n }\n}\n\nexport class AudiolizeTimeoutError extends AudiolizeError {\n constructor(message: string) {\n super(message, 'TIMEOUT_ERROR');\n }\n}\n\nexport class AudiolizeValidationError extends AudiolizeError {\n constructor(message: string) {\n super(message, 'VALIDATION_ERROR');\n }\n}\n","import {\n AudiolizeApiError,\n AudiolizeTimeoutError,\n AuthenticationError,\n AuthorizationError,\n NotFoundError,\n PaywallError,\n RateLimitError,\n ServerError,\n} from './errors';\n\nexport interface HttpClientOptions {\n apiKey: string;\n baseUrl?: string;\n timeout?: number;\n maxRetries?: number;\n fetch?: typeof fetch;\n}\n\nexport class HttpClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly timeout: number;\n private readonly maxRetries: number;\n private readonly fetchImpl: typeof fetch;\n\n constructor(options: HttpClientOptions) {\n if (!options.apiKey) {\n throw new Error('API key is required');\n }\n this.apiKey = options.apiKey;\n this.baseUrl = options.baseUrl || 'https://api.audialize.com';\n this.timeout = options.timeout || 30000;\n this.maxRetries = options.maxRetries ?? 3;\n this.fetchImpl = options.fetch || globalThis.fetch.bind(globalThis);\n }\n\n public async request<T>(path: string, options: RequestInit = {}): Promise<T> {\n const url = new URL(path, this.baseUrl).toString();\n const headers = new Headers(options.headers);\n \n headers.set('Authorization', `Bearer ${this.apiKey}`);\n if (!headers.has('Content-Type') && options.body && typeof options.body === 'string') {\n headers.set('Content-Type', 'application/json');\n }\n\n let attempt = 0;\n while (attempt <= this.maxRetries) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n const response = await this.fetchImpl(url, {\n ...options,\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (response.ok) {\n if (response.status === 204) {\n return {} as T;\n }\n return (await response.json()) as T;\n }\n\n await this.handleErrorResponse(response);\n } catch (error: unknown) {\n if (error instanceof AudiolizeApiError) {\n if (error instanceof RateLimitError && attempt < this.maxRetries) {\n const delayMs = error.retryAfter ? error.retryAfter * 1000 : this.getBackoffDelay(attempt);\n await this.delay(delayMs);\n attempt++;\n continue;\n }\n if (error.statusCode >= 500 && attempt < this.maxRetries) {\n await this.delay(this.getBackoffDelay(attempt));\n attempt++;\n continue;\n }\n throw error;\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n if (attempt < this.maxRetries) {\n await this.delay(this.getBackoffDelay(attempt));\n attempt++;\n continue;\n }\n\n throw new AudiolizeTimeoutError(`Request timeout after ${this.timeout}ms`);\n }\n\n if (attempt < this.maxRetries) {\n await this.delay(this.getBackoffDelay(attempt));\n attempt++;\n continue;\n }\n\n throw error;\n }\n }\n\n throw new Error('Max retries exceeded');\n }\n\n private async handleErrorResponse(response: Response): Promise<never> {\n let errorData: Record<string, unknown> = {};\n try {\n const parsed: unknown = await response.json();\n if (isRecord(parsed)) {\n errorData = parsed;\n }\n } catch {\n // Ignore JSON parse errors for error responses\n }\n\n const errorMessage = typeof errorData.error === 'string' ? errorData.error : undefined;\n const fallbackMessage = typeof errorData.message === 'string' ? errorData.message : undefined;\n const message = errorMessage || fallbackMessage || response.statusText;\n const requestId = response.headers.get('x-request-id') || undefined;\n\n switch (response.status) {\n case 401:\n throw new AuthenticationError(message, requestId);\n case 402:\n throw new PaywallError(message, requestId);\n case 403:\n throw new AuthorizationError(message, requestId);\n case 404:\n throw new NotFoundError(message, requestId);\n case 429: {\n const retryAfterHeader = response.headers.get('retry-after');\n const retryAfter = retryAfterHeader ? parseInt(retryAfterHeader, 10) : undefined;\n throw new RateLimitError(message, retryAfter, requestId);\n }\n default:\n if (response.status >= 500) {\n throw new ServerError(message, response.status, requestId);\n }\n throw new AudiolizeApiError(message, 'API_ERROR', response.status, requestId);\n }\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private getBackoffDelay(attempt: number): number {\n const baseDelay = 1000;\n const maxDelay = 60000;\n const delay = Math.min(baseDelay * Math.pow(2, attempt), maxDelay);\n // Add jitter\n return delay * (0.5 + Math.random() * 0.5);\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import type { JobsResource } from '../resources/jobs';\nimport type { Job, JobStep } from '../types/job';\nimport { AudiolizeTimeoutError } from '../http/errors';\n\nexport interface PollOptions {\n interval?: number; // ms between polls, default 3000\n maxInterval?: number; // max ms after backoff, default 15000\n timeout?: number; // total ms before AudiolizeTimeoutError, default 600000 (10 min)\n backoff?: boolean; // increase interval when step hasn't changed, default true\n}\n\ntype EventMap = {\n progress: (data: { step: JobStep | null; progress: number }) => void;\n completed: (job: Job) => void;\n failed: (error: Error) => void;\n};\n\ntype EventPayloadMap = {\n progress: { step: JobStep | null; progress: number };\n completed: Job;\n failed: Error;\n};\n\nexport class JobPoller {\n private readonly jobId: string;\n private readonly jobsResource: JobsResource;\n private readonly options: Required<PollOptions>;\n private currentInterval: number;\n private unchangedStepCount: number = 0;\n private lastStep: JobStep | null = null;\n private isPolling: boolean = false;\n private listeners: { [K in keyof EventMap]?: EventMap[K][] } = {};\n\n constructor(jobId: string, jobsResource: JobsResource, options?: PollOptions) {\n this.jobId = jobId;\n this.jobsResource = jobsResource;\n this.options = {\n interval: options?.interval ?? 3000,\n maxInterval: options?.maxInterval ?? 15000,\n timeout: options?.timeout ?? 600000,\n backoff: options?.backoff ?? true,\n };\n this.currentInterval = this.options.interval;\n }\n\n public on<K extends keyof EventMap>(event: K, listener: EventMap[K]): this {\n if (!this.listeners[event]) {\n this.listeners[event] = [];\n }\n this.listeners[event]!.push(listener);\n return this;\n }\n\n private emit(event: 'progress', payload: EventPayloadMap['progress']): void;\n private emit(event: 'completed', payload: EventPayloadMap['completed']): void;\n private emit(event: 'failed', payload: EventPayloadMap['failed']): void;\n private emit(event: keyof EventPayloadMap, payload: EventPayloadMap[keyof EventPayloadMap]): void {\n if (event === 'progress') {\n const eventListeners = this.listeners.progress ?? [];\n for (const listener of eventListeners) {\n listener(payload as EventPayloadMap['progress']);\n }\n return;\n }\n\n if (event === 'completed') {\n const eventListeners = this.listeners.completed ?? [];\n for (const listener of eventListeners) {\n listener(payload as EventPayloadMap['completed']);\n }\n return;\n }\n\n const eventListeners = this.listeners.failed ?? [];\n for (const listener of eventListeners) {\n listener(payload as EventPayloadMap['failed']);\n }\n }\n\n public async start(): Promise<Job> {\n if (this.isPolling) {\n throw new Error('Polling is already in progress');\n }\n this.isPolling = true;\n\n const startTime = Date.now();\n\n while (this.isPolling) {\n if (Date.now() - startTime > this.options.timeout) {\n this.isPolling = false;\n const error = new AudiolizeTimeoutError(`Job ${this.jobId} timed out after ${this.options.timeout}ms`);\n this.emit('failed', error);\n throw error;\n }\n\n try {\n const job = await this.jobsResource.get(this.jobId);\n\n if (job.status === 'completed') {\n this.isPolling = false;\n this.emit('completed', job);\n return job;\n }\n\n if (job.status === 'failed') {\n this.isPolling = false;\n const error = new Error(job.error || 'Job failed');\n this.emit('failed', error);\n throw error;\n }\n\n this.emit('progress', { step: job.currentStep, progress: job.progress });\n\n if (this.options.backoff) {\n if (job.currentStep === this.lastStep) {\n this.unchangedStepCount++;\n if (this.unchangedStepCount >= 3) {\n this.currentInterval = Math.min(this.currentInterval * 2, this.options.maxInterval);\n }\n } else {\n this.unchangedStepCount = 0;\n this.currentInterval = this.options.interval;\n this.lastStep = job.currentStep;\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, this.currentInterval));\n } catch (error) {\n this.isPolling = false;\n const err = error instanceof Error ? error : new Error(String(error));\n this.emit('failed', err);\n throw err;\n }\n }\n\n throw new Error('Polling stopped unexpectedly');\n }\n\n public stop(): void {\n this.isPolling = false;\n }\n}\n","import type { HttpClient } from '../http/HttpClient';\nimport type { Job } from '../types/job';\nimport type { ListOptions, PagedResponse } from '../types/common';\nimport { JobPoller, type PollOptions } from '../workflows/JobPoller';\n\nexport interface WaitForCompletionOptions extends PollOptions {\n onProgress?: (step: string | null, progress: number) => void;\n}\n\nexport class JobsResource {\n constructor(private readonly client: HttpClient) {}\n\n public async get(jobId: string): Promise<Job> {\n return this.client.request<Job>(`/jobs/${jobId}/status`);\n }\n\n public async list(options?: ListOptions): Promise<PagedResponse<Job>> {\n const query = new URLSearchParams();\n if (options?.limit) query.set('limit', options.limit.toString());\n if (options?.pageToken) query.set('pageToken', options.pageToken);\n\n const path = `/jobs${query.toString() ? `?${query.toString()}` : ''}`;\n return this.client.request<PagedResponse<Job>>(path);\n }\n\n /**\n * Polls until the job reaches `completed` or `failed`, then returns the final job.\n * Throws `AudiolizeTimeoutError` if the job does not complete within `options.timeout`.\n */\n public waitForCompletion(jobId: string, options?: WaitForCompletionOptions): Promise<Job> {\n const pollConfig: PollOptions = {};\n if (options?.interval !== undefined) pollConfig.interval = options.interval;\n if (options?.maxInterval !== undefined) pollConfig.maxInterval = options.maxInterval;\n if (options?.timeout !== undefined) pollConfig.timeout = options.timeout;\n if (options?.backoff !== undefined) pollConfig.backoff = options.backoff;\n\n const poller = new JobPoller(jobId, this, pollConfig);\n\n if (options?.onProgress) {\n poller.on('progress', ({ step, progress }) => {\n options.onProgress!(step, progress);\n });\n }\n\n return poller.start();\n }\n\n /**\n * Returns a `JobPoller` instance for event-driven polling.\n * Call `.start()` to begin, or listen to `progress`, `completed`, `failed` events.\n */\n public poll(jobId: string, options?: PollOptions): JobPoller {\n return new JobPoller(jobId, this, options);\n }\n}\n","import type { HttpClient } from '../http/HttpClient';\n\nexport interface Language {\n code: string;\n name: string;\n}\n\nexport class LanguagesResource {\n constructor(private readonly client: HttpClient) {}\n\n public async list(): Promise<Language[]> {\n return this.client.request<Language[]>('/supported-languages');\n }\n}\n","import type { HttpClient } from '../http/HttpClient';\nimport type { SubtitleFormat, SubtitleResult } from '../types/subtitle';\n\nexport class SubtitlesResource {\n constructor(private readonly client: HttpClient) {}\n\n public async download(jobId: string, language: string, format: SubtitleFormat): Promise<string | SubtitleResult> {\n const response = await this.client.request<{ url: string }>('/presigned-url', {\n method: 'POST',\n body: JSON.stringify({\n type: 'download',\n jobId,\n language,\n format,\n }),\n });\n\n const downloadResponse = await fetch(response.url);\n if (!downloadResponse.ok) {\n throw new Error(`Failed to download subtitles: ${downloadResponse.statusText}`);\n }\n\n if (format === 'json') {\n return downloadResponse.json() as Promise<SubtitleResult>;\n }\n\n return downloadResponse.text();\n }\n}\n","/**\n * Calculates exponential backoff with jitter.\n * formula: min(baseDelay * 2^attempt, maxDelay) * (0.5 + random * 0.5)\n */\nexport function getBackoffDelay(attempt: number, baseDelay = 1000, maxDelay = 60000): number {\n const exponential = Math.min(baseDelay * Math.pow(2, attempt), maxDelay);\n const jitter = 0.5 + Math.random() * 0.5;\n return Math.floor(exponential * jitter);\n}\n\nexport function delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport interface RetryOptions {\n maxRetries?: number;\n baseDelay?: number;\n maxDelay?: number;\n shouldRetry?: (error: unknown, attempt: number) => boolean;\n}\n\n/**\n * Runs `fn` with retry logic. Retries on transient errors up to `maxRetries` times.\n */\nexport async function withRetry<T>(fn: () => Promise<T>, options: RetryOptions = {}): Promise<T> {\n const { maxRetries = 3, baseDelay = 1000, maxDelay = 60000, shouldRetry } = options;\n\n let attempt = 0;\n while (true) {\n try {\n return await fn();\n } catch (error) {\n const isRetryable = shouldRetry ? shouldRetry(error, attempt) : true;\n if (!isRetryable || attempt >= maxRetries) {\n throw error;\n }\n await delay(getBackoffDelay(attempt, baseDelay, maxDelay));\n attempt++;\n }\n }\n}\n","import { AudiolizeUploadError } from '../http/errors';\nimport { withRetry } from './retry';\n\nexport interface UploadPart {\n partNumber: number;\n etag: string;\n}\n\nexport interface MultipartChunk {\n partNumber: number;\n url: string;\n data: Blob | Buffer;\n size: number;\n}\n\n/**\n * Splits a file-like input into chunks for multipart upload.\n * Returns an array of blobs (browser) or buffers (Node.js).\n */\nexport function splitIntoChunks(\n file: Blob | Buffer | File,\n partUrls: string[],\n): Promise<MultipartChunk[]> {\n const totalSize = file instanceof Blob ? file.size : file.length;\n const partCount = partUrls.length;\n const chunkSize = Math.ceil(totalSize / partCount);\n\n const chunks: MultipartChunk[] = [];\n for (let i = 0; i < partCount; i++) {\n const start = i * chunkSize;\n const end = Math.min(start + chunkSize, totalSize);\n\n let data: Blob | Buffer;\n if (file instanceof Blob) {\n data = file.slice(start, end);\n } else {\n // Node.js Buffer\n data = file.subarray(start, end);\n }\n\n chunks.push({\n partNumber: i + 1,\n url: partUrls[i]!,\n data,\n size: end - start,\n });\n }\n\n return Promise.resolve(chunks);\n}\n\n/**\n * Uploads a single part via PUT to its presigned GCS URL.\n * Returns the ETag from the response headers.\n */\nexport async function uploadPart(chunk: MultipartChunk): Promise<UploadPart> {\n const response = await withRetry(\n () =>\n fetch(chunk.url, {\n method: 'PUT',\n body: chunk.data as BodyInit,\n headers: {\n 'Content-Length': chunk.size.toString(),\n },\n }),\n { maxRetries: 3 },\n );\n\n if (!response.ok) {\n throw new AudiolizeUploadError(\n `Failed to upload part ${chunk.partNumber}: ${response.statusText}`,\n );\n }\n\n const etag = response.headers.get('etag');\n if (!etag) {\n throw new AudiolizeUploadError(`No ETag returned for part ${chunk.partNumber}`);\n }\n\n return { partNumber: chunk.partNumber, etag };\n}\n\n/**\n * Uploads all parts with bounded concurrency.\n * Emits progress via the `onProgress` callback: called with uploaded byte count and total bytes.\n */\nexport async function uploadAllParts(\n chunks: MultipartChunk[],\n concurrency = 4,\n onProgress?: (uploadedBytes: number, totalBytes: number) => void,\n): Promise<UploadPart[]> {\n const totalBytes = chunks.reduce((sum, c) => sum + c.size, 0);\n let uploadedBytes = 0;\n const results: UploadPart[] = [];\n\n // Process in batches of `concurrency`\n for (let i = 0; i < chunks.length; i += concurrency) {\n const batch = chunks.slice(i, i + concurrency);\n const batchResults = await Promise.all(\n batch.map(async (chunk) => {\n const part = await uploadPart(chunk);\n uploadedBytes += chunk.size;\n onProgress?.(uploadedBytes, totalBytes);\n return { part, index: chunk.partNumber - 1 };\n }),\n );\n for (const { part, index } of batchResults) {\n results[index] = part;\n }\n }\n\n return results;\n}\n","import type { HttpClient } from '../http/HttpClient';\nimport type {\n UploadOptions,\n PresignedUploadResponse,\n PresignedMultipartUploadResponse,\n CompleteMultipartUploadResponse,\n} from '../types/upload';\nimport { AudiolizeUploadError, AudiolizeValidationError } from '../http/errors';\nimport { splitIntoChunks, uploadAllParts } from '../utils/multipart';\nimport { withRetry } from '../utils/retry';\n\nexport type FileInput = string | Buffer | Blob | File | ReadableStream;\n\n/** Default file size above which multipart upload is used (100 MB). */\nexport const DEFAULT_MULTIPART_THRESHOLD = 100 * 1024 * 1024;\n\nexport interface SingleUploadOptions extends UploadOptions {\n onUploadProgress?: (percent: number) => void;\n}\n\nexport interface MultipartUploadOptions extends UploadOptions {\n /** Number of concurrent part uploads. Default: 4. */\n concurrency?: number;\n onUploadProgress?: (percent: number) => void;\n}\n\nexport class FilesResource {\n constructor(private readonly client: HttpClient) {}\n\n public async upload(file: FileInput, options: SingleUploadOptions): Promise<{ jobId: string }> {\n const response = await this.client.request<PresignedUploadResponse>('/presigned-url', {\n method: 'POST',\n body: JSON.stringify({\n type: 'upload',\n fileName: options.fileName,\n languages: options.languages,\n sourceLanguage: options.sourceLanguage,\n transcriptionOptions: options.transcriptionOptions,\n context: options.context,\n estimatedMinutes: options.estimatedMinutes,\n enableDubbing: options.enableDubbing,\n enableSdh: options.enableSdh,\n }),\n });\n\n const body = await resolveBody(file);\n\n const uploadResponse = await withRetry(\n () =>\n fetch(response.uploadUrl, {\n method: 'PUT',\n body: body as BodyInit,\n headers: {\n 'Content-Type': options.contentType || 'application/octet-stream',\n },\n }),\n { maxRetries: 3 },\n );\n\n if (!uploadResponse.ok) {\n throw new AudiolizeUploadError(`Failed to upload file: ${uploadResponse.statusText}`);\n }\n\n options.onUploadProgress?.(100);\n return { jobId: response.jobId };\n }\n\n public async uploadMultipart(\n file: Buffer | Blob | File,\n options: MultipartUploadOptions,\n ): Promise<{ jobId: string }> {\n const fileSize = file instanceof Blob ? file.size : file.length;\n if (fileSize === 0) {\n throw new AudiolizeValidationError('Cannot multipart-upload an empty file.');\n }\n\n const presigned = await this.client.request<PresignedMultipartUploadResponse>('/presigned-url', {\n method: 'POST',\n body: JSON.stringify({\n type: 'upload',\n multipart: true,\n fileSize,\n fileName: options.fileName,\n languages: options.languages,\n sourceLanguage: options.sourceLanguage,\n transcriptionOptions: options.transcriptionOptions,\n context: options.context,\n estimatedMinutes: options.estimatedMinutes,\n enableDubbing: options.enableDubbing,\n enableSdh: options.enableSdh,\n }),\n });\n\n const chunks = await splitIntoChunks(file, presigned.partUrls);\n\n const progressCallback = options.onUploadProgress;\n const onProgress = progressCallback\n ? (uploaded: number, total: number) =>\n progressCallback(Math.round((uploaded / total) * 100))\n : undefined;\n\n const parts = await uploadAllParts(chunks, options.concurrency ?? 4, onProgress);\n\n const completion = await this.client.request<CompleteMultipartUploadResponse>('/presigned-url', {\n method: 'POST',\n body: JSON.stringify({\n type: 'complete-multipart',\n uploadId: presigned.uploadId,\n uploadKey: presigned.uploadKey,\n parts,\n }),\n });\n\n if (!completion.success) {\n throw new AudiolizeUploadError('Multipart upload completion reported failure.');\n }\n\n return { jobId: presigned.jobId };\n }\n}\n\n/**\n * Resolves a FileInput to a body value suitable for `fetch` PUT requests.\n * Lazily imports Node.js `fs` so the browser bundle is not affected.\n */\nasync function resolveBody(\n file: FileInput,\n): Promise<Blob | Buffer | ArrayBufferView | ReadableStream> {\n if (typeof file === 'string') {\n // Treated as a file path in Node.js\n const { readFile } = await import('node:fs/promises');\n return readFile(file);\n }\n return file;\n}\n","import type { AudiolizeClient } from '../client';\nimport type { Job } from '../types/job';\nimport type { UploadOptions } from '../types/upload';\nimport { JobPoller, type PollOptions } from './JobPoller';\nimport { DEFAULT_MULTIPART_THRESHOLD, type SingleUploadOptions } from '../resources/files';\n\nexport interface LocalizeOptions extends Omit<UploadOptions, 'fileName'> {\n file: File | Blob | Buffer | string;\n fileName?: string;\n /**\n * File size threshold (bytes) above which multipart upload is used.\n * Defaults to 100 MB.\n */\n multipartThreshold?: number;\n pollOptions?: PollOptions;\n onUploadProgress?: (percent: number) => void;\n onProgress?: (step: string | null, progress: number) => void;\n}\n\nexport async function localize(client: AudiolizeClient, options: LocalizeOptions): Promise<Job> {\n const multipartThreshold = options.multipartThreshold ?? DEFAULT_MULTIPART_THRESHOLD;\n\n const uploadOptions: SingleUploadOptions = {\n fileName: options.fileName ?? (typeof options.file === 'string' ? options.file.split('/').pop() ?? 'upload' : 'upload'),\n languages: options.languages,\n ...(options.sourceLanguage !== undefined && { sourceLanguage: options.sourceLanguage }),\n ...(options.transcriptionOptions !== undefined && { transcriptionOptions: options.transcriptionOptions }),\n ...(options.context !== undefined && { context: options.context }),\n ...(options.estimatedMinutes !== undefined && { estimatedMinutes: options.estimatedMinutes }),\n ...(options.enableDubbing !== undefined && { enableDubbing: options.enableDubbing }),\n ...(options.enableSdh !== undefined && { enableSdh: options.enableSdh }),\n ...(options.onUploadProgress !== undefined && { onUploadProgress: options.onUploadProgress }),\n };\n\n const fileSize = getFileSize(options.file);\n let jobId: string;\n\n if (fileSize !== null && fileSize >= multipartThreshold && typeof options.file !== 'string') {\n const result = await client.files.uploadMultipart(options.file, {\n ...uploadOptions,\n concurrency: 4,\n });\n jobId = result.jobId;\n } else {\n const result = await client.files.upload(options.file, uploadOptions);\n jobId = result.jobId;\n }\n\n // Poll for completion\n const poller = new JobPoller(jobId, client.jobs, options.pollOptions);\n\n const progressCallback = options.onProgress;\n if (progressCallback) {\n poller.on('progress', ({ step, progress }) => {\n progressCallback(step, progress);\n });\n }\n\n return poller.start();\n}\n\nfunction getFileSize(file: File | Blob | Buffer | string): number | null {\n if (file instanceof Blob) return file.size;\n if (Buffer.isBuffer(file)) return file.length;\n return null;\n}\n","import { HttpClient, type HttpClientOptions } from './http/HttpClient';\nimport { JobsResource } from './resources/jobs';\nimport { LanguagesResource } from './resources/languages';\nimport { SubtitlesResource } from './resources/subtitles';\nimport { FilesResource } from './resources/files';\nimport { localize, type LocalizeOptions } from './workflows/localize';\nimport type { Job } from './types/job';\n\nexport interface AudiolizeClientOptions {\n apiKey: string;\n baseUrl?: string;\n timeout?: number;\n maxRetries?: number;\n}\n\nexport class AudiolizeClient {\n private readonly http: HttpClient;\n\n public readonly jobs: JobsResource;\n public readonly languages: LanguagesResource;\n public readonly subtitles: SubtitlesResource;\n public readonly files: FilesResource;\n\n constructor(options: AudiolizeClientOptions) {\n if (!options.apiKey) {\n throw new Error('API key is required');\n }\n\n const httpOptions: HttpClientOptions = {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl || 'https://api.audialize.com/v1',\n };\n if (options.timeout !== undefined) httpOptions.timeout = options.timeout;\n if (options.maxRetries !== undefined) httpOptions.maxRetries = options.maxRetries;\n\n this.http = new HttpClient(httpOptions);\n\n this.jobs = new JobsResource(this.http);\n this.languages = new LanguagesResource(this.http);\n this.subtitles = new SubtitlesResource(this.http);\n this.files = new FilesResource(this.http);\n }\n\n /**\n * High-level workflow to upload a file, create a job, and poll until completion.\n * @param options LocalizeOptions\n * @returns Promise<Job>\n */\n public async localize(options: LocalizeOptions): Promise<Job> {\n return localize(this, options);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/http/errors.ts","../src/http/HttpClient.ts","../src/workflows/JobPoller.ts","../src/resources/jobs.ts","../src/resources/highlights.ts","../src/resources/liveSessions.ts","../src/resources/commentary.ts","../src/resources/dubbing.ts","../src/resources/artifacts.ts","../src/resources/exportPackages.ts","../src/resources/languages.ts","../src/resources/subtitles.ts","../src/utils/retry.ts","../src/utils/multipart.ts","../src/resources/files.ts","../src/workflows/localize.ts","../src/client.ts","../src/types/domain.ts"],"names":["delay","eventListeners","isRecord"],"mappings":";;;AAAO,IAAM,cAAA,GAAN,cAA6B,KAAA,CAAM;AAAA,EACxB,IAAA;AAAA,EAEhB,WAAA,CAAY,SAAiB,IAAA,EAAc;AACzC,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA;AAC7B,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EAClD;AACF;AAEO,IAAM,iBAAA,GAAN,cAAgC,cAAA,CAAe;AAAA,EACpC,UAAA;AAAA,EACA,SAAA;AAAA,EAEhB,WAAA,CAAY,OAAA,EAAiB,IAAA,EAAc,UAAA,EAAoB,SAAA,EAAoB;AACjF,IAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AACnB,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,EACnB;AACF;AAEO,IAAM,mBAAA,GAAN,cAAkC,iBAAA,CAAkB;AAAA,EACzD,WAAA,CAAY,SAAiB,SAAA,EAAoB;AAC/C,IAAA,KAAA,CAAM,OAAA,EAAS,sBAAA,EAAwB,GAAA,EAAK,SAAS,CAAA;AAAA,EACvD;AACF;AAEO,IAAM,kBAAA,GAAN,cAAiC,iBAAA,CAAkB;AAAA,EACxD,WAAA,CAAY,SAAiB,SAAA,EAAoB;AAC/C,IAAA,KAAA,CAAM,OAAA,EAAS,qBAAA,EAAuB,GAAA,EAAK,SAAS,CAAA;AAAA,EACtD;AACF;AAEO,IAAM,aAAA,GAAN,cAA4B,iBAAA,CAAkB;AAAA,EACnD,WAAA,CAAY,SAAiB,SAAA,EAAoB;AAC/C,IAAA,KAAA,CAAM,OAAA,EAAS,iBAAA,EAAmB,GAAA,EAAK,SAAS,CAAA;AAAA,EAClD;AACF;AAEO,IAAM,cAAA,GAAN,cAA6B,iBAAA,CAAkB;AAAA,EACpC,UAAA;AAAA,EAEhB,WAAA,CAAY,OAAA,EAAiB,UAAA,EAAqB,SAAA,EAAoB;AACpE,IAAA,KAAA,CAAM,OAAA,EAAS,kBAAA,EAAoB,GAAA,EAAK,SAAS,CAAA;AACjD,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AACF;AAEO,IAAM,YAAA,GAAN,cAA2B,iBAAA,CAAkB;AAAA,EAClD,WAAA,CAAY,SAAiB,SAAA,EAAoB;AAC/C,IAAA,KAAA,CAAM,OAAA,EAAS,eAAA,EAAiB,GAAA,EAAK,SAAS,CAAA;AAAA,EAChD;AACF;AAEO,IAAM,WAAA,GAAN,cAA0B,iBAAA,CAAkB;AAAA,EACjD,WAAA,CAAY,OAAA,EAAiB,UAAA,EAAoB,SAAA,EAAoB;AACnE,IAAA,KAAA,CAAM,OAAA,EAAS,cAAA,EAAgB,UAAA,EAAY,SAAS,CAAA;AAAA,EACtD;AACF;AAEO,IAAM,oBAAA,GAAN,cAAmC,cAAA,CAAe;AAAA,EACvD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,SAAS,cAAc,CAAA;AAAA,EAC/B;AACF;AAEO,IAAM,qBAAA,GAAN,cAAoC,cAAA,CAAe;AAAA,EACxD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,SAAS,eAAe,CAAA;AAAA,EAChC;AACF;AAEO,IAAM,wBAAA,GAAN,cAAuC,cAAA,CAAe;AAAA,EAC3D,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,SAAS,kBAAkB,CAAA;AAAA,EACnC;AACF;;;ACzDO,IAAM,aAAN,MAAiB;AAAA,EACL,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EAEjB,YAAY,OAAA,EAA4B;AACtC,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,MAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,IACvC;AACA,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,2BAAA;AAClC,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,GAAA;AAClC,IAAA,IAAA,CAAK,UAAA,GAAa,QAAQ,UAAA,IAAc,CAAA;AACxC,IAAA,IAAA,CAAK,cAAA,GAAiB,OAAA,CAAQ,cAAA,IAAkB,EAAC;AACjD,IAAA,IAAA,CAAK,YAAY,OAAA,CAAQ,KAAA,IAAS,UAAA,CAAW,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,EACpE;AAAA,EAEA,MAAa,OAAA,CAAW,IAAA,EAAc,OAAA,GAAuB,EAAC,EAAe;AAC3E,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,OAAO,CAAA;AACjD,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAa,UAAA,CAAW,IAAA,EAAc,OAAA,GAAuB,EAAC,EAAsB;AAClF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AAAA,EACnC;AAAA,EAEA,MAAc,OAAA,CAAQ,IAAA,EAAc,OAAA,GAAuB,EAAC,EAAsB;AAChF,IAAA,MAAM,MAAM,IAAI,GAAA,CAAI,MAAM,IAAA,CAAK,OAAO,EAAE,QAAA,EAAS;AACjD,IAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,IAAA,CAAK,cAAc,CAAA;AAC/C,IAAA,MAAM,cAAA,GAAiB,IAAI,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA;AAClD,IAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AACrC,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,IACxB,CAAC,CAAA;AAED,IAAA,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,IAAA,CAAK,MAAM,CAAA;AACpC,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,QAAQ,IAAA,IAAQ,OAAO,OAAA,CAAQ,IAAA,KAAS,QAAA,EAAU;AACpF,MAAA,OAAA,CAAQ,GAAA,CAAI,gBAAgB,kBAAkB,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,OAAO,OAAA,IAAW,KAAK,UAAA,EAAY;AACjC,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,QAAA,MAAM,YAAY,UAAA,CAAW,MAAM,WAAW,KAAA,EAAM,EAAG,KAAK,OAAO,CAAA;AAEnE,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK;AAAA,UACzC,GAAG,OAAA;AAAA,UACH,OAAA;AAAA,UACA,QAAQ,UAAA,CAAW;AAAA,SACpB,CAAA;AAED,QAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,QAAA,IAAI,SAAS,EAAA,EAAI;AACf,UAAA,OAAO,QAAA;AAAA,QACT;AAEA,QAAA,MAAM,IAAA,CAAK,oBAAoB,QAAQ,CAAA;AAAA,MACzC,SAAS,KAAA,EAAgB;AACvB,QAAA,IAAI,iBAAiB,iBAAA,EAAmB;AACtC,UAAA,IAAI,KAAA,YAAiB,cAAA,IAAkB,OAAA,GAAU,IAAA,CAAK,UAAA,EAAY;AAChE,YAAA,MAAM,OAAA,GAAU,MAAM,UAAA,GAAa,KAAA,CAAM,aAAa,GAAA,GAAO,IAAA,CAAK,gBAAgB,OAAO,CAAA;AACzF,YAAA,MAAM,IAAA,CAAK,MAAM,OAAO,CAAA;AACxB,YAAA,OAAA,EAAA;AACA,YAAA;AAAA,UACF;AACA,UAAA,IAAI,KAAA,CAAM,UAAA,IAAc,GAAA,IAAO,OAAA,GAAU,KAAK,UAAA,EAAY;AACxD,YAAA,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAC,CAAA;AAC9C,YAAA,OAAA,EAAA;AACA,YAAA;AAAA,UACF;AACA,UAAA,MAAM,KAAA;AAAA,QACR;AAEA,QAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACzD,UAAA,IAAI,OAAA,GAAU,KAAK,UAAA,EAAY;AAC7B,YAAA,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAC,CAAA;AAC9C,YAAA,OAAA,EAAA;AACA,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,IAAI,qBAAA,CAAsB,CAAA,sBAAA,EAAyB,IAAA,CAAK,OAAO,CAAA,EAAA,CAAI,CAAA;AAAA,QAC3E;AAEA,QAAA,IAAI,OAAA,GAAU,KAAK,UAAA,EAAY;AAC7B,UAAA,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAC,CAAA;AAC9C,UAAA,OAAA,EAAA;AACA,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,EACxC;AAAA,EAEA,MAAc,oBAAoB,QAAA,EAAoC;AACpE,IAAA,IAAI,YAAqC,EAAC;AAC1C,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAkB,MAAM,QAAA,CAAS,IAAA,EAAK;AAC5C,MAAA,IAAI,QAAA,CAAS,MAAM,CAAA,EAAG;AACpB,QAAA,SAAA,GAAY,MAAA;AAAA,MACd;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,MAAM,eAAe,OAAO,SAAA,CAAU,KAAA,KAAU,QAAA,GAAW,UAAU,KAAA,GAAQ,MAAA;AAC7E,IAAA,MAAM,kBAAkB,OAAO,SAAA,CAAU,OAAA,KAAY,QAAA,GAAW,UAAU,OAAA,GAAU,MAAA;AACpF,IAAA,MAAM,OAAA,GAAU,YAAA,IAAgB,eAAA,IAAmB,QAAA,CAAS,UAAA;AAC5D,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,MAAA;AAE1D,IAAA,QAAQ,SAAS,MAAA;AAAQ,MACvB,KAAK,GAAA;AACH,QAAA,MAAM,IAAI,mBAAA,CAAoB,OAAA,EAAS,SAAS,CAAA;AAAA,MAClD,KAAK,GAAA;AACH,QAAA,MAAM,IAAI,YAAA,CAAa,OAAA,EAAS,SAAS,CAAA;AAAA,MAC3C,KAAK,GAAA;AACH,QAAA,MAAM,IAAI,kBAAA,CAAmB,OAAA,EAAS,SAAS,CAAA;AAAA,MACjD,KAAK,GAAA;AACH,QAAA,MAAM,IAAI,aAAA,CAAc,OAAA,EAAS,SAAS,CAAA;AAAA,MAC5C,KAAK,GAAA,EAAK;AACR,QAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA;AAC3D,QAAA,MAAM,UAAA,GAAa,gBAAA,GAAmB,QAAA,CAAS,gBAAA,EAAkB,EAAE,CAAA,GAAI,MAAA;AACvE,QAAA,MAAM,IAAI,cAAA,CAAe,OAAA,EAAS,UAAA,EAAY,SAAS,CAAA;AAAA,MACzD;AAAA,MACA;AACE,QAAA,IAAI,QAAA,CAAS,UAAU,GAAA,EAAK;AAC1B,UAAA,MAAM,IAAI,WAAA,CAAY,OAAA,EAAS,QAAA,CAAS,QAAQ,SAAS,CAAA;AAAA,QAC3D;AACA,QAAA,MAAM,IAAI,iBAAA,CAAkB,OAAA,EAAS,WAAA,EAAa,QAAA,CAAS,QAAQ,SAAS,CAAA;AAAA;AAChF,EACF;AAAA,EAEQ,MAAM,EAAA,EAA2B;AACvC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAAA,EACzD;AAAA,EAEQ,gBAAgB,OAAA,EAAyB;AAC/C,IAAA,MAAM,SAAA,GAAY,GAAA;AAClB,IAAA,MAAM,QAAA,GAAW,GAAA;AACjB,IAAA,MAAMA,MAAAA,GAAQ,KAAK,GAAA,CAAI,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA,EAAG,QAAQ,CAAA;AAEjE,IAAA,OAAOA,MAAAA,IAAS,GAAA,GAAM,IAAA,CAAK,MAAA,EAAO,GAAI,GAAA,CAAA;AAAA,EACxC;AACF,CAAA;AAEA,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;;;AC1JO,IAAM,YAAN,MAAgB;AAAA,EACJ,KAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACT,eAAA;AAAA,EACA,kBAAA,GAA6B,CAAA;AAAA,EAC7B,QAAA,GAA2B,IAAA;AAAA,EAC3B,SAAA,GAAqB,KAAA;AAAA,EACrB,YAAuD,EAAC;AAAA,EAEhE,WAAA,CAAY,KAAA,EAAe,YAAA,EAA4B,OAAA,EAAuB;AAC5E,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,QAAA,EAAU,SAAS,QAAA,IAAY,GAAA;AAAA,MAC/B,WAAA,EAAa,SAAS,WAAA,IAAe,IAAA;AAAA,MACrC,OAAA,EAAS,SAAS,OAAA,IAAW,GAAA;AAAA,MAC7B,OAAA,EAAS,SAAS,OAAA,IAAW;AAAA,KAC/B;AACA,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAK,OAAA,CAAQ,QAAA;AAAA,EACtC;AAAA,EAEO,EAAA,CAA6B,OAAU,QAAA,EAA6B;AACzE,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,EAAC;AAAA,IAC3B;AACA,IAAA,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,CAAG,IAAA,CAAK,QAAQ,CAAA;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAKQ,IAAA,CAAK,OAA8B,OAAA,EAAuD;AAChG,IAAA,IAAI,UAAU,UAAA,EAAY;AACxB,MAAA,MAAMC,eAAAA,GAAiB,IAAA,CAAK,SAAA,CAAU,QAAA,IAAY,EAAC;AACnD,MAAA,KAAA,MAAW,YAAYA,eAAAA,EAAgB;AACrC,QAAA,QAAA,CAAS,OAAsC,CAAA;AAAA,MACjD;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,UAAU,WAAA,EAAa;AACzB,MAAA,MAAMA,eAAAA,GAAiB,IAAA,CAAK,SAAA,CAAU,SAAA,IAAa,EAAC;AACpD,MAAA,KAAA,MAAW,YAAYA,eAAAA,EAAgB;AACrC,QAAA,QAAA,CAAS,OAAuC,CAAA;AAAA,MAClD;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,SAAA,CAAU,MAAA,IAAU,EAAC;AACjD,IAAA,KAAA,MAAW,YAAY,cAAA,EAAgB;AACrC,MAAA,QAAA,CAAS,OAAoC,CAAA;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,MAAa,KAAA,GAAsB;AACjC,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,IAClD;AACA,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAEjB,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,OAAO,KAAK,SAAA,EAAW;AACrB,MAAA,IAAI,KAAK,GAAA,EAAI,GAAI,SAAA,GAAY,IAAA,CAAK,QAAQ,OAAA,EAAS;AACjD,QAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,QAAA,MAAM,KAAA,GAAQ,IAAI,qBAAA,CAAsB,CAAA,IAAA,EAAO,IAAA,CAAK,KAAK,CAAA,iBAAA,EAAoB,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA,EAAA,CAAI,CAAA;AACrG,QAAA,IAAA,CAAK,IAAA,CAAK,UAAU,KAAK,CAAA;AACzB,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,MAAM,MAAM,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,KAAK,KAAK,CAAA;AAElD,QAAA,IAAI,GAAA,CAAI,WAAW,WAAA,EAAa;AAC9B,UAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,UAAA,IAAA,CAAK,IAAA,CAAK,aAAa,GAAG,CAAA;AAC1B,UAAA,OAAO,GAAA;AAAA,QACT;AAEA,QAAA,IAAI,GAAA,CAAI,WAAW,QAAA,EAAU;AAC3B,UAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,UAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,GAAA,CAAI,SAAS,YAAY,CAAA;AACjD,UAAA,IAAA,CAAK,IAAA,CAAK,UAAU,KAAK,CAAA;AACzB,UAAA,MAAM,KAAA;AAAA,QACR;AAEA,QAAA,IAAA,CAAK,IAAA,CAAK,YAAY,EAAE,IAAA,EAAM,IAAI,WAAA,EAAa,QAAA,EAAU,GAAA,CAAI,QAAA,EAAU,CAAA;AAEvE,QAAA,IAAI,IAAA,CAAK,QAAQ,OAAA,EAAS;AACxB,UAAA,IAAI,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,QAAA,EAAU;AACrC,YAAA,IAAA,CAAK,kBAAA,EAAA;AACL,YAAA,IAAI,IAAA,CAAK,sBAAsB,CAAA,EAAG;AAChC,cAAA,IAAA,CAAK,eAAA,GAAkB,KAAK,GAAA,CAAI,IAAA,CAAK,kBAAkB,CAAA,EAAG,IAAA,CAAK,QAAQ,WAAW,CAAA;AAAA,YACpF;AAAA,UACF,CAAA,MAAO;AACL,YAAA,IAAA,CAAK,kBAAA,GAAqB,CAAA;AAC1B,YAAA,IAAA,CAAK,eAAA,GAAkB,KAAK,OAAA,CAAQ,QAAA;AACpC,YAAA,IAAA,CAAK,WAAW,GAAA,CAAI,WAAA;AAAA,UACtB;AAAA,QACF;AAEA,QAAA,MAAM,IAAI,QAAQ,CAAC,OAAA,KAAY,WAAW,OAAA,EAAS,IAAA,CAAK,eAAe,CAAC,CAAA;AAAA,MAC1E,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,QAAA,MAAM,GAAA,GAAM,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACpE,QAAA,IAAA,CAAK,IAAA,CAAK,UAAU,GAAG,CAAA;AACvB,QAAA,MAAM,GAAA;AAAA,MACR;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD;AAAA,EAEO,IAAA,GAAa;AAClB,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA,EACnB;AACF;;;AC5GO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,MAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAqB;AAAA,EAElD,MAAa,MAAM,OAAA,EAAqD;AACtE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAA0B,aAAA,EAAe;AAAA,MAC1D,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,OAAO,OAAA,EAAuD;AACzE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,QAAiC,OAAA,EAAS;AAAA,MAC3E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,GAAI,OAAA,CAAQ,cAAA,KAAmB,UAAa,EAAE,cAAA,EAAgB,QAAQ,cAAA;AAAe,OACtF;AAAA,KACF,CAAA;AAED,IAAA,MAAM,QAAQ,cAAA,CAAe,QAAA,EAAU,OAAO,CAAA,IAAK,cAAA,CAAe,UAAU,IAAI,CAAA;AAChF,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,yBAAyB,uDAAuD,CAAA;AAAA,IAC5F;AAEA,IAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,QAAA,EAAU,SAAS,CAAA;AACnD,IAAA,MAAM,OAAA,GAAU,cAAA,CAAe,QAAA,EAAU,SAAS,CAAA;AAElD,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,GAAI,OAAA,KAAY,MAAA,IAAa,EAAE,OAAA,EAAQ;AAAA,MACvC,GAAI,OAAA,KAAY,MAAA,IAAa,EAAE,OAAA;AAAQ,KACzC;AAAA,EACF;AAAA,EAEA,MAAa,eAAA,CAAgB,KAAA,EAAe,OAAA,EAAoE;AAC9G,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAiC,CAAA,MAAA,EAAS,KAAK,CAAA,UAAA,CAAA,EAAc;AAAA,MAC9E,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,0BAAA,CACX,KAAA,EACA,QAAA,EACA,MACA,WAAA,EACoE;AACpE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,MAAA,EAAS,KAAK,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAA,EAAI;AAAA,MACpF,MAAA,EAAQ,KAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB;AAAA,OAClB;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAM,QAAA,CAAS,IAAA,EAAK;AAAA,MAC1B,WAAA,EAAa,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,kBAAA;AAAA,MACrD,YAAY,QAAA,CAAS;AAAA,KACvB;AAAA,EACF;AAAA,EAEA,MAAa,YAAA,CAAa,KAAA,EAAe,QAAA,EAAoD;AAC3F,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA,CAAiC,SAAS,KAAK,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAE,CAAA;AAAA,EAC5F;AAAA,EAEA,MAAa,UAAA,CAAW,KAAA,EAAe,QAAA,EAAqD;AAC1F,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,IAAA,IAAI,QAAA,EAAU,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,QAAQ,CAAA;AAC5C,IAAA,MAAM,IAAA,GAAO,CAAA,MAAA,EAAS,KAAK,CAAA,QAAA,EAAW,KAAA,CAAM,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACpF,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAiC,IAAI,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAa,eAAA,CAAgB,KAAA,EAAe,OAAA,EAAoE;AAC9G,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAiC,CAAA,MAAA,EAAS,KAAK,CAAA,QAAA,CAAA,EAAY;AAAA,MAC5E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,cAAA,CAAe,KAAA,EAAe,OAAA,EAAoE;AAC7G,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAiC,CAAA,MAAA,EAAS,KAAK,CAAA,gBAAA,CAAA,EAAoB;AAAA,MACpF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,aAAa,KAAA,EAAiD;AACzE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAiC,CAAA,MAAA,EAAS,KAAK,CAAA,UAAA,CAAY,CAAA;AAAA,EAChF;AAAA,EAEA,MAAa,SAAS,KAAA,EAAiD;AACrE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAiC,CAAA,MAAA,EAAS,KAAK,CAAA,MAAA,CAAQ,CAAA;AAAA,EAC5E;AAAA,EAEA,MAAa,QAAA,CAAS,KAAA,EAAe,QAAA,EAAqC;AACxE,IAAA,OAAO,KAAK,MAAA,CAAO,UAAA,CAAW,UAAU,KAAK,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAa,mBAAmB,OAAA,EAAoE;AAClG,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAiC,4BAAA,EAA8B;AAAA,MAChF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,WAAA,CAAY,KAAA,EAAe,OAAA,EAA+D;AACrG,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAA8B,CAAA,MAAA,EAAS,KAAK,CAAA,aAAA,CAAA,EAAiB;AAAA,MAC9E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,cAAA,CAAe,KAAA,EAAe,OAAA,EAAkE;AAC3G,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAA8B,CAAA,MAAA,EAAS,KAAK,CAAA,SAAA,CAAA,EAAa;AAAA,MAC1E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,yBAAA,CACX,KAAA,EACA,OAAA,EAC+B;AAC/B,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAA8B,CAAA,MAAA,EAAS,KAAK,CAAA,oBAAA,CAAA,EAAwB;AAAA,MACrF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,IAAI,KAAA,EAA6B;AAC5C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAa,CAAA,MAAA,EAAS,KAAK,CAAA,OAAA,CAAS,CAAA;AAAA,EACzD;AAAA,EAEA,MAAa,OAAO,KAAA,EAA2C;AAC7D,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAA2B,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,EAAI;AAAA,MAC9D,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,uBAAuB,KAAA,EAAwD;AAC1F,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAwC,CAAA,MAAA,EAAS,KAAK,CAAA,aAAA,CAAe,CAAA;AAAA,EAC1F;AAAA,EAEA,MAAa,aAAA,CAAc,KAAA,EAAe,OAAA,GAAmC,EAAC,EAAsC;AAClH,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,IAAA,IAAI,QAAQ,IAAA,EAAM,KAAA,CAAM,GAAA,CAAI,MAAA,EAAQ,QAAQ,IAAI,CAAA;AAChD,IAAA,IAAI,QAAQ,QAAA,EAAU,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,QAAQ,QAAQ,CAAA;AAC5D,IAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AAEtD,IAAA,MAAM,IAAA,GAAO,CAAA,MAAA,EAAS,KAAK,CAAA,UAAA,EAAa,KAAA,CAAM,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACtF,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAkC,IAAI,CAAA;AAAA,EAC3D;AAAA,EAEA,MAAa,kBAAA,CACX,KAAA,EACA,UAAA,EACA,OAAA,GAAwC,EAAC,EACD;AACxC,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA,CAAuC,SAAS,KAAK,CAAA,cAAA,EAAiB,UAAU,CAAA,KAAA,CAAA,EAAS;AAAA,MAC1G,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,eAAe,KAAA,EAAsD;AAChF,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAsC,CAAA,MAAA,EAAS,KAAK,CAAA,WAAA,CAAa,CAAA;AAAA,EACtF;AAAA,EAEA,MAAa,eAAe,KAAA,EAAuD;AACjF,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAuC,CAAA,MAAA,EAAS,KAAK,CAAA,WAAA,CAAa,CAAA;AAAA,EACvF;AAAA,EAEA,MAAa,WAAA,CACX,KAAA,EACA,OAAA,GAAwC,EAAC,EACD;AACxC,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,IAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AACtD,IAAA,IAAI,QAAQ,aAAA,EAAe,KAAA,CAAM,GAAA,CAAI,eAAA,EAAiB,QAAQ,aAAa,CAAA;AAE3E,IAAA,MAAM,IAAA,GAAO,CAAA,MAAA,EAAS,KAAK,CAAA,QAAA,EAAW,KAAA,CAAM,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACpF,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAuC,IAAI,CAAA;AAAA,EAChE;AAAA,EAEA,MAAa,KAAK,OAAA,EAAoD;AACpE,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,IAAA,IAAI,OAAA,EAAS,OAAO,KAAA,CAAM,GAAA,CAAI,SAAS,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AAC/D,IAAA,IAAI,SAAS,SAAA,EAAW,KAAA,CAAM,GAAA,CAAI,WAAA,EAAa,QAAQ,SAAS,CAAA;AAEhE,IAAA,MAAM,IAAA,GAAO,CAAA,KAAA,EAAQ,KAAA,CAAM,QAAA,EAAS,GAAI,IAAI,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACnE,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,QAAiB,IAAI,CAAA;AACnD,IAAA,OAAO,iBAAiB,GAAG,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,iBAAA,CAAkB,OAAe,OAAA,EAAkD;AACxF,IAAA,MAAM,aAA0B,EAAC;AACjC,IAAA,IAAI,OAAA,EAAS,QAAA,KAAa,MAAA,EAAW,UAAA,CAAW,WAAW,OAAA,CAAQ,QAAA;AACnE,IAAA,IAAI,OAAA,EAAS,WAAA,KAAgB,MAAA,EAAW,UAAA,CAAW,cAAc,OAAA,CAAQ,WAAA;AACzE,IAAA,IAAI,OAAA,EAAS,OAAA,KAAY,MAAA,EAAW,UAAA,CAAW,UAAU,OAAA,CAAQ,OAAA;AACjE,IAAA,IAAI,OAAA,EAAS,OAAA,KAAY,MAAA,EAAW,UAAA,CAAW,UAAU,OAAA,CAAQ,OAAA;AAEjE,IAAA,MAAM,MAAA,GAAS,IAAI,SAAA,CAAU,KAAA,EAAO,MAAM,UAAU,CAAA;AAEpD,IAAA,IAAI,SAAS,UAAA,EAAY;AACvB,MAAA,MAAA,CAAO,GAAG,UAAA,EAAY,CAAC,EAAE,IAAA,EAAM,UAAS,KAAM;AAC5C,QAAA,OAAA,CAAQ,UAAA,CAAY,MAAM,QAAQ,CAAA;AAAA,MACpC,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,OAAO,KAAA,EAAM;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,IAAA,CAAK,OAAe,OAAA,EAAkC;AAC3D,IAAA,OAAO,IAAI,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,OAAO,CAAA;AAAA,EAC3C;AACF;AAEA,SAAS,cAAA,CAAe,QAAiC,GAAA,EAAiC;AACxF,EAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA;AAC7C;AAEA,SAAS,eAAA,CAAgB,QAAiC,GAAA,EAAkC;AAC1F,EAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,EAAA,OAAO,OAAO,KAAA,KAAU,SAAA,GAAY,KAAA,GAAQ,MAAA;AAC9C;AAEA,SAAS,iBAAiB,GAAA,EAAkC;AAC1D,EAAA,IAAI,CAACC,SAAAA,CAAS,GAAG,CAAA,EAAG;AAClB,IAAA,OAAO,EAAE,KAAA,EAAO,EAAC,EAAE;AAAA,EACrB;AAEA,EAAA,MAAM,gBAAgB,GAAA,CAAI,KAAA;AAC1B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,EAAG;AAChC,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,aAAA;AAAA,MACP,GAAI,OAAO,GAAA,CAAI,aAAA,KAAkB,QAAA,GAAW,EAAE,aAAA,EAAe,GAAA,CAAI,aAAA,EAAc,GAAI;AAAC,KACtF;AAAA,EACF;AAEA,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,MAAM,aAAaA,SAAAA,CAAS,GAAA,CAAI,UAAU,CAAA,GAAI,IAAI,UAAA,GAAa,MAAA;AAC/D,EAAA,MAAM,gBACJ,OAAO,GAAA,CAAI,kBAAkB,QAAA,GACzB,GAAA,CAAI,gBACJ,OAAO,UAAA,EAAY,cAAA,KAAmB,QAAA,GACpC,WAAW,cAAA,GACX,OAAO,IAAI,gBAAA,KAAqB,QAAA,GAC9B,IAAI,gBAAA,GACJ,MAAA;AAEV,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,GAAI,aAAA,KAAkB,MAAA,GAAY,EAAE,aAAA,KAAkB;AAAC,KACzD;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,EAAC,EAAE;AACrB;AAEA,SAASA,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;;;ACrSO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAA6B,MAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAqB;AAAA,EAElD,MAAa,OAAO,OAAA,EAA2D;AAC7E,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAsB,aAAA,EAAe;AAAA,MACtD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,IAAA,CAAK,OAAA,GAAoC,EAAC,EAAsC;AAC3F,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,IAAA,IAAI,QAAQ,UAAA,EAAY,KAAA,CAAM,GAAA,CAAI,YAAA,EAAc,QAAQ,UAAU,CAAA;AAClE,IAAA,IAAI,QAAQ,QAAA,EAAU,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,QAAQ,QAAQ,CAAA;AAC5D,IAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AAEtD,IAAA,MAAM,IAAA,GAAO,CAAA,WAAA,EAAc,KAAA,CAAM,QAAA,EAAS,GAAI,IAAI,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACzE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAkC,IAAI,CAAA;AAAA,EAC3D;AAAA,EAEA,MAAa,IAAI,KAAA,EAAsC;AACrD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAsB,CAAA,YAAA,EAAe,KAAK,CAAA,CAAE,CAAA;AAAA,EACjE;AAAA,EAEA,MAAa,UAAU,KAAA,EAAkD;AACvE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAkC,CAAA,YAAA,EAAe,KAAK,CAAA,MAAA,CAAQ,CAAA;AAAA,EACnF;AAAA,EAEA,MAAa,QAAQ,MAAA,EAAuC;AAC1D,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAsB,CAAA,OAAA,EAAU,MAAM,CAAA,CAAE,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAa,aAAA,CAAc,MAAA,EAAgB,OAAA,EAA0D;AACnG,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAsB,CAAA,OAAA,EAAU,MAAM,CAAA,SAAA,CAAA,EAAa;AAAA,MACpE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,OAAA,CAAQ,MAAA,EAAgB,OAAA,EAA6D;AAChG,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAA8B,CAAA,OAAA,EAAU,MAAM,CAAA,SAAA,CAAA,EAAa;AAAA,MAC5E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,aAAa,MAAA,EAAmD;AAC3E,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAkC,CAAA,OAAA,EAAU,MAAM,CAAA,cAAA,CAAA,EAAkB;AAAA,MACrF,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AACF;;;ACpDO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAA6B,MAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAqB;AAAA,EAElD,MAAa,OAAO,OAAA,EAAyD;AAC3E,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAqB,gBAAA,EAAkB;AAAA,MACxD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,KAAK,OAAA,EAAqE;AACrF,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,IAAA,IAAI,OAAA,EAAS,OAAO,KAAA,CAAM,GAAA,CAAI,SAAS,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AAC/D,IAAA,IAAI,SAAS,SAAA,EAAW,KAAA,CAAM,GAAA,CAAI,WAAA,EAAa,QAAQ,SAAS,CAAA;AAChE,IAAA,IAAI,SAAS,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AAEvD,IAAA,MAAM,IAAA,GAAO,CAAA,cAAA,EAAiB,KAAA,CAAM,QAAA,EAAS,GAAI,IAAI,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AAC5E,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAiC,IAAI,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAa,IAAI,SAAA,EAAyC;AACxD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAqB,CAAA,eAAA,EAAkB,SAAS,CAAA,CAAE,CAAA;AAAA,EACvE;AAAA,EAEA,MAAa,oBAAoB,SAAA,EAAgE;AAC/F,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,MACjB,kBAAkB,SAAS,CAAA,kBAAA;AAAA,KAC7B;AAAA,EACF;AAAA,EAEA,MAAa,uBAAA,CACX,SAAA,EACA,OAAA,EAC0C;AAC1C,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,MACjB,kBAAkB,SAAS,CAAA,kBAAA,CAAA;AAAA,MAC3B;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA;AAC9B,KACF;AAAA,EACF;AAAA,EAEA,MAAa,IAAA,CAAK,SAAA,EAAmB,OAAA,GAAkC,EAAC,EAAyB;AAC/F,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAqB,CAAA,eAAA,EAAkB,SAAS,CAAA,KAAA,CAAA,EAAS;AAAA,MAC1E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AACF;;;ACpDO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAA6B,MAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAqB;AAAA,EAElD,MAAa,OAAO,OAAA,EAA6D;AAC/E,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAuB,aAAA,EAAe;AAAA,MACvD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,IAAA,CAAK,OAAA,GAAqC,EAAC,EAAuC;AAC7F,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,IAAA,IAAI,OAAA,EAAS,OAAO,KAAA,CAAM,GAAA,CAAI,SAAS,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AAC/D,IAAA,IAAI,SAAS,SAAA,EAAW,KAAA,CAAM,GAAA,CAAI,WAAA,EAAa,QAAQ,SAAS,CAAA;AAChE,IAAA,IAAI,SAAS,UAAA,EAAY,KAAA,CAAM,GAAA,CAAI,YAAA,EAAc,QAAQ,UAAU,CAAA;AACnE,IAAA,IAAI,SAAS,QAAA,EAAU,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,QAAQ,QAAQ,CAAA;AAC7D,IAAA,IAAI,SAAS,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AAEvD,IAAA,MAAM,IAAA,GAAO,CAAA,WAAA,EAAc,KAAA,CAAM,QAAA,EAAS,GAAI,IAAI,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACzE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAmC,IAAI,CAAA;AAAA,EAC5D;AAAA,EAEA,MAAa,IAAI,KAAA,EAAuC;AACtD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAuB,CAAA,YAAA,EAAe,KAAK,CAAA,CAAE,CAAA;AAAA,EAClE;AAAA,EAEA,MAAa,YAAY,KAAA,EAAsD;AAC7E,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAsC,CAAA,YAAA,EAAe,KAAK,CAAA,QAAA,CAAU,CAAA;AAAA,EACzF;AACF;;;AClCO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,MAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAqB;AAAA,EAElD,MAAa,IAAA,CAAK,OAAA,GAAkC,EAAC,EAAoC;AACvF,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,IAAA,IAAI,QAAQ,QAAA,EAAU,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,QAAQ,QAAQ,CAAA;AAC5D,IAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AACtD,IAAA,IAAI,OAAA,CAAQ,OAAO,KAAA,CAAM,GAAA,CAAI,SAAS,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AAC9D,IAAA,IAAI,QAAQ,SAAA,EAAW,KAAA,CAAM,GAAA,CAAI,WAAA,EAAa,QAAQ,SAAS,CAAA;AAE/D,IAAA,MAAM,IAAA,GAAO,CAAA,QAAA,EAAW,KAAA,CAAM,QAAA,EAAS,GAAI,IAAI,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACtE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAgC,IAAI,CAAA;AAAA,EACzD;AAAA,EAEA,MAAa,IAAI,KAAA,EAAoC;AACnD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAoB,CAAA,SAAA,EAAY,KAAK,CAAA,CAAE,CAAA;AAAA,EAC5D;AAAA,EAEA,MAAa,UAAU,KAAA,EAAoC;AACzD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAoB,CAAA,MAAA,EAAS,KAAK,CAAA,QAAA,CAAU,CAAA;AAAA,EACjE;AACF;;;ACjBO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,MAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAqB;AAAA,EAElD,MAAa,IAAA,CAAK,OAAA,GAAgC,EAAC,EAAkC;AACnF,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,IAAA,IAAI,OAAA,CAAQ,OAAO,KAAA,CAAM,GAAA,CAAI,SAAS,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AAC9D,IAAA,IAAI,QAAQ,SAAA,EAAW,KAAA,CAAM,GAAA,CAAI,WAAA,EAAa,QAAQ,SAAS,CAAA;AAC/D,IAAA,IAAI,QAAQ,SAAA,EAAW,KAAA,CAAM,GAAA,CAAI,WAAA,EAAa,QAAQ,SAAS,CAAA;AAC/D,IAAA,IAAI,QAAQ,OAAA,EAAS,KAAA,CAAM,GAAA,CAAI,SAAA,EAAW,QAAQ,OAAO,CAAA;AACzD,IAAA,IAAI,QAAQ,IAAA,EAAM,KAAA,CAAM,GAAA,CAAI,MAAA,EAAQ,QAAQ,IAAI,CAAA;AAChD,IAAA,IAAI,QAAQ,QAAA,EAAU,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,QAAQ,QAAQ,CAAA;AAC5D,IAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AACtD,IAAA,IAAI,QAAQ,YAAA,EAAc,KAAA,CAAM,GAAA,CAAI,cAAA,EAAgB,QAAQ,YAAY,CAAA;AAExE,IAAA,MAAM,IAAA,GAAO,CAAA,UAAA,EAAa,KAAA,CAAM,QAAA,EAAS,GAAI,IAAI,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACxE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAA8B,IAAI,CAAA;AAAA,EACvD;AAAA,EAEA,MAAa,IAAI,UAAA,EAAuC;AACtD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAkB,CAAA,WAAA,EAAc,UAAU,CAAA,CAAE,CAAA;AAAA,EACjE;AAAA,EAEA,MAAa,gBAAgB,UAAA,EAAwD;AACnF,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAmC,CAAA,WAAA,EAAc,UAAU,CAAA,WAAA,CAAA,EAAe;AAAA,MAC3F,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AACF;;;AC3BO,IAAM,yBAAN,MAA6B;AAAA,EAClC,YAA6B,MAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAqB;AAAA,EAElD,MAAa,IAAA,CAAK,OAAA,GAAqC,EAAC,EAAuC;AAC7F,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,IAAA,IAAI,OAAA,CAAQ,OAAO,KAAA,CAAM,GAAA,CAAI,SAAS,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AAC9D,IAAA,IAAI,QAAQ,SAAA,EAAW,KAAA,CAAM,GAAA,CAAI,WAAA,EAAa,QAAQ,SAAS,CAAA;AAC/D,IAAA,IAAI,QAAQ,SAAA,EAAW,KAAA,CAAM,GAAA,CAAI,WAAA,EAAa,QAAQ,SAAS,CAAA;AAC/D,IAAA,IAAI,QAAQ,OAAA,EAAS,KAAA,CAAM,GAAA,CAAI,SAAA,EAAW,QAAQ,OAAO,CAAA;AACzD,IAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AACtD,IAAA,IAAI,QAAQ,aAAA,EAAe,KAAA,CAAM,GAAA,CAAI,eAAA,EAAiB,QAAQ,aAAa,CAAA;AAE3E,IAAA,MAAM,IAAA,GAAO,CAAA,QAAA,EAAW,KAAA,CAAM,QAAA,EAAS,GAAI,IAAI,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACtE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAmC,IAAI,CAAA;AAAA,EAC5D;AAAA,EAEA,MAAa,IAAI,eAAA,EAAiD;AAChE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAuB,CAAA,SAAA,EAAY,eAAe,CAAA,CAAE,CAAA;AAAA,EACzE;AAAA,EAEA,MAAa,gBAAgB,eAAA,EAAkE;AAC7F,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAwC,CAAA,SAAA,EAAY,eAAe,CAAA,WAAA,CAAA,EAAe;AAAA,MACnG,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AACF;;;AC1BO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,MAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAqB;AAAA,EAElD,MAAa,IAAA,GAA4B;AACvC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,QAAiB,sBAAsB,CAAA;AACrE,IAAA,OAAO,iBAAiB,GAAG,CAAA;AAAA,EAC7B;AACF;AAEA,SAAS,iBAAiB,GAAA,EAA0B;AAClD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,GAAA,CAAI,OAAO,UAAU,CAAA;AAAA,EAC9B;AAEA,EAAA,IAAI,CAACA,SAAAA,CAAS,GAAG,CAAA,EAAG;AAClB,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,YAAY,GAAA,CAAI,SAAA;AACtB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC5B,IAAA,OAAO,SAAA,CAAU,OAAO,UAAU,CAAA;AAAA,EACpC;AAEA,EAAA,IAAIA,SAAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,SAAqB,EAAC;AAC5B,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAG;AAC5C,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,QAAA,MAAA,CAAO,IAAA,CAAK,GAAG,KAAA,CAAM,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,MACzC;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,EAAC;AACV;AAEA,SAAS,WAAW,KAAA,EAAmC;AACrD,EAAA,OAAOA,SAAAA,CAAS,KAAK,CAAA,IAAK,OAAO,MAAM,IAAA,KAAS,QAAA,IAAY,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA;AACpF;AAEA,SAASA,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;;;AC9CO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,MAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAqB;AAAA,EAElD,MAAa,QAAA,CAAS,KAAA,EAAe,QAAA,EAAkB,MAAA,EAA0D;AAC/G,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,QAAyB,gBAAA,EAAkB;AAAA,MAC5E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,IAAA,EAAM,UAAA;AAAA,QACN,KAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACD;AAAA,KACF,CAAA;AAED,IAAA,MAAM,gBAAA,GAAmB,MAAM,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA;AACjD,IAAA,IAAI,CAAC,iBAAiB,EAAA,EAAI;AACxB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,gBAAA,CAAiB,UAAU,CAAA,CAAE,CAAA;AAAA,IAChF;AAEA,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,OAAO,iBAAiB,IAAA,EAAK;AAAA,IAC/B;AAEA,IAAA,OAAO,iBAAiB,IAAA,EAAK;AAAA,EAC/B;AACF;;;ACxBO,SAAS,eAAA,CAAgB,OAAA,EAAiB,SAAA,GAAY,GAAA,EAAM,WAAW,GAAA,EAAe;AAC3F,EAAA,MAAM,WAAA,GAAc,KAAK,GAAA,CAAI,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA,EAAG,QAAQ,CAAA;AACvE,EAAA,MAAM,MAAA,GAAS,GAAA,GAAM,IAAA,CAAK,MAAA,EAAO,GAAI,GAAA;AACrC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,WAAA,GAAc,MAAM,CAAA;AACxC;AAEO,SAAS,MAAM,EAAA,EAA2B;AAC/C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACzD;AAYA,eAAsB,SAAA,CAAa,EAAA,EAAsB,OAAA,GAAwB,EAAC,EAAe;AAC/F,EAAA,MAAM,EAAE,aAAa,CAAA,EAAG,SAAA,GAAY,KAAM,QAAA,GAAW,GAAA,EAAO,aAAY,GAAI,OAAA;AAE5E,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,EAAG;AAAA,IAClB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,WAAA,GAAc,WAAA,GAAc,WAAA,CAAY,KAAA,EAAO,OAAO,CAAA,GAAI,IAAA;AAChE,MAAA,IAAI,CAAC,WAAA,IAAe,OAAA,IAAW,UAAA,EAAY;AACzC,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,KAAA,CAAM,eAAA,CAAgB,OAAA,EAAS,SAAA,EAAW,QAAQ,CAAC,CAAA;AACzD,MAAA,OAAA,EAAA;AAAA,IACF;AAAA,EACF;AACF;;;ACrBO,SAAS,eAAA,CACd,MACA,QAAA,EAC2B;AAC3B,EAAA,MAAM,SAAA,GAAY,IAAA,YAAgB,IAAA,GAAO,IAAA,CAAK,OAAO,IAAA,CAAK,MAAA;AAC1D,EAAA,MAAM,YAAY,QAAA,CAAS,MAAA;AAC3B,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,SAAA,GAAY,SAAS,CAAA;AAEjD,EAAA,MAAM,SAA2B,EAAC;AAClC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,IAAA,MAAM,QAAQ,CAAA,GAAI,SAAA;AAClB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,WAAW,SAAS,CAAA;AAEjD,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,MAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,IAC9B,CAAA,MAAO;AAEL,MAAA,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,GAAG,CAAA;AAAA,IACjC;AAEA,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,YAAY,CAAA,GAAI,CAAA;AAAA,MAChB,GAAA,EAAK,SAAS,CAAC,CAAA;AAAA,MACf,IAAA;AAAA,MACA,MAAM,GAAA,GAAM;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,OAAA,CAAQ,QAAQ,MAAM,CAAA;AAC/B;AAMA,eAAsB,WAAW,KAAA,EAA4C;AAC3E,EAAA,MAAM,WAAW,MAAM,SAAA;AAAA,IACrB,MACE,KAAA,CAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA,EAAS;AAAA,QACP,gBAAA,EAAkB,KAAA,CAAM,IAAA,CAAK,QAAA;AAAS;AACxC,KACD,CAAA;AAAA,IACH,EAAE,YAAY,CAAA;AAAE,GAClB;AAEA,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,oBAAA;AAAA,MACR,CAAA,sBAAA,EAAyB,KAAA,CAAM,UAAU,CAAA,EAAA,EAAK,SAAS,UAAU,CAAA;AAAA,KACnE;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AACxC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,IAAI,oBAAA,CAAqB,CAAA,0BAAA,EAA6B,KAAA,CAAM,UAAU,CAAA,CAAE,CAAA;AAAA,EAChF;AAEA,EAAA,OAAO,EAAE,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,IAAA,EAAK;AAC9C;AAMA,eAAsB,cAAA,CACpB,MAAA,EACA,WAAA,GAAc,CAAA,EACd,UAAA,EACuB;AACvB,EAAA,MAAM,UAAA,GAAa,OAAO,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AAC5D,EAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,EAAA,MAAM,UAAwB,EAAC;AAG/B,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,KAAK,WAAA,EAAa;AACnD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,IAAI,WAAW,CAAA;AAC7C,IAAA,MAAM,YAAA,GAAe,MAAM,OAAA,CAAQ,GAAA;AAAA,MACjC,KAAA,CAAM,GAAA,CAAI,OAAO,KAAA,KAAU;AACzB,QAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,KAAK,CAAA;AACnC,QAAA,aAAA,IAAiB,KAAA,CAAM,IAAA;AACvB,QAAA,UAAA,GAAa,eAAe,UAAU,CAAA;AACtC,QAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,CAAM,aAAa,CAAA,EAAE;AAAA,MAC7C,CAAC;AAAA,KACH;AACA,IAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,YAAA,EAAc;AAC1C,MAAA,OAAA,CAAQ,KAAK,CAAA,GAAI,IAAA;AAAA,IACnB;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;;;AChGO,IAAM,2BAAA,GAA8B,MAAM,IAAA,GAAO;AAYjD,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAA6B,MAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAqB;AAAA,EAElD,MAAa,mBAAmB,OAAA,EAA6D;AAC3F,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAA8B,gBAAA,EAAkB;AAAA,MACjE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,MAAA,CAAO,IAAA,EAAiB,OAAA,EAA0D;AAC7F,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,QAAiC,gBAAA,EAAkB;AAAA,MACpF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,IAAA,EAAM,QAAA;AAAA,QACN,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,gBAAgB,OAAA,CAAQ,cAAA;AAAA,QACxB,sBAAsB,OAAA,CAAQ,oBAAA;AAAA,QAC9B,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,QAC1B,eAAe,OAAA,CAAQ,aAAA;AAAA,QACvB,WAAW,OAAA,CAAQ;AAAA,OACpB;AAAA,KACF,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAAY,IAAI,CAAA;AAEnC,IAAA,MAAM,iBAAiB,MAAM,SAAA;AAAA,MAC3B,MACE,KAAA,CAAM,QAAA,CAAS,SAAA,EAAW;AAAA,QACxB,MAAA,EAAQ,KAAA;AAAA,QACR,IAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,QAAQ,WAAA,IAAe;AAAA;AACzC,OACD,CAAA;AAAA,MACH,EAAE,YAAY,CAAA;AAAE,KAClB;AAEA,IAAA,IAAI,CAAC,eAAe,EAAA,EAAI;AACtB,MAAA,MAAM,IAAI,oBAAA,CAAqB,CAAA,uBAAA,EAA0B,cAAA,CAAe,UAAU,CAAA,CAAE,CAAA;AAAA,IACtF;AAEA,IAAA,OAAA,CAAQ,mBAAmB,GAAG,CAAA;AAC9B,IAAA,OAAO,EAAE,KAAA,EAAO,QAAA,CAAS,KAAA,EAAM;AAAA,EACjC;AAAA,EAEA,MAAa,eAAA,CACX,IAAA,EACA,OAAA,EAC4B;AAC5B,IAAA,MAAM,QAAA,GAAW,IAAA,YAAgB,IAAA,GAAO,IAAA,CAAK,OAAO,IAAA,CAAK,MAAA;AACzD,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,MAAM,IAAI,yBAAyB,wCAAwC,CAAA;AAAA,IAC7E;AAEA,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,MAAA,CAAO,QAA0C,gBAAA,EAAkB;AAAA,MAC9F,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,IAAA;AAAA,QACX,QAAA;AAAA,QACA,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,gBAAgB,OAAA,CAAQ,cAAA;AAAA,QACxB,sBAAsB,OAAA,CAAQ,oBAAA;AAAA,QAC9B,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,QAC1B,eAAe,OAAA,CAAQ,aAAA;AAAA,QACvB,WAAW,OAAA,CAAQ;AAAA,OACpB;AAAA,KACF,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,MAAM,eAAA,CAAgB,IAAA,EAAM,UAAU,QAAQ,CAAA;AAE7D,IAAA,MAAM,mBAAmB,OAAA,CAAQ,gBAAA;AACjC,IAAA,MAAM,UAAA,GAAa,gBAAA,GACf,CAAC,QAAA,EAAkB,KAAA,KACnB,gBAAA,CAAiB,IAAA,CAAK,KAAA,CAAO,QAAA,GAAW,KAAA,GAAS,GAAG,CAAC,CAAA,GACrD,MAAA;AAEJ,IAAA,MAAM,QAAQ,MAAM,cAAA,CAAe,QAAQ,OAAA,CAAQ,WAAA,IAAe,GAAG,UAAU,CAAA;AAE/E,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,MAAA,CAAO,QAAyC,gBAAA,EAAkB;AAAA,MAC9F,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,IAAA,EAAM,oBAAA;AAAA,QACN,UAAU,SAAA,CAAU,QAAA;AAAA,QACpB,WAAW,SAAA,CAAU,SAAA;AAAA,QACrB;AAAA,OACD;AAAA,KACF,CAAA;AAED,IAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,MAAA,MAAM,IAAI,qBAAqB,+CAA+C,CAAA;AAAA,IAChF;AAEA,IAAA,OAAO,EAAE,KAAA,EAAO,SAAA,CAAU,KAAA,EAAM;AAAA,EAClC;AACF;AAMA,eAAe,YACb,IAAA,EAC2D;AAC3D,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAE5B,IAAA,MAAM,EAAE,QAAA,EAAS,GAAI,MAAM,OAAO,aAAkB,CAAA;AACpD,IAAA,OAAO,SAAS,IAAI,CAAA;AAAA,EACtB;AACA,EAAA,OAAO,IAAA;AACT;;;AC5HA,eAAsB,QAAA,CAAS,QAAyB,OAAA,EAAwC;AAC9F,EAAA,MAAM,kBAAA,GAAqB,QAAQ,kBAAA,IAAsB,2BAAA;AAEzD,EAAA,MAAM,aAAA,GAAqC;AAAA,IACzC,QAAA,EAAU,OAAA,CAAQ,QAAA,KAAa,OAAO,QAAQ,IAAA,KAAS,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,MAAS,QAAA,GAAW,QAAA,CAAA;AAAA,IAC9G,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,GAAI,OAAA,CAAQ,cAAA,KAAmB,UAAa,EAAE,cAAA,EAAgB,QAAQ,cAAA,EAAe;AAAA,IACrF,GAAI,OAAA,CAAQ,oBAAA,KAAyB,UAAa,EAAE,oBAAA,EAAsB,QAAQ,oBAAA,EAAqB;AAAA,IACvG,GAAI,OAAA,CAAQ,OAAA,KAAY,UAAa,EAAE,OAAA,EAAS,QAAQ,OAAA,EAAQ;AAAA,IAChE,GAAI,OAAA,CAAQ,gBAAA,KAAqB,UAAa,EAAE,gBAAA,EAAkB,QAAQ,gBAAA,EAAiB;AAAA,IAC3F,GAAI,OAAA,CAAQ,aAAA,KAAkB,UAAa,EAAE,aAAA,EAAe,QAAQ,aAAA,EAAc;AAAA,IAClF,GAAI,OAAA,CAAQ,SAAA,KAAc,UAAa,EAAE,SAAA,EAAW,QAAQ,SAAA,EAAU;AAAA,IACtE,GAAI,OAAA,CAAQ,gBAAA,KAAqB,UAAa,EAAE,gBAAA,EAAkB,QAAQ,gBAAA;AAAiB,GAC7F;AAEA,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAA;AACzC,EAAA,IAAI,KAAA;AAEJ,EAAA,IAAI,aAAa,IAAA,IAAQ,QAAA,IAAY,sBAAsB,OAAO,OAAA,CAAQ,SAAS,QAAA,EAAU;AAC3F,IAAA,MAAM,SAAS,MAAM,MAAA,CAAO,KAAA,CAAM,eAAA,CAAgB,QAAQ,IAAA,EAAM;AAAA,MAC9D,GAAG,aAAA;AAAA,MACH,WAAA,EAAa;AAAA,KACd,CAAA;AACD,IAAA,KAAA,GAAQ,MAAA,CAAO,KAAA;AAAA,EACjB,CAAA,MAAO;AACL,IAAA,MAAM,SAAS,MAAM,MAAA,CAAO,MAAM,MAAA,CAAO,OAAA,CAAQ,MAAM,aAAa,CAAA;AACpE,IAAA,KAAA,GAAQ,MAAA,CAAO,KAAA;AAAA,EACjB;AAGA,EAAA,MAAM,SAAS,IAAI,SAAA,CAAU,OAAO,MAAA,CAAO,IAAA,EAAM,QAAQ,WAAW,CAAA;AAEpE,EAAA,MAAM,mBAAmB,OAAA,CAAQ,UAAA;AACjC,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,MAAA,CAAO,GAAG,UAAA,EAAY,CAAC,EAAE,IAAA,EAAM,UAAS,KAAM;AAC5C,MAAA,gBAAA,CAAiB,MAAM,QAAQ,CAAA;AAAA,IACjC,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,OAAO,KAAA,EAAM;AACtB;AAEA,SAAS,YAAY,IAAA,EAAoD;AACvE,EAAA,IAAI,IAAA,YAAgB,IAAA,EAAM,OAAO,IAAA,CAAK,IAAA;AACtC,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,SAAU,IAAA,CAAK,MAAA;AACvC,EAAA,OAAO,IAAA;AACT;;;AC3CO,IAAM,kBAAN,MAAsB;AAAA,EACV,IAAA;AAAA,EAED,IAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EAEhB,YAAY,OAAA,EAAiC;AAC3C,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,MAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,IACvC;AAEA,IAAA,MAAM,WAAA,GAAiC;AAAA,MACrC,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,OAAA,EAAS,QAAQ,OAAA,IAAW;AAAA,KAC9B;AACA,IAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,MAAA,EAAW,WAAA,CAAY,UAAU,OAAA,CAAQ,OAAA;AACjE,IAAA,IAAI,OAAA,CAAQ,UAAA,KAAe,MAAA,EAAW,WAAA,CAAY,aAAa,OAAA,CAAQ,UAAA;AACvE,IAAA,IAAI,OAAA,CAAQ,cAAA,KAAmB,MAAA,EAAW,WAAA,CAAY,iBAAiB,OAAA,CAAQ,cAAA;AAE/E,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,UAAA,CAAW,WAAW,CAAA;AAEtC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AACtC,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA;AAClD,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAA;AACtD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA;AAClD,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AAC5C,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AAChD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,sBAAA,CAAuB,IAAA,CAAK,IAAI,CAAA;AAC1D,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AAChD,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AAChD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,SAAS,OAAA,EAAwC;AAC5D,IAAA,OAAO,QAAA,CAAS,MAAM,OAAO,CAAA;AAAA,EAC/B;AACF;;;ACvEO,IAAM,mBAAA,GAAsB;AAAA,EACjC,KAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF;AAIO,IAAM,2BAAA,GAA8B;AAAA,EACzC,aAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF;AAIO,IAAM,sBAAA,GAAyB;AAAA,EACpC,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAIO,IAAM,mBAAA,GAAsB;AAAA,EACjC,SAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF;AAKO,IAAM,8BAAA,GAA8E;AAAA,EACzF,OAAA,EAAS,QAAA;AAAA,EACT,UAAA,EAAY,YAAA;AAAA,EACZ,SAAA,EAAW,WAAA;AAAA,EACX,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU,QAAA;AAAA,EACV,YAAA,EAAc,QAAA;AAAA,EACd,YAAA,EAAc,YAAA;AAAA,EACd,WAAA,EAAa,YAAA;AAAA,EACb,MAAA,EAAQ;AACV;AAEO,IAAM,2BAAA,GAA8B;AAAA,EACzC,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF;AAIO,IAAM,wBAAA,GAA2B;AAAA,EACtC,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF;AAKO,IAAM,oCAAA,GAA8F;AAAA,EACzG,YAAA,EAAc,cAAA;AAAA,EACd,gBAAA,EAAkB,kBAAA;AAAA,EAClB,YAAA,EAAc,cAAA;AAAA,EACd,WAAA,EAAa,aAAA;AAAA,EACb,kBAAA,EAAoB,sBAAA;AAAA,EACpB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,UAAA,EAAY;AACd;AAEO,IAAM,qBAAA,GAAwB;AAAA,EACnC,WAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAIO,IAAM,0BAAA,GAA6B;AAAA,EACxC,qBAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,2BAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF;AAIO,IAAM,sBAAA,GAAyB;AAAA,EACpC,QAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAIO,IAAM,2BAAA,GAA8B;AAAA,EACzC,wBAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF;AAIO,IAAM,oBAAA,GAAuB;AAAA,EAClC,QAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAIO,IAAM,yBAAA,GAA4B;AAAA,EACvC,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,0BAAA;AAAA,EACA;AACF;AAIO,IAAM,sBAAA,GAAyB;AAAA,EACpC,QAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAIO,IAAM,2BAAA,GAA8B;AAAA,EACzC,mBAAA;AAAA,EACA,yBAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,sBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF;AAIO,IAAM,uBAAA,GAA0B;AAAA,EACrC,QAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAIO,IAAM,4BAAA,GAA+B;AAAA,EAC1C,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF;AAIO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,aAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAIO,IAAM,cAAA,GAAiB;AAAA,EAC5B,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,0BAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF;AAIO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,MAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF;AAIO,IAAM,wBAAA,GAA2B;AAAA,EACtC,cAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF;AAIO,IAAM,sBAAA,GAAyB;AAAA,EACpC,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF;AAIO,IAAM,uBAAA,GAA0B;AAAA,EACrC,QAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAIO,IAAM,sBAAA,GAAyB;AAAA,EACpC,KAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF;AAIO,IAAM,4BAAA,GAA+B;AAAA,EAC1C,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF;AA+IO,IAAM,sBAAA,GAAoF;AAAA,EAC/F,OAAA,EAAS,CAAC,QAAA,EAAU,WAAW,CAAA;AAAA,EAC/B,MAAA,EAAQ,CAAC,YAAA,EAAc,QAAA,EAAU,WAAW,CAAA;AAAA,EAC5C,UAAA,EAAY,CAAC,WAAA,EAAa,QAAA,EAAU,WAAW,CAAA;AAAA,EAC/C,WAAW,EAAC;AAAA,EACZ,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,EACjB,SAAA,EAAW,CAAC,QAAQ;AACtB;AAEO,IAAM,+BAAA,GAA2F;AAAA,EACtG,SAAA,EAAW,CAAC,UAAA,EAAY,WAAW,CAAA;AAAA,EACnC,QAAA,EAAU,CAAC,MAAA,EAAQ,QAAA,EAAU,WAAW,CAAA;AAAA,EACxC,IAAA,EAAM,CAAC,YAAA,EAAc,QAAA,EAAU,WAAW,CAAA;AAAA,EAC1C,UAAA,EAAY,CAAC,WAAA,EAAa,QAAA,EAAU,WAAW,CAAA;AAAA,EAC/C,WAAW,EAAC;AAAA,EACZ,MAAA,EAAQ,CAAC,UAAU,CAAA;AAAA,EACnB,SAAA,EAAW,CAAC,UAAU;AACxB;AAEO,IAAM,gCAAA,GAA8F;AAAA,EACzG,MAAA,EAAQ,CAAC,YAAA,EAAc,QAAA,EAAU,WAAW,CAAA;AAAA,EAC5C,UAAA,EAAY,CAAC,WAAA,EAAa,QAAA,EAAU,WAAW,CAAA;AAAA,EAC/C,WAAW,EAAC;AAAA,EACZ,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,EACjB,SAAA,EAAW,CAAC,QAAQ;AACtB;AAEO,IAAM,8BAAA,GAAwF;AAAA,EACnG,MAAA,EAAQ,CAAC,YAAA,EAAc,QAAA,EAAU,WAAW,CAAA;AAAA,EAC5C,UAAA,EAAY,CAAC,SAAA,EAAW,WAAA,EAAa,UAAU,WAAW,CAAA;AAAA,EAC1D,OAAA,EAAS,CAAC,YAAA,EAAc,WAAA,EAAa,UAAU,WAAW,CAAA;AAAA,EAC1D,WAAW,EAAC;AAAA,EACZ,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,EACjB,SAAA,EAAW,CAAC,QAAQ;AACtB;AAEO,IAAM,gCAAA,GAA8F;AAAA,EACzG,MAAA,EAAQ,CAAC,YAAA,EAAc,QAAA,EAAU,WAAW,CAAA;AAAA,EAC5C,UAAA,EAAY,CAAC,iBAAA,EAAmB,OAAA,EAAS,UAAU,WAAW,CAAA;AAAA,EAC9D,eAAA,EAAiB,CAAC,OAAA,EAAS,QAAA,EAAU,WAAW,CAAA;AAAA,EAChD,OAAO,EAAC;AAAA,EACR,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,EACjB,SAAA,EAAW,CAAC,QAAQ;AACtB;AAEO,IAAM,iCAAA,GAAiG;AAAA,EAC5G,MAAA,EAAQ,CAAC,YAAA,EAAc,QAAA,EAAU,WAAW,CAAA;AAAA,EAC5C,UAAA,EAAY,CAAC,iBAAA,EAAmB,WAAA,EAAa,UAAU,WAAW,CAAA;AAAA,EAClE,eAAA,EAAiB,CAAC,WAAA,EAAa,QAAA,EAAU,WAAW,CAAA;AAAA,EACpD,WAAW,EAAC;AAAA,EACZ,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,EACjB,SAAA,EAAW,CAAC,QAAQ;AACtB;AAEO,IAAM,2BAAA,GAAiF;AAAA,EAC5F,WAAA,EAAa,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EAChC,MAAA,EAAQ,CAAC,YAAA,EAAc,QAAA,EAAU,WAAW,CAAA;AAAA,EAC5C,YAAY,CAAC,SAAA,EAAW,iBAAA,EAAmB,OAAA,EAAS,UAAU,WAAW,CAAA;AAAA,EACzE,OAAA,EAAS,CAAC,OAAA,EAAS,QAAA,EAAU,WAAW,CAAA;AAAA,EACxC,eAAA,EAAiB,CAAC,OAAA,EAAS,QAAA,EAAU,WAAW,CAAA;AAAA,EAChD,OAAO,EAAC;AAAA,EACR,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,EACjB,SAAA,EAAW,CAAC,QAAQ;AACtB;AAEO,IAAM,iCAAA,GAAiG;AAAA,EAC5G,MAAA,EAAQ,CAAC,YAAA,EAAc,QAAA,EAAU,WAAW,CAAA;AAAA,EAC5C,UAAA,EAAY,CAAC,SAAA,EAAW,OAAA,EAAS,UAAU,WAAW,CAAA;AAAA,EACtD,OAAA,EAAS,CAAC,OAAA,EAAS,QAAA,EAAU,WAAW,CAAA;AAAA,EACxC,OAAO,EAAC;AAAA,EACR,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,EACjB,SAAA,EAAW,CAAC,QAAQ;AACtB;AAEO,SAAS,mBAAmB,MAAA,EAAiD;AAClF,EAAA,IAAK,sBAAA,CAA6C,QAAA,CAAS,MAAM,CAAA,EAAG;AAClE,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,+BAA+B,MAAyB,CAAA;AACjE;AAEO,SAAS,wBAAwB,IAAA,EAAyD;AAC/F,EAAA,IAAK,2BAAA,CAAkD,QAAA,CAAS,IAAI,CAAA,EAAG;AACrE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,qCAAqC,IAA4B,CAAA;AAC1E;AAEO,SAAS,iBAAA,CACd,aAAA,EACA,IAAA,EACA,EAAA,EACS;AACT,EAAA,OAAO,aAAA,CAAc,IAAI,CAAA,EAAG,QAAA,CAAS,EAAE,CAAA,IAAK,KAAA;AAC9C","file":"index.cjs","sourcesContent":["export class AudiolizeError extends Error {\n public readonly code: string;\n\n constructor(message: string, code: string) {\n super(message);\n this.name = this.constructor.name;\n this.code = code;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class AudiolizeApiError extends AudiolizeError {\n public readonly statusCode: number;\n public readonly requestId?: string | undefined;\n\n constructor(message: string, code: string, statusCode: number, requestId?: string) {\n super(message, code);\n this.statusCode = statusCode;\n this.requestId = requestId;\n }\n}\n\nexport class AuthenticationError extends AudiolizeApiError {\n constructor(message: string, requestId?: string) {\n super(message, 'AUTHENTICATION_ERROR', 401, requestId);\n }\n}\n\nexport class AuthorizationError extends AudiolizeApiError {\n constructor(message: string, requestId?: string) {\n super(message, 'AUTHORIZATION_ERROR', 403, requestId);\n }\n}\n\nexport class NotFoundError extends AudiolizeApiError {\n constructor(message: string, requestId?: string) {\n super(message, 'NOT_FOUND_ERROR', 404, requestId);\n }\n}\n\nexport class RateLimitError extends AudiolizeApiError {\n public readonly retryAfter?: number | undefined;\n\n constructor(message: string, retryAfter?: number, requestId?: string) {\n super(message, 'RATE_LIMIT_ERROR', 429, requestId);\n this.retryAfter = retryAfter;\n }\n}\n\nexport class PaywallError extends AudiolizeApiError {\n constructor(message: string, requestId?: string) {\n super(message, 'PAYWALL_ERROR', 402, requestId);\n }\n}\n\nexport class ServerError extends AudiolizeApiError {\n constructor(message: string, statusCode: number, requestId?: string) {\n super(message, 'SERVER_ERROR', statusCode, requestId);\n }\n}\n\nexport class AudiolizeUploadError extends AudiolizeError {\n constructor(message: string) {\n super(message, 'UPLOAD_ERROR');\n }\n}\n\nexport class AudiolizeTimeoutError extends AudiolizeError {\n constructor(message: string) {\n super(message, 'TIMEOUT_ERROR');\n }\n}\n\nexport class AudiolizeValidationError extends AudiolizeError {\n constructor(message: string) {\n super(message, 'VALIDATION_ERROR');\n }\n}\n","import {\n AudiolizeApiError,\n AudiolizeTimeoutError,\n AuthenticationError,\n AuthorizationError,\n NotFoundError,\n PaywallError,\n RateLimitError,\n ServerError,\n} from './errors';\n\nexport interface HttpClientOptions {\n apiKey: string;\n baseUrl?: string;\n timeout?: number;\n maxRetries?: number;\n defaultHeaders?: Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport class HttpClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly timeout: number;\n private readonly maxRetries: number;\n private readonly defaultHeaders: Record<string, string>;\n private readonly fetchImpl: typeof fetch;\n\n constructor(options: HttpClientOptions) {\n if (!options.apiKey) {\n throw new Error('API key is required');\n }\n this.apiKey = options.apiKey;\n this.baseUrl = options.baseUrl || 'https://api.audialize.com';\n this.timeout = options.timeout || 30000;\n this.maxRetries = options.maxRetries ?? 3;\n this.defaultHeaders = options.defaultHeaders ?? {};\n this.fetchImpl = options.fetch || globalThis.fetch.bind(globalThis);\n }\n\n public async request<T>(path: string, options: RequestInit = {}): Promise<T> {\n const response = await this.execute(path, options);\n if (response.status === 204) {\n return {} as T;\n }\n\n return (await response.json()) as T;\n }\n\n public async requestRaw(path: string, options: RequestInit = {}): Promise<Response> {\n return this.execute(path, options);\n }\n\n private async execute(path: string, options: RequestInit = {}): Promise<Response> {\n const url = new URL(path, this.baseUrl).toString();\n const headers = new Headers(this.defaultHeaders);\n const requestHeaders = new Headers(options.headers);\n requestHeaders.forEach((value, key) => {\n headers.set(key, value);\n });\n \n headers.set('x-api-key', this.apiKey);\n if (!headers.has('Content-Type') && options.body && typeof options.body === 'string') {\n headers.set('Content-Type', 'application/json');\n }\n\n let attempt = 0;\n while (attempt <= this.maxRetries) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n const response = await this.fetchImpl(url, {\n ...options,\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (response.ok) {\n return response;\n }\n\n await this.handleErrorResponse(response);\n } catch (error: unknown) {\n if (error instanceof AudiolizeApiError) {\n if (error instanceof RateLimitError && attempt < this.maxRetries) {\n const delayMs = error.retryAfter ? error.retryAfter * 1000 : this.getBackoffDelay(attempt);\n await this.delay(delayMs);\n attempt++;\n continue;\n }\n if (error.statusCode >= 500 && attempt < this.maxRetries) {\n await this.delay(this.getBackoffDelay(attempt));\n attempt++;\n continue;\n }\n throw error;\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n if (attempt < this.maxRetries) {\n await this.delay(this.getBackoffDelay(attempt));\n attempt++;\n continue;\n }\n\n throw new AudiolizeTimeoutError(`Request timeout after ${this.timeout}ms`);\n }\n\n if (attempt < this.maxRetries) {\n await this.delay(this.getBackoffDelay(attempt));\n attempt++;\n continue;\n }\n\n throw error;\n }\n }\n\n throw new Error('Max retries exceeded');\n }\n\n private async handleErrorResponse(response: Response): Promise<never> {\n let errorData: Record<string, unknown> = {};\n try {\n const parsed: unknown = await response.json();\n if (isRecord(parsed)) {\n errorData = parsed;\n }\n } catch {\n // Ignore JSON parse errors for error responses\n }\n\n const errorMessage = typeof errorData.error === 'string' ? errorData.error : undefined;\n const fallbackMessage = typeof errorData.message === 'string' ? errorData.message : undefined;\n const message = errorMessage || fallbackMessage || response.statusText;\n const requestId = response.headers.get('x-request-id') || undefined;\n\n switch (response.status) {\n case 401:\n throw new AuthenticationError(message, requestId);\n case 402:\n throw new PaywallError(message, requestId);\n case 403:\n throw new AuthorizationError(message, requestId);\n case 404:\n throw new NotFoundError(message, requestId);\n case 429: {\n const retryAfterHeader = response.headers.get('retry-after');\n const retryAfter = retryAfterHeader ? parseInt(retryAfterHeader, 10) : undefined;\n throw new RateLimitError(message, retryAfter, requestId);\n }\n default:\n if (response.status >= 500) {\n throw new ServerError(message, response.status, requestId);\n }\n throw new AudiolizeApiError(message, 'API_ERROR', response.status, requestId);\n }\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private getBackoffDelay(attempt: number): number {\n const baseDelay = 1000;\n const maxDelay = 60000;\n const delay = Math.min(baseDelay * Math.pow(2, attempt), maxDelay);\n // Add jitter\n return delay * (0.5 + Math.random() * 0.5);\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import type { JobsResource } from '../resources/jobs';\nimport type { Job, JobStep } from '../types/job';\nimport { AudiolizeTimeoutError } from '../http/errors';\n\nexport interface PollOptions {\n interval?: number; // ms between polls, default 3000\n maxInterval?: number; // max ms after backoff, default 15000\n timeout?: number; // total ms before AudiolizeTimeoutError, default 600000 (10 min)\n backoff?: boolean; // increase interval when step hasn't changed, default true\n}\n\ntype EventMap = {\n progress: (data: { step: JobStep | null; progress: number }) => void;\n completed: (job: Job) => void;\n failed: (error: Error) => void;\n};\n\ntype EventPayloadMap = {\n progress: { step: JobStep | null; progress: number };\n completed: Job;\n failed: Error;\n};\n\nexport class JobPoller {\n private readonly jobId: string;\n private readonly jobsResource: JobsResource;\n private readonly options: Required<PollOptions>;\n private currentInterval: number;\n private unchangedStepCount: number = 0;\n private lastStep: JobStep | null = null;\n private isPolling: boolean = false;\n private listeners: { [K in keyof EventMap]?: EventMap[K][] } = {};\n\n constructor(jobId: string, jobsResource: JobsResource, options?: PollOptions) {\n this.jobId = jobId;\n this.jobsResource = jobsResource;\n this.options = {\n interval: options?.interval ?? 3000,\n maxInterval: options?.maxInterval ?? 15000,\n timeout: options?.timeout ?? 600000,\n backoff: options?.backoff ?? true,\n };\n this.currentInterval = this.options.interval;\n }\n\n public on<K extends keyof EventMap>(event: K, listener: EventMap[K]): this {\n if (!this.listeners[event]) {\n this.listeners[event] = [];\n }\n this.listeners[event]!.push(listener);\n return this;\n }\n\n private emit(event: 'progress', payload: EventPayloadMap['progress']): void;\n private emit(event: 'completed', payload: EventPayloadMap['completed']): void;\n private emit(event: 'failed', payload: EventPayloadMap['failed']): void;\n private emit(event: keyof EventPayloadMap, payload: EventPayloadMap[keyof EventPayloadMap]): void {\n if (event === 'progress') {\n const eventListeners = this.listeners.progress ?? [];\n for (const listener of eventListeners) {\n listener(payload as EventPayloadMap['progress']);\n }\n return;\n }\n\n if (event === 'completed') {\n const eventListeners = this.listeners.completed ?? [];\n for (const listener of eventListeners) {\n listener(payload as EventPayloadMap['completed']);\n }\n return;\n }\n\n const eventListeners = this.listeners.failed ?? [];\n for (const listener of eventListeners) {\n listener(payload as EventPayloadMap['failed']);\n }\n }\n\n public async start(): Promise<Job> {\n if (this.isPolling) {\n throw new Error('Polling is already in progress');\n }\n this.isPolling = true;\n\n const startTime = Date.now();\n\n while (this.isPolling) {\n if (Date.now() - startTime > this.options.timeout) {\n this.isPolling = false;\n const error = new AudiolizeTimeoutError(`Job ${this.jobId} timed out after ${this.options.timeout}ms`);\n this.emit('failed', error);\n throw error;\n }\n\n try {\n const job = await this.jobsResource.get(this.jobId);\n\n if (job.status === 'completed') {\n this.isPolling = false;\n this.emit('completed', job);\n return job;\n }\n\n if (job.status === 'failed') {\n this.isPolling = false;\n const error = new Error(job.error || 'Job failed');\n this.emit('failed', error);\n throw error;\n }\n\n this.emit('progress', { step: job.currentStep, progress: job.progress });\n\n if (this.options.backoff) {\n if (job.currentStep === this.lastStep) {\n this.unchangedStepCount++;\n if (this.unchangedStepCount >= 3) {\n this.currentInterval = Math.min(this.currentInterval * 2, this.options.maxInterval);\n }\n } else {\n this.unchangedStepCount = 0;\n this.currentInterval = this.options.interval;\n this.lastStep = job.currentStep;\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, this.currentInterval));\n } catch (error) {\n this.isPolling = false;\n const err = error instanceof Error ? error : new Error(String(error));\n this.emit('failed', err);\n throw err;\n }\n }\n\n throw new Error('Polling stopped unexpectedly');\n }\n\n public stop(): void {\n this.isPolling = false;\n }\n}\n","import type { HttpClient } from '../http/HttpClient';\nimport type {\n CreateJobOptions,\n CreateJobResponse,\n DeleteJobResponse,\n GenerateJobQualityInsightsRequest,\n Job,\n JobOperationResponse,\n PauseResumeJobRequest,\n StartJobRequest,\n StartJobResponse,\n SubmitJobFeedbackRequest,\n} from '../types/job';\nimport type {\n JobCapabilityReadinessResponse,\n ListJobArtifactsOptions,\n ListJobArtifactsResponse,\n ListJobCommentaryRunsResponse,\n ListJobExportPackagesOptions,\n ListJobExportPackagesResponse,\n ListJobHighlightRunsResponse,\n StartJobCapabilityRunRequest,\n StartJobCapabilityRunResponse,\n CapabilityKey,\n} from '../types/capabilities';\nimport type { ListOptions, PagedResponse } from '../types/common';\nimport { JobPoller, type PollOptions } from '../workflows/JobPoller';\nimport { AudiolizeValidationError } from '../http/errors';\n\nexport interface WaitForCompletionOptions extends PollOptions {\n onProgress?: (step: string | null, progress: number) => void;\n}\n\nexport class JobsResource {\n constructor(private readonly client: HttpClient) {}\n\n public async start(request: StartJobRequest): Promise<StartJobResponse> {\n return this.client.request<StartJobResponse>('/jobs/start', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n public async create(options: CreateJobOptions): Promise<CreateJobResponse> {\n const response = await this.client.request<Record<string, unknown>>('/jobs', {\n method: 'POST',\n body: JSON.stringify({\n fileName: options.fileName,\n languages: options.languages,\n ...(options.sourceLanguage !== undefined && { sourceLanguage: options.sourceLanguage }),\n }),\n });\n\n const jobId = getStringField(response, 'jobId') ?? getStringField(response, 'id');\n if (!jobId) {\n throw new AudiolizeValidationError('Create job response did not include a job identifier.');\n }\n\n const success = getBooleanField(response, 'success');\n const message = getStringField(response, 'message');\n\n return {\n jobId,\n ...(success !== undefined && { success }),\n ...(message !== undefined && { message }),\n };\n }\n\n public async updateSubtitles(jobId: string, payload: Record<string, unknown>): Promise<Record<string, unknown>> {\n return this.client.request<Record<string, unknown>>(`/jobs/${jobId}/subtitles`, {\n method: 'PUT',\n body: JSON.stringify(payload),\n });\n }\n\n public async updateSubtitlesForLanguage(\n jobId: string,\n language: string,\n body: string,\n contentType: string,\n ): Promise<{ body: string; contentType: string; statusCode: number }> {\n const response = await this.client.requestRaw(`/jobs/${jobId}/subtitles/${language}`, {\n method: 'PUT',\n headers: {\n 'Content-Type': contentType,\n },\n body,\n });\n\n return {\n body: await response.text(),\n contentType: response.headers.get('content-type') || 'application/json',\n statusCode: response.status,\n };\n }\n\n public async getSubtitles(jobId: string, language: string): Promise<Record<string, unknown>> {\n return this.client.request<Record<string, unknown>>(`/jobs/${jobId}/subtitles/${language}`);\n }\n\n public async getSummary(jobId: string, language?: string): Promise<Record<string, unknown>> {\n const query = new URLSearchParams();\n if (language) query.set('language', language);\n const path = `/jobs/${jobId}/summary${query.toString() ? `?${query.toString()}` : ''}`;\n return this.client.request<Record<string, unknown>>(path);\n }\n\n public async generateSummary(jobId: string, payload: Record<string, unknown>): Promise<Record<string, unknown>> {\n return this.client.request<Record<string, unknown>>(`/jobs/${jobId}/summary`, {\n method: 'POST',\n body: JSON.stringify(payload),\n });\n }\n\n public async cleanSubtitles(jobId: string, payload: Record<string, unknown>): Promise<Record<string, unknown>> {\n return this.client.request<Record<string, unknown>>(`/jobs/${jobId}/subtitles/clean`, {\n method: 'POST',\n body: JSON.stringify(payload),\n });\n }\n\n public async getThumbnail(jobId: string): Promise<Record<string, unknown>> {\n return this.client.request<Record<string, unknown>>(`/jobs/${jobId}/thumbnail`);\n }\n\n public async getVideo(jobId: string): Promise<Record<string, unknown>> {\n return this.client.request<Record<string, unknown>>(`/jobs/${jobId}/video`);\n }\n\n public async getAudio(jobId: string, language: string): Promise<Response> {\n return this.client.requestRaw(`/audio/${jobId}/${language}`);\n }\n\n public async updateSpeakerNames(payload: Record<string, unknown>): Promise<Record<string, unknown>> {\n return this.client.request<Record<string, unknown>>('/jobs/update-speaker-names', {\n method: 'POST',\n body: JSON.stringify(payload),\n });\n }\n\n public async pauseResume(jobId: string, payload: PauseResumeJobRequest): Promise<JobOperationResponse> {\n return this.client.request<JobOperationResponse>(`/jobs/${jobId}/pause-resume`, {\n method: 'POST',\n body: JSON.stringify(payload),\n });\n }\n\n public async submitFeedback(jobId: string, payload: SubmitJobFeedbackRequest): Promise<JobOperationResponse> {\n return this.client.request<JobOperationResponse>(`/jobs/${jobId}/feedback`, {\n method: 'POST',\n body: JSON.stringify(payload),\n });\n }\n\n public async generateQualityAiInsights(\n jobId: string,\n payload: GenerateJobQualityInsightsRequest,\n ): Promise<JobOperationResponse> {\n return this.client.request<JobOperationResponse>(`/jobs/${jobId}/quality/ai-insights`, {\n method: 'POST',\n body: JSON.stringify(payload),\n });\n }\n\n public async get(jobId: string): Promise<Job> {\n return this.client.request<Job>(`/jobs/${jobId}/status`);\n }\n\n public async delete(jobId: string): Promise<DeleteJobResponse> {\n return this.client.request<DeleteJobResponse>(`/jobs/${jobId}`, {\n method: 'DELETE',\n });\n }\n\n public async getCapabilityReadiness(jobId: string): Promise<JobCapabilityReadinessResponse> {\n return this.client.request<JobCapabilityReadinessResponse>(`/jobs/${jobId}/capabilities`);\n }\n\n public async listArtifacts(jobId: string, options: ListJobArtifactsOptions = {}): Promise<ListJobArtifactsResponse> {\n const query = new URLSearchParams();\n if (options.type) query.set('type', options.type);\n if (options.language) query.set('language', options.language);\n if (options.status) query.set('status', options.status);\n\n const path = `/jobs/${jobId}/artifacts${query.toString() ? `?${query.toString()}` : ''}`;\n return this.client.request<ListJobArtifactsResponse>(path);\n }\n\n public async startCapabilityRun(\n jobId: string,\n capability: CapabilityKey,\n request: StartJobCapabilityRunRequest = {},\n ): Promise<StartJobCapabilityRunResponse> {\n return this.client.request<StartJobCapabilityRunResponse>(`/jobs/${jobId}/capabilities/${capability}/runs`, {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n public async listHighlights(jobId: string): Promise<ListJobHighlightRunsResponse> {\n return this.client.request<ListJobHighlightRunsResponse>(`/jobs/${jobId}/highlights`);\n }\n\n public async listCommentary(jobId: string): Promise<ListJobCommentaryRunsResponse> {\n return this.client.request<ListJobCommentaryRunsResponse>(`/jobs/${jobId}/commentary`);\n }\n\n public async listExports(\n jobId: string,\n options: ListJobExportPackagesOptions = {},\n ): Promise<ListJobExportPackagesResponse> {\n const query = new URLSearchParams();\n if (options.status) query.set('status', options.status);\n if (options.packageFormat) query.set('packageFormat', options.packageFormat);\n\n const path = `/jobs/${jobId}/exports${query.toString() ? `?${query.toString()}` : ''}`;\n return this.client.request<ListJobExportPackagesResponse>(path);\n }\n\n public async list(options?: ListOptions): Promise<PagedResponse<Job>> {\n const query = new URLSearchParams();\n if (options?.limit) query.set('limit', options.limit.toString());\n if (options?.pageToken) query.set('pageToken', options.pageToken);\n\n const path = `/jobs${query.toString() ? `?${query.toString()}` : ''}`;\n const raw = await this.client.request<unknown>(path);\n return normalizeJobList(raw);\n }\n\n /**\n * Polls until the job reaches `completed` or `failed`, then returns the final job.\n * Throws `AudiolizeTimeoutError` if the job does not complete within `options.timeout`.\n */\n public waitForCompletion(jobId: string, options?: WaitForCompletionOptions): Promise<Job> {\n const pollConfig: PollOptions = {};\n if (options?.interval !== undefined) pollConfig.interval = options.interval;\n if (options?.maxInterval !== undefined) pollConfig.maxInterval = options.maxInterval;\n if (options?.timeout !== undefined) pollConfig.timeout = options.timeout;\n if (options?.backoff !== undefined) pollConfig.backoff = options.backoff;\n\n const poller = new JobPoller(jobId, this, pollConfig);\n\n if (options?.onProgress) {\n poller.on('progress', ({ step, progress }) => {\n options.onProgress!(step, progress);\n });\n }\n\n return poller.start();\n }\n\n /**\n * Returns a `JobPoller` instance for event-driven polling.\n * Call `.start()` to begin, or listen to `progress`, `completed`, `failed` events.\n */\n public poll(jobId: string, options?: PollOptions): JobPoller {\n return new JobPoller(jobId, this, options);\n }\n}\n\nfunction getStringField(record: Record<string, unknown>, key: string): string | undefined {\n const value = record[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction getBooleanField(record: Record<string, unknown>, key: string): boolean | undefined {\n const value = record[key];\n return typeof value === 'boolean' ? value : undefined;\n}\n\nfunction normalizeJobList(raw: unknown): PagedResponse<Job> {\n if (!isRecord(raw)) {\n return { items: [] };\n }\n\n const explicitItems = raw.items;\n if (Array.isArray(explicitItems)) {\n return {\n items: explicitItems as Job[],\n ...(typeof raw.nextPageToken === 'string' ? { nextPageToken: raw.nextPageToken } : {}),\n };\n }\n\n const jobs = raw.jobs;\n const pagination = isRecord(raw.pagination) ? raw.pagination : undefined;\n const nextPageToken =\n typeof raw.nextPageToken === 'string'\n ? raw.nextPageToken\n : typeof pagination?.nextStartAfter === 'string'\n ? pagination.nextStartAfter\n : typeof raw.lastEvaluatedKey === 'string'\n ? raw.lastEvaluatedKey\n : undefined;\n\n if (Array.isArray(jobs)) {\n return {\n items: jobs as Job[],\n ...(nextPageToken !== undefined ? { nextPageToken } : {}),\n };\n }\n\n return { items: [] };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import type { HttpClient } from '../http/HttpClient';\nimport type {\n ClipApprovalRequest,\n ClipApprovalResponse,\n ClipArtifactListResponse,\n ClipSocialExportResponse,\n CreateClipVariantRequest,\n CreateHighlightRunRequest,\n HighlightRunListResponse,\n ListHighlightRunsOptions,\n} from '../types/capabilities';\nimport type { ClipArtifact, HighlightRun } from '../types/domain';\n\nexport class HighlightsResource {\n constructor(private readonly client: HttpClient) {}\n\n public async create(request: CreateHighlightRunRequest): Promise<HighlightRun> {\n return this.client.request<HighlightRun>('/highlights', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n public async list(options: ListHighlightRunsOptions = {}): Promise<HighlightRunListResponse> {\n const query = new URLSearchParams();\n if (options.sourceKind) query.set('sourceKind', options.sourceKind);\n if (options.sourceId) query.set('sourceId', options.sourceId);\n if (options.status) query.set('status', options.status);\n\n const path = `/highlights${query.toString() ? `?${query.toString()}` : ''}`;\n return this.client.request<HighlightRunListResponse>(path);\n }\n\n public async get(runId: string): Promise<HighlightRun> {\n return this.client.request<HighlightRun>(`/highlights/${runId}`);\n }\n\n public async listClips(runId: string): Promise<ClipArtifactListResponse> {\n return this.client.request<ClipArtifactListResponse>(`/highlights/${runId}/clips`);\n }\n\n public async getClip(clipId: string): Promise<ClipArtifact> {\n return this.client.request<ClipArtifact>(`/clips/${clipId}`);\n }\n\n public async createVariant(clipId: string, request: CreateClipVariantRequest): Promise<ClipArtifact> {\n return this.client.request<ClipArtifact>(`/clips/${clipId}/variants`, {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n public async approve(clipId: string, request: ClipApprovalRequest): Promise<ClipApprovalResponse> {\n return this.client.request<ClipApprovalResponse>(`/clips/${clipId}/approval`, {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n public async socialExport(clipId: string): Promise<ClipSocialExportResponse> {\n return this.client.request<ClipSocialExportResponse>(`/clips/${clipId}/social-export`, {\n method: 'POST',\n });\n }\n}\n","import type { HttpClient } from '../http/HttpClient';\nimport type {\n CreateLiveSessionRequest,\n ListLiveSessionsOptions,\n LiveSessionListResponse,\n PublishRollingSubtitlesRequest,\n PublishRollingSubtitlesResponse,\n RollingSubtitleSegmentListResponse,\n StopLiveSessionRequest,\n} from '../types/capabilities';\nimport type { LiveSession } from '../types/domain';\n\nexport class LiveSessionsResource {\n constructor(private readonly client: HttpClient) {}\n\n public async create(request: CreateLiveSessionRequest): Promise<LiveSession> {\n return this.client.request<LiveSession>('/live-sessions', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n public async list(options?: ListLiveSessionsOptions): Promise<LiveSessionListResponse> {\n const query = new URLSearchParams();\n if (options?.limit) query.set('limit', options.limit.toString());\n if (options?.pageToken) query.set('pageToken', options.pageToken);\n if (options?.status) query.set('status', options.status);\n\n const path = `/live-sessions${query.toString() ? `?${query.toString()}` : ''}`;\n return this.client.request<LiveSessionListResponse>(path);\n }\n\n public async get(sessionId: string): Promise<LiveSession> {\n return this.client.request<LiveSession>(`/live-sessions/${sessionId}`);\n }\n\n public async getRollingSubtitles(sessionId: string): Promise<RollingSubtitleSegmentListResponse> {\n return this.client.request<RollingSubtitleSegmentListResponse>(\n `/live-sessions/${sessionId}/rolling-subtitles`,\n );\n }\n\n public async publishRollingSubtitles(\n sessionId: string,\n request: PublishRollingSubtitlesRequest,\n ): Promise<PublishRollingSubtitlesResponse> {\n return this.client.request<PublishRollingSubtitlesResponse>(\n `/live-sessions/${sessionId}/rolling-subtitles`,\n {\n method: 'POST',\n body: JSON.stringify(request),\n },\n );\n }\n\n public async stop(sessionId: string, request: StopLiveSessionRequest = {}): Promise<LiveSession> {\n return this.client.request<LiveSession>(`/live-sessions/${sessionId}/stop`, {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n}\n","import type { HttpClient } from '../http/HttpClient';\nimport type {\n CommentaryOutputListResponse,\n CommentaryRunListResponse,\n CreateCommentaryRunRequest,\n ListCommentaryRunsOptions,\n} from '../types/capabilities';\nimport type { CommentaryRun } from '../types/domain';\n\nexport class CommentaryResource {\n constructor(private readonly client: HttpClient) {}\n\n public async create(request: CreateCommentaryRunRequest): Promise<CommentaryRun> {\n return this.client.request<CommentaryRun>('/commentary', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n public async list(options: ListCommentaryRunsOptions = {}): Promise<CommentaryRunListResponse> {\n const query = new URLSearchParams();\n if (options?.limit) query.set('limit', options.limit.toString());\n if (options?.pageToken) query.set('pageToken', options.pageToken);\n if (options?.sourceKind) query.set('sourceKind', options.sourceKind);\n if (options?.sourceId) query.set('sourceId', options.sourceId);\n if (options?.status) query.set('status', options.status);\n\n const path = `/commentary${query.toString() ? `?${query.toString()}` : ''}`;\n return this.client.request<CommentaryRunListResponse>(path);\n }\n\n public async get(runId: string): Promise<CommentaryRun> {\n return this.client.request<CommentaryRun>(`/commentary/${runId}`);\n }\n\n public async listOutputs(runId: string): Promise<CommentaryOutputListResponse> {\n return this.client.request<CommentaryOutputListResponse>(`/commentary/${runId}/outputs`);\n }\n}\n","import type { HttpClient } from '../http/HttpClient';\nimport type { DubbingRunListResponse, ListDubbingRunsOptions } from '../types/capabilities';\nimport type { DubbingRun } from '../types/domain';\n\nexport class DubbingResource {\n constructor(private readonly client: HttpClient) {}\n\n public async list(options: ListDubbingRunsOptions = {}): Promise<DubbingRunListResponse> {\n const query = new URLSearchParams();\n if (options.sourceId) query.set('sourceId', options.sourceId);\n if (options.status) query.set('status', options.status);\n if (options.limit) query.set('limit', options.limit.toString());\n if (options.pageToken) query.set('pageToken', options.pageToken);\n\n const path = `/dubbing${query.toString() ? `?${query.toString()}` : ''}`;\n return this.client.request<DubbingRunListResponse>(path);\n }\n\n public async get(runId: string): Promise<DubbingRun> {\n return this.client.request<DubbingRun>(`/dubbing/${runId}`);\n }\n\n public async getForJob(jobId: string): Promise<DubbingRun> {\n return this.client.request<DubbingRun>(`/jobs/${jobId}/dubbing`);\n }\n}\n","import type { HttpClient } from '../http/HttpClient';\nimport type {\n ArtifactListResponse,\n ListArtifactsOptions,\n SignedArtifactUrlResponse,\n} from '../types/capabilities';\nimport type { Artifact } from '../types/domain';\n\nexport class ArtifactsResource {\n constructor(private readonly client: HttpClient) {}\n\n public async list(options: ListArtifactsOptions = {}): Promise<ArtifactListResponse> {\n const query = new URLSearchParams();\n if (options.limit) query.set('limit', options.limit.toString());\n if (options.pageToken) query.set('pageToken', options.pageToken);\n if (options.ownerKind) query.set('ownerKind', options.ownerKind);\n if (options.ownerId) query.set('ownerId', options.ownerId);\n if (options.type) query.set('type', options.type);\n if (options.language) query.set('language', options.language);\n if (options.status) query.set('status', options.status);\n if (options.releaseStage) query.set('releaseStage', options.releaseStage);\n\n const path = `/artifacts${query.toString() ? `?${query.toString()}` : ''}`;\n return this.client.request<ArtifactListResponse>(path);\n }\n\n public async get(artifactId: string): Promise<Artifact> {\n return this.client.request<Artifact>(`/artifacts/${artifactId}`);\n }\n\n public async createSignedUrl(artifactId: string): Promise<SignedArtifactUrlResponse> {\n return this.client.request<SignedArtifactUrlResponse>(`/artifacts/${artifactId}/signed-url`, {\n method: 'POST',\n });\n }\n}\n","import type { HttpClient } from '../http/HttpClient';\nimport type {\n ExportPackageListResponse,\n ListExportPackagesOptions,\n SignedExportPackageUrlResponse,\n} from '../types/capabilities';\nimport type { ExportPackage } from '../types/domain';\n\nexport class ExportPackagesResource {\n constructor(private readonly client: HttpClient) {}\n\n public async list(options: ListExportPackagesOptions = {}): Promise<ExportPackageListResponse> {\n const query = new URLSearchParams();\n if (options.limit) query.set('limit', options.limit.toString());\n if (options.pageToken) query.set('pageToken', options.pageToken);\n if (options.ownerKind) query.set('ownerKind', options.ownerKind);\n if (options.ownerId) query.set('ownerId', options.ownerId);\n if (options.status) query.set('status', options.status);\n if (options.packageFormat) query.set('packageFormat', options.packageFormat);\n\n const path = `/exports${query.toString() ? `?${query.toString()}` : ''}`;\n return this.client.request<ExportPackageListResponse>(path);\n }\n\n public async get(exportPackageId: string): Promise<ExportPackage> {\n return this.client.request<ExportPackage>(`/exports/${exportPackageId}`);\n }\n\n public async createSignedUrl(exportPackageId: string): Promise<SignedExportPackageUrlResponse> {\n return this.client.request<SignedExportPackageUrlResponse>(`/exports/${exportPackageId}/signed-url`, {\n method: 'POST',\n });\n }\n}","import type { HttpClient } from '../http/HttpClient';\n\nexport interface Language {\n code: string;\n name: string;\n}\n\nexport class LanguagesResource {\n constructor(private readonly client: HttpClient) {}\n\n public async list(): Promise<Language[]> {\n const raw = await this.client.request<unknown>('/supported-languages');\n return extractLanguages(raw);\n }\n}\n\nfunction extractLanguages(raw: unknown): Language[] {\n if (Array.isArray(raw)) {\n return raw.filter(isLanguage);\n }\n\n if (!isRecord(raw)) {\n return [];\n }\n\n const languages = raw.languages;\n if (Array.isArray(languages)) {\n return languages.filter(isLanguage);\n }\n\n if (isRecord(languages)) {\n const merged: Language[] = [];\n for (const value of Object.values(languages)) {\n if (Array.isArray(value)) {\n merged.push(...value.filter(isLanguage));\n }\n }\n return merged;\n }\n\n return [];\n}\n\nfunction isLanguage(value: unknown): value is Language {\n return isRecord(value) && typeof value.code === 'string' && typeof value.name === 'string';\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import type { HttpClient } from '../http/HttpClient';\nimport type { SubtitleFormat, SubtitleResult } from '../types/subtitle';\n\nexport class SubtitlesResource {\n constructor(private readonly client: HttpClient) {}\n\n public async download(jobId: string, language: string, format: SubtitleFormat): Promise<string | SubtitleResult> {\n const response = await this.client.request<{ url: string }>('/presigned-url', {\n method: 'POST',\n body: JSON.stringify({\n type: 'download',\n jobId,\n language,\n format,\n }),\n });\n\n const downloadResponse = await fetch(response.url);\n if (!downloadResponse.ok) {\n throw new Error(`Failed to download subtitles: ${downloadResponse.statusText}`);\n }\n\n if (format === 'json') {\n return downloadResponse.json() as Promise<SubtitleResult>;\n }\n\n return downloadResponse.text();\n }\n}\n","/**\n * Calculates exponential backoff with jitter.\n * formula: min(baseDelay * 2^attempt, maxDelay) * (0.5 + random * 0.5)\n */\nexport function getBackoffDelay(attempt: number, baseDelay = 1000, maxDelay = 60000): number {\n const exponential = Math.min(baseDelay * Math.pow(2, attempt), maxDelay);\n const jitter = 0.5 + Math.random() * 0.5;\n return Math.floor(exponential * jitter);\n}\n\nexport function delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport interface RetryOptions {\n maxRetries?: number;\n baseDelay?: number;\n maxDelay?: number;\n shouldRetry?: (error: unknown, attempt: number) => boolean;\n}\n\n/**\n * Runs `fn` with retry logic. Retries on transient errors up to `maxRetries` times.\n */\nexport async function withRetry<T>(fn: () => Promise<T>, options: RetryOptions = {}): Promise<T> {\n const { maxRetries = 3, baseDelay = 1000, maxDelay = 60000, shouldRetry } = options;\n\n let attempt = 0;\n while (true) {\n try {\n return await fn();\n } catch (error) {\n const isRetryable = shouldRetry ? shouldRetry(error, attempt) : true;\n if (!isRetryable || attempt >= maxRetries) {\n throw error;\n }\n await delay(getBackoffDelay(attempt, baseDelay, maxDelay));\n attempt++;\n }\n }\n}\n","import { AudiolizeUploadError } from '../http/errors';\nimport { withRetry } from './retry';\n\nexport interface UploadPart {\n partNumber: number;\n etag: string;\n}\n\nexport interface MultipartChunk {\n partNumber: number;\n url: string;\n data: Blob | Buffer;\n size: number;\n}\n\n/**\n * Splits a file-like input into chunks for multipart upload.\n * Returns an array of blobs (browser) or buffers (Node.js).\n */\nexport function splitIntoChunks(\n file: Blob | Buffer | File,\n partUrls: string[],\n): Promise<MultipartChunk[]> {\n const totalSize = file instanceof Blob ? file.size : file.length;\n const partCount = partUrls.length;\n const chunkSize = Math.ceil(totalSize / partCount);\n\n const chunks: MultipartChunk[] = [];\n for (let i = 0; i < partCount; i++) {\n const start = i * chunkSize;\n const end = Math.min(start + chunkSize, totalSize);\n\n let data: Blob | Buffer;\n if (file instanceof Blob) {\n data = file.slice(start, end);\n } else {\n // Node.js Buffer\n data = file.subarray(start, end);\n }\n\n chunks.push({\n partNumber: i + 1,\n url: partUrls[i]!,\n data,\n size: end - start,\n });\n }\n\n return Promise.resolve(chunks);\n}\n\n/**\n * Uploads a single part via PUT to its presigned GCS URL.\n * Returns the ETag from the response headers.\n */\nexport async function uploadPart(chunk: MultipartChunk): Promise<UploadPart> {\n const response = await withRetry(\n () =>\n fetch(chunk.url, {\n method: 'PUT',\n body: chunk.data as BodyInit,\n headers: {\n 'Content-Length': chunk.size.toString(),\n },\n }),\n { maxRetries: 3 },\n );\n\n if (!response.ok) {\n throw new AudiolizeUploadError(\n `Failed to upload part ${chunk.partNumber}: ${response.statusText}`,\n );\n }\n\n const etag = response.headers.get('etag');\n if (!etag) {\n throw new AudiolizeUploadError(`No ETag returned for part ${chunk.partNumber}`);\n }\n\n return { partNumber: chunk.partNumber, etag };\n}\n\n/**\n * Uploads all parts with bounded concurrency.\n * Emits progress via the `onProgress` callback: called with uploaded byte count and total bytes.\n */\nexport async function uploadAllParts(\n chunks: MultipartChunk[],\n concurrency = 4,\n onProgress?: (uploadedBytes: number, totalBytes: number) => void,\n): Promise<UploadPart[]> {\n const totalBytes = chunks.reduce((sum, c) => sum + c.size, 0);\n let uploadedBytes = 0;\n const results: UploadPart[] = [];\n\n // Process in batches of `concurrency`\n for (let i = 0; i < chunks.length; i += concurrency) {\n const batch = chunks.slice(i, i + concurrency);\n const batchResults = await Promise.all(\n batch.map(async (chunk) => {\n const part = await uploadPart(chunk);\n uploadedBytes += chunk.size;\n onProgress?.(uploadedBytes, totalBytes);\n return { part, index: chunk.partNumber - 1 };\n }),\n );\n for (const { part, index } of batchResults) {\n results[index] = part;\n }\n }\n\n return results;\n}\n","import type { HttpClient } from '../http/HttpClient';\nimport type {\n UploadOptions,\n PresignedUrlRequest,\n PresignedUrlResponse,\n PresignedUploadResponse,\n PresignedMultipartUploadResponse,\n CompleteMultipartUploadResponse,\n} from '../types/upload';\nimport { AudiolizeUploadError, AudiolizeValidationError } from '../http/errors';\nimport { splitIntoChunks, uploadAllParts } from '../utils/multipart';\nimport { withRetry } from '../utils/retry';\n\nexport type FileInput = string | Buffer | Blob | File | ReadableStream;\n\n/** Default file size above which multipart upload is used (100 MB). */\nexport const DEFAULT_MULTIPART_THRESHOLD = 100 * 1024 * 1024;\n\nexport interface SingleUploadOptions extends UploadOptions {\n onUploadProgress?: (percent: number) => void;\n}\n\nexport interface MultipartUploadOptions extends UploadOptions {\n /** Number of concurrent part uploads. Default: 4. */\n concurrency?: number;\n onUploadProgress?: (percent: number) => void;\n}\n\nexport class FilesResource {\n constructor(private readonly client: HttpClient) {}\n\n public async createPresignedUrl(request: PresignedUrlRequest): Promise<PresignedUrlResponse> {\n return this.client.request<PresignedUrlResponse>('/presigned-url', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n public async upload(file: FileInput, options: SingleUploadOptions): Promise<{ jobId: string }> {\n const response = await this.client.request<PresignedUploadResponse>('/presigned-url', {\n method: 'POST',\n body: JSON.stringify({\n type: 'upload',\n fileName: options.fileName,\n languages: options.languages,\n sourceLanguage: options.sourceLanguage,\n transcriptionOptions: options.transcriptionOptions,\n context: options.context,\n estimatedMinutes: options.estimatedMinutes,\n enableDubbing: options.enableDubbing,\n enableSdh: options.enableSdh,\n }),\n });\n\n const body = await resolveBody(file);\n\n const uploadResponse = await withRetry(\n () =>\n fetch(response.uploadUrl, {\n method: 'PUT',\n body: body as BodyInit,\n headers: {\n 'Content-Type': options.contentType || 'application/octet-stream',\n },\n }),\n { maxRetries: 3 },\n );\n\n if (!uploadResponse.ok) {\n throw new AudiolizeUploadError(`Failed to upload file: ${uploadResponse.statusText}`);\n }\n\n options.onUploadProgress?.(100);\n return { jobId: response.jobId };\n }\n\n public async uploadMultipart(\n file: Buffer | Blob | File,\n options: MultipartUploadOptions,\n ): Promise<{ jobId: string }> {\n const fileSize = file instanceof Blob ? file.size : file.length;\n if (fileSize === 0) {\n throw new AudiolizeValidationError('Cannot multipart-upload an empty file.');\n }\n\n const presigned = await this.client.request<PresignedMultipartUploadResponse>('/presigned-url', {\n method: 'POST',\n body: JSON.stringify({\n type: 'upload',\n multipart: true,\n fileSize,\n fileName: options.fileName,\n languages: options.languages,\n sourceLanguage: options.sourceLanguage,\n transcriptionOptions: options.transcriptionOptions,\n context: options.context,\n estimatedMinutes: options.estimatedMinutes,\n enableDubbing: options.enableDubbing,\n enableSdh: options.enableSdh,\n }),\n });\n\n const chunks = await splitIntoChunks(file, presigned.partUrls);\n\n const progressCallback = options.onUploadProgress;\n const onProgress = progressCallback\n ? (uploaded: number, total: number) =>\n progressCallback(Math.round((uploaded / total) * 100))\n : undefined;\n\n const parts = await uploadAllParts(chunks, options.concurrency ?? 4, onProgress);\n\n const completion = await this.client.request<CompleteMultipartUploadResponse>('/presigned-url', {\n method: 'POST',\n body: JSON.stringify({\n type: 'complete-multipart',\n uploadId: presigned.uploadId,\n uploadKey: presigned.uploadKey,\n parts,\n }),\n });\n\n if (!completion.success) {\n throw new AudiolizeUploadError('Multipart upload completion reported failure.');\n }\n\n return { jobId: presigned.jobId };\n }\n}\n\n/**\n * Resolves a FileInput to a body value suitable for `fetch` PUT requests.\n * Lazily imports Node.js `fs` so the browser bundle is not affected.\n */\nasync function resolveBody(\n file: FileInput,\n): Promise<Blob | Buffer | ArrayBufferView | ReadableStream> {\n if (typeof file === 'string') {\n // Treated as a file path in Node.js\n const { readFile } = await import('node:fs/promises');\n return readFile(file);\n }\n return file;\n}\n","import type { AudiolizeClient } from '../client';\nimport type { Job } from '../types/job';\nimport type { UploadOptions } from '../types/upload';\nimport { JobPoller, type PollOptions } from './JobPoller';\nimport { DEFAULT_MULTIPART_THRESHOLD, type SingleUploadOptions } from '../resources/files';\n\nexport interface LocalizeOptions extends Omit<UploadOptions, 'fileName'> {\n file: File | Blob | Buffer | string;\n fileName?: string;\n /**\n * File size threshold (bytes) above which multipart upload is used.\n * Defaults to 100 MB.\n */\n multipartThreshold?: number;\n pollOptions?: PollOptions;\n onUploadProgress?: (percent: number) => void;\n onProgress?: (step: string | null, progress: number) => void;\n}\n\nexport async function localize(client: AudiolizeClient, options: LocalizeOptions): Promise<Job> {\n const multipartThreshold = options.multipartThreshold ?? DEFAULT_MULTIPART_THRESHOLD;\n\n const uploadOptions: SingleUploadOptions = {\n fileName: options.fileName ?? (typeof options.file === 'string' ? options.file.split('/').pop() ?? 'upload' : 'upload'),\n languages: options.languages,\n ...(options.sourceLanguage !== undefined && { sourceLanguage: options.sourceLanguage }),\n ...(options.transcriptionOptions !== undefined && { transcriptionOptions: options.transcriptionOptions }),\n ...(options.context !== undefined && { context: options.context }),\n ...(options.estimatedMinutes !== undefined && { estimatedMinutes: options.estimatedMinutes }),\n ...(options.enableDubbing !== undefined && { enableDubbing: options.enableDubbing }),\n ...(options.enableSdh !== undefined && { enableSdh: options.enableSdh }),\n ...(options.onUploadProgress !== undefined && { onUploadProgress: options.onUploadProgress }),\n };\n\n const fileSize = getFileSize(options.file);\n let jobId: string;\n\n if (fileSize !== null && fileSize >= multipartThreshold && typeof options.file !== 'string') {\n const result = await client.files.uploadMultipart(options.file, {\n ...uploadOptions,\n concurrency: 4,\n });\n jobId = result.jobId;\n } else {\n const result = await client.files.upload(options.file, uploadOptions);\n jobId = result.jobId;\n }\n\n // Poll for completion\n const poller = new JobPoller(jobId, client.jobs, options.pollOptions);\n\n const progressCallback = options.onProgress;\n if (progressCallback) {\n poller.on('progress', ({ step, progress }) => {\n progressCallback(step, progress);\n });\n }\n\n return poller.start();\n}\n\nfunction getFileSize(file: File | Blob | Buffer | string): number | null {\n if (file instanceof Blob) return file.size;\n if (Buffer.isBuffer(file)) return file.length;\n return null;\n}\n","import { HttpClient, type HttpClientOptions } from './http/HttpClient';\nimport { JobsResource } from './resources/jobs';\nimport { HighlightsResource } from './resources/highlights';\nimport { LiveSessionsResource } from './resources/liveSessions';\nimport { CommentaryResource } from './resources/commentary';\nimport { DubbingResource } from './resources/dubbing';\nimport { ArtifactsResource } from './resources/artifacts';\nimport { ExportPackagesResource } from './resources/exportPackages';\nimport { LanguagesResource } from './resources/languages';\nimport { SubtitlesResource } from './resources/subtitles';\nimport { FilesResource } from './resources/files';\nimport { localize, type LocalizeOptions } from './workflows/localize';\nimport type { Job } from './types/job';\n\nexport interface AudiolizeClientOptions {\n apiKey: string;\n baseUrl?: string;\n timeout?: number;\n maxRetries?: number;\n defaultHeaders?: Record<string, string>;\n}\n\nexport class AudiolizeClient {\n private readonly http: HttpClient;\n\n public readonly jobs: JobsResource;\n public readonly highlights: HighlightsResource;\n public readonly liveSessions: LiveSessionsResource;\n public readonly commentary: CommentaryResource;\n public readonly dubbing: DubbingResource;\n public readonly artifacts: ArtifactsResource;\n public readonly exportPackages: ExportPackagesResource;\n public readonly languages: LanguagesResource;\n public readonly subtitles: SubtitlesResource;\n public readonly files: FilesResource;\n\n constructor(options: AudiolizeClientOptions) {\n if (!options.apiKey) {\n throw new Error('API key is required');\n }\n\n const httpOptions: HttpClientOptions = {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl || 'https://api.audialize.com/v1',\n };\n if (options.timeout !== undefined) httpOptions.timeout = options.timeout;\n if (options.maxRetries !== undefined) httpOptions.maxRetries = options.maxRetries;\n if (options.defaultHeaders !== undefined) httpOptions.defaultHeaders = options.defaultHeaders;\n\n this.http = new HttpClient(httpOptions);\n\n this.jobs = new JobsResource(this.http);\n this.highlights = new HighlightsResource(this.http);\n this.liveSessions = new LiveSessionsResource(this.http);\n this.commentary = new CommentaryResource(this.http);\n this.dubbing = new DubbingResource(this.http);\n this.artifacts = new ArtifactsResource(this.http);\n this.exportPackages = new ExportPackagesResource(this.http);\n this.languages = new LanguagesResource(this.http);\n this.subtitles = new SubtitlesResource(this.http);\n this.files = new FilesResource(this.http);\n }\n\n /**\n * High-level workflow to upload a file, create a job, and poll until completion.\n * @param options LocalizeOptions\n * @returns Promise<Job>\n */\n public async localize(options: LocalizeOptions): Promise<Job> {\n return localize(this, options);\n }\n}\n","export const DOMAIN_ENTITY_KINDS = [\n 'job',\n 'live_session',\n 'highlight_run',\n 'dubbing_run',\n 'clip_artifact',\n 'commentary_run',\n 'artifact',\n 'export_package',\n] as const;\n\nexport type DomainEntityKind = (typeof DOMAIN_ENTITY_KINDS)[number];\n\nexport const CAPABILITY_READINESS_STATES = [\n 'unavailable',\n 'queued',\n 'processing',\n 'partial',\n 'review_required',\n 'ready',\n 'failed',\n] as const;\n\nexport type CapabilityReadinessState = (typeof CAPABILITY_READINESS_STATES)[number];\n\nexport const CANONICAL_JOB_STATUSES = [\n 'created',\n 'queued',\n 'processing',\n 'completed',\n 'failed',\n 'cancelled',\n] as const;\n\nexport type CanonicalJobStatus = (typeof CANONICAL_JOB_STATUSES)[number];\n\nexport const LEGACY_JOB_STATUSES = [\n 'pending',\n 'processing',\n 'completed',\n 'failed',\n 'created',\n 'uploaded',\n 'initializing',\n 'transcribing',\n 'translating',\n 'paused',\n] as const;\n\nexport type LegacyJobStatus = (typeof LEGACY_JOB_STATUSES)[number];\nexport type CompatibleJobStatus = CanonicalJobStatus | LegacyJobStatus;\n\nexport const LEGACY_TO_CANONICAL_JOB_STATUS: Record<LegacyJobStatus, CanonicalJobStatus> = {\n pending: 'queued',\n processing: 'processing',\n completed: 'completed',\n failed: 'failed',\n created: 'created',\n uploaded: 'queued',\n initializing: 'queued',\n transcribing: 'processing',\n translating: 'processing',\n paused: 'processing',\n};\n\nexport const CANONICAL_JOB_CURRENT_STEPS = [\n 'awaiting_upload',\n 'initializing',\n 'extracting_audio',\n 'transcribing',\n 'translating',\n 'generating_subtitles',\n 'generating_summary',\n 'generating_dubbing',\n 'packaging_exports',\n 'finalizing',\n] as const;\n\nexport type CanonicalJobCurrentStep = (typeof CANONICAL_JOB_CURRENT_STEPS)[number];\n\nexport const LEGACY_JOB_CURRENT_STEPS = [\n 'initializing',\n 'extracting_audio',\n 'transcribing',\n 'translating',\n 'cleaning_subtitles',\n 'generating_summary',\n 'completing',\n] as const;\n\nexport type LegacyJobCurrentStep = (typeof LEGACY_JOB_CURRENT_STEPS)[number];\nexport type CompatibleJobCurrentStep = CanonicalJobCurrentStep | LegacyJobCurrentStep;\n\nexport const LEGACY_TO_CANONICAL_JOB_CURRENT_STEP: Record<LegacyJobCurrentStep, CanonicalJobCurrentStep> = {\n initializing: 'initializing',\n extracting_audio: 'extracting_audio',\n transcribing: 'transcribing',\n translating: 'translating',\n cleaning_subtitles: 'generating_subtitles',\n generating_summary: 'generating_summary',\n completing: 'finalizing',\n};\n\nexport const LIVE_SESSION_STATUSES = [\n 'scheduled',\n 'starting',\n 'live',\n 'finalizing',\n 'completed',\n 'failed',\n 'cancelled',\n] as const;\n\nexport type LiveSessionStatus = (typeof LIVE_SESSION_STATUSES)[number];\n\nexport const LIVE_SESSION_CURRENT_STEPS = [\n 'provisioning_stream',\n 'connecting_inputs',\n 'capturing_audio',\n 'transcribing_live',\n 'translating_live',\n 'publishing_live_subtitles',\n 'finalizing_session',\n 'archiving_outputs',\n] as const;\n\nexport type LiveSessionCurrentStep = (typeof LIVE_SESSION_CURRENT_STEPS)[number];\n\nexport const HIGHLIGHT_RUN_STATUSES = [\n 'queued',\n 'processing',\n 'completed',\n 'failed',\n 'cancelled',\n] as const;\n\nexport type HighlightRunStatus = (typeof HIGHLIGHT_RUN_STATUSES)[number];\n\nexport const HIGHLIGHT_RUN_CURRENT_STEPS = [\n 'loading_source_context',\n 'detecting_candidates',\n 'scoring_candidates',\n 'selecting_moments',\n 'rendering_clips',\n 'indexing_results',\n] as const;\n\nexport type HighlightRunCurrentStep = (typeof HIGHLIGHT_RUN_CURRENT_STEPS)[number];\n\nexport const DUBBING_RUN_STATUSES = [\n 'queued',\n 'processing',\n 'partial',\n 'completed',\n 'failed',\n 'cancelled',\n] as const;\n\nexport type DubbingRunStatus = (typeof DUBBING_RUN_STATUSES)[number];\n\nexport const DUBBING_RUN_CURRENT_STEPS = [\n 'loading_source_media',\n 'requesting_dubbing',\n 'dubbing_languages',\n 'storing_dubbed_artifacts',\n 'finalizing_outputs',\n] as const;\n\nexport type DubbingRunCurrentStep = (typeof DUBBING_RUN_CURRENT_STEPS)[number];\n\nexport const CLIP_ARTIFACT_STATUSES = [\n 'queued',\n 'processing',\n 'review_required',\n 'ready',\n 'failed',\n 'cancelled',\n] as const;\n\nexport type ClipArtifactStatus = (typeof CLIP_ARTIFACT_STATUSES)[number];\n\nexport const CLIP_ARTIFACT_CURRENT_STEPS = [\n 'queued_for_render',\n 'extracting_media_window',\n 'rendering_clip',\n 'burning_subtitles',\n 'rendering_variant',\n 'generating_thumbnail',\n 'awaiting_review',\n 'publishing_clip',\n] as const;\n\nexport type ClipArtifactCurrentStep = (typeof CLIP_ARTIFACT_CURRENT_STEPS)[number];\n\nexport const COMMENTARY_RUN_STATUSES = [\n 'queued',\n 'processing',\n 'review_required',\n 'completed',\n 'failed',\n 'cancelled',\n] as const;\n\nexport type CommentaryRunStatus = (typeof COMMENTARY_RUN_STATUSES)[number];\n\nexport const COMMENTARY_RUN_CURRENT_STEPS = [\n 'loading_context',\n 'assembling_prompt',\n 'generating_outputs',\n 'normalizing_outputs',\n 'awaiting_review',\n 'publishing_outputs',\n] as const;\n\nexport type CommentaryRunCurrentStep = (typeof COMMENTARY_RUN_CURRENT_STEPS)[number];\n\nexport const ARTIFACT_STATUSES = [\n 'unavailable',\n 'queued',\n 'processing',\n 'partial',\n 'review_required',\n 'ready',\n 'failed',\n 'cancelled',\n] as const;\n\nexport type ArtifactStatus = (typeof ARTIFACT_STATUSES)[number];\n\nexport const ARTIFACT_TYPES = [\n 'source_media',\n 'extracted_audio',\n 'transcript_json',\n 'subtitle_json',\n 'subtitle_srt',\n 'subtitle_vtt',\n 'subtitle_ttml',\n 'subtitle_stl',\n 'summary_text',\n 'summary_json',\n 'dubbed_audio',\n 'highlight_clip',\n 'highlight_clip_subtitled',\n 'social_variant',\n 'thumbnail_image',\n 'commentary_text',\n 'commentary_json',\n 'export_bundle',\n 'live_segment',\n 'quality_report',\n] as const;\n\nexport type ArtifactType = (typeof ARTIFACT_TYPES)[number];\n\nexport const ARTIFACT_FORMATS = [\n 'json',\n 'txt',\n 'md',\n 'srt',\n 'vtt',\n 'ttml',\n 'xml',\n 'stl',\n 'wav',\n 'mp3',\n 'mp4',\n 'jpg',\n 'png',\n 'zip',\n] as const;\n\nexport type ArtifactFormat = (typeof ARTIFACT_FORMATS)[number];\n\nexport const ARTIFACT_REVIEW_STATUSES = [\n 'not_required',\n 'pending',\n 'approved',\n 'rejected',\n] as const;\n\nexport type ArtifactReviewStatus = (typeof ARTIFACT_REVIEW_STATUSES)[number];\n\nexport const ARTIFACT_CURRENT_STEPS = [\n 'awaiting_source',\n 'generating',\n 'validating',\n 'awaiting_review',\n 'publishing',\n 'indexed',\n] as const;\n\nexport type ArtifactCurrentStep = (typeof ARTIFACT_CURRENT_STEPS)[number];\n\nexport const EXPORT_PACKAGE_STATUSES = [\n 'queued',\n 'processing',\n 'partial',\n 'ready',\n 'failed',\n 'cancelled',\n] as const;\n\nexport type ExportPackageStatus = (typeof EXPORT_PACKAGE_STATUSES)[number];\n\nexport const EXPORT_PACKAGE_FORMATS = [\n 'zip',\n 'manifest',\n 'deliverable_bundle',\n] as const;\n\nexport type ExportPackageFormat = (typeof EXPORT_PACKAGE_FORMATS)[number];\n\nexport const EXPORT_PACKAGE_CURRENT_STEPS = [\n 'collecting_artifacts',\n 'validating_contents',\n 'packaging_bundle',\n 'publishing_package',\n 'indexed',\n] as const;\n\nexport type ExportPackageCurrentStep = (typeof EXPORT_PACKAGE_CURRENT_STEPS)[number];\n\nexport interface EntityReference<TKind extends DomainEntityKind = DomainEntityKind> {\n id: string;\n kind: TKind;\n}\n\nexport type SourceEntityKind = 'job' | 'live_session';\nexport type CommentarySourceKind = SourceEntityKind | 'highlight_run' | 'clip_artifact';\nexport type ArtifactOwnerKind = CommentarySourceKind | 'commentary_run' | 'dubbing_run' | 'export_package';\n\nexport type SourceEntityReference<TKind extends SourceEntityKind = SourceEntityKind> = EntityReference<TKind>;\n\nexport type CommentarySourceReference<TKind extends CommentarySourceKind = CommentarySourceKind> = EntityReference<TKind>;\n\nexport type ArtifactOwnerReference<TKind extends ArtifactOwnerKind = ArtifactOwnerKind> = EntityReference<TKind>;\n\nexport interface BaseDomainEntity<TKind extends DomainEntityKind, TStatus extends string, TStep extends string> {\n id: string;\n kind: TKind;\n status: TStatus;\n currentStep: TStep | null;\n progress: number | null;\n createdAt: string;\n updatedAt: string;\n startedAt?: string | null;\n completedAt?: string | null;\n failedAt?: string | null;\n cancelledAt?: string | null;\n retryCount?: number;\n errorCode?: string | null;\n errorMessage?: string | null;\n}\n\nexport interface JobCapabilityReadiness {\n subtitles: CapabilityReadinessState;\n summary: CapabilityReadinessState;\n dubbing: CapabilityReadinessState;\n highlights: CapabilityReadinessState;\n commentary: CapabilityReadinessState;\n exports: CapabilityReadinessState;\n}\n\nexport interface CanonicalJob\n extends BaseDomainEntity<'job', CanonicalJobStatus, CanonicalJobCurrentStep> {\n jobId: string;\n fileName: string;\n sourceLanguage: string | null;\n targetLanguages: string[];\n sourceMediaArtifactId?: string | null;\n readiness: JobCapabilityReadiness;\n highlightRunIds?: string[];\n commentaryRunIds?: string[];\n artifactIds?: string[];\n exportPackageIds?: string[];\n rerunOfJobId?: string | null;\n}\n\nexport interface LiveSession\n extends BaseDomainEntity<'live_session', LiveSessionStatus, LiveSessionCurrentStep> {\n sessionId: string;\n title: string;\n sourceLanguage: string | null;\n targetLanguages: string[];\n derivedJobId?: string | null;\n artifactIds?: string[];\n readiness: CapabilityReadinessState;\n}\n\nexport interface HighlightRun\n extends BaseDomainEntity<'highlight_run', HighlightRunStatus, HighlightRunCurrentStep> {\n runId: string;\n source: SourceEntityReference;\n clipArtifactIds: string[];\n candidateCount?: number;\n selectedCount?: number;\n profile?: 'default' | 'sport' | 'interview' | 'documentary' | 'social' | null;\n readiness: CapabilityReadinessState;\n}\n\nexport interface DubbingRun\n extends BaseDomainEntity<'dubbing_run', DubbingRunStatus, DubbingRunCurrentStep> {\n runId: string;\n source: SourceEntityReference<'job'>;\n targetLanguages: string[];\n completedLanguages?: string[];\n failedLanguages?: string[];\n artifactIds?: string[];\n error?: string;\n readiness: CapabilityReadinessState;\n}\n\nexport interface ClipArtifact\n extends BaseDomainEntity<'clip_artifact', ClipArtifactStatus, ClipArtifactCurrentStep> {\n clipId: string;\n highlightRunId: string;\n source: SourceEntityReference;\n startMs: number;\n endMs: number;\n artifactIds?: string[];\n renderStatus?: 'completed' | 'failed' | 'processing' | null;\n thumbnailPath?: string | null;\n readiness: CapabilityReadinessState;\n}\n\nexport interface CommentaryRun\n extends BaseDomainEntity<'commentary_run', CommentaryRunStatus, CommentaryRunCurrentStep> {\n runId: string;\n source: CommentarySourceReference;\n outputKinds: string[];\n artifactIds?: string[];\n readiness: CapabilityReadinessState;\n}\n\nexport interface Artifact\n extends BaseDomainEntity<'artifact', ArtifactStatus, ArtifactCurrentStep> {\n artifactId: string;\n owner: ArtifactOwnerReference;\n artifactType: ArtifactType;\n language?: string | null;\n format?: ArtifactFormat | null;\n storageKey?: string | null;\n storagePath?: string | null;\n bucketName?: string | null;\n mimeType?: string | null;\n sizeBytes?: number | null;\n checksum?: string | null;\n reviewStatus?: ArtifactReviewStatus | null;\n variantLabel?: string | null;\n readiness: CapabilityReadinessState;\n}\n\nexport interface ExportPackage\n extends BaseDomainEntity<'export_package', ExportPackageStatus, ExportPackageCurrentStep> {\n exportPackageId: string;\n owner: SourceEntityReference;\n artifactIds: string[];\n packageFormat: ExportPackageFormat;\n readiness: CapabilityReadinessState;\n}\n\nexport const JOB_STATUS_TRANSITIONS: Record<CanonicalJobStatus, readonly CanonicalJobStatus[]> = {\n created: ['queued', 'cancelled'],\n queued: ['processing', 'failed', 'cancelled'],\n processing: ['completed', 'failed', 'cancelled'],\n completed: [],\n failed: ['queued'],\n cancelled: ['queued'],\n};\n\nexport const LIVE_SESSION_STATUS_TRANSITIONS: Record<LiveSessionStatus, readonly LiveSessionStatus[]> = {\n scheduled: ['starting', 'cancelled'],\n starting: ['live', 'failed', 'cancelled'],\n live: ['finalizing', 'failed', 'cancelled'],\n finalizing: ['completed', 'failed', 'cancelled'],\n completed: [],\n failed: ['starting'],\n cancelled: ['starting'],\n};\n\nexport const HIGHLIGHT_RUN_STATUS_TRANSITIONS: Record<HighlightRunStatus, readonly HighlightRunStatus[]> = {\n queued: ['processing', 'failed', 'cancelled'],\n processing: ['completed', 'failed', 'cancelled'],\n completed: [],\n failed: ['queued'],\n cancelled: ['queued'],\n};\n\nexport const DUBBING_RUN_STATUS_TRANSITIONS: Record<DubbingRunStatus, readonly DubbingRunStatus[]> = {\n queued: ['processing', 'failed', 'cancelled'],\n processing: ['partial', 'completed', 'failed', 'cancelled'],\n partial: ['processing', 'completed', 'failed', 'cancelled'],\n completed: [],\n failed: ['queued'],\n cancelled: ['queued'],\n};\n\nexport const CLIP_ARTIFACT_STATUS_TRANSITIONS: Record<ClipArtifactStatus, readonly ClipArtifactStatus[]> = {\n queued: ['processing', 'failed', 'cancelled'],\n processing: ['review_required', 'ready', 'failed', 'cancelled'],\n review_required: ['ready', 'failed', 'cancelled'],\n ready: [],\n failed: ['queued'],\n cancelled: ['queued'],\n};\n\nexport const COMMENTARY_RUN_STATUS_TRANSITIONS: Record<CommentaryRunStatus, readonly CommentaryRunStatus[]> = {\n queued: ['processing', 'failed', 'cancelled'],\n processing: ['review_required', 'completed', 'failed', 'cancelled'],\n review_required: ['completed', 'failed', 'cancelled'],\n completed: [],\n failed: ['queued'],\n cancelled: ['queued'],\n};\n\nexport const ARTIFACT_STATUS_TRANSITIONS: Record<ArtifactStatus, readonly ArtifactStatus[]> = {\n unavailable: ['queued', 'failed'],\n queued: ['processing', 'failed', 'cancelled'],\n processing: ['partial', 'review_required', 'ready', 'failed', 'cancelled'],\n partial: ['ready', 'failed', 'cancelled'],\n review_required: ['ready', 'failed', 'cancelled'],\n ready: [],\n failed: ['queued'],\n cancelled: ['queued'],\n};\n\nexport const EXPORT_PACKAGE_STATUS_TRANSITIONS: Record<ExportPackageStatus, readonly ExportPackageStatus[]> = {\n queued: ['processing', 'failed', 'cancelled'],\n processing: ['partial', 'ready', 'failed', 'cancelled'],\n partial: ['ready', 'failed', 'cancelled'],\n ready: [],\n failed: ['queued'],\n cancelled: ['queued'],\n};\n\nexport function normalizeJobStatus(status: CompatibleJobStatus): CanonicalJobStatus {\n if ((CANONICAL_JOB_STATUSES as readonly string[]).includes(status)) {\n return status as CanonicalJobStatus;\n }\n\n return LEGACY_TO_CANONICAL_JOB_STATUS[status as LegacyJobStatus];\n}\n\nexport function normalizeJobCurrentStep(step: CompatibleJobCurrentStep): CanonicalJobCurrentStep {\n if ((CANONICAL_JOB_CURRENT_STEPS as readonly string[]).includes(step)) {\n return step as CanonicalJobCurrentStep;\n }\n\n return LEGACY_TO_CANONICAL_JOB_CURRENT_STEP[step as LegacyJobCurrentStep];\n}\n\nexport function isValidTransition<TStatus extends string>(\n transitionMap: Record<TStatus, readonly TStatus[]>,\n from: TStatus,\n to: TStatus,\n): boolean {\n return transitionMap[from]?.includes(to) ?? false;\n}\n"]}
|