@generaltranslation/api 0.0.1 → 0.0.2
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/CHANGELOG.md +6 -0
- package/dist/index.cjs +136 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +225 -1
- package/dist/index.d.mts +225 -1
- package/dist/index.mjs +136 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/spec/openapi.json +360 -48
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["MAX_POLL_TIMEOUT_MS","createGeneratedClient"],"sources":["../src/generated/sdk.gen.ts","../src/wrappers/transport.ts","../src/wrappers/awaitJobs.ts","../src/wrappers/base64.ts","../src/wrappers/batch.ts","../src/generated/core/bodySerializer.gen.ts","../src/generated/core/serverSentEvents.gen.ts","../src/generated/core/pathSerializer.gen.ts","../src/generated/core/utils.gen.ts","../src/generated/core/auth.gen.ts","../src/generated/client/utils.gen.ts","../src/generated/client/client.gen.ts","../src/wrappers/client.ts"],"sourcesContent":["// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Client, Options as Options2, TDataShape } from './client';\nimport type {\n CreateBranchData,\n CreateBranchErrors,\n CreateBranchResponses,\n CreateCliWizardSessionData,\n CreateCliWizardSessionErrors,\n CreateCliWizardSessionResponses,\n CreateProjectData,\n CreateProjectErrors,\n CreateProjectResponses,\n CreateTagData,\n CreateTagErrors,\n CreateTagResponses,\n DeleteCliWizardSessionData,\n DeleteCliWizardSessionErrors,\n DeleteCliWizardSessionResponses,\n DownloadFileData,\n DownloadFileErrors,\n DownloadFileResponses,\n DownloadFilesData,\n DownloadFilesErrors,\n DownloadFilesResponses,\n EnqueueFileTranslationsData,\n EnqueueFileTranslationsErrors,\n EnqueueFileTranslationsResponses,\n GenerateProjectContextData,\n GenerateProjectContextErrors,\n GenerateProjectContextResponses,\n GetBranchInfoData,\n GetBranchInfoErrors,\n GetBranchInfoResponses,\n GetCliWizardSessionData,\n GetCliWizardSessionErrors,\n GetCliWizardSessionResponses,\n GetFileInfoData,\n GetFileInfoErrors,\n GetFileInfoResponses,\n GetOrphanedFilesData,\n GetOrphanedFilesErrors,\n GetOrphanedFilesResponses,\n GetProjectContextGenerationStatusData,\n GetProjectContextGenerationStatusErrors,\n GetProjectContextGenerationStatusResponses,\n GetProjectInfoData,\n GetProjectInfoErrors,\n GetProjectInfoResponses,\n GetTranslationJobInfoData,\n GetTranslationJobInfoErrors,\n GetTranslationJobInfoResponses,\n GetTranslationStatusData,\n GetTranslationStatusErrors,\n GetTranslationStatusResponses,\n ProcessFileMovesData,\n ProcessFileMovesErrors,\n ProcessFileMovesResponses,\n PublishFilesData,\n PublishFilesErrors,\n PublishFilesResponses,\n ShouldGenerateProjectContextData,\n ShouldGenerateProjectContextErrors,\n ShouldGenerateProjectContextResponses,\n SubmitUserEditDiffsData,\n SubmitUserEditDiffsErrors,\n SubmitUserEditDiffsResponses,\n TranslateData,\n TranslateErrors,\n TranslateResponses,\n UpdateProjectInfoData,\n UpdateProjectInfoErrors,\n UpdateProjectInfoResponses,\n UploadAssetsData,\n UploadAssetsErrors,\n UploadAssetsResponses,\n UploadSourceFilesData,\n UploadSourceFilesErrors,\n UploadSourceFilesResponses,\n UploadTranslationsData,\n UploadTranslationsErrors,\n UploadTranslationsResponses,\n} from './types.gen';\n\nexport type Options<\n TData extends TDataShape = TDataShape,\n ThrowOnError extends boolean = boolean,\n> = Options2<TData, ThrowOnError> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client: Client;\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: Record<string, unknown>;\n};\n\nexport const createProject = <ThrowOnError extends boolean = false>(\n options: Options<CreateProjectData, ThrowOnError>\n) =>\n options.client.post<\n CreateProjectResponses,\n CreateProjectErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/projects',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const uploadSourceFiles = <ThrowOnError extends boolean = false>(\n options: Options<UploadSourceFilesData, ThrowOnError>\n) =>\n options.client.post<\n UploadSourceFilesResponses,\n UploadSourceFilesErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/upload-files',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const uploadTranslations = <ThrowOnError extends boolean = false>(\n options: Options<UploadTranslationsData, ThrowOnError>\n) =>\n options.client.post<\n UploadTranslationsResponses,\n UploadTranslationsErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/upload-translations',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const uploadAssets = <ThrowOnError extends boolean = false>(\n options: Options<UploadAssetsData, ThrowOnError>\n) =>\n options.client.post<UploadAssetsResponses, UploadAssetsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/assets',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const submitUserEditDiffs = <ThrowOnError extends boolean = false>(\n options: Options<SubmitUserEditDiffsData, ThrowOnError>\n) =>\n options.client.post<\n SubmitUserEditDiffsResponses,\n SubmitUserEditDiffsErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/diffs',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const shouldGenerateProjectContext = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<ShouldGenerateProjectContextData, ThrowOnError>\n) =>\n options.client.get<\n ShouldGenerateProjectContextResponses,\n ShouldGenerateProjectContextErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/setup/should-generate',\n ...options,\n });\n\nexport const generateProjectContext = <ThrowOnError extends boolean = false>(\n options: Options<GenerateProjectContextData, ThrowOnError>\n) =>\n options.client.post<\n GenerateProjectContextResponses,\n GenerateProjectContextErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/setup/generate',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const getProjectContextGenerationStatus = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<GetProjectContextGenerationStatusData, ThrowOnError>\n) =>\n options.client.get<\n GetProjectContextGenerationStatusResponses,\n GetProjectContextGenerationStatusErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/setup/status/{jobId}',\n ...options,\n });\n\nexport const enqueueFileTranslations = <ThrowOnError extends boolean = false>(\n options: Options<EnqueueFileTranslationsData, ThrowOnError>\n) =>\n options.client.post<\n EnqueueFileTranslationsResponses,\n EnqueueFileTranslationsErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/translations/enqueue',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const publishFiles = <ThrowOnError extends boolean = false>(\n options: Options<PublishFilesData, ThrowOnError>\n) =>\n options.client.post<PublishFilesResponses, PublishFilesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/publish',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const downloadFile = <ThrowOnError extends boolean = false>(\n options: Options<DownloadFileData, ThrowOnError>\n) =>\n options.client.get<DownloadFileResponses, DownloadFileErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/download/{fileId}',\n ...options,\n });\n\nexport const downloadFiles = <ThrowOnError extends boolean = false>(\n options: Options<DownloadFilesData, ThrowOnError>\n) =>\n options.client.post<\n DownloadFilesResponses,\n DownloadFilesErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/download',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const getBranchInfo = <ThrowOnError extends boolean = false>(\n options: Options<GetBranchInfoData, ThrowOnError>\n) =>\n options.client.post<\n GetBranchInfoResponses,\n GetBranchInfoErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/branches/info',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const createBranch = <ThrowOnError extends boolean = false>(\n options: Options<CreateBranchData, ThrowOnError>\n) =>\n options.client.post<CreateBranchResponses, CreateBranchErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/branches/create',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const createTag = <ThrowOnError extends boolean = false>(\n options: Options<CreateTagData, ThrowOnError>\n) =>\n options.client.post<CreateTagResponses, CreateTagErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/tags/create',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const getProjectInfo = <ThrowOnError extends boolean = false>(\n options: Options<GetProjectInfoData, ThrowOnError>\n) =>\n options.client.get<\n GetProjectInfoResponses,\n GetProjectInfoErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/info/{projectId}',\n ...options,\n });\n\nexport const updateProjectInfo = <ThrowOnError extends boolean = false>(\n options: Options<UpdateProjectInfoData, ThrowOnError>\n) =>\n options.client.post<\n UpdateProjectInfoResponses,\n UpdateProjectInfoErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/info/{projectId}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const getTranslationJobInfo = <ThrowOnError extends boolean = false>(\n options: Options<GetTranslationJobInfoData, ThrowOnError>\n) =>\n options.client.post<\n GetTranslationJobInfoResponses,\n GetTranslationJobInfoErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/jobs/info',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const translate = <ThrowOnError extends boolean = false>(\n options: Options<TranslateData, ThrowOnError>\n) =>\n options.client.post<TranslateResponses, TranslateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/translate',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const getFileInfo = <ThrowOnError extends boolean = false>(\n options: Options<GetFileInfoData, ThrowOnError>\n) =>\n options.client.post<GetFileInfoResponses, GetFileInfoErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/info',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const getTranslationStatus = <ThrowOnError extends boolean = false>(\n options: Options<GetTranslationStatusData, ThrowOnError>\n) =>\n options.client.get<\n GetTranslationStatusResponses,\n GetTranslationStatusErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/translations/files/status/{fileId}',\n ...options,\n });\n\nexport const processFileMoves = <ThrowOnError extends boolean = false>(\n options: Options<ProcessFileMovesData, ThrowOnError>\n) =>\n options.client.post<\n ProcessFileMovesResponses,\n ProcessFileMovesErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/moves',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const getOrphanedFiles = <ThrowOnError extends boolean = false>(\n options: Options<GetOrphanedFilesData, ThrowOnError>\n) =>\n options.client.post<\n GetOrphanedFilesResponses,\n GetOrphanedFilesErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/orphaned',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const createCliWizardSession = <ThrowOnError extends boolean = false>(\n options: Options<CreateCliWizardSessionData, ThrowOnError>\n) =>\n options.client.post<\n CreateCliWizardSessionResponses,\n CreateCliWizardSessionErrors,\n ThrowOnError\n >({\n url: '/cli/wizard/session',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\nexport const deleteCliWizardSession = <ThrowOnError extends boolean = false>(\n options: Options<DeleteCliWizardSessionData, ThrowOnError>\n) =>\n options.client.delete<\n DeleteCliWizardSessionResponses,\n DeleteCliWizardSessionErrors,\n ThrowOnError\n >({ url: '/cli/wizard/{sessionId}', ...options });\n\nexport const getCliWizardSession = <ThrowOnError extends boolean = false>(\n options: Options<GetCliWizardSessionData, ThrowOnError>\n) =>\n options.client.get<\n GetCliWizardSessionResponses,\n GetCliWizardSessionErrors,\n ThrowOnError\n >({ url: '/cli/wizard/{sessionId}', ...options });\n","const MAX_RETRIES = 3;\nconst INITIAL_DELAY_MS = 500;\nconst RATE_LIMIT_RETRY_DELAY_MS = 60_000;\nconst IDEMPOTENT_METHODS = new Set(['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE']);\nexport const DEFAULT_TIMEOUT_MS = 60_000;\n\nexport type RetryPolicy = 'exponential' | 'linear' | 'none';\n\nexport type RetryingFetchOptions = {\n fetch?: typeof fetch;\n retryPolicy?: RetryPolicy;\n};\n\nexport type TimeoutFetchOptions = {\n fetch?: typeof fetch;\n timeoutMs?: number;\n};\n\nexport function createTimeoutFetch({\n fetch: fetchImplementation = globalThis.fetch,\n timeoutMs = DEFAULT_TIMEOUT_MS,\n}: TimeoutFetchOptions = {}): typeof fetch {\n return async (input, init) => {\n const request = new Request(input, init);\n const controller = new AbortController();\n const forwardAbort = () => controller.abort(request.signal.reason);\n if (request.signal.aborted) forwardAbort();\n else request.signal.addEventListener('abort', forwardAbort, { once: true });\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n return await fetchImplementation(\n new Request(request, { signal: controller.signal })\n );\n } catch (error) {\n if (controller.signal.aborted && !request.signal.aborted) {\n throw new Error(`Request timed out after ${timeoutMs}ms`);\n }\n throw error;\n } finally {\n clearTimeout(timeoutId);\n request.signal.removeEventListener('abort', forwardAbort);\n }\n };\n}\n\nconst sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\nfunction parseDelayMs(value: string | null): number | undefined {\n if (!value) return undefined;\n\n const seconds = Number(value.split(',')[0].split(';')[0].trim());\n return Number.isFinite(seconds) && seconds >= 0 ? seconds * 1000 : undefined;\n}\n\nfunction parseRetryAfter(value: string | null): number | undefined {\n const delayMs = parseDelayMs(value);\n if (delayMs !== undefined) return delayMs;\n if (!value) return undefined;\n\n const retryDate = Date.parse(value);\n return Number.isNaN(retryDate)\n ? undefined\n : Math.max(retryDate - Date.now(), 0);\n}\n\nfunction retryDelay(\n response: Response | undefined,\n attempt: number,\n retryPolicy: RetryPolicy\n): number {\n if (response?.status === 429) {\n return (\n parseRetryAfter(response.headers.get('Retry-After')) ??\n parseDelayMs(response.headers.get('RateLimit-Reset')) ??\n RATE_LIMIT_RETRY_DELAY_MS\n );\n }\n return (\n INITIAL_DELAY_MS * (retryPolicy === 'linear' ? attempt + 1 : 2 ** attempt)\n );\n}\n\nexport function createRetryingFetch({\n fetch: fetchImplementation = globalThis.fetch,\n retryPolicy = 'exponential',\n}: RetryingFetchOptions = {}): typeof fetch {\n return async (input, init) => {\n const request = new Request(input, init);\n const maxRetries = retryPolicy === 'none' ? 0 : MAX_RETRIES;\n const isIdempotent = IDEMPOTENT_METHODS.has(request.method);\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n let response: Response | undefined;\n try {\n response = await fetchImplementation(request.clone());\n } catch (error) {\n if (request.signal.aborted || attempt === maxRetries || !isIdempotent) {\n throw error;\n }\n }\n\n if (\n response &&\n response.status !== 429 &&\n (response.status < 500 || !isIdempotent)\n ) {\n return response;\n }\n if (response && attempt === maxRetries) return response;\n // Caller gave up (e.g. a poll deadline); don't sleep through the abort.\n if (request.signal.aborted) {\n if (response) return response;\n throw request.signal.reason;\n }\n\n // Drain the discarded 429/5xx body so undici can release the socket.\n void response?.body?.cancel();\n await sleep(retryDelay(response, attempt, retryPolicy));\n }\n\n throw new Error('Max retries exceeded');\n };\n}\n","import type { Client } from '../generated/client';\nimport { getTranslationJobInfo } from '../generated/sdk.gen';\nimport type { GetTranslationJobInfoResponse } from '../generated/types.gen';\n// Per-poll cap so a hung connection fails fast instead of eating the whole deadline.\nimport { DEFAULT_TIMEOUT_MS as MAX_POLL_TIMEOUT_MS } from './transport';\n\nconst DEFAULT_POLLING_INTERVAL_SECONDS = 5;\nconst DEFAULT_TIMEOUT_SECONDS = 600;\n\nexport type JobResult = GetTranslationJobInfoResponse[number];\nexport type GetJobStatuses = (\n jobIds: string[],\n signal: AbortSignal\n) => Promise<GetTranslationJobInfoResponse>;\n\nexport type AwaitJobsOptions = {\n pollingIntervalSeconds?: number;\n timeoutSeconds?: number;\n};\n\nexport type AwaitJobsResult = {\n complete: boolean;\n jobs: JobResult[];\n};\n\nexport async function awaitJobs(\n client: Client,\n jobIds: readonly string[],\n options: AwaitJobsOptions = {}\n): Promise<AwaitJobsResult> {\n return pollJobs(\n jobIds,\n async (pendingJobIds, signal) => {\n const result = await getTranslationJobInfo({\n body: { jobIds: pendingJobIds },\n client,\n signal,\n throwOnError: true,\n });\n return result.data;\n },\n options\n );\n}\n\n// Internal seam: the polling loop with an injected status loader so tests can\n// drive it without a client. Not re-exported from the package index.\nexport async function pollJobs(\n jobIds: readonly string[],\n getJobStatuses: GetJobStatuses,\n options: AwaitJobsOptions = {}\n): Promise<AwaitJobsResult> {\n if (jobIds.length === 0) return { complete: true, jobs: [] };\n\n const pollingInterval =\n (options.pollingIntervalSeconds ?? DEFAULT_POLLING_INTERVAL_SECONDS) *\n 1_000;\n const timeout = (options.timeoutSeconds ?? DEFAULT_TIMEOUT_SECONDS) * 1_000;\n const deadline = Date.now() + timeout;\n const finalStatuses = new Map<string, JobResult>(\n jobIds.map((jobId) => [jobId, { jobId, status: 'unknown' }])\n );\n const pendingJobIds = new Set(jobIds);\n\n while (pendingJobIds.size > 0 && Date.now() < deadline) {\n let statuses: GetTranslationJobInfoResponse;\n try {\n statuses = await getJobStatuses(\n [...pendingJobIds],\n AbortSignal.timeout(\n Math.min(deadline - Date.now(), MAX_POLL_TIMEOUT_MS)\n )\n );\n } catch (error) {\n if (Date.now() >= deadline) break;\n throw error;\n }\n if (Date.now() >= deadline) break;\n\n const returnedJobIds = new Set(statuses.map(({ jobId }) => jobId));\n\n for (const job of statuses) {\n finalStatuses.set(job.jobId, job);\n if (\n job.status === 'completed' ||\n job.status === 'failed' ||\n job.status === 'unknown'\n ) {\n pendingJobIds.delete(job.jobId);\n }\n }\n\n for (const jobId of pendingJobIds) {\n if (!returnedJobIds.has(jobId)) {\n finalStatuses.set(jobId, { jobId, status: 'unknown' });\n pendingJobIds.delete(jobId);\n }\n }\n\n if (pendingJobIds.size > 0) {\n await new Promise((resolve) =>\n setTimeout(resolve, Math.min(pollingInterval, deadline - Date.now()))\n );\n }\n }\n\n return {\n complete: pendingJobIds.size === 0,\n jobs: [...finalStatuses.values()],\n };\n}\n","import type { FileFormat } from '../generated/types.gen';\n\n// Buffer is faster in Node; atob/btoa is the browser fallback.\n// Checked per-call (not at module load) so tests can stub Buffer out.\nexport function encodeBase64(data: string): string {\n if (typeof Buffer !== 'undefined')\n return Buffer.from(data, 'utf-8').toString('base64');\n const bytes = new TextEncoder().encode(data);\n let binary = '';\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return btoa(binary);\n}\n\nexport function decodeBase64(base64: string): string {\n if (typeof Buffer !== 'undefined')\n return Buffer.from(base64, 'base64').toString('utf-8');\n const bytes = Uint8Array.from(atob(base64), (character) =>\n character.charCodeAt(0)\n );\n return new TextDecoder().decode(bytes);\n}\n\nexport function encodeFileContent(\n content: string,\n fileFormat: FileFormat\n): string {\n return fileFormat === 'LOTTIE' ? content : encodeBase64(content);\n}\n\nexport function decodeFileContent(\n content: string,\n fileFormat: FileFormat\n): string {\n return fileFormat === 'LOTTIE' ? content : decodeBase64(content);\n}\n","export const DEFAULT_BATCH_SIZE = 100;\n\nexport type BatchOptions = {\n batchSize?: number;\n parallel?: boolean;\n};\n\nexport function createBatches<T>(\n items: readonly T[],\n batchSize = DEFAULT_BATCH_SIZE\n): T[][] {\n const batches: T[][] = [];\n for (let index = 0; index < items.length; index += batchSize) {\n batches.push(items.slice(index, index + batchSize));\n }\n return batches;\n}\n\nexport async function processBatches<TInput, TOutput>(\n items: readonly TInput[],\n processBatch: (batch: TInput[]) => Promise<TOutput[]>,\n { batchSize = DEFAULT_BATCH_SIZE, parallel = true }: BatchOptions = {}\n): Promise<TOutput[]> {\n const batches = createBatches(items, batchSize);\n if (parallel) {\n return (await Promise.all(batches.map(processBatch))).flat();\n }\n const results: TOutput[][] = [];\n for (const batch of batches) results.push(await processBatch(batch));\n return results.flat();\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type {\n ArrayStyle,\n ObjectStyle,\n SerializerOptions,\n} from './pathSerializer.gen';\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: any) => any;\n\ntype QuerySerializerOptionsObject = {\n allowReserved?: boolean;\n array?: Partial<SerializerOptions<ArrayStyle>>;\n object?: Partial<SerializerOptions<ObjectStyle>>;\n};\n\nexport type QuerySerializerOptions = QuerySerializerOptionsObject & {\n /**\n * Per-parameter serialization overrides. When provided, these settings\n * override the global array/object settings for specific parameter names.\n */\n parameters?: Record<string, QuerySerializerOptionsObject>;\n};\n\nconst serializeFormDataPair = (\n data: FormData,\n key: string,\n value: unknown\n): void => {\n if (typeof value === 'string' || value instanceof Blob) {\n data.append(key, value);\n } else if (value instanceof Date) {\n data.append(key, value.toISOString());\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nconst serializeUrlSearchParamsPair = (\n data: URLSearchParams,\n key: string,\n value: unknown\n): void => {\n if (typeof value === 'string') {\n data.append(key, value);\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nexport const formDataBodySerializer = {\n bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(\n body: T\n ): FormData => {\n const data = new FormData();\n\n Object.entries(body).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeFormDataPair(data, key, v));\n } else {\n serializeFormDataPair(data, key, value);\n }\n });\n\n return data;\n },\n};\n\nexport const jsonBodySerializer = {\n bodySerializer: <T>(body: T): string =>\n JSON.stringify(body, (_key, value) =>\n typeof value === 'bigint' ? value.toString() : value\n ),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(\n body: T\n ): string => {\n const data = new URLSearchParams();\n\n Object.entries(body).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));\n } else {\n serializeUrlSearchParamsPair(data, key, value);\n }\n });\n\n return data.toString();\n },\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Config } from './types.gen';\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<\n RequestInit,\n 'method'\n> &\n Pick<Config, 'method' | 'responseTransformer' | 'responseValidator'> & {\n /**\n * Fetch API implementation. You can use this option to provide a custom\n * fetch instance.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * Implementing clients can call request interceptors inside this hook.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n /**\n * Callback invoked when a network or parsing error occurs during streaming.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param error The error that occurred.\n */\n onSseError?: (error: unknown) => void;\n /**\n * Callback invoked when an event is streamed from the server.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param event Event streamed from the server.\n * @returns Nothing (void).\n */\n onSseEvent?: (event: StreamEvent<TData>) => void;\n serializedBody?: RequestInit['body'];\n /**\n * Default retry delay in milliseconds.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 3000\n */\n sseDefaultRetryDelay?: number;\n /**\n * Maximum number of retry attempts before giving up.\n */\n sseMaxRetryAttempts?: number;\n /**\n * Maximum retry delay in milliseconds.\n *\n * Applies only when exponential backoff is used.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 30000\n */\n sseMaxRetryDelay?: number;\n /**\n * Optional sleep function for retry backoff.\n *\n * Defaults to using `setTimeout`.\n */\n sseSleepFn?: (ms: number) => Promise<void>;\n url: string;\n };\n\nexport interface StreamEvent<TData = unknown> {\n data: TData;\n event?: string;\n id?: string;\n retry?: number;\n}\n\nexport type ServerSentEventsResult<\n TData = unknown,\n TReturn = void,\n TNext = unknown,\n> = {\n stream: AsyncGenerator<\n TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n TReturn,\n TNext\n >;\n};\n\nexport const createSseClient = <TData = unknown>({\n onRequest,\n onSseError,\n onSseEvent,\n responseTransformer,\n responseValidator,\n sseDefaultRetryDelay,\n sseMaxRetryAttempts,\n sseMaxRetryDelay,\n sseSleepFn,\n url,\n ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> => {\n let lastEventId: string | undefined;\n\n const sleep =\n sseSleepFn ??\n ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n const createStream = async function* () {\n let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n let attempt = 0;\n const signal = options.signal ?? new AbortController().signal;\n\n while (true) {\n if (signal.aborted) break;\n\n attempt++;\n\n const headers =\n options.headers instanceof Headers\n ? options.headers\n : new Headers(options.headers as Record<string, string> | undefined);\n\n if (lastEventId !== undefined) {\n headers.set('Last-Event-ID', lastEventId);\n }\n\n try {\n const requestInit: RequestInit = {\n redirect: 'follow',\n ...options,\n body: options.serializedBody,\n headers,\n signal,\n };\n let request = new Request(url, requestInit);\n if (onRequest) {\n request = await onRequest(url, requestInit);\n }\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = options.fetch ?? globalThis.fetch;\n const response = await _fetch(request);\n\n if (!response.ok)\n throw new Error(\n `SSE failed: ${response.status} ${response.statusText}`\n );\n\n if (!response.body) throw new Error('No body in SSE response');\n\n const reader = response.body\n .pipeThrough(new TextDecoderStream())\n .getReader();\n\n let buffer = '';\n\n const abortHandler = () => {\n try {\n reader.cancel();\n } catch {\n // noop\n }\n };\n\n signal.addEventListener('abort', abortHandler);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += value;\n\n const chunks = buffer.split('\\n\\n');\n buffer = chunks.pop() ?? '';\n\n for (const chunk of chunks) {\n const lines = chunk.split('\\n');\n const dataLines: Array<string> = [];\n let eventName: string | undefined;\n\n for (const line of lines) {\n if (line.startsWith('data:')) {\n dataLines.push(line.replace(/^data:\\s*/, ''));\n } else if (line.startsWith('event:')) {\n eventName = line.replace(/^event:\\s*/, '');\n } else if (line.startsWith('id:')) {\n lastEventId = line.replace(/^id:\\s*/, '');\n } else if (line.startsWith('retry:')) {\n const parsed = Number.parseInt(\n line.replace(/^retry:\\s*/, ''),\n 10\n );\n if (!Number.isNaN(parsed)) {\n retryDelay = parsed;\n }\n }\n }\n\n let data: unknown;\n let parsedJson = false;\n\n if (dataLines.length) {\n const rawData = dataLines.join('\\n');\n try {\n data = JSON.parse(rawData);\n parsedJson = true;\n } catch {\n data = rawData;\n }\n }\n\n if (parsedJson) {\n if (responseValidator) {\n await responseValidator(data);\n }\n\n if (responseTransformer) {\n data = await responseTransformer(data);\n }\n }\n\n onSseEvent?.({\n data,\n event: eventName,\n id: lastEventId,\n retry: retryDelay,\n });\n\n if (dataLines.length) {\n yield data as any;\n }\n }\n }\n } finally {\n signal.removeEventListener('abort', abortHandler);\n reader.releaseLock();\n }\n\n break; // exit loop on normal completion\n } catch (error) {\n // connection failed or aborted; retry after delay\n onSseError?.(error);\n\n if (\n sseMaxRetryAttempts !== undefined &&\n attempt >= sseMaxRetryAttempts\n ) {\n break; // stop after firing error\n }\n\n // exponential backoff: double retry each attempt, cap at 30s\n const backoff = Math.min(\n retryDelay * 2 ** (attempt - 1),\n sseMaxRetryDelay ?? 30000\n );\n await sleep(backoff);\n }\n }\n };\n\n const stream = createStream();\n\n return { stream };\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T>\n extends SerializePrimitiveOptions, SerializerOptions<T> {}\n\ninterface SerializePrimitiveOptions {\n allowReserved?: boolean;\n name: string;\n}\n\nexport interface SerializerOptions<T> {\n /**\n * @default true\n */\n explode: boolean;\n style: T;\n}\n\nexport type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited';\nexport type ArraySeparatorStyle = ArrayStyle | MatrixStyle;\ntype MatrixStyle = 'label' | 'matrix' | 'simple';\nexport type ObjectStyle = 'form' | 'deepObject';\ntype ObjectSeparatorStyle = ObjectStyle | MatrixStyle;\n\ninterface SerializePrimitiveParam extends SerializePrimitiveOptions {\n value: string;\n}\n\nexport const separatorArrayExplode = (style: ArraySeparatorStyle) => {\n switch (style) {\n case 'label':\n return '.';\n case 'matrix':\n return ';';\n case 'simple':\n return ',';\n default:\n return '&';\n }\n};\n\nexport const separatorArrayNoExplode = (style: ArraySeparatorStyle) => {\n switch (style) {\n case 'form':\n return ',';\n case 'pipeDelimited':\n return '|';\n case 'spaceDelimited':\n return '%20';\n default:\n return ',';\n }\n};\n\nexport const separatorObjectExplode = (style: ObjectSeparatorStyle) => {\n switch (style) {\n case 'label':\n return '.';\n case 'matrix':\n return ';';\n case 'simple':\n return ',';\n default:\n return '&';\n }\n};\n\nexport const serializeArrayParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n}: SerializeOptions<ArraySeparatorStyle> & {\n value: unknown[];\n}) => {\n if (!explode) {\n const joinedValues = (\n allowReserved ? value : value.map((v) => encodeURIComponent(v as string))\n ).join(separatorArrayNoExplode(style));\n switch (style) {\n case 'label':\n return `.${joinedValues}`;\n case 'matrix':\n return `;${name}=${joinedValues}`;\n case 'simple':\n return joinedValues;\n default:\n return `${name}=${joinedValues}`;\n }\n }\n\n const separator = separatorArrayExplode(style);\n const joinedValues = value\n .map((v) => {\n if (style === 'label' || style === 'simple') {\n return allowReserved ? v : encodeURIComponent(v as string);\n }\n\n return serializePrimitiveParam({\n allowReserved,\n name,\n value: v as string,\n });\n })\n .join(separator);\n return style === 'label' || style === 'matrix'\n ? separator + joinedValues\n : joinedValues;\n};\n\nexport const serializePrimitiveParam = ({\n allowReserved,\n name,\n value,\n}: SerializePrimitiveParam) => {\n if (value === undefined || value === null) {\n return '';\n }\n\n if (typeof value === 'object') {\n throw new Error(\n 'Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.'\n );\n }\n\n return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;\n};\n\nexport const serializeObjectParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n valueOnly,\n}: SerializeOptions<ObjectSeparatorStyle> & {\n value: Record<string, unknown> | Date;\n valueOnly?: boolean;\n}) => {\n if (value instanceof Date) {\n return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;\n }\n\n if (style !== 'deepObject' && !explode) {\n let values: string[] = [];\n Object.entries(value).forEach(([key, v]) => {\n values = [\n ...values,\n key,\n allowReserved ? (v as string) : encodeURIComponent(v as string),\n ];\n });\n const joinedValues = values.join(',');\n switch (style) {\n case 'form':\n return `${name}=${joinedValues}`;\n case 'label':\n return `.${joinedValues}`;\n case 'matrix':\n return `;${name}=${joinedValues}`;\n default:\n return joinedValues;\n }\n }\n\n const separator = separatorObjectExplode(style);\n const joinedValues = Object.entries(value)\n .map(([key, v]) =>\n serializePrimitiveParam({\n allowReserved,\n name: style === 'deepObject' ? `${name}[${key}]` : key,\n value: v as string,\n })\n )\n .join(separator);\n return style === 'label' || style === 'matrix'\n ? separator + joinedValues\n : joinedValues;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { BodySerializer, QuerySerializer } from './bodySerializer.gen';\nimport {\n type ArraySeparatorStyle,\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from './pathSerializer.gen';\n\nexport interface PathSerializer {\n path: Record<string, unknown>;\n url: string;\n}\n\nexport const PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nexport const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => {\n let url = _url;\n const matches = _url.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n let explode = false;\n let name = match.substring(1, match.length - 1);\n let style: ArraySeparatorStyle = 'simple';\n\n if (name.endsWith('*')) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n\n if (name.startsWith('.')) {\n name = name.substring(1);\n style = 'label';\n } else if (name.startsWith(';')) {\n name = name.substring(1);\n style = 'matrix';\n }\n\n const value = path[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n url = url.replace(\n match,\n serializeArrayParam({ explode, name, style, value })\n );\n continue;\n }\n\n if (typeof value === 'object') {\n url = url.replace(\n match,\n serializeObjectParam({\n explode,\n name,\n style,\n value: value as Record<string, unknown>,\n valueOnly: true,\n })\n );\n continue;\n }\n\n if (style === 'matrix') {\n url = url.replace(\n match,\n `;${serializePrimitiveParam({\n name,\n value: value as string,\n })}`\n );\n continue;\n }\n\n const replaceValue = encodeURIComponent(\n style === 'label' ? `.${value as string}` : (value as string)\n );\n url = url.replace(match, replaceValue);\n }\n }\n return url;\n};\n\nexport const getUrl = ({\n baseUrl,\n path,\n query,\n querySerializer,\n url: _url,\n}: {\n baseUrl?: string;\n path?: Record<string, unknown>;\n query?: Record<string, unknown>;\n querySerializer: QuerySerializer;\n url: string;\n}) => {\n const pathUrl = _url.startsWith('/') ? _url : `/${_url}`;\n let url = (baseUrl ?? '') + pathUrl;\n if (path) {\n url = defaultPathSerializer({ path, url });\n }\n let search = query ? querySerializer(query) : '';\n if (search.startsWith('?')) {\n search = search.substring(1);\n }\n if (search) {\n url += `?${search}`;\n }\n return url;\n};\n\nexport function getValidRequestBody(options: {\n body?: unknown;\n bodySerializer?: BodySerializer | null;\n serializedBody?: unknown;\n}) {\n const hasBody = options.body !== undefined;\n const isSerializedBody = hasBody && options.bodySerializer;\n\n if (isSerializedBody) {\n if ('serializedBody' in options) {\n const hasSerializedBody =\n options.serializedBody !== undefined && options.serializedBody !== '';\n\n return hasSerializedBody ? options.serializedBody : null;\n }\n\n // not all clients implement a serializedBody property (i.e. client-axios)\n return options.body !== '' ? options.body : null;\n }\n\n // plain/text body\n if (hasBody) {\n return options.body;\n }\n\n // no body was provided\n return undefined;\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport type AuthToken = string | undefined;\n\nexport interface Auth {\n /**\n * Which part of the request do we use to send the auth?\n *\n * @default 'header'\n */\n in?: 'header' | 'query' | 'cookie';\n /**\n * Header or query parameter name.\n *\n * @default 'Authorization'\n */\n name?: string;\n scheme?: 'basic' | 'bearer';\n type: 'apiKey' | 'http';\n}\n\nexport const getAuthToken = async (\n auth: Auth,\n callback: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken\n): Promise<string | undefined> => {\n const token =\n typeof callback === 'function' ? await callback(auth) : callback;\n\n if (!token) {\n return;\n }\n\n if (auth.scheme === 'bearer') {\n return `Bearer ${token}`;\n }\n\n if (auth.scheme === 'basic') {\n return `Basic ${btoa(token)}`;\n }\n\n return token;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { getAuthToken } from '../core/auth.gen';\nimport type { QuerySerializerOptions } from '../core/bodySerializer.gen';\nimport { jsonBodySerializer } from '../core/bodySerializer.gen';\nimport {\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from '../core/pathSerializer.gen';\nimport { getUrl } from '../core/utils.gen';\nimport type {\n Client,\n ClientOptions,\n Config,\n RequestOptions,\n} from './types.gen';\n\nexport const createQuerySerializer = <T = unknown>({\n parameters = {},\n ...args\n}: QuerySerializerOptions = {}) => {\n const querySerializer = (queryParams: T) => {\n const search: string[] = [];\n if (queryParams && typeof queryParams === 'object') {\n for (const name in queryParams) {\n const value = queryParams[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n const options = parameters[name] || args;\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'form',\n value,\n ...options.array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === 'object') {\n const serializedObject = serializeObjectParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'deepObject',\n value: value as Record<string, unknown>,\n ...options.object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved: options.allowReserved,\n name,\n value: value as string,\n });\n if (serializedPrimitive) search.push(serializedPrimitive);\n }\n }\n }\n return search.join('&');\n };\n return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (\n contentType: string | null\n): Exclude<Config['parseAs'], 'auto'> => {\n if (!contentType) {\n // If no Content-Type header is provided, the best we can do is return the raw response body,\n // which is effectively the same as the 'stream' option.\n return 'stream';\n }\n\n const cleanContent = contentType.split(';')[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (\n cleanContent.startsWith('application/json') ||\n cleanContent.endsWith('+json')\n ) {\n return 'json';\n }\n\n if (cleanContent === 'multipart/form-data') {\n return 'formData';\n }\n\n if (\n ['application/', 'audio/', 'image/', 'video/'].some((type) =>\n cleanContent.startsWith(type)\n )\n ) {\n return 'blob';\n }\n\n if (cleanContent.startsWith('text/')) {\n return 'text';\n }\n\n return;\n};\n\nconst checkForExistence = (\n options: Pick<RequestOptions, 'auth' | 'query'> & {\n headers: Headers;\n },\n name?: string\n): boolean => {\n if (!name) {\n return false;\n }\n if (\n options.headers.has(name) ||\n options.query?.[name] ||\n options.headers.get('Cookie')?.includes(`${name}=`)\n ) {\n return true;\n }\n return false;\n};\n\nexport const setAuthParams = async ({\n security,\n ...options\n}: Pick<Required<RequestOptions>, 'security'> &\n Pick<RequestOptions, 'auth' | 'query'> & {\n headers: Headers;\n }) => {\n for (const auth of security) {\n if (checkForExistence(options, auth.name)) {\n continue;\n }\n\n const token = await getAuthToken(auth, options.auth);\n\n if (!token) {\n continue;\n }\n\n const name = auth.name ?? 'Authorization';\n\n switch (auth.in) {\n case 'query':\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case 'cookie':\n options.headers.append('Cookie', `${name}=${token}`);\n break;\n case 'header':\n default:\n options.headers.set(name, token);\n break;\n }\n }\n};\n\nexport const buildUrl: Client['buildUrl'] = (options) =>\n getUrl({\n baseUrl: options.baseUrl as string,\n path: options.path,\n query: options.query,\n querySerializer:\n typeof options.querySerializer === 'function'\n ? options.querySerializer\n : createQuerySerializer(options.querySerializer),\n url: options.url,\n });\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n const config = { ...a, ...b };\n if (config.baseUrl?.endsWith('/')) {\n config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n }\n config.headers = mergeHeaders(a.headers, b.headers);\n return config;\n};\n\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n const entries: Array<[string, string]> = [];\n headers.forEach((value, key) => {\n entries.push([key, value]);\n });\n return entries;\n};\n\nexport const mergeHeaders = (\n ...headers: Array<Required<Config>['headers'] | undefined>\n): Headers => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header) {\n continue;\n }\n\n const iterator =\n header instanceof Headers\n ? headersEntries(header)\n : Object.entries(header);\n\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v as string);\n }\n } else if (value !== undefined) {\n // assume object headers are meant to be JSON stringified, i.e. their\n // content value in OpenAPI specification is 'application/json'\n mergedHeaders.set(\n key,\n typeof value === 'object' ? JSON.stringify(value) : (value as string)\n );\n }\n }\n }\n return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n error: Err,\n response: Res,\n request: Req,\n options: Options\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (\n request: Req,\n options: Options\n) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n response: Res,\n request: Req,\n options: Options\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n fns: Array<Interceptor | null> = [];\n\n clear(): void {\n this.fns = [];\n }\n\n eject(id: number | Interceptor): void {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = null;\n }\n }\n\n exists(id: number | Interceptor): boolean {\n const index = this.getInterceptorIndex(id);\n return Boolean(this.fns[index]);\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === 'number') {\n return this.fns[id] ? id : -1;\n }\n return this.fns.indexOf(id);\n }\n\n update(\n id: number | Interceptor,\n fn: Interceptor\n ): number | Interceptor | false {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = fn;\n return id;\n }\n return false;\n }\n\n use(fn: Interceptor): number {\n this.fns.push(fn);\n return this.fns.length - 1;\n }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n request: Interceptors<ReqInterceptor<Req, Options>>;\n response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n Req,\n Res,\n Err,\n Options\n> => ({\n error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n request: new Interceptors<ReqInterceptor<Req, Options>>(),\n response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n allowReserved: false,\n array: {\n explode: true,\n style: 'form',\n },\n object: {\n explode: true,\n style: 'deepObject',\n },\n});\n\nconst defaultHeaders = {\n 'Content-Type': 'application/json',\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n override: Config<Omit<ClientOptions, keyof T> & T> = {}\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n ...jsonBodySerializer,\n headers: defaultHeaders,\n parseAs: 'auto',\n querySerializer: defaultQuerySerializer,\n ...override,\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createSseClient } from '../core/serverSentEvents.gen';\nimport type { HttpMethod } from '../core/types.gen';\nimport { getValidRequestBody } from '../core/utils.gen';\nimport type {\n Client,\n Config,\n RequestOptions,\n ResolvedRequestOptions,\n} from './types.gen';\nimport {\n buildUrl,\n createConfig,\n createInterceptors,\n getParseAs,\n mergeConfigs,\n mergeHeaders,\n setAuthParams,\n} from './utils.gen';\n\ntype ReqInit = Omit<RequestInit, 'body' | 'headers'> & {\n body?: any;\n headers: ReturnType<typeof mergeHeaders>;\n};\n\nexport const createClient = (config: Config = {}): Client => {\n let _config = mergeConfigs(createConfig(), config);\n\n const getConfig = (): Config => ({ ..._config });\n\n const setConfig = (config: Config): Config => {\n _config = mergeConfigs(_config, config);\n return getConfig();\n };\n\n const interceptors = createInterceptors<\n Request,\n Response,\n unknown,\n ResolvedRequestOptions\n >();\n\n const beforeRequest = async (options: RequestOptions) => {\n const opts = {\n ..._config,\n ...options,\n fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n headers: mergeHeaders(_config.headers, options.headers),\n serializedBody: undefined,\n };\n\n if (opts.security) {\n await setAuthParams({\n ...opts,\n security: opts.security,\n });\n }\n\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n\n if (opts.body !== undefined && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body);\n }\n\n // remove Content-Type header if body is empty to avoid sending invalid requests\n if (opts.body === undefined || opts.serializedBody === '') {\n opts.headers.delete('Content-Type');\n }\n\n const url = buildUrl(opts);\n\n return { opts, url };\n };\n\n const request: Client['request'] = async (options) => {\n // @ts-expect-error\n const { opts, url } = await beforeRequest(options);\n const requestInit: ReqInit = {\n redirect: 'follow',\n ...opts,\n body: getValidRequestBody(opts),\n };\n\n let request = new Request(url, requestInit);\n\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = opts.fetch!;\n let response: Response;\n\n try {\n response = await _fetch(request);\n } catch (error) {\n // Handle fetch exceptions (AbortError, network errors, etc.)\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = (await fn(\n error,\n undefined as any,\n request,\n opts\n )) as unknown;\n }\n }\n\n finalError = finalError || ({} as unknown);\n\n if (opts.throwOnError) {\n throw finalError;\n }\n\n // Return error response\n return opts.responseStyle === 'data'\n ? undefined\n : {\n error: finalError,\n request,\n response: undefined as any,\n };\n }\n\n for (const fn of interceptors.response.fns) {\n if (fn) {\n response = await fn(response, request, opts);\n }\n }\n\n const result = {\n request,\n response,\n };\n\n if (response.ok) {\n const parseAs =\n (opts.parseAs === 'auto'\n ? getParseAs(response.headers.get('Content-Type'))\n : opts.parseAs) ?? 'json';\n\n if (\n response.status === 204 ||\n response.headers.get('Content-Length') === '0'\n ) {\n let emptyData: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'text':\n emptyData = await response[parseAs]();\n break;\n case 'formData':\n emptyData = new FormData();\n break;\n case 'stream':\n emptyData = response.body;\n break;\n case 'json':\n default:\n emptyData = {};\n break;\n }\n return opts.responseStyle === 'data'\n ? emptyData\n : {\n data: emptyData,\n ...result,\n };\n }\n\n let data: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'formData':\n case 'json':\n case 'text':\n data = await response[parseAs]();\n break;\n case 'stream':\n return opts.responseStyle === 'data'\n ? response.body\n : {\n data: response.body,\n ...result,\n };\n }\n\n if (parseAs === 'json') {\n if (opts.responseValidator) {\n await opts.responseValidator(data);\n }\n\n if (opts.responseTransformer) {\n data = await opts.responseTransformer(data);\n }\n }\n\n return opts.responseStyle === 'data'\n ? data\n : {\n data,\n ...result,\n };\n }\n\n const textError = await response.text();\n let jsonError: unknown;\n\n try {\n jsonError = JSON.parse(textError);\n } catch {\n // noop\n }\n\n const error = jsonError ?? textError;\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = (await fn(error, response, request, opts)) as string;\n }\n }\n\n finalError = finalError || ({} as string);\n\n if (opts.throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return opts.responseStyle === 'data'\n ? undefined\n : {\n error: finalError,\n ...result,\n };\n };\n\n const makeMethodFn =\n (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n request({ ...options, method });\n\n const makeSseFn =\n (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n const { opts, url } = await beforeRequest(options);\n return createSseClient({\n ...opts,\n body: opts.body as BodyInit | null | undefined,\n headers: opts.headers as unknown as Record<string, string>,\n method,\n onRequest: async (url, init) => {\n let request = new Request(url, init);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n return request;\n },\n url,\n });\n };\n\n return {\n buildUrl,\n connect: makeMethodFn('CONNECT'),\n delete: makeMethodFn('DELETE'),\n get: makeMethodFn('GET'),\n getConfig,\n head: makeMethodFn('HEAD'),\n interceptors,\n options: makeMethodFn('OPTIONS'),\n patch: makeMethodFn('PATCH'),\n post: makeMethodFn('POST'),\n put: makeMethodFn('PUT'),\n request,\n setConfig,\n sse: {\n connect: makeSseFn('CONNECT'),\n delete: makeSseFn('DELETE'),\n get: makeSseFn('GET'),\n head: makeSseFn('HEAD'),\n options: makeSseFn('OPTIONS'),\n patch: makeSseFn('PATCH'),\n post: makeSseFn('POST'),\n put: makeSseFn('PUT'),\n trace: makeSseFn('TRACE'),\n },\n trace: makeMethodFn('TRACE'),\n } as Client;\n};\n","import { createClient as createGeneratedClient } from '../generated/client';\nimport type { Client } from '../generated/client';\nimport type { GetProjectInfoData } from '../generated/types.gen';\nimport { createRetryingFetch, createTimeoutFetch } from './transport';\nimport type { RetryPolicy } from './transport';\n\nexport type ApiVersion = NonNullable<\n NonNullable<GetProjectInfoData['headers']>['gt-api-version']\n>;\n\nexport const API_VERSION: ApiVersion = '2026-03-06.v1';\n\nexport type ApiClientConfig = {\n apiKey?: string;\n apiVersion?: ApiVersion;\n baseUrl: string;\n fetch?: typeof fetch;\n projectId?: string;\n retryPolicy?: RetryPolicy;\n timeoutMs?: number;\n};\n\nexport function createApiClient(config: ApiClientConfig): Client {\n const headers = new Headers({\n 'gt-api-version': config.apiVersion ?? API_VERSION,\n });\n if (config.apiKey) headers.set('Authorization', `Bearer ${config.apiKey}`);\n if (config.projectId) headers.set('gt-project-id', config.projectId);\n\n return createGeneratedClient({\n baseUrl: config.baseUrl,\n fetch: createRetryingFetch({\n // Timeout applies per attempt, inside the retry loop.\n fetch: createTimeoutFetch({\n fetch: config.fetch,\n timeoutMs: config.timeoutMs,\n }),\n retryPolicy: config.retryPolicy,\n }),\n headers,\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["MAX_POLL_TIMEOUT_MS","createGeneratedClient"],"sources":["../src/generated/sdk.gen.ts","../src/wrappers/transport.ts","../src/wrappers/awaitJobs.ts","../src/wrappers/base64.ts","../src/wrappers/batch.ts","../src/generated/core/bodySerializer.gen.ts","../src/generated/core/serverSentEvents.gen.ts","../src/generated/core/pathSerializer.gen.ts","../src/generated/core/utils.gen.ts","../src/generated/core/auth.gen.ts","../src/generated/client/utils.gen.ts","../src/generated/client/client.gen.ts","../src/wrappers/client.ts"],"sourcesContent":["// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Client, Options as Options2, TDataShape } from './client';\nimport type {\n CreateBranchData,\n CreateBranchErrors,\n CreateBranchResponses,\n CreateCliWizardSessionData,\n CreateCliWizardSessionErrors,\n CreateCliWizardSessionResponses,\n CreateProjectData,\n CreateProjectErrors,\n CreateProjectResponses,\n CreateTagData,\n CreateTagErrors,\n CreateTagResponses,\n DeleteCliWizardSessionData,\n DeleteCliWizardSessionErrors,\n DeleteCliWizardSessionResponses,\n DownloadFileData,\n DownloadFileErrors,\n DownloadFileResponses,\n DownloadFilesData,\n DownloadFilesErrors,\n DownloadFilesResponses,\n EnqueueFileTranslationsData,\n EnqueueFileTranslationsErrors,\n EnqueueFileTranslationsResponses,\n GenerateProjectContextData,\n GenerateProjectContextErrors,\n GenerateProjectContextResponses,\n GetBranchInfoData,\n GetBranchInfoErrors,\n GetBranchInfoResponses,\n GetCliWizardSessionData,\n GetCliWizardSessionErrors,\n GetCliWizardSessionResponses,\n GetFileInfoData,\n GetFileInfoErrors,\n GetFileInfoResponses,\n GetOrphanedFilesData,\n GetOrphanedFilesErrors,\n GetOrphanedFilesResponses,\n GetProjectContextGenerationStatusData,\n GetProjectContextGenerationStatusErrors,\n GetProjectContextGenerationStatusResponses,\n GetProjectInfoData,\n GetProjectInfoErrors,\n GetProjectInfoResponses,\n GetTranslationJobInfoData,\n GetTranslationJobInfoErrors,\n GetTranslationJobInfoResponses,\n GetTranslationStatusData,\n GetTranslationStatusErrors,\n GetTranslationStatusResponses,\n ProcessFileMovesData,\n ProcessFileMovesErrors,\n ProcessFileMovesResponses,\n PublishFilesData,\n PublishFilesErrors,\n PublishFilesResponses,\n ShouldGenerateProjectContextData,\n ShouldGenerateProjectContextErrors,\n ShouldGenerateProjectContextResponses,\n SubmitUserEditDiffsData,\n SubmitUserEditDiffsErrors,\n SubmitUserEditDiffsResponses,\n TranslateData,\n TranslateErrors,\n TranslateResponses,\n UpdateProjectInfoData,\n UpdateProjectInfoErrors,\n UpdateProjectInfoResponses,\n UploadAssetsData,\n UploadAssetsErrors,\n UploadAssetsResponses,\n UploadSourceFilesData,\n UploadSourceFilesErrors,\n UploadSourceFilesResponses,\n UploadTranslationsData,\n UploadTranslationsErrors,\n UploadTranslationsResponses,\n} from './types.gen';\n\nexport type Options<\n TData extends TDataShape = TDataShape,\n ThrowOnError extends boolean = boolean,\n> = Options2<TData, ThrowOnError> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client: Client;\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: Record<string, unknown>;\n};\n\n/**\n * Create a Project\n *\n * Create a Project in the Organization associated with an Organization API key. The key must have the `org:projects:create` permission. Project keys cannot use this endpoint. Enabling CDN delivery also requires `project:write`.\n */\nexport const createProject = <ThrowOnError extends boolean = false>(\n options: Options<CreateProjectData, ThrowOnError>\n) =>\n options.client.post<\n CreateProjectResponses,\n CreateProjectErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/projects',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Upload source files\n *\n * Upload one or more source files to the project. Max 100 files per request.\n */\nexport const uploadSourceFiles = <ThrowOnError extends boolean = false>(\n options: Options<UploadSourceFilesData, ThrowOnError>\n) =>\n options.client.post<\n UploadSourceFilesResponses,\n UploadSourceFilesErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/upload-files',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Upload translated files\n *\n * Upload translated files linked to their source files. Max 100 files per request.\n */\nexport const uploadTranslations = <ThrowOnError extends boolean = false>(\n options: Options<UploadTranslationsData, ThrowOnError>\n) =>\n options.client.post<\n UploadTranslationsResponses,\n UploadTranslationsErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/upload-translations',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Upload Project assets\n *\n * Upload OpenType or TrueType fonts through a Project and make them available to Lottie translation workflows across its Organization. Each font is keyed by a normalized identity derived from its family, weight, and italic style (from the supplied `family` and `style`, or from the font metadata and file name). Re-uploading the same identity overwrites the existing asset, so complete retries after a `500` response are safe.\n */\nexport const uploadAssets = <ThrowOnError extends boolean = false>(\n options: Options<UploadAssetsData, ThrowOnError>\n) =>\n options.client.post<UploadAssetsResponses, UploadAssetsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/assets',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Submit translation diffs\n *\n * Overwrite translations with user-provided localized content.\n */\nexport const submitUserEditDiffs = <ThrowOnError extends boolean = false>(\n options: Options<SubmitUserEditDiffsData, ThrowOnError>\n) =>\n options.client.post<\n SubmitUserEditDiffsResponses,\n SubmitUserEditDiffsErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/diffs',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Check if context generation is needed\n *\n * Check whether the Project needs translation context generated. This deprecated endpoint is retained for backward compatibility and is no longer called by current clients.\n *\n * @deprecated\n */\nexport const shouldGenerateProjectContext = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<ShouldGenerateProjectContextData, ThrowOnError>\n) =>\n options.client.get<\n ShouldGenerateProjectContextResponses,\n ShouldGenerateProjectContextErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/setup/should-generate',\n ...options,\n });\n\n/**\n * Generate translation context\n *\n * Generate glossaries and translation instructions for the project.\n */\nexport const generateProjectContext = <ThrowOnError extends boolean = false>(\n options: Options<GenerateProjectContextData, ThrowOnError>\n) =>\n options.client.post<\n GenerateProjectContextResponses,\n GenerateProjectContextErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/setup/generate',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Get context generation job status\n *\n * Track a context generation job. This deprecated endpoint is retained for backward compatibility; new integrations should use `POST /v2/project/jobs/info`.\n *\n * @deprecated\n */\nexport const getProjectContextGenerationStatus = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<GetProjectContextGenerationStatusData, ThrowOnError>\n) =>\n options.client.get<\n GetProjectContextGenerationStatusResponses,\n GetProjectContextGenerationStatusErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/setup/status/{jobId}',\n ...options,\n });\n\n/**\n * Queue files for translation\n *\n * Enqueue uploaded source files for background translation. Max 100 files per request. The response shape depends on the requested `gt-api-version`.\n */\nexport const enqueueFileTranslations = <ThrowOnError extends boolean = false>(\n options: Options<EnqueueFileTranslationsData, ThrowOnError>\n) =>\n options.client.post<\n EnqueueFileTranslationsResponses,\n EnqueueFileTranslationsErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/translations/enqueue',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Publish or unpublish files\n *\n * Publish or unpublish translated files to the CDN. Requires CDN to be enabled.\n */\nexport const publishFiles = <ThrowOnError extends boolean = false>(\n options: Options<PublishFilesData, ThrowOnError>\n) =>\n options.client.post<PublishFilesResponses, PublishFilesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/publish',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Download a single file\n *\n * Download a single source or translated file. This deprecated endpoint is retained for backward compatibility; new integrations should use `POST /v2/project/files/download`.\n *\n * @deprecated\n */\nexport const downloadFile = <ThrowOnError extends boolean = false>(\n options: Options<DownloadFileData, ThrowOnError>\n) =>\n options.client.get<DownloadFileResponses, DownloadFileErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/download/{fileId}',\n ...options,\n });\n\n/**\n * Download multiple files\n *\n * Download up to 100 source or translated files in one request.\n */\nexport const downloadFiles = <ThrowOnError extends boolean = false>(\n options: Options<DownloadFilesData, ThrowOnError>\n) =>\n options.client.post<\n DownloadFilesResponses,\n DownloadFilesErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/download',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Get branch information\n *\n * Return the Project's default branch and any branches requested by name.\n */\nexport const getBranchInfo = <ThrowOnError extends boolean = false>(\n options: Options<GetBranchInfoData, ThrowOnError>\n) =>\n options.client.post<\n GetBranchInfoResponses,\n GetBranchInfoErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/branches/info',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Create a branch\n *\n * Create a new branch, or rename and confirm the default branch.\n */\nexport const createBranch = <ThrowOnError extends boolean = false>(\n options: Options<CreateBranchData, ThrowOnError>\n) =>\n options.client.post<CreateBranchResponses, CreateBranchErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/branches/create',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Create or update a tag\n *\n * Create or upsert a tag that points at a set of file versions.\n */\nexport const createTag = <ThrowOnError extends boolean = false>(\n options: Options<CreateTagData, ThrowOnError>\n) =>\n options.client.post<CreateTagResponses, CreateTagErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/tags/create',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Get Project information\n *\n * Read the authenticated Project's name, Organization ID, locale settings, and auto-approval setting.\n */\nexport const getProjectInfo = <ThrowOnError extends boolean = false>(\n options: Options<GetProjectInfoData, ThrowOnError>\n) =>\n options.client.get<\n GetProjectInfoResponses,\n GetProjectInfoErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/info/{projectId}',\n ...options,\n });\n\n/**\n * Update Project information\n *\n * Update the Project's default locale or CDN delivery setting.\n */\nexport const updateProjectInfo = <ThrowOnError extends boolean = false>(\n options: Options<UpdateProjectInfoData, ThrowOnError>\n) =>\n options.client.post<\n UpdateProjectInfoResponses,\n UpdateProjectInfoErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/info/{projectId}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Get translation job status\n *\n * Return normalized status information for one or more queued translation or context generation jobs.\n */\nexport const getTranslationJobInfo = <ThrowOnError extends boolean = false>(\n options: Options<GetTranslationJobInfoData, ThrowOnError>\n) =>\n options.client.post<\n GetTranslationJobInfoResponses,\n GetTranslationJobInfoErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/jobs/info',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Translate content at runtime\n *\n * Translate one or more strings or structured content entries with caching and memoization. Development API keys are accepted for this endpoint.\n */\nexport const translate = <ThrowOnError extends boolean = false>(\n options: Options<TranslateData, ThrowOnError>\n) =>\n options.client.post<TranslateResponses, TranslateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/translate',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Get file metadata\n *\n * Get detailed metadata for specific source and translated files.\n */\nexport const getFileInfo = <ThrowOnError extends boolean = false>(\n options: Options<GetFileInfoData, ThrowOnError>\n) =>\n options.client.post<GetFileInfoResponses, GetFileInfoErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/info',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Get translation status for a file\n *\n * Return translation progress and availability by locale for one source file, along with its source metadata.\n */\nexport const getTranslationStatus = <ThrowOnError extends boolean = false>(\n options: Options<GetTranslationStatusData, ThrowOnError>\n) =>\n options.client.get<\n GetTranslationStatusResponses,\n GetTranslationStatusErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/translations/files/status/{fileId}',\n ...options,\n });\n\n/**\n * Move or rename files\n *\n * Clone source files and their translations under new file IDs.\n */\nexport const processFileMoves = <ThrowOnError extends boolean = false>(\n options: Options<ProcessFileMovesData, ThrowOnError>\n) =>\n options.client.post<\n ProcessFileMovesResponses,\n ProcessFileMovesErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/moves',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Find orphaned files\n *\n * Return files on a branch that are not present in the provided file ID list.\n */\nexport const getOrphanedFiles = <ThrowOnError extends boolean = false>(\n options: Options<GetOrphanedFilesData, ThrowOnError>\n) =>\n options.client.post<\n GetOrphanedFilesResponses,\n GetOrphanedFilesErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/project/files/orphaned',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Create a CLI wizard session\n *\n * Create a temporary session for CLI browser authentication.\n */\nexport const createCliWizardSession = <ThrowOnError extends boolean = false>(\n options: Options<CreateCliWizardSessionData, ThrowOnError>\n) =>\n options.client.post<\n CreateCliWizardSessionResponses,\n CreateCliWizardSessionErrors,\n ThrowOnError\n >({\n url: '/cli/wizard/session',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Delete a CLI wizard session\n *\n * Delete a completed or abandoned CLI wizard session.\n */\nexport const deleteCliWizardSession = <ThrowOnError extends boolean = false>(\n options: Options<DeleteCliWizardSessionData, ThrowOnError>\n) =>\n options.client.delete<\n DeleteCliWizardSessionResponses,\n DeleteCliWizardSessionErrors,\n ThrowOnError\n >({ url: '/cli/wizard/{sessionId}', ...options });\n\n/**\n * Get a CLI wizard session\n *\n * Get credentials for a completed CLI wizard session or its current waiting status.\n */\nexport const getCliWizardSession = <ThrowOnError extends boolean = false>(\n options: Options<GetCliWizardSessionData, ThrowOnError>\n) =>\n options.client.get<\n GetCliWizardSessionResponses,\n GetCliWizardSessionErrors,\n ThrowOnError\n >({ url: '/cli/wizard/{sessionId}', ...options });\n","const MAX_RETRIES = 3;\nconst INITIAL_DELAY_MS = 500;\nconst RATE_LIMIT_RETRY_DELAY_MS = 60_000;\nconst IDEMPOTENT_METHODS = new Set(['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE']);\nexport const DEFAULT_TIMEOUT_MS = 60_000;\n\nexport type RetryPolicy = 'exponential' | 'linear' | 'none';\n\nexport type RetryingFetchOptions = {\n fetch?: typeof fetch;\n retryPolicy?: RetryPolicy;\n};\n\nexport type TimeoutFetchOptions = {\n fetch?: typeof fetch;\n timeoutMs?: number;\n};\n\nexport function createTimeoutFetch({\n fetch: fetchImplementation = globalThis.fetch,\n timeoutMs = DEFAULT_TIMEOUT_MS,\n}: TimeoutFetchOptions = {}): typeof fetch {\n return async (input, init) => {\n const request = new Request(input, init);\n const controller = new AbortController();\n const forwardAbort = () => controller.abort(request.signal.reason);\n if (request.signal.aborted) forwardAbort();\n else request.signal.addEventListener('abort', forwardAbort, { once: true });\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n return await fetchImplementation(\n new Request(request, { signal: controller.signal })\n );\n } catch (error) {\n if (controller.signal.aborted && !request.signal.aborted) {\n throw new Error(`Request timed out after ${timeoutMs}ms`);\n }\n throw error;\n } finally {\n clearTimeout(timeoutId);\n request.signal.removeEventListener('abort', forwardAbort);\n }\n };\n}\n\nconst sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\nfunction parseDelayMs(value: string | null): number | undefined {\n if (!value) return undefined;\n\n const seconds = Number(value.split(',')[0].split(';')[0].trim());\n return Number.isFinite(seconds) && seconds >= 0 ? seconds * 1000 : undefined;\n}\n\nfunction parseRetryAfter(value: string | null): number | undefined {\n const delayMs = parseDelayMs(value);\n if (delayMs !== undefined) return delayMs;\n if (!value) return undefined;\n\n const retryDate = Date.parse(value);\n return Number.isNaN(retryDate)\n ? undefined\n : Math.max(retryDate - Date.now(), 0);\n}\n\nfunction retryDelay(\n response: Response | undefined,\n attempt: number,\n retryPolicy: RetryPolicy\n): number {\n if (response?.status === 429) {\n return (\n parseRetryAfter(response.headers.get('Retry-After')) ??\n parseDelayMs(response.headers.get('RateLimit-Reset')) ??\n RATE_LIMIT_RETRY_DELAY_MS\n );\n }\n return (\n INITIAL_DELAY_MS * (retryPolicy === 'linear' ? attempt + 1 : 2 ** attempt)\n );\n}\n\nexport function createRetryingFetch({\n fetch: fetchImplementation = globalThis.fetch,\n retryPolicy = 'exponential',\n}: RetryingFetchOptions = {}): typeof fetch {\n return async (input, init) => {\n const request = new Request(input, init);\n const maxRetries = retryPolicy === 'none' ? 0 : MAX_RETRIES;\n const isIdempotent = IDEMPOTENT_METHODS.has(request.method);\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n let response: Response | undefined;\n try {\n response = await fetchImplementation(request.clone());\n } catch (error) {\n if (request.signal.aborted || attempt === maxRetries || !isIdempotent) {\n throw error;\n }\n }\n\n if (\n response &&\n response.status !== 429 &&\n (response.status < 500 || !isIdempotent)\n ) {\n return response;\n }\n if (response && attempt === maxRetries) return response;\n // Caller gave up (e.g. a poll deadline); don't sleep through the abort.\n if (request.signal.aborted) {\n if (response) return response;\n throw request.signal.reason;\n }\n\n // Drain the discarded 429/5xx body so undici can release the socket.\n void response?.body?.cancel();\n await sleep(retryDelay(response, attempt, retryPolicy));\n }\n\n throw new Error('Max retries exceeded');\n };\n}\n","import type { Client } from '../generated/client';\nimport { getTranslationJobInfo } from '../generated/sdk.gen';\nimport type { GetTranslationJobInfoResponse } from '../generated/types.gen';\n// Per-poll cap so a hung connection fails fast instead of eating the whole deadline.\nimport { DEFAULT_TIMEOUT_MS as MAX_POLL_TIMEOUT_MS } from './transport';\n\nconst DEFAULT_POLLING_INTERVAL_SECONDS = 5;\nconst DEFAULT_TIMEOUT_SECONDS = 600;\n\nexport type JobResult = GetTranslationJobInfoResponse[number];\nexport type GetJobStatuses = (\n jobIds: string[],\n signal: AbortSignal\n) => Promise<GetTranslationJobInfoResponse>;\n\nexport type AwaitJobsOptions = {\n pollingIntervalSeconds?: number;\n timeoutSeconds?: number;\n};\n\nexport type AwaitJobsResult = {\n complete: boolean;\n jobs: JobResult[];\n};\n\nexport async function awaitJobs(\n client: Client,\n jobIds: readonly string[],\n options: AwaitJobsOptions = {}\n): Promise<AwaitJobsResult> {\n return pollJobs(\n jobIds,\n async (pendingJobIds, signal) => {\n const result = await getTranslationJobInfo({\n body: { jobIds: pendingJobIds },\n client,\n signal,\n throwOnError: true,\n });\n return result.data;\n },\n options\n );\n}\n\n// Internal seam: the polling loop with an injected status loader so tests can\n// drive it without a client. Not re-exported from the package index.\nexport async function pollJobs(\n jobIds: readonly string[],\n getJobStatuses: GetJobStatuses,\n options: AwaitJobsOptions = {}\n): Promise<AwaitJobsResult> {\n if (jobIds.length === 0) return { complete: true, jobs: [] };\n\n const pollingInterval =\n (options.pollingIntervalSeconds ?? DEFAULT_POLLING_INTERVAL_SECONDS) *\n 1_000;\n const timeout = (options.timeoutSeconds ?? DEFAULT_TIMEOUT_SECONDS) * 1_000;\n const deadline = Date.now() + timeout;\n const finalStatuses = new Map<string, JobResult>(\n jobIds.map((jobId) => [jobId, { jobId, status: 'unknown' }])\n );\n const pendingJobIds = new Set(jobIds);\n\n while (pendingJobIds.size > 0 && Date.now() < deadline) {\n let statuses: GetTranslationJobInfoResponse;\n try {\n statuses = await getJobStatuses(\n [...pendingJobIds],\n AbortSignal.timeout(\n Math.min(deadline - Date.now(), MAX_POLL_TIMEOUT_MS)\n )\n );\n } catch (error) {\n if (Date.now() >= deadline) break;\n throw error;\n }\n if (Date.now() >= deadline) break;\n\n const returnedJobIds = new Set(statuses.map(({ jobId }) => jobId));\n\n for (const job of statuses) {\n finalStatuses.set(job.jobId, job);\n if (\n job.status === 'completed' ||\n job.status === 'failed' ||\n job.status === 'unknown'\n ) {\n pendingJobIds.delete(job.jobId);\n }\n }\n\n for (const jobId of pendingJobIds) {\n if (!returnedJobIds.has(jobId)) {\n finalStatuses.set(jobId, { jobId, status: 'unknown' });\n pendingJobIds.delete(jobId);\n }\n }\n\n if (pendingJobIds.size > 0) {\n await new Promise((resolve) =>\n setTimeout(resolve, Math.min(pollingInterval, deadline - Date.now()))\n );\n }\n }\n\n return {\n complete: pendingJobIds.size === 0,\n jobs: [...finalStatuses.values()],\n };\n}\n","import type { FileFormat } from '../generated/types.gen';\n\n// Buffer is faster in Node; atob/btoa is the browser fallback.\n// Checked per-call (not at module load) so tests can stub Buffer out.\nexport function encodeBase64(data: string): string {\n if (typeof Buffer !== 'undefined')\n return Buffer.from(data, 'utf-8').toString('base64');\n const bytes = new TextEncoder().encode(data);\n let binary = '';\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return btoa(binary);\n}\n\nexport function decodeBase64(base64: string): string {\n if (typeof Buffer !== 'undefined')\n return Buffer.from(base64, 'base64').toString('utf-8');\n const bytes = Uint8Array.from(atob(base64), (character) =>\n character.charCodeAt(0)\n );\n return new TextDecoder().decode(bytes);\n}\n\nexport function encodeFileContent(\n content: string,\n fileFormat: FileFormat\n): string {\n return fileFormat === 'LOTTIE' ? content : encodeBase64(content);\n}\n\nexport function decodeFileContent(\n content: string,\n fileFormat: FileFormat\n): string {\n return fileFormat === 'LOTTIE' ? content : decodeBase64(content);\n}\n","export const DEFAULT_BATCH_SIZE = 100;\n\nexport type BatchOptions = {\n batchSize?: number;\n parallel?: boolean;\n};\n\nexport function createBatches<T>(\n items: readonly T[],\n batchSize = DEFAULT_BATCH_SIZE\n): T[][] {\n const batches: T[][] = [];\n for (let index = 0; index < items.length; index += batchSize) {\n batches.push(items.slice(index, index + batchSize));\n }\n return batches;\n}\n\nexport async function processBatches<TInput, TOutput>(\n items: readonly TInput[],\n processBatch: (batch: TInput[]) => Promise<TOutput[]>,\n { batchSize = DEFAULT_BATCH_SIZE, parallel = true }: BatchOptions = {}\n): Promise<TOutput[]> {\n const batches = createBatches(items, batchSize);\n if (parallel) {\n return (await Promise.all(batches.map(processBatch))).flat();\n }\n const results: TOutput[][] = [];\n for (const batch of batches) results.push(await processBatch(batch));\n return results.flat();\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type {\n ArrayStyle,\n ObjectStyle,\n SerializerOptions,\n} from './pathSerializer.gen';\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: any) => any;\n\ntype QuerySerializerOptionsObject = {\n allowReserved?: boolean;\n array?: Partial<SerializerOptions<ArrayStyle>>;\n object?: Partial<SerializerOptions<ObjectStyle>>;\n};\n\nexport type QuerySerializerOptions = QuerySerializerOptionsObject & {\n /**\n * Per-parameter serialization overrides. When provided, these settings\n * override the global array/object settings for specific parameter names.\n */\n parameters?: Record<string, QuerySerializerOptionsObject>;\n};\n\nconst serializeFormDataPair = (\n data: FormData,\n key: string,\n value: unknown\n): void => {\n if (typeof value === 'string' || value instanceof Blob) {\n data.append(key, value);\n } else if (value instanceof Date) {\n data.append(key, value.toISOString());\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nconst serializeUrlSearchParamsPair = (\n data: URLSearchParams,\n key: string,\n value: unknown\n): void => {\n if (typeof value === 'string') {\n data.append(key, value);\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nexport const formDataBodySerializer = {\n bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(\n body: T\n ): FormData => {\n const data = new FormData();\n\n Object.entries(body).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeFormDataPair(data, key, v));\n } else {\n serializeFormDataPair(data, key, value);\n }\n });\n\n return data;\n },\n};\n\nexport const jsonBodySerializer = {\n bodySerializer: <T>(body: T): string =>\n JSON.stringify(body, (_key, value) =>\n typeof value === 'bigint' ? value.toString() : value\n ),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(\n body: T\n ): string => {\n const data = new URLSearchParams();\n\n Object.entries(body).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));\n } else {\n serializeUrlSearchParamsPair(data, key, value);\n }\n });\n\n return data.toString();\n },\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Config } from './types.gen';\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<\n RequestInit,\n 'method'\n> &\n Pick<Config, 'method' | 'responseTransformer' | 'responseValidator'> & {\n /**\n * Fetch API implementation. You can use this option to provide a custom\n * fetch instance.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * Implementing clients can call request interceptors inside this hook.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n /**\n * Callback invoked when a network or parsing error occurs during streaming.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param error The error that occurred.\n */\n onSseError?: (error: unknown) => void;\n /**\n * Callback invoked when an event is streamed from the server.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param event Event streamed from the server.\n * @returns Nothing (void).\n */\n onSseEvent?: (event: StreamEvent<TData>) => void;\n serializedBody?: RequestInit['body'];\n /**\n * Default retry delay in milliseconds.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 3000\n */\n sseDefaultRetryDelay?: number;\n /**\n * Maximum number of retry attempts before giving up.\n */\n sseMaxRetryAttempts?: number;\n /**\n * Maximum retry delay in milliseconds.\n *\n * Applies only when exponential backoff is used.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 30000\n */\n sseMaxRetryDelay?: number;\n /**\n * Optional sleep function for retry backoff.\n *\n * Defaults to using `setTimeout`.\n */\n sseSleepFn?: (ms: number) => Promise<void>;\n url: string;\n };\n\nexport interface StreamEvent<TData = unknown> {\n data: TData;\n event?: string;\n id?: string;\n retry?: number;\n}\n\nexport type ServerSentEventsResult<\n TData = unknown,\n TReturn = void,\n TNext = unknown,\n> = {\n stream: AsyncGenerator<\n TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n TReturn,\n TNext\n >;\n};\n\nexport const createSseClient = <TData = unknown>({\n onRequest,\n onSseError,\n onSseEvent,\n responseTransformer,\n responseValidator,\n sseDefaultRetryDelay,\n sseMaxRetryAttempts,\n sseMaxRetryDelay,\n sseSleepFn,\n url,\n ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> => {\n let lastEventId: string | undefined;\n\n const sleep =\n sseSleepFn ??\n ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n const createStream = async function* () {\n let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n let attempt = 0;\n const signal = options.signal ?? new AbortController().signal;\n\n while (true) {\n if (signal.aborted) break;\n\n attempt++;\n\n const headers =\n options.headers instanceof Headers\n ? options.headers\n : new Headers(options.headers as Record<string, string> | undefined);\n\n if (lastEventId !== undefined) {\n headers.set('Last-Event-ID', lastEventId);\n }\n\n try {\n const requestInit: RequestInit = {\n redirect: 'follow',\n ...options,\n body: options.serializedBody,\n headers,\n signal,\n };\n let request = new Request(url, requestInit);\n if (onRequest) {\n request = await onRequest(url, requestInit);\n }\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = options.fetch ?? globalThis.fetch;\n const response = await _fetch(request);\n\n if (!response.ok)\n throw new Error(\n `SSE failed: ${response.status} ${response.statusText}`\n );\n\n if (!response.body) throw new Error('No body in SSE response');\n\n const reader = response.body\n .pipeThrough(new TextDecoderStream())\n .getReader();\n\n let buffer = '';\n\n const abortHandler = () => {\n try {\n reader.cancel();\n } catch {\n // noop\n }\n };\n\n signal.addEventListener('abort', abortHandler);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += value;\n\n const chunks = buffer.split('\\n\\n');\n buffer = chunks.pop() ?? '';\n\n for (const chunk of chunks) {\n const lines = chunk.split('\\n');\n const dataLines: Array<string> = [];\n let eventName: string | undefined;\n\n for (const line of lines) {\n if (line.startsWith('data:')) {\n dataLines.push(line.replace(/^data:\\s*/, ''));\n } else if (line.startsWith('event:')) {\n eventName = line.replace(/^event:\\s*/, '');\n } else if (line.startsWith('id:')) {\n lastEventId = line.replace(/^id:\\s*/, '');\n } else if (line.startsWith('retry:')) {\n const parsed = Number.parseInt(\n line.replace(/^retry:\\s*/, ''),\n 10\n );\n if (!Number.isNaN(parsed)) {\n retryDelay = parsed;\n }\n }\n }\n\n let data: unknown;\n let parsedJson = false;\n\n if (dataLines.length) {\n const rawData = dataLines.join('\\n');\n try {\n data = JSON.parse(rawData);\n parsedJson = true;\n } catch {\n data = rawData;\n }\n }\n\n if (parsedJson) {\n if (responseValidator) {\n await responseValidator(data);\n }\n\n if (responseTransformer) {\n data = await responseTransformer(data);\n }\n }\n\n onSseEvent?.({\n data,\n event: eventName,\n id: lastEventId,\n retry: retryDelay,\n });\n\n if (dataLines.length) {\n yield data as any;\n }\n }\n }\n } finally {\n signal.removeEventListener('abort', abortHandler);\n reader.releaseLock();\n }\n\n break; // exit loop on normal completion\n } catch (error) {\n // connection failed or aborted; retry after delay\n onSseError?.(error);\n\n if (\n sseMaxRetryAttempts !== undefined &&\n attempt >= sseMaxRetryAttempts\n ) {\n break; // stop after firing error\n }\n\n // exponential backoff: double retry each attempt, cap at 30s\n const backoff = Math.min(\n retryDelay * 2 ** (attempt - 1),\n sseMaxRetryDelay ?? 30000\n );\n await sleep(backoff);\n }\n }\n };\n\n const stream = createStream();\n\n return { stream };\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T>\n extends SerializePrimitiveOptions, SerializerOptions<T> {}\n\ninterface SerializePrimitiveOptions {\n allowReserved?: boolean;\n name: string;\n}\n\nexport interface SerializerOptions<T> {\n /**\n * @default true\n */\n explode: boolean;\n style: T;\n}\n\nexport type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited';\nexport type ArraySeparatorStyle = ArrayStyle | MatrixStyle;\ntype MatrixStyle = 'label' | 'matrix' | 'simple';\nexport type ObjectStyle = 'form' | 'deepObject';\ntype ObjectSeparatorStyle = ObjectStyle | MatrixStyle;\n\ninterface SerializePrimitiveParam extends SerializePrimitiveOptions {\n value: string;\n}\n\nexport const separatorArrayExplode = (style: ArraySeparatorStyle) => {\n switch (style) {\n case 'label':\n return '.';\n case 'matrix':\n return ';';\n case 'simple':\n return ',';\n default:\n return '&';\n }\n};\n\nexport const separatorArrayNoExplode = (style: ArraySeparatorStyle) => {\n switch (style) {\n case 'form':\n return ',';\n case 'pipeDelimited':\n return '|';\n case 'spaceDelimited':\n return '%20';\n default:\n return ',';\n }\n};\n\nexport const separatorObjectExplode = (style: ObjectSeparatorStyle) => {\n switch (style) {\n case 'label':\n return '.';\n case 'matrix':\n return ';';\n case 'simple':\n return ',';\n default:\n return '&';\n }\n};\n\nexport const serializeArrayParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n}: SerializeOptions<ArraySeparatorStyle> & {\n value: unknown[];\n}) => {\n if (!explode) {\n const joinedValues = (\n allowReserved ? value : value.map((v) => encodeURIComponent(v as string))\n ).join(separatorArrayNoExplode(style));\n switch (style) {\n case 'label':\n return `.${joinedValues}`;\n case 'matrix':\n return `;${name}=${joinedValues}`;\n case 'simple':\n return joinedValues;\n default:\n return `${name}=${joinedValues}`;\n }\n }\n\n const separator = separatorArrayExplode(style);\n const joinedValues = value\n .map((v) => {\n if (style === 'label' || style === 'simple') {\n return allowReserved ? v : encodeURIComponent(v as string);\n }\n\n return serializePrimitiveParam({\n allowReserved,\n name,\n value: v as string,\n });\n })\n .join(separator);\n return style === 'label' || style === 'matrix'\n ? separator + joinedValues\n : joinedValues;\n};\n\nexport const serializePrimitiveParam = ({\n allowReserved,\n name,\n value,\n}: SerializePrimitiveParam) => {\n if (value === undefined || value === null) {\n return '';\n }\n\n if (typeof value === 'object') {\n throw new Error(\n 'Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.'\n );\n }\n\n return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;\n};\n\nexport const serializeObjectParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n valueOnly,\n}: SerializeOptions<ObjectSeparatorStyle> & {\n value: Record<string, unknown> | Date;\n valueOnly?: boolean;\n}) => {\n if (value instanceof Date) {\n return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;\n }\n\n if (style !== 'deepObject' && !explode) {\n let values: string[] = [];\n Object.entries(value).forEach(([key, v]) => {\n values = [\n ...values,\n key,\n allowReserved ? (v as string) : encodeURIComponent(v as string),\n ];\n });\n const joinedValues = values.join(',');\n switch (style) {\n case 'form':\n return `${name}=${joinedValues}`;\n case 'label':\n return `.${joinedValues}`;\n case 'matrix':\n return `;${name}=${joinedValues}`;\n default:\n return joinedValues;\n }\n }\n\n const separator = separatorObjectExplode(style);\n const joinedValues = Object.entries(value)\n .map(([key, v]) =>\n serializePrimitiveParam({\n allowReserved,\n name: style === 'deepObject' ? `${name}[${key}]` : key,\n value: v as string,\n })\n )\n .join(separator);\n return style === 'label' || style === 'matrix'\n ? separator + joinedValues\n : joinedValues;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { BodySerializer, QuerySerializer } from './bodySerializer.gen';\nimport {\n type ArraySeparatorStyle,\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from './pathSerializer.gen';\n\nexport interface PathSerializer {\n path: Record<string, unknown>;\n url: string;\n}\n\nexport const PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nexport const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => {\n let url = _url;\n const matches = _url.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n let explode = false;\n let name = match.substring(1, match.length - 1);\n let style: ArraySeparatorStyle = 'simple';\n\n if (name.endsWith('*')) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n\n if (name.startsWith('.')) {\n name = name.substring(1);\n style = 'label';\n } else if (name.startsWith(';')) {\n name = name.substring(1);\n style = 'matrix';\n }\n\n const value = path[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n url = url.replace(\n match,\n serializeArrayParam({ explode, name, style, value })\n );\n continue;\n }\n\n if (typeof value === 'object') {\n url = url.replace(\n match,\n serializeObjectParam({\n explode,\n name,\n style,\n value: value as Record<string, unknown>,\n valueOnly: true,\n })\n );\n continue;\n }\n\n if (style === 'matrix') {\n url = url.replace(\n match,\n `;${serializePrimitiveParam({\n name,\n value: value as string,\n })}`\n );\n continue;\n }\n\n const replaceValue = encodeURIComponent(\n style === 'label' ? `.${value as string}` : (value as string)\n );\n url = url.replace(match, replaceValue);\n }\n }\n return url;\n};\n\nexport const getUrl = ({\n baseUrl,\n path,\n query,\n querySerializer,\n url: _url,\n}: {\n baseUrl?: string;\n path?: Record<string, unknown>;\n query?: Record<string, unknown>;\n querySerializer: QuerySerializer;\n url: string;\n}) => {\n const pathUrl = _url.startsWith('/') ? _url : `/${_url}`;\n let url = (baseUrl ?? '') + pathUrl;\n if (path) {\n url = defaultPathSerializer({ path, url });\n }\n let search = query ? querySerializer(query) : '';\n if (search.startsWith('?')) {\n search = search.substring(1);\n }\n if (search) {\n url += `?${search}`;\n }\n return url;\n};\n\nexport function getValidRequestBody(options: {\n body?: unknown;\n bodySerializer?: BodySerializer | null;\n serializedBody?: unknown;\n}) {\n const hasBody = options.body !== undefined;\n const isSerializedBody = hasBody && options.bodySerializer;\n\n if (isSerializedBody) {\n if ('serializedBody' in options) {\n const hasSerializedBody =\n options.serializedBody !== undefined && options.serializedBody !== '';\n\n return hasSerializedBody ? options.serializedBody : null;\n }\n\n // not all clients implement a serializedBody property (i.e. client-axios)\n return options.body !== '' ? options.body : null;\n }\n\n // plain/text body\n if (hasBody) {\n return options.body;\n }\n\n // no body was provided\n return undefined;\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport type AuthToken = string | undefined;\n\nexport interface Auth {\n /**\n * Which part of the request do we use to send the auth?\n *\n * @default 'header'\n */\n in?: 'header' | 'query' | 'cookie';\n /**\n * Header or query parameter name.\n *\n * @default 'Authorization'\n */\n name?: string;\n scheme?: 'basic' | 'bearer';\n type: 'apiKey' | 'http';\n}\n\nexport const getAuthToken = async (\n auth: Auth,\n callback: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken\n): Promise<string | undefined> => {\n const token =\n typeof callback === 'function' ? await callback(auth) : callback;\n\n if (!token) {\n return;\n }\n\n if (auth.scheme === 'bearer') {\n return `Bearer ${token}`;\n }\n\n if (auth.scheme === 'basic') {\n return `Basic ${btoa(token)}`;\n }\n\n return token;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { getAuthToken } from '../core/auth.gen';\nimport type { QuerySerializerOptions } from '../core/bodySerializer.gen';\nimport { jsonBodySerializer } from '../core/bodySerializer.gen';\nimport {\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from '../core/pathSerializer.gen';\nimport { getUrl } from '../core/utils.gen';\nimport type {\n Client,\n ClientOptions,\n Config,\n RequestOptions,\n} from './types.gen';\n\nexport const createQuerySerializer = <T = unknown>({\n parameters = {},\n ...args\n}: QuerySerializerOptions = {}) => {\n const querySerializer = (queryParams: T) => {\n const search: string[] = [];\n if (queryParams && typeof queryParams === 'object') {\n for (const name in queryParams) {\n const value = queryParams[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n const options = parameters[name] || args;\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'form',\n value,\n ...options.array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === 'object') {\n const serializedObject = serializeObjectParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'deepObject',\n value: value as Record<string, unknown>,\n ...options.object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved: options.allowReserved,\n name,\n value: value as string,\n });\n if (serializedPrimitive) search.push(serializedPrimitive);\n }\n }\n }\n return search.join('&');\n };\n return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (\n contentType: string | null\n): Exclude<Config['parseAs'], 'auto'> => {\n if (!contentType) {\n // If no Content-Type header is provided, the best we can do is return the raw response body,\n // which is effectively the same as the 'stream' option.\n return 'stream';\n }\n\n const cleanContent = contentType.split(';')[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (\n cleanContent.startsWith('application/json') ||\n cleanContent.endsWith('+json')\n ) {\n return 'json';\n }\n\n if (cleanContent === 'multipart/form-data') {\n return 'formData';\n }\n\n if (\n ['application/', 'audio/', 'image/', 'video/'].some((type) =>\n cleanContent.startsWith(type)\n )\n ) {\n return 'blob';\n }\n\n if (cleanContent.startsWith('text/')) {\n return 'text';\n }\n\n return;\n};\n\nconst checkForExistence = (\n options: Pick<RequestOptions, 'auth' | 'query'> & {\n headers: Headers;\n },\n name?: string\n): boolean => {\n if (!name) {\n return false;\n }\n if (\n options.headers.has(name) ||\n options.query?.[name] ||\n options.headers.get('Cookie')?.includes(`${name}=`)\n ) {\n return true;\n }\n return false;\n};\n\nexport const setAuthParams = async ({\n security,\n ...options\n}: Pick<Required<RequestOptions>, 'security'> &\n Pick<RequestOptions, 'auth' | 'query'> & {\n headers: Headers;\n }) => {\n for (const auth of security) {\n if (checkForExistence(options, auth.name)) {\n continue;\n }\n\n const token = await getAuthToken(auth, options.auth);\n\n if (!token) {\n continue;\n }\n\n const name = auth.name ?? 'Authorization';\n\n switch (auth.in) {\n case 'query':\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case 'cookie':\n options.headers.append('Cookie', `${name}=${token}`);\n break;\n case 'header':\n default:\n options.headers.set(name, token);\n break;\n }\n }\n};\n\nexport const buildUrl: Client['buildUrl'] = (options) =>\n getUrl({\n baseUrl: options.baseUrl as string,\n path: options.path,\n query: options.query,\n querySerializer:\n typeof options.querySerializer === 'function'\n ? options.querySerializer\n : createQuerySerializer(options.querySerializer),\n url: options.url,\n });\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n const config = { ...a, ...b };\n if (config.baseUrl?.endsWith('/')) {\n config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n }\n config.headers = mergeHeaders(a.headers, b.headers);\n return config;\n};\n\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n const entries: Array<[string, string]> = [];\n headers.forEach((value, key) => {\n entries.push([key, value]);\n });\n return entries;\n};\n\nexport const mergeHeaders = (\n ...headers: Array<Required<Config>['headers'] | undefined>\n): Headers => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header) {\n continue;\n }\n\n const iterator =\n header instanceof Headers\n ? headersEntries(header)\n : Object.entries(header);\n\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v as string);\n }\n } else if (value !== undefined) {\n // assume object headers are meant to be JSON stringified, i.e. their\n // content value in OpenAPI specification is 'application/json'\n mergedHeaders.set(\n key,\n typeof value === 'object' ? JSON.stringify(value) : (value as string)\n );\n }\n }\n }\n return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n error: Err,\n response: Res,\n request: Req,\n options: Options\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (\n request: Req,\n options: Options\n) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n response: Res,\n request: Req,\n options: Options\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n fns: Array<Interceptor | null> = [];\n\n clear(): void {\n this.fns = [];\n }\n\n eject(id: number | Interceptor): void {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = null;\n }\n }\n\n exists(id: number | Interceptor): boolean {\n const index = this.getInterceptorIndex(id);\n return Boolean(this.fns[index]);\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === 'number') {\n return this.fns[id] ? id : -1;\n }\n return this.fns.indexOf(id);\n }\n\n update(\n id: number | Interceptor,\n fn: Interceptor\n ): number | Interceptor | false {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = fn;\n return id;\n }\n return false;\n }\n\n use(fn: Interceptor): number {\n this.fns.push(fn);\n return this.fns.length - 1;\n }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n request: Interceptors<ReqInterceptor<Req, Options>>;\n response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n Req,\n Res,\n Err,\n Options\n> => ({\n error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n request: new Interceptors<ReqInterceptor<Req, Options>>(),\n response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n allowReserved: false,\n array: {\n explode: true,\n style: 'form',\n },\n object: {\n explode: true,\n style: 'deepObject',\n },\n});\n\nconst defaultHeaders = {\n 'Content-Type': 'application/json',\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n override: Config<Omit<ClientOptions, keyof T> & T> = {}\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n ...jsonBodySerializer,\n headers: defaultHeaders,\n parseAs: 'auto',\n querySerializer: defaultQuerySerializer,\n ...override,\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createSseClient } from '../core/serverSentEvents.gen';\nimport type { HttpMethod } from '../core/types.gen';\nimport { getValidRequestBody } from '../core/utils.gen';\nimport type {\n Client,\n Config,\n RequestOptions,\n ResolvedRequestOptions,\n} from './types.gen';\nimport {\n buildUrl,\n createConfig,\n createInterceptors,\n getParseAs,\n mergeConfigs,\n mergeHeaders,\n setAuthParams,\n} from './utils.gen';\n\ntype ReqInit = Omit<RequestInit, 'body' | 'headers'> & {\n body?: any;\n headers: ReturnType<typeof mergeHeaders>;\n};\n\nexport const createClient = (config: Config = {}): Client => {\n let _config = mergeConfigs(createConfig(), config);\n\n const getConfig = (): Config => ({ ..._config });\n\n const setConfig = (config: Config): Config => {\n _config = mergeConfigs(_config, config);\n return getConfig();\n };\n\n const interceptors = createInterceptors<\n Request,\n Response,\n unknown,\n ResolvedRequestOptions\n >();\n\n const beforeRequest = async (options: RequestOptions) => {\n const opts = {\n ..._config,\n ...options,\n fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n headers: mergeHeaders(_config.headers, options.headers),\n serializedBody: undefined,\n };\n\n if (opts.security) {\n await setAuthParams({\n ...opts,\n security: opts.security,\n });\n }\n\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n\n if (opts.body !== undefined && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body);\n }\n\n // remove Content-Type header if body is empty to avoid sending invalid requests\n if (opts.body === undefined || opts.serializedBody === '') {\n opts.headers.delete('Content-Type');\n }\n\n const url = buildUrl(opts);\n\n return { opts, url };\n };\n\n const request: Client['request'] = async (options) => {\n // @ts-expect-error\n const { opts, url } = await beforeRequest(options);\n const requestInit: ReqInit = {\n redirect: 'follow',\n ...opts,\n body: getValidRequestBody(opts),\n };\n\n let request = new Request(url, requestInit);\n\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = opts.fetch!;\n let response: Response;\n\n try {\n response = await _fetch(request);\n } catch (error) {\n // Handle fetch exceptions (AbortError, network errors, etc.)\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = (await fn(\n error,\n undefined as any,\n request,\n opts\n )) as unknown;\n }\n }\n\n finalError = finalError || ({} as unknown);\n\n if (opts.throwOnError) {\n throw finalError;\n }\n\n // Return error response\n return opts.responseStyle === 'data'\n ? undefined\n : {\n error: finalError,\n request,\n response: undefined as any,\n };\n }\n\n for (const fn of interceptors.response.fns) {\n if (fn) {\n response = await fn(response, request, opts);\n }\n }\n\n const result = {\n request,\n response,\n };\n\n if (response.ok) {\n const parseAs =\n (opts.parseAs === 'auto'\n ? getParseAs(response.headers.get('Content-Type'))\n : opts.parseAs) ?? 'json';\n\n if (\n response.status === 204 ||\n response.headers.get('Content-Length') === '0'\n ) {\n let emptyData: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'text':\n emptyData = await response[parseAs]();\n break;\n case 'formData':\n emptyData = new FormData();\n break;\n case 'stream':\n emptyData = response.body;\n break;\n case 'json':\n default:\n emptyData = {};\n break;\n }\n return opts.responseStyle === 'data'\n ? emptyData\n : {\n data: emptyData,\n ...result,\n };\n }\n\n let data: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'formData':\n case 'json':\n case 'text':\n data = await response[parseAs]();\n break;\n case 'stream':\n return opts.responseStyle === 'data'\n ? response.body\n : {\n data: response.body,\n ...result,\n };\n }\n\n if (parseAs === 'json') {\n if (opts.responseValidator) {\n await opts.responseValidator(data);\n }\n\n if (opts.responseTransformer) {\n data = await opts.responseTransformer(data);\n }\n }\n\n return opts.responseStyle === 'data'\n ? data\n : {\n data,\n ...result,\n };\n }\n\n const textError = await response.text();\n let jsonError: unknown;\n\n try {\n jsonError = JSON.parse(textError);\n } catch {\n // noop\n }\n\n const error = jsonError ?? textError;\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = (await fn(error, response, request, opts)) as string;\n }\n }\n\n finalError = finalError || ({} as string);\n\n if (opts.throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return opts.responseStyle === 'data'\n ? undefined\n : {\n error: finalError,\n ...result,\n };\n };\n\n const makeMethodFn =\n (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n request({ ...options, method });\n\n const makeSseFn =\n (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n const { opts, url } = await beforeRequest(options);\n return createSseClient({\n ...opts,\n body: opts.body as BodyInit | null | undefined,\n headers: opts.headers as unknown as Record<string, string>,\n method,\n onRequest: async (url, init) => {\n let request = new Request(url, init);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n return request;\n },\n url,\n });\n };\n\n return {\n buildUrl,\n connect: makeMethodFn('CONNECT'),\n delete: makeMethodFn('DELETE'),\n get: makeMethodFn('GET'),\n getConfig,\n head: makeMethodFn('HEAD'),\n interceptors,\n options: makeMethodFn('OPTIONS'),\n patch: makeMethodFn('PATCH'),\n post: makeMethodFn('POST'),\n put: makeMethodFn('PUT'),\n request,\n setConfig,\n sse: {\n connect: makeSseFn('CONNECT'),\n delete: makeSseFn('DELETE'),\n get: makeSseFn('GET'),\n head: makeSseFn('HEAD'),\n options: makeSseFn('OPTIONS'),\n patch: makeSseFn('PATCH'),\n post: makeSseFn('POST'),\n put: makeSseFn('PUT'),\n trace: makeSseFn('TRACE'),\n },\n trace: makeMethodFn('TRACE'),\n } as Client;\n};\n","import { createClient as createGeneratedClient } from '../generated/client';\nimport type { Client } from '../generated/client';\nimport type { GetProjectInfoData } from '../generated/types.gen';\nimport { createRetryingFetch, createTimeoutFetch } from './transport';\nimport type { RetryPolicy } from './transport';\n\nexport type ApiVersion = NonNullable<\n NonNullable<GetProjectInfoData['headers']>['gt-api-version']\n>;\n\nexport const API_VERSION: ApiVersion = '2026-03-06.v1';\n\nexport type ApiClientConfig = {\n apiKey?: string;\n apiVersion?: ApiVersion;\n baseUrl: string;\n fetch?: typeof fetch;\n projectId?: string;\n retryPolicy?: RetryPolicy;\n timeoutMs?: number;\n};\n\nexport function createApiClient(config: ApiClientConfig): Client {\n const headers = new Headers({\n 'gt-api-version': config.apiVersion ?? API_VERSION,\n });\n if (config.apiKey) headers.set('Authorization', `Bearer ${config.apiKey}`);\n if (config.projectId) headers.set('gt-project-id', config.projectId);\n\n return createGeneratedClient({\n baseUrl: config.baseUrl,\n fetch: createRetryingFetch({\n // Timeout applies per attempt, inside the retry loop.\n fetch: createTimeoutFetch({\n fetch: config.fetch,\n timeoutMs: config.timeoutMs,\n }),\n retryPolicy: config.retryPolicy,\n }),\n headers,\n });\n}\n"],"mappings":"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"}
|