@generaltranslation/api 0.0.6 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -315,7 +315,7 @@ type ClientOptions = {
315
315
  type ErrorResponse = {
316
316
  error: string;
317
317
  };
318
- type FileFormat = 'GTJSON' | 'MDX' | 'JSON' | 'YAML' | 'MD' | 'TS' | 'JS' | 'HTML' | 'TXT' | 'PO' | 'POT' | 'TWILIO_CONTENT_JSON' | 'LOTTIE' | 'SVG' | 'DOT_STRINGS' | 'DOT_STRINGSDICT' | 'ANDROID_STRINGS';
318
+ type FileFormat = 'GTJSON' | 'MDX' | 'JSON' | 'YAML' | 'MD' | 'TS' | 'JS' | 'HTML' | 'TXT' | 'PO' | 'POT' | 'TWILIO_CONTENT_JSON' | 'LOTTIE' | 'SVG' | 'DOT_STRINGS' | 'DOT_STRINGSDICT' | 'ANDROID_STRINGS' | 'XCSTRINGS';
319
319
  type ModelProvider = 'ANTHROPIC' | 'OPENAI' | 'XAI' | 'GOOGLE';
320
320
  type JsonObject = {
321
321
  [key: string]: JsonValue;
@@ -455,7 +455,7 @@ type UploadSourceFilesData = {
455
455
  source: {
456
456
  content: string;
457
457
  fileName: string;
458
- fileFormat: 'GTJSON' | 'MDX' | 'JSON' | 'YAML' | 'MD' | 'TS' | 'JS' | 'HTML' | 'TXT' | 'PO' | 'POT' | 'TWILIO_CONTENT_JSON' | 'LOTTIE' | 'SVG' | 'DOT_STRINGS' | 'DOT_STRINGSDICT' | 'ANDROID_STRINGS';
458
+ fileFormat: 'GTJSON' | 'MDX' | 'JSON' | 'YAML' | 'MD' | 'TS' | 'JS' | 'HTML' | 'TXT' | 'PO' | 'POT' | 'TWILIO_CONTENT_JSON' | 'LOTTIE' | 'SVG' | 'DOT_STRINGS' | 'DOT_STRINGSDICT' | 'ANDROID_STRINGS' | 'XCSTRINGS';
459
459
  dataFormat?: string;
460
460
  locale: string;
461
461
  fileId?: string;
@@ -544,7 +544,7 @@ type UploadTranslationsData = {
544
544
  source: {
545
545
  content: string;
546
546
  fileName: string;
547
- fileFormat: 'GTJSON' | 'MDX' | 'JSON' | 'YAML' | 'MD' | 'TS' | 'JS' | 'HTML' | 'TXT' | 'PO' | 'POT' | 'TWILIO_CONTENT_JSON' | 'LOTTIE' | 'SVG' | 'DOT_STRINGS' | 'DOT_STRINGSDICT' | 'ANDROID_STRINGS';
547
+ fileFormat: 'GTJSON' | 'MDX' | 'JSON' | 'YAML' | 'MD' | 'TS' | 'JS' | 'HTML' | 'TXT' | 'PO' | 'POT' | 'TWILIO_CONTENT_JSON' | 'LOTTIE' | 'SVG' | 'DOT_STRINGS' | 'DOT_STRINGSDICT' | 'ANDROID_STRINGS' | 'XCSTRINGS';
548
548
  dataFormat?: string;
549
549
  locale: string;
550
550
  fileId?: string;
@@ -559,10 +559,10 @@ type UploadTranslationsData = {
559
559
  translations: Array<{
560
560
  content: string;
561
561
  fileName: string;
562
- fileFormat: 'GTJSON' | 'MDX' | 'JSON' | 'YAML' | 'MD' | 'TS' | 'JS' | 'HTML' | 'TXT' | 'PO' | 'POT' | 'TWILIO_CONTENT_JSON' | 'LOTTIE' | 'SVG' | 'DOT_STRINGS' | 'DOT_STRINGSDICT' | 'ANDROID_STRINGS';
562
+ fileFormat: 'GTJSON' | 'MDX' | 'JSON' | 'YAML' | 'MD' | 'TS' | 'JS' | 'HTML' | 'TXT' | 'PO' | 'POT' | 'TWILIO_CONTENT_JSON' | 'LOTTIE' | 'SVG' | 'DOT_STRINGS' | 'DOT_STRINGSDICT' | 'ANDROID_STRINGS' | 'XCSTRINGS';
563
563
  dataFormat?: string;
564
564
  locale: string;
565
- transformFormat?: 'GTJSON' | 'MDX' | 'JSON' | 'YAML' | 'MD' | 'TS' | 'JS' | 'HTML' | 'TXT' | 'PO' | 'POT' | 'TWILIO_CONTENT_JSON' | 'LOTTIE' | 'SVG' | 'DOT_STRINGS' | 'DOT_STRINGSDICT' | 'ANDROID_STRINGS';
565
+ transformFormat?: 'GTJSON' | 'MDX' | 'JSON' | 'YAML' | 'MD' | 'TS' | 'JS' | 'HTML' | 'TXT' | 'PO' | 'POT' | 'TWILIO_CONTENT_JSON' | 'LOTTIE' | 'SVG' | 'DOT_STRINGS' | 'DOT_STRINGSDICT' | 'ANDROID_STRINGS' | 'XCSTRINGS';
566
566
  }>;
567
567
  }>;
568
568
  sourceLocale?: string;
@@ -951,7 +951,7 @@ type EnqueueFileTranslationsData = {
951
951
  fileId: string;
952
952
  versionId: string;
953
953
  fileName?: string;
954
- transformFormat?: 'GTJSON' | 'MDX' | 'JSON' | 'YAML' | 'MD' | 'TS' | 'JS' | 'HTML' | 'TXT' | 'PO' | 'POT' | 'TWILIO_CONTENT_JSON' | 'LOTTIE' | 'SVG' | 'DOT_STRINGS' | 'DOT_STRINGSDICT' | 'ANDROID_STRINGS';
954
+ transformFormat?: 'GTJSON' | 'MDX' | 'JSON' | 'YAML' | 'MD' | 'TS' | 'JS' | 'HTML' | 'TXT' | 'PO' | 'POT' | 'TWILIO_CONTENT_JSON' | 'LOTTIE' | 'SVG' | 'DOT_STRINGS' | 'DOT_STRINGSDICT' | 'ANDROID_STRINGS' | 'XCSTRINGS';
955
955
  }>;
956
956
  targetLocales?: Array<string>;
957
957
  sourceLocale?: string;
@@ -2150,6 +2150,7 @@ type GetCliWizardSessionResponse = GetCliWizardSessionResponses[keyof GetCliWiza
2150
2150
  //#endregion
2151
2151
  //#region src/wrappers/awaitJobs.d.ts
2152
2152
  type JobResult = GetTranslationJobInfoResponse[number];
2153
+ type GetJobStatuses = (jobIds: string[], signal: AbortSignal) => Promise<GetTranslationJobInfoResponse>;
2153
2154
  type AwaitJobsOptions = {
2154
2155
  pollingIntervalSeconds?: number;
2155
2156
  timeoutSeconds?: number;
@@ -2159,6 +2160,7 @@ type AwaitJobsResult = {
2159
2160
  jobs: JobResult[];
2160
2161
  };
2161
2162
  declare function awaitJobs(client: Client, jobIds: readonly string[], options?: AwaitJobsOptions): Promise<AwaitJobsResult>;
2163
+ declare function pollJobs(jobIds: readonly string[], getJobStatuses: GetJobStatuses, options?: AwaitJobsOptions): Promise<AwaitJobsResult>;
2162
2164
  //#endregion
2163
2165
  //#region src/wrappers/base64.d.ts
2164
2166
  declare function encodeBase64(data: string): string;
@@ -2189,8 +2191,8 @@ type ApiClientConfig = {
2189
2191
  baseUrl: string;
2190
2192
  fetch?: typeof fetch;
2191
2193
  projectId?: string;
2192
- retryPolicy?: RetryPolicy;
2193
- timeoutMs?: number;
2194
+ retryPolicy?: RetryPolicy; /** Set to false when a custom fetch implementation owns request timeouts. */
2195
+ timeoutMs?: number | false;
2194
2196
  };
2195
2197
  declare function createApiClient(config: ApiClientConfig): Client;
2196
2198
  //#endregion
@@ -2371,5 +2373,5 @@ declare const deleteCliWizardSession: <ThrowOnError extends boolean = false>(opt
2371
2373
  */
2372
2374
  declare const getCliWizardSession: <ThrowOnError extends boolean = false>(options: Options<GetCliWizardSessionData, ThrowOnError>) => RequestResult<GetCliWizardSessionResponses, GetCliWizardSessionErrors, ThrowOnError, "fields">;
2373
2375
  //#endregion
2374
- export { API_VERSION, type ApiClientConfig, type ApiVersion, type AwaitJobsOptions, type AwaitJobsResult, type BatchOptions, Branch, CliWizardSessionReadyResponse, CliWizardSessionWaitingResponse, type Client, ClientOptions, CreateBranchData, CreateBranchError, CreateBranchErrors, CreateBranchResponse, CreateBranchResponses, CreateCliWizardSessionData, CreateCliWizardSessionError, CreateCliWizardSessionErrors, CreateCliWizardSessionRequest, CreateCliWizardSessionResponse, CreateCliWizardSessionResponse2, CreateCliWizardSessionResponses, CreateProjectData, CreateProjectError, CreateProjectErrors, CreateProjectResponse, CreateProjectResponses, CreateTagData, CreateTagError, CreateTagErrors, CreateTagResponse, CreateTagResponses, DEFAULT_BATCH_SIZE, DeleteCliWizardSessionData, DeleteCliWizardSessionError, DeleteCliWizardSessionErrors, DeleteCliWizardSessionResponse, DeleteCliWizardSessionResponse2, DeleteCliWizardSessionResponses, DownloadFileData, DownloadFileError, DownloadFileErrors, DownloadFileResponse, DownloadFileResponses, DownloadFilesData, DownloadFilesError, DownloadFilesErrors, DownloadFilesResponse, DownloadFilesResponses, EnqueueFileTranslationsData, EnqueueFileTranslationsError, EnqueueFileTranslationsErrors, EnqueueFileTranslationsResponse, EnqueueFileTranslationsResponses, ErrorResponse, FileFormat, GenerateProjectContextData, GenerateProjectContextError, GenerateProjectContextErrors, GenerateProjectContextResponse, GenerateProjectContextResponses, GetBranchInfoData, GetBranchInfoError, GetBranchInfoErrors, GetBranchInfoResponse, GetBranchInfoResponses, GetCliWizardSessionData, GetCliWizardSessionError, GetCliWizardSessionErrors, GetCliWizardSessionResponse, GetCliWizardSessionResponses, GetFileInfoData, GetFileInfoError, GetFileInfoErrors, GetFileInfoResponse, GetFileInfoResponses, GetOrphanedFilesData, GetOrphanedFilesError, GetOrphanedFilesErrors, GetOrphanedFilesResponse, GetOrphanedFilesResponses, GetProjectContextGenerationStatusData, GetProjectContextGenerationStatusError, GetProjectContextGenerationStatusErrors, GetProjectContextGenerationStatusResponse, GetProjectContextGenerationStatusResponses, GetProjectInfoData, GetProjectInfoError, GetProjectInfoErrors, GetProjectInfoResponse, GetProjectInfoResponses, GetTranslationJobInfoData, GetTranslationJobInfoError, GetTranslationJobInfoErrors, GetTranslationJobInfoResponse, GetTranslationJobInfoResponses, GetTranslationStatusData, GetTranslationStatusError, GetTranslationStatusErrors, GetTranslationStatusResponse, GetTranslationStatusResponses, type JobResult, JsonObject, JsonValue, ModelProvider, Options, ProcessFileMovesData, ProcessFileMovesError, ProcessFileMovesErrors, ProcessFileMovesResponse, ProcessFileMovesResponses, PublishFilesData, PublishFilesError, PublishFilesErrors, PublishFilesResponse, PublishFilesResponses, type RetryPolicy, RuntimeTranslationRequest, RuntimeTranslationResponse, ShouldGenerateProjectContextData, ShouldGenerateProjectContextError, ShouldGenerateProjectContextErrors, ShouldGenerateProjectContextResponse, ShouldGenerateProjectContextResponses, SubmitUserEditDiffsData, SubmitUserEditDiffsError, SubmitUserEditDiffsErrors, SubmitUserEditDiffsResponse, SubmitUserEditDiffsResponses, TranslateData, TranslateError, TranslateErrors, TranslateResponse, TranslateResponses, UpdateProjectInfoData, UpdateProjectInfoError, UpdateProjectInfoErrors, UpdateProjectInfoResponse, UpdateProjectInfoResponses, UploadAssetsData, UploadAssetsError, UploadAssetsErrors, UploadAssetsResponse, UploadAssetsResponses, UploadSourceFilesData, UploadSourceFilesError, UploadSourceFilesErrors, UploadSourceFilesResponse, UploadSourceFilesResponses, UploadTranslationsData, UploadTranslationsError, UploadTranslationsErrors, UploadTranslationsResponse, UploadTranslationsResponses, awaitJobs, createApiClient, createBranch, createCliWizardSession, createProject, createTag, decodeBase64, decodeFileContent, deleteCliWizardSession, downloadFile, downloadFiles, encodeBase64, encodeFileContent, enqueueFileTranslations, generateProjectContext, getBranchInfo, getCliWizardSession, getFileInfo, getOrphanedFiles, getProjectContextGenerationStatus, getProjectInfo, getTranslationJobInfo, getTranslationStatus, processBatches, processFileMoves, publishFiles, shouldGenerateProjectContext, submitUserEditDiffs, translate, updateProjectInfo, uploadAssets, uploadSourceFiles, uploadTranslations };
2376
+ export { API_VERSION, type ApiClientConfig, type ApiVersion, type AwaitJobsOptions, type AwaitJobsResult, type BatchOptions, Branch, CliWizardSessionReadyResponse, CliWizardSessionWaitingResponse, type Client, ClientOptions, CreateBranchData, CreateBranchError, CreateBranchErrors, CreateBranchResponse, CreateBranchResponses, CreateCliWizardSessionData, CreateCliWizardSessionError, CreateCliWizardSessionErrors, CreateCliWizardSessionRequest, CreateCliWizardSessionResponse, CreateCliWizardSessionResponse2, CreateCliWizardSessionResponses, CreateProjectData, CreateProjectError, CreateProjectErrors, CreateProjectResponse, CreateProjectResponses, CreateTagData, CreateTagError, CreateTagErrors, CreateTagResponse, CreateTagResponses, DEFAULT_BATCH_SIZE, DeleteCliWizardSessionData, DeleteCliWizardSessionError, DeleteCliWizardSessionErrors, DeleteCliWizardSessionResponse, DeleteCliWizardSessionResponse2, DeleteCliWizardSessionResponses, DownloadFileData, DownloadFileError, DownloadFileErrors, DownloadFileResponse, DownloadFileResponses, DownloadFilesData, DownloadFilesError, DownloadFilesErrors, DownloadFilesResponse, DownloadFilesResponses, EnqueueFileTranslationsData, EnqueueFileTranslationsError, EnqueueFileTranslationsErrors, EnqueueFileTranslationsResponse, EnqueueFileTranslationsResponses, ErrorResponse, FileFormat, GenerateProjectContextData, GenerateProjectContextError, GenerateProjectContextErrors, GenerateProjectContextResponse, GenerateProjectContextResponses, GetBranchInfoData, GetBranchInfoError, GetBranchInfoErrors, GetBranchInfoResponse, GetBranchInfoResponses, GetCliWizardSessionData, GetCliWizardSessionError, GetCliWizardSessionErrors, GetCliWizardSessionResponse, GetCliWizardSessionResponses, GetFileInfoData, GetFileInfoError, GetFileInfoErrors, GetFileInfoResponse, GetFileInfoResponses, type GetJobStatuses, GetOrphanedFilesData, GetOrphanedFilesError, GetOrphanedFilesErrors, GetOrphanedFilesResponse, GetOrphanedFilesResponses, GetProjectContextGenerationStatusData, GetProjectContextGenerationStatusError, GetProjectContextGenerationStatusErrors, GetProjectContextGenerationStatusResponse, GetProjectContextGenerationStatusResponses, GetProjectInfoData, GetProjectInfoError, GetProjectInfoErrors, GetProjectInfoResponse, GetProjectInfoResponses, GetTranslationJobInfoData, GetTranslationJobInfoError, GetTranslationJobInfoErrors, GetTranslationJobInfoResponse, GetTranslationJobInfoResponses, GetTranslationStatusData, GetTranslationStatusError, GetTranslationStatusErrors, GetTranslationStatusResponse, GetTranslationStatusResponses, type JobResult, JsonObject, JsonValue, ModelProvider, Options, ProcessFileMovesData, ProcessFileMovesError, ProcessFileMovesErrors, ProcessFileMovesResponse, ProcessFileMovesResponses, PublishFilesData, PublishFilesError, PublishFilesErrors, PublishFilesResponse, PublishFilesResponses, type RetryPolicy, RuntimeTranslationRequest, RuntimeTranslationResponse, ShouldGenerateProjectContextData, ShouldGenerateProjectContextError, ShouldGenerateProjectContextErrors, ShouldGenerateProjectContextResponse, ShouldGenerateProjectContextResponses, SubmitUserEditDiffsData, SubmitUserEditDiffsError, SubmitUserEditDiffsErrors, SubmitUserEditDiffsResponse, SubmitUserEditDiffsResponses, TranslateData, TranslateError, TranslateErrors, TranslateResponse, TranslateResponses, UpdateProjectInfoData, UpdateProjectInfoError, UpdateProjectInfoErrors, UpdateProjectInfoResponse, UpdateProjectInfoResponses, UploadAssetsData, UploadAssetsError, UploadAssetsErrors, UploadAssetsResponse, UploadAssetsResponses, UploadSourceFilesData, UploadSourceFilesError, UploadSourceFilesErrors, UploadSourceFilesResponse, UploadSourceFilesResponses, UploadTranslationsData, UploadTranslationsError, UploadTranslationsErrors, UploadTranslationsResponse, UploadTranslationsResponses, awaitJobs, createApiClient, createBranch, createCliWizardSession, createProject, createTag, decodeBase64, decodeFileContent, deleteCliWizardSession, downloadFile, downloadFiles, encodeBase64, encodeFileContent, enqueueFileTranslations, generateProjectContext, getBranchInfo, getCliWizardSession, getFileInfo, getOrphanedFiles, getProjectContextGenerationStatus, getProjectInfo, getTranslationJobInfo, getTranslationStatus, pollJobs, processBatches, processFileMoves, publishFiles, shouldGenerateProjectContext, submitUserEditDiffs, translate, updateProjectInfo, uploadAssets, uploadSourceFiles, uploadTranslations };
2375
2377
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -422,6 +422,7 @@ const IDEMPOTENT_METHODS = new Set([
422
422
  const DEFAULT_TIMEOUT_MS = 6e4;
423
423
  function createTimeoutFetch({ fetch: fetchImplementation = globalThis.fetch, timeoutMs = DEFAULT_TIMEOUT_MS } = {}) {
424
424
  return async (input, init) => {
425
+ if (timeoutMs === false) return fetchImplementation(input, init);
425
426
  const request = new Request(input, init);
426
427
  const controller = new AbortController();
427
428
  const forwardAbort = () => controller.abort(request.signal.reason);
@@ -1187,6 +1188,6 @@ function createApiClient(config) {
1187
1188
  });
1188
1189
  }
1189
1190
  //#endregion
1190
- export { API_VERSION, DEFAULT_BATCH_SIZE, awaitJobs, createApiClient, createBranch, createCliWizardSession, createProject, createTag, decodeBase64, decodeFileContent, deleteCliWizardSession, downloadFile, downloadFiles, encodeBase64, encodeFileContent, enqueueFileTranslations, generateProjectContext, getBranchInfo, getCliWizardSession, getFileInfo, getOrphanedFiles, getProjectContextGenerationStatus, getProjectInfo, getTranslationJobInfo, getTranslationStatus, processBatches, processFileMoves, publishFiles, shouldGenerateProjectContext, submitUserEditDiffs, translate, updateProjectInfo, uploadAssets, uploadSourceFiles, uploadTranslations };
1191
+ export { API_VERSION, DEFAULT_BATCH_SIZE, awaitJobs, createApiClient, createBranch, createCliWizardSession, createProject, createTag, decodeBase64, decodeFileContent, deleteCliWizardSession, downloadFile, downloadFiles, encodeBase64, encodeFileContent, enqueueFileTranslations, generateProjectContext, getBranchInfo, getCliWizardSession, getFileInfo, getOrphanedFiles, getProjectContextGenerationStatus, getProjectInfo, getTranslationJobInfo, getTranslationStatus, pollJobs, processBatches, processFileMoves, publishFiles, shouldGenerateProjectContext, submitUserEditDiffs, translate, updateProjectInfo, uploadAssets, uploadSourceFiles, uploadTranslations };
1191
1192
 
1192
1193
  //# sourceMappingURL=index.mjs.map
@@ -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\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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"}
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 | false;\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 if (timeoutMs === false) {\n return fetchImplementation(input, init);\n }\n\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// The polling loop with an injected status loader, so callers can supply\n// their own request/error normalization (and tests can drive it without a\n// client).\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 /** Set to false when a custom fetch implementation owns request timeouts. */\n timeoutMs?: number | false;\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@generaltranslation/api",
3
- "version": "0.0.6",
3
+ "version": "0.2.0",
4
4
  "description": "Generated TypeScript SDK for the General Translation API",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -22,7 +22,8 @@
22
22
  "types": "./dist/index.d.mts",
23
23
  "default": "./dist/index.mjs"
24
24
  }
25
- }
25
+ },
26
+ "./spec/openapi.json": "./spec/openapi.json"
26
27
  },
27
28
  "repository": {
28
29
  "type": "git",