tsarr 2.9.1 → 2.11.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.
Files changed (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +120 -233
  3. package/dist/cli/commands/doctor.d.ts.map +1 -1
  4. package/dist/cli/commands/manual-import.d.ts +30 -0
  5. package/dist/cli/commands/manual-import.d.ts.map +1 -0
  6. package/dist/cli/commands/radarr.d.ts.map +1 -1
  7. package/dist/cli/commands/sonarr.d.ts.map +1 -1
  8. package/dist/cli/index.js +5230 -4783
  9. package/dist/cli/index.js.map +133 -0
  10. package/dist/clients/base.d.ts +8 -3
  11. package/dist/clients/base.d.ts.map +1 -1
  12. package/dist/clients/bazarr.d.ts +125 -124
  13. package/dist/clients/bazarr.d.ts.map +1 -1
  14. package/dist/clients/bazarr.js +183 -100
  15. package/dist/clients/bazarr.js.map +22 -0
  16. package/dist/clients/lidarr.d.ts +148 -147
  17. package/dist/clients/lidarr.d.ts.map +1 -1
  18. package/dist/clients/lidarr.js +190 -102
  19. package/dist/clients/lidarr.js.map +23 -0
  20. package/dist/clients/prowlarr.d.ts +30 -29
  21. package/dist/clients/prowlarr.d.ts.map +1 -1
  22. package/dist/clients/prowlarr.js +190 -102
  23. package/dist/clients/prowlarr.js.map +23 -0
  24. package/dist/clients/qbittorrent.d.ts +3 -1
  25. package/dist/clients/qbittorrent.d.ts.map +1 -1
  26. package/dist/clients/qbittorrent.js +213 -107
  27. package/dist/clients/qbittorrent.js.map +21 -0
  28. package/dist/clients/radarr.d.ts +195 -150
  29. package/dist/clients/radarr.d.ts.map +1 -1
  30. package/dist/clients/radarr.js +230 -102
  31. package/dist/clients/radarr.js.map +23 -0
  32. package/dist/clients/readarr.d.ts +150 -149
  33. package/dist/clients/readarr.d.ts.map +1 -1
  34. package/dist/clients/readarr.js +190 -102
  35. package/dist/clients/readarr.js.map +23 -0
  36. package/dist/clients/seerr-types.d.ts +1 -1
  37. package/dist/clients/seerr-types.d.ts.map +1 -1
  38. package/dist/clients/seerr.d.ts +17 -16
  39. package/dist/clients/seerr.d.ts.map +1 -1
  40. package/dist/clients/seerr.js +183 -100
  41. package/dist/clients/seerr.js.map +22 -0
  42. package/dist/clients/sonarr.d.ts +203 -168
  43. package/dist/clients/sonarr.d.ts.map +1 -1
  44. package/dist/clients/sonarr.js +206 -112
  45. package/dist/clients/sonarr.js.map +23 -0
  46. package/dist/core/client.d.ts +2 -0
  47. package/dist/core/client.d.ts.map +1 -1
  48. package/dist/core/fetch.d.ts +23 -0
  49. package/dist/core/fetch.d.ts.map +1 -0
  50. package/dist/core/index.d.ts +1 -0
  51. package/dist/core/index.d.ts.map +1 -1
  52. package/dist/core/types.d.ts +7 -0
  53. package/dist/core/types.d.ts.map +1 -1
  54. package/dist/generated/bazarr/client/client.gen.d.ts.map +1 -1
  55. package/dist/generated/bazarr/client/types.gen.d.ts +5 -2
  56. package/dist/generated/bazarr/client/types.gen.d.ts.map +1 -1
  57. package/dist/generated/bazarr/client/utils.gen.d.ts +5 -1
  58. package/dist/generated/bazarr/client/utils.gen.d.ts.map +1 -1
  59. package/dist/generated/lidarr/client/client.gen.d.ts.map +1 -1
  60. package/dist/generated/lidarr/client/types.gen.d.ts +5 -2
  61. package/dist/generated/lidarr/client/types.gen.d.ts.map +1 -1
  62. package/dist/generated/lidarr/client/utils.gen.d.ts +5 -1
  63. package/dist/generated/lidarr/client/utils.gen.d.ts.map +1 -1
  64. package/dist/generated/prowlarr/client/client.gen.d.ts.map +1 -1
  65. package/dist/generated/prowlarr/client/types.gen.d.ts +5 -2
  66. package/dist/generated/prowlarr/client/types.gen.d.ts.map +1 -1
  67. package/dist/generated/prowlarr/client/utils.gen.d.ts +5 -1
  68. package/dist/generated/prowlarr/client/utils.gen.d.ts.map +1 -1
  69. package/dist/generated/qbittorrent/client/client.gen.d.ts.map +1 -1
  70. package/dist/generated/qbittorrent/client/types.gen.d.ts +5 -2
  71. package/dist/generated/qbittorrent/client/types.gen.d.ts.map +1 -1
  72. package/dist/generated/qbittorrent/client/utils.gen.d.ts +5 -1
  73. package/dist/generated/qbittorrent/client/utils.gen.d.ts.map +1 -1
  74. package/dist/generated/radarr/client/client.gen.d.ts.map +1 -1
  75. package/dist/generated/radarr/client/types.gen.d.ts +5 -2
  76. package/dist/generated/radarr/client/types.gen.d.ts.map +1 -1
  77. package/dist/generated/radarr/client/utils.gen.d.ts +5 -1
  78. package/dist/generated/radarr/client/utils.gen.d.ts.map +1 -1
  79. package/dist/generated/readarr/client/client.gen.d.ts.map +1 -1
  80. package/dist/generated/readarr/client/types.gen.d.ts +5 -2
  81. package/dist/generated/readarr/client/types.gen.d.ts.map +1 -1
  82. package/dist/generated/readarr/client/utils.gen.d.ts +5 -1
  83. package/dist/generated/readarr/client/utils.gen.d.ts.map +1 -1
  84. package/dist/generated/seerr/client/client.gen.d.ts.map +1 -1
  85. package/dist/generated/seerr/client/types.gen.d.ts +5 -2
  86. package/dist/generated/seerr/client/types.gen.d.ts.map +1 -1
  87. package/dist/generated/seerr/client/utils.gen.d.ts +5 -1
  88. package/dist/generated/seerr/client/utils.gen.d.ts.map +1 -1
  89. package/dist/generated/seerr/index.d.ts +2 -2
  90. package/dist/generated/seerr/index.d.ts.map +1 -1
  91. package/dist/generated/seerr/sdk.gen.d.ts +13 -1
  92. package/dist/generated/seerr/sdk.gen.d.ts.map +1 -1
  93. package/dist/generated/seerr/types.gen.d.ts +78 -7
  94. package/dist/generated/seerr/types.gen.d.ts.map +1 -1
  95. package/dist/generated/sonarr/client/client.gen.d.ts.map +1 -1
  96. package/dist/generated/sonarr/client/types.gen.d.ts +5 -2
  97. package/dist/generated/sonarr/client/types.gen.d.ts.map +1 -1
  98. package/dist/generated/sonarr/client/utils.gen.d.ts +5 -1
  99. package/dist/generated/sonarr/client/utils.gen.d.ts.map +1 -1
  100. package/dist/index.js +4 -1
  101. package/dist/index.js.map +12 -0
  102. package/dist/tsarr-2.11.0.tgz +0 -0
  103. package/package.json +18 -9
  104. package/dist/tsarr-2.9.1.tgz +0 -0
@@ -0,0 +1,22 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/core/errors.ts", "../../src/core/fetch.ts", "../../src/core/client.ts", "../../src/generated/bazarr/core/bodySerializer.gen.ts", "../../src/generated/bazarr/core/serverSentEvents.gen.ts", "../../src/generated/bazarr/core/pathSerializer.gen.ts", "../../src/generated/bazarr/core/utils.gen.ts", "../../src/generated/bazarr/core/auth.gen.ts", "../../src/generated/bazarr/client/utils.gen.ts", "../../src/generated/bazarr/client/client.gen.ts", "../../src/generated/bazarr/client.gen.ts", "../../src/generated/bazarr/sdk.gen.ts", "../../src/clients/bazarr.ts"],
4
+ "sourcesContent": [
5
+ "export class TsarrError extends Error {\n constructor(\n message: string,\n public code?: string,\n public statusCode?: number,\n public details?: unknown\n ) {\n super(message);\n this.name = 'TsarrError';\n }\n}\n\nexport class ApiKeyError extends TsarrError {\n constructor(message = 'Invalid or missing API key') {\n super(message, 'API_KEY_ERROR', 401);\n this.name = 'ApiKeyError';\n }\n}\n\nexport class ConnectionError extends TsarrError {\n constructor(message: string, details?: unknown) {\n super(message, 'CONNECTION_ERROR', undefined, details);\n this.name = 'ConnectionError';\n }\n}\n\nexport class ValidationError extends TsarrError {\n constructor(message: string, details?: unknown) {\n super(message, 'VALIDATION_ERROR', undefined, details);\n this.name = 'ValidationError';\n }\n}\n\nexport class NotFoundError extends TsarrError {\n constructor(resource: string) {\n super(`Resource not found: ${resource}`, 'NOT_FOUND', 404);\n this.name = 'NotFoundError';\n }\n}\n",
6
+ "import { ConnectionError } from './errors';\n\nexport interface RetryOptions {\n /** Maximum number of retry attempts for transient failures (default: 3) */\n maxRetries?: number;\n /** Initial delay in ms before the first retry (default: 1000) */\n initialDelayMs?: number;\n /** Maximum delay in ms between retries (default: 10000) */\n maxDelayMs?: number;\n}\n\nexport interface ResilientFetchOptions {\n /** Request timeout in milliseconds (default: 30000) */\n timeout?: number;\n /** Retry configuration for transient failures. Omit to disable retries. */\n retry?: RetryOptions;\n}\n\nconst DEFAULT_TIMEOUT = 30_000;\nconst DEFAULT_MAX_RETRIES = 3;\nconst DEFAULT_INITIAL_DELAY = 1_000;\nconst DEFAULT_MAX_DELAY = 10_000;\n\nconst RETRYABLE_STATUS_CODES = new Set([408, 429, 502, 503, 504]);\n\nfunction isRetryable(error: unknown): boolean {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return false;\n }\n if (error instanceof TypeError) {\n // Network errors from fetch (e.g. DNS failure, connection refused)\n return true;\n }\n return false;\n}\n\nfunction getRetryDelay(attempt: number, initialDelayMs: number, maxDelayMs: number): number {\n const delay = initialDelayMs * 2 ** attempt;\n const jitter = delay * 0.2 * Math.random();\n return Math.min(delay + jitter, maxDelayMs);\n}\n\n/**\n * Creates a fetch function with timeout and retry support.\n *\n * - Timeout uses AbortController to cancel requests that exceed the limit.\n * - Retry uses exponential backoff with jitter for transient failures\n * (network errors and 408/429/502/503/504 status codes).\n */\nexport function createResilientFetch(options: ResilientFetchOptions = {}): typeof fetch {\n const timeout = options.timeout ?? DEFAULT_TIMEOUT;\n const maxRetries = options.retry ? (options.retry.maxRetries ?? DEFAULT_MAX_RETRIES) : 0;\n const initialDelayMs = options.retry?.initialDelayMs ?? DEFAULT_INITIAL_DELAY;\n const maxDelayMs = options.retry?.maxDelayMs ?? DEFAULT_MAX_DELAY;\n\n const resilientFetch = async (\n input: RequestInfo | URL,\n init?: RequestInit\n ): Promise<Response> => {\n let lastError: unknown;\n const template = createRequestTemplate(input, init);\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n // Merge abort signals: respect caller's signal and our timeout\n const callerSignal = init?.signal;\n if (callerSignal?.aborted) {\n clearTimeout(timeoutId);\n throw callerSignal.reason ?? new DOMException('The operation was aborted.', 'AbortError');\n }\n\n const onCallerAbort = () => controller.abort(callerSignal!.reason);\n callerSignal?.addEventListener('abort', onCallerAbort, { once: true });\n\n try {\n const response = await globalThis.fetch(\n new Request(template.clone(), { signal: controller.signal })\n );\n\n clearTimeout(timeoutId);\n callerSignal?.removeEventListener('abort', onCallerAbort);\n\n if (RETRYABLE_STATUS_CODES.has(response.status) && attempt < maxRetries) {\n lastError = new ConnectionError(`Request failed with status ${response.status}`);\n const delay = getRetryDelay(attempt, initialDelayMs, maxDelayMs);\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n return response;\n } catch (error) {\n clearTimeout(timeoutId);\n callerSignal?.removeEventListener('abort', onCallerAbort);\n\n // If the caller aborted, don't retry\n if (callerSignal?.aborted) {\n throw callerSignal.reason ?? new DOMException('The operation was aborted.', 'AbortError');\n }\n\n // Timeout: wrap as ConnectionError\n if (error instanceof DOMException && error.name === 'AbortError') {\n lastError = new ConnectionError(`Request timed out after ${timeout}ms`);\n if (attempt < maxRetries) {\n const delay = getRetryDelay(attempt, initialDelayMs, maxDelayMs);\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n throw lastError;\n }\n\n if (isRetryable(error) && attempt < maxRetries) {\n lastError = error;\n const delay = getRetryDelay(attempt, initialDelayMs, maxDelayMs);\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n throw error;\n }\n }\n\n throw lastError;\n };\n\n return Object.assign(resilientFetch, {\n preconnect: globalThis.fetch.preconnect?.bind(globalThis.fetch),\n }) as typeof fetch;\n}\n\nfunction createRequestTemplate(input: RequestInfo | URL, init?: RequestInit): Request {\n const { signal: _signal, ...requestInit } = init ?? {};\n\n if (input instanceof Request) {\n return init ? new Request(input.clone(), requestInit) : input.clone();\n }\n\n return new Request(input, requestInit);\n}\n",
7
+ "import { ApiKeyError, ConnectionError } from './errors';\nimport { createResilientFetch } from './fetch';\nimport type { ServarrClientConfig } from './types';\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\n\nexport function createServarrClient(config: ServarrClientConfig) {\n if (!config.apiKey) {\n throw new ApiKeyError();\n }\n\n if (!config.baseUrl) {\n throw new ConnectionError('No base URL provided');\n }\n\n const validatedConfig = {\n ...config,\n baseUrl: config.baseUrl.replace(/\\/$/, ''),\n };\n\n const timeoutMs = validatedConfig.timeout ?? DEFAULT_TIMEOUT_MS;\n\n const resilientFetch = createResilientFetch({\n timeout: timeoutMs,\n retry: validatedConfig.retry,\n });\n\n return {\n config: validatedConfig,\n getHeaders: () => ({\n 'X-Api-Key': validatedConfig.apiKey,\n 'Content-Type': 'application/json',\n ...validatedConfig.headers,\n }),\n getBaseUrl: () => validatedConfig.baseUrl,\n getTimeout: () => timeoutMs,\n getFetch: () => resilientFetch,\n };\n}\n\nexport function validateApiKey(apiKey: string | undefined): string {\n if (!apiKey || apiKey.trim() === '') {\n throw new ApiKeyError();\n }\n return apiKey.trim();\n}\n\nexport function validateBaseUrl(baseUrl: string | undefined): string {\n if (!baseUrl || baseUrl.trim() === '') {\n throw new ConnectionError('No base URL provided');\n }\n\n let parsed: URL;\n try {\n parsed = new URL(baseUrl);\n } catch {\n throw new ConnectionError(`Failed to connect: Invalid URL: ${baseUrl}`);\n }\n\n if (parsed.protocol === 'http:' && !isLocalhost(parsed.hostname)) {\n console.warn(\n `Warning: Using unencrypted HTTP for remote URL \"${parsed.host}\". Consider using HTTPS to protect your API key in transit.`\n );\n }\n\n return baseUrl.trim().replace(/\\/$/, '');\n}\n\nfunction isLocalhost(hostname: string): boolean {\n return (\n hostname === 'localhost' ||\n hostname === '127.0.0.1' ||\n hostname === '::1' ||\n hostname === '0.0.0.0' ||\n hostname.endsWith('.local') ||\n /^(10\\.|172\\.(1[6-9]|2\\d|3[01])\\.|192\\.168\\.)/.test(hostname)\n );\n}\n",
8
+ "// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { ArrayStyle, ObjectStyle, SerializerOptions } from './pathSerializer.gen';\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: unknown) => unknown;\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 = (data: FormData, key: string, value: unknown): 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 = (data: URLSearchParams, key: string, value: unknown): 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: (body: unknown): FormData => {\n const data = new FormData();\n\n Object.entries(body as Record<string, unknown>).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: (body: unknown): string =>\n JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value)),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: (body: unknown): string => {\n const data = new URLSearchParams();\n\n Object.entries(body as Record<string, unknown>).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",
9
+ "// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Config } from './types.gen';\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, 'method'> &\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<TData = unknown, TReturn = void, TNext = unknown> = {\n stream: AsyncGenerator<\n TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n TReturn,\n TNext\n >;\n};\n\nexport function 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 = sseSleepFn ?? ((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) throw new Error(`SSE failed: ${response.status} ${response.statusText}`);\n\n if (!response.body) throw new Error('No body in SSE response');\n\n const reader = response.body.pipeThrough(new TextDecoderStream()).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 buffer = buffer.replace(/\\r\\n?/g, '\\n'); // normalize line endings\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(line.replace(/^retry:\\s*/, ''), 10);\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 (sseMaxRetryAttempts !== undefined && attempt >= sseMaxRetryAttempts) {\n break; // stop after firing error\n }\n\n // exponential backoff: double retry each attempt, cap at 30s\n const backoff = Math.min(retryDelay * 2 ** (attempt - 1), sseMaxRetryDelay ?? 30000);\n await sleep(backoff);\n }\n }\n };\n\n const stream = createStream();\n\n return { stream };\n}\n",
10
+ "// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T> 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' ? separator + joinedValues : 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 = [...values, key, allowReserved ? (v as string) : encodeURIComponent(v as string)];\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' ? separator + joinedValues : joinedValues;\n};\n",
11
+ "// 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(match, serializeArrayParam({ explode, name, style, value }));\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",
12
+ "// 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 = 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",
13
+ "// 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 { Client, ClientOptions, Config, RequestOptions } 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 = (contentType: string | null): 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 (cleanContent.startsWith('application/json') || cleanContent.endsWith('+json')) {\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) => cleanContent.startsWith(type))\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 = header instanceof Headers ? headersEntries(header) : 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 may be undefined due to a network error where no response object is produced */\n response: Res | undefined,\n /** request may be undefined, because error may be from building the request object itself */\n request: Req | undefined,\n options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (request: Req, options: Options) => 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(id: number | Interceptor, fn: Interceptor): 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",
14
+ "// 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 { Client, Config, RequestOptions, ResolvedRequestOptions } 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<Request, Response, unknown, ResolvedRequestOptions>();\n\n const beforeRequest = async <\n TData = unknown,\n TResponseStyle extends 'data' | 'fields' = 'fields',\n ThrowOnError extends boolean = boolean,\n Url extends string = string,\n >(\n options: RequestOptions<TData, TResponseStyle, ThrowOnError, Url>,\n ) => {\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 as string | 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) as string | undefined;\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 resolvedOpts = opts as typeof opts &\n ResolvedRequestOptions<TResponseStyle, ThrowOnError, Url>;\n const url = buildUrl(resolvedOpts);\n\n return { opts: resolvedOpts, url };\n };\n\n const request: Client['request'] = async (options) => {\n const throwOnError = options.throwOnError ?? _config.throwOnError;\n const responseStyle = options.responseStyle ?? _config.responseStyle;\n\n let request: Request | undefined;\n let response: Response | undefined;\n\n try {\n const { opts, url } = await beforeRequest(options);\n const requestInit: ReqInit = {\n redirect: 'follow',\n ...opts,\n body: getValidRequestBody(opts),\n };\n\n 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\n response = await _fetch(request);\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 (response.status === 204 || response.headers.get('Content-Length') === '0') {\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 'text':\n data = await response[parseAs]();\n break;\n case 'json': {\n // Some servers return 200 with no Content-Length and empty body.\n // response.json() would throw; read as text and parse if non-empty.\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n break;\n }\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 throw jsonError ?? textError;\n } catch (error) {\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = await fn(finalError, response, request, options as ResolvedRequestOptions);\n }\n }\n\n finalError = finalError || {};\n\n if (throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return responseStyle === 'data'\n ? undefined\n : {\n error: finalError,\n request,\n response,\n };\n }\n };\n\n const makeMethodFn = (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n request({ ...options, method });\n\n const makeSseFn = (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 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 serializedBody: getValidRequestBody(opts) as BodyInit | null | undefined,\n url,\n });\n };\n\n const _buildUrl: Client['buildUrl'] = (options) => buildUrl({ ..._config, ...options });\n\n return {\n buildUrl: _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",
15
+ "// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type ClientOptions, type Config, createClient, createConfig } from './client';\nimport type { ClientOptions as ClientOptions2 } from './types.gen';\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (override?: Config<ClientOptions & T>) => Config<Required<ClientOptions> & T>;\n\nexport const client = createClient(createConfig<ClientOptions2>());\n",
16
+ "// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type Client, formDataBodySerializer, type Options as Options2, type TDataShape } from './client';\nimport { client } from './client.gen';\nimport type { DeleteEpisodesBlacklistData, DeleteEpisodesBlacklistErrors, DeleteEpisodesBlacklistResponses, DeleteEpisodesSubtitlesData, DeleteEpisodesSubtitlesErrors, DeleteEpisodesSubtitlesResponses, DeleteMoviesBlacklistData, DeleteMoviesBlacklistErrors, DeleteMoviesBlacklistResponses, DeleteMoviesSubtitlesData, DeleteMoviesSubtitlesErrors, DeleteMoviesSubtitlesResponses, DeleteSystemBackupsData, DeleteSystemBackupsErrors, DeleteSystemBackupsResponses, DeleteSystemJobsData, DeleteSystemJobsErrors, DeleteSystemJobsResponses, DeleteSystemLogsData, DeleteSystemLogsErrors, DeleteSystemLogsResponses, GetBadgesData, GetBadgesErrors, GetBrowseBazarrFsData, GetBrowseBazarrFsErrors, GetBrowseRadarrFsData, GetBrowseRadarrFsErrors, GetBrowseSonarrFsData, GetBrowseSonarrFsErrors, GetEpisodesBlacklistData, GetEpisodesBlacklistErrors, GetEpisodesData, GetEpisodesErrors, GetEpisodesHistoryData, GetEpisodesHistoryErrors, GetEpisodesResponses, GetEpisodesWantedData, GetEpisodesWantedErrors, GetHistoryStatsData, GetHistoryStatsErrors, GetLanguagesData, GetLanguagesErrors, GetLanguagesProfilesData, GetLanguagesProfilesErrors, GetLanguagesProfilesResponses, GetLanguagesResponses, GetMoviesBlacklistData, GetMoviesBlacklistErrors, GetMoviesData, GetMoviesErrors, GetMoviesHistoryData, GetMoviesHistoryErrors, GetMoviesResponses, GetMoviesWantedData, GetMoviesWantedErrors, GetPlexAutopulseConfigData, GetPlexAutopulseConfigResponses, GetPlexLibrariesData, GetPlexLibrariesResponses, GetPlexPinCheckData, GetPlexPinCheckResponses, GetPlexPinData, GetPlexPinResponses, GetPlexSelectServerData, GetPlexSelectServerResponses, GetPlexServersData, GetPlexServersResponses, GetPlexTestConnectionData, GetPlexTestConnectionResponses, GetPlexValidateData, GetPlexValidateResponses, GetPlexWebhookListData, GetPlexWebhookListResponses, GetProviderEpisodesData, GetProviderEpisodesErrors, GetProviderMoviesData, GetProviderMoviesErrors, GetProvidersData, GetProvidersErrors, GetProvidersResponses, GetSearchesData, GetSearchesErrors, GetSearchesResponses, GetSeriesData, GetSeriesErrors, GetSeriesResponses, GetSubtitleNameInfoData, GetSubtitleNameInfoErrors, GetSubtitleNameInfoResponses, GetSubtitlesData, GetSubtitlesErrors, GetSubtitlesResponses, GetSystemAnnouncementsData, GetSystemAnnouncementsErrors, GetSystemAnnouncementsResponses, GetSystemBackupsData, GetSystemBackupsErrors, GetSystemBackupsResponses, GetSystemHealthData, GetSystemHealthErrors, GetSystemHealthResponses, GetSystemJobsData, GetSystemJobsErrors, GetSystemJobsResponses, GetSystemLogsData, GetSystemLogsErrors, GetSystemLogsResponses, GetSystemPingData, GetSystemPingResponses, GetSystemReleasesData, GetSystemReleasesErrors, GetSystemReleasesResponses, GetSystemStatusData, GetSystemStatusErrors, GetSystemStatusResponses, GetSystemTasksData, GetSystemTasksErrors, GetSystemTasksResponses, PatchEpisodesSubtitlesData, PatchEpisodesSubtitlesErrors, PatchEpisodesSubtitlesResponses, PatchMoviesData, PatchMoviesErrors, PatchMoviesResponses, PatchMoviesSubtitlesData, PatchMoviesSubtitlesErrors, PatchMoviesSubtitlesResponses, PatchSeriesData, PatchSeriesErrors, PatchSeriesResponses, PatchSubtitlesData, PatchSubtitlesErrors, PatchSubtitlesResponses, PatchSystemBackupsData, PatchSystemBackupsErrors, PatchSystemBackupsResponses, PatchSystemJobsData, PatchSystemJobsErrors, PatchSystemJobsResponses, PostEpisodesBlacklistData, PostEpisodesBlacklistErrors, PostEpisodesBlacklistResponses, PostEpisodesSubtitlesData, PostEpisodesSubtitlesErrors, PostEpisodesSubtitlesResponses, PostMoviesBlacklistData, PostMoviesBlacklistErrors, PostMoviesBlacklistResponses, PostMoviesData, PostMoviesErrors, PostMoviesResponses, PostMoviesSubtitlesData, PostMoviesSubtitlesErrors, PostMoviesSubtitlesResponses, PostPlexApiKeyData, PostPlexApiKeyResponses, PostPlexEncryptApiKeyData, PostPlexEncryptApiKeyResponses, PostPlexLogoutData, PostPlexLogoutResponses, PostPlexPinData, PostPlexPinResponses, PostPlexSelectServerData, PostPlexSelectServerResponses, PostPlexTestConnectionData, PostPlexTestConnectionResponses, PostPlexWebhookCreateData, PostPlexWebhookCreateResponses, PostPlexWebhookDeleteData, PostPlexWebhookDeleteResponses, PostProviderEpisodesData, PostProviderEpisodesErrors, PostProviderEpisodesResponses, PostProviderMoviesData, PostProviderMoviesErrors, PostProviderMoviesResponses, PostProvidersData, PostProvidersErrors, PostProvidersResponses, PostSeriesData, PostSeriesErrors, PostSeriesResponses, PostSystemAnnouncementsData, PostSystemAnnouncementsErrors, PostSystemAnnouncementsResponses, PostSystemBackupsData, PostSystemBackupsErrors, PostSystemBackupsResponses, PostSystemJobsData, PostSystemJobsErrors, PostSystemJobsResponses, PostSystemTasksData, PostSystemTasksErrors, PostSystemTasksResponses, PostSystemWebhookTestData, PostSystemWebhookTestResponses, PostWebHooksPlexData, PostWebHooksPlexErrors, PostWebHooksPlexResponses, PostWebHooksRadarrData, PostWebHooksRadarrErrors, PostWebHooksRadarrResponses, PostWebHooksSonarrData, PostWebHooksSonarrErrors, PostWebHooksSonarrResponses } from './types.gen';\n\nexport type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & {\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 * Get badges count to update the UI\n */\nexport const getBadges = <ThrowOnError extends boolean = false>(options?: Options<GetBadgesData, ThrowOnError>) => (options?.client ?? client).get<unknown, GetBadgesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/badges',\n ...options\n});\n\n/**\n * List episodes metadata for specific series or episodes\n */\nexport const getEpisodes = <ThrowOnError extends boolean = false>(options?: Options<GetEpisodesData, ThrowOnError>) => (options?.client ?? client).get<GetEpisodesResponses, GetEpisodesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/episodes',\n ...options\n});\n\n/**\n * Delete an episodes subtitles from blacklist\n */\nexport const deleteEpisodesBlacklist = <ThrowOnError extends boolean = false>(options?: Options<DeleteEpisodesBlacklistData, ThrowOnError>) => (options?.client ?? client).delete<DeleteEpisodesBlacklistResponses, DeleteEpisodesBlacklistErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/episodes/blacklist',\n ...options\n});\n\n/**\n * List blacklisted episodes subtitles\n */\nexport const getEpisodesBlacklist = <ThrowOnError extends boolean = false>(options?: Options<GetEpisodesBlacklistData, ThrowOnError>) => (options?.client ?? client).get<unknown, GetEpisodesBlacklistErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/episodes/blacklist',\n ...options\n});\n\n/**\n * Add an episodes subtitles to blacklist\n */\nexport const postEpisodesBlacklist = <ThrowOnError extends boolean = false>(options: Options<PostEpisodesBlacklistData, ThrowOnError>) => (options.client ?? client).post<PostEpisodesBlacklistResponses, PostEpisodesBlacklistErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/episodes/blacklist',\n ...options\n});\n\n/**\n * List episodes history events\n */\nexport const getEpisodesHistory = <ThrowOnError extends boolean = false>(options?: Options<GetEpisodesHistoryData, ThrowOnError>) => (options?.client ?? client).get<unknown, GetEpisodesHistoryErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/episodes/history',\n ...options\n});\n\n/**\n * Delete an episode subtitles\n */\nexport const deleteEpisodesSubtitles = <ThrowOnError extends boolean = false>(options: Options<DeleteEpisodesSubtitlesData, ThrowOnError>) => (options.client ?? client).delete<DeleteEpisodesSubtitlesResponses, DeleteEpisodesSubtitlesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/episodes/subtitles',\n ...options\n});\n\n/**\n * Download an episode subtitles\n */\nexport const patchEpisodesSubtitles = <ThrowOnError extends boolean = false>(options: Options<PatchEpisodesSubtitlesData, ThrowOnError>) => (options.client ?? client).patch<PatchEpisodesSubtitlesResponses, PatchEpisodesSubtitlesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/episodes/subtitles',\n ...options\n});\n\n/**\n * Upload an episode subtitles\n */\nexport const postEpisodesSubtitles = <ThrowOnError extends boolean = false>(options: Options<PostEpisodesSubtitlesData, ThrowOnError>) => (options.client ?? client).post<PostEpisodesSubtitlesResponses, PostEpisodesSubtitlesErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/episodes/subtitles',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers\n }\n});\n\n/**\n * List episodes wanted subtitles\n */\nexport const getEpisodesWanted = <ThrowOnError extends boolean = false>(options?: Options<GetEpisodesWantedData, ThrowOnError>) => (options?.client ?? client).get<unknown, GetEpisodesWantedErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/episodes/wanted',\n ...options\n});\n\n/**\n * List Bazarr file system content\n */\nexport const getBrowseBazarrFs = <ThrowOnError extends boolean = false>(options?: Options<GetBrowseBazarrFsData, ThrowOnError>) => (options?.client ?? client).get<unknown, GetBrowseBazarrFsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/files',\n ...options\n});\n\n/**\n * List Radarr file system content\n */\nexport const getBrowseRadarrFs = <ThrowOnError extends boolean = false>(options?: Options<GetBrowseRadarrFsData, ThrowOnError>) => (options?.client ?? client).get<unknown, GetBrowseRadarrFsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/files/radarr',\n ...options\n});\n\n/**\n * List Sonarr file system content\n */\nexport const getBrowseSonarrFs = <ThrowOnError extends boolean = false>(options?: Options<GetBrowseSonarrFsData, ThrowOnError>) => (options?.client ?? client).get<unknown, GetBrowseSonarrFsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/files/sonarr',\n ...options\n});\n\n/**\n * Get history statistics\n */\nexport const getHistoryStats = <ThrowOnError extends boolean = false>(options?: Options<GetHistoryStatsData, ThrowOnError>) => (options?.client ?? client).get<unknown, GetHistoryStatsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/history/stats',\n ...options\n});\n\n/**\n * List movies metadata for specific movies\n */\nexport const getMovies = <ThrowOnError extends boolean = false>(options?: Options<GetMoviesData, ThrowOnError>) => (options?.client ?? client).get<GetMoviesResponses, GetMoviesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/movies',\n ...options\n});\n\n/**\n * Run actions on specific movies\n */\nexport const patchMovies = <ThrowOnError extends boolean = false>(options?: Options<PatchMoviesData, ThrowOnError>) => (options?.client ?? client).patch<PatchMoviesResponses, PatchMoviesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/movies',\n ...options\n});\n\n/**\n * Update specific movies languages profile\n */\nexport const postMovies = <ThrowOnError extends boolean = false>(options?: Options<PostMoviesData, ThrowOnError>) => (options?.client ?? client).post<PostMoviesResponses, PostMoviesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/movies',\n ...options\n});\n\n/**\n * Delete a movies subtitles from blacklist\n */\nexport const deleteMoviesBlacklist = <ThrowOnError extends boolean = false>(options?: Options<DeleteMoviesBlacklistData, ThrowOnError>) => (options?.client ?? client).delete<DeleteMoviesBlacklistResponses, DeleteMoviesBlacklistErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/movies/blacklist',\n ...options\n});\n\n/**\n * List blacklisted movies subtitles\n */\nexport const getMoviesBlacklist = <ThrowOnError extends boolean = false>(options?: Options<GetMoviesBlacklistData, ThrowOnError>) => (options?.client ?? client).get<unknown, GetMoviesBlacklistErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/movies/blacklist',\n ...options\n});\n\n/**\n * Add a movies subtitles to blacklist\n */\nexport const postMoviesBlacklist = <ThrowOnError extends boolean = false>(options: Options<PostMoviesBlacklistData, ThrowOnError>) => (options.client ?? client).post<PostMoviesBlacklistResponses, PostMoviesBlacklistErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/movies/blacklist',\n ...options\n});\n\n/**\n * List movies history events\n */\nexport const getMoviesHistory = <ThrowOnError extends boolean = false>(options?: Options<GetMoviesHistoryData, ThrowOnError>) => (options?.client ?? client).get<unknown, GetMoviesHistoryErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/movies/history',\n ...options\n});\n\n/**\n * Delete a movie subtitles\n */\nexport const deleteMoviesSubtitles = <ThrowOnError extends boolean = false>(options: Options<DeleteMoviesSubtitlesData, ThrowOnError>) => (options.client ?? client).delete<DeleteMoviesSubtitlesResponses, DeleteMoviesSubtitlesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/movies/subtitles',\n ...options\n});\n\n/**\n * Download a movie subtitles\n */\nexport const patchMoviesSubtitles = <ThrowOnError extends boolean = false>(options: Options<PatchMoviesSubtitlesData, ThrowOnError>) => (options.client ?? client).patch<PatchMoviesSubtitlesResponses, PatchMoviesSubtitlesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/movies/subtitles',\n ...options\n});\n\n/**\n * Upload a movie subtitles\n */\nexport const postMoviesSubtitles = <ThrowOnError extends boolean = false>(options: Options<PostMoviesSubtitlesData, ThrowOnError>) => (options.client ?? client).post<PostMoviesSubtitlesResponses, PostMoviesSubtitlesErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/movies/subtitles',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers\n }\n});\n\n/**\n * List movies wanted subtitles\n */\nexport const getMoviesWanted = <ThrowOnError extends boolean = false>(options?: Options<GetMoviesWantedData, ThrowOnError>) => (options?.client ?? client).get<unknown, GetMoviesWantedErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/movies/wanted',\n ...options\n});\n\nexport const postPlexApiKey = <ThrowOnError extends boolean = false>(options: Options<PostPlexApiKeyData, ThrowOnError>) => (options.client ?? client).post<PostPlexApiKeyResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/apikey',\n ...options\n});\n\nexport const getPlexAutopulseConfig = <ThrowOnError extends boolean = false>(options?: Options<GetPlexAutopulseConfigData, ThrowOnError>) => (options?.client ?? client).get<GetPlexAutopulseConfigResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/autopulse/config',\n ...options\n});\n\nexport const postPlexEncryptApiKey = <ThrowOnError extends boolean = false>(options?: Options<PostPlexEncryptApiKeyData, ThrowOnError>) => (options?.client ?? client).post<PostPlexEncryptApiKeyResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/encrypt-apikey',\n ...options\n});\n\nexport const getPlexLibraries = <ThrowOnError extends boolean = false>(options?: Options<GetPlexLibrariesData, ThrowOnError>) => (options?.client ?? client).get<GetPlexLibrariesResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/oauth/libraries',\n ...options\n});\n\nexport const postPlexLogout = <ThrowOnError extends boolean = false>(options?: Options<PostPlexLogoutData, ThrowOnError>) => (options?.client ?? client).post<PostPlexLogoutResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/oauth/logout',\n ...options\n});\n\nexport const getPlexPin = <ThrowOnError extends boolean = false>(options?: Options<GetPlexPinData, ThrowOnError>) => (options?.client ?? client).get<GetPlexPinResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/oauth/pin',\n ...options\n});\n\nexport const postPlexPin = <ThrowOnError extends boolean = false>(options?: Options<PostPlexPinData, ThrowOnError>) => (options?.client ?? client).post<PostPlexPinResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/oauth/pin',\n ...options\n});\n\nexport const getPlexPinCheck = <ThrowOnError extends boolean = false>(options: Options<GetPlexPinCheckData, ThrowOnError>) => (options.client ?? client).get<GetPlexPinCheckResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/oauth/pin/{pin_id}/check',\n ...options\n});\n\nexport const getPlexServers = <ThrowOnError extends boolean = false>(options?: Options<GetPlexServersData, ThrowOnError>) => (options?.client ?? client).get<GetPlexServersResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/oauth/servers',\n ...options\n});\n\nexport const getPlexValidate = <ThrowOnError extends boolean = false>(options?: Options<GetPlexValidateData, ThrowOnError>) => (options?.client ?? client).get<GetPlexValidateResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/oauth/validate',\n ...options\n});\n\nexport const getPlexSelectServer = <ThrowOnError extends boolean = false>(options?: Options<GetPlexSelectServerData, ThrowOnError>) => (options?.client ?? client).get<GetPlexSelectServerResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/select-server',\n ...options\n});\n\nexport const postPlexSelectServer = <ThrowOnError extends boolean = false>(options: Options<PostPlexSelectServerData, ThrowOnError>) => (options.client ?? client).post<PostPlexSelectServerResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/select-server',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\nexport const getPlexTestConnection = <ThrowOnError extends boolean = false>(options?: Options<GetPlexTestConnectionData, ThrowOnError>) => (options?.client ?? client).get<GetPlexTestConnectionResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/test-connection',\n ...options\n});\n\nexport const postPlexTestConnection = <ThrowOnError extends boolean = false>(options: Options<PostPlexTestConnectionData, ThrowOnError>) => (options.client ?? client).post<PostPlexTestConnectionResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/test-connection',\n ...options\n});\n\nexport const postPlexWebhookCreate = <ThrowOnError extends boolean = false>(options?: Options<PostPlexWebhookCreateData, ThrowOnError>) => (options?.client ?? client).post<PostPlexWebhookCreateResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/webhook/create',\n ...options\n});\n\nexport const postPlexWebhookDelete = <ThrowOnError extends boolean = false>(options: Options<PostPlexWebhookDeleteData, ThrowOnError>) => (options.client ?? client).post<PostPlexWebhookDeleteResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/webhook/delete',\n ...options\n});\n\nexport const getPlexWebhookList = <ThrowOnError extends boolean = false>(options?: Options<GetPlexWebhookListData, ThrowOnError>) => (options?.client ?? client).get<GetPlexWebhookListResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/plex/webhook/list',\n ...options\n});\n\n/**\n * Get providers status\n */\nexport const getProviders = <ThrowOnError extends boolean = false>(options?: Options<GetProvidersData, ThrowOnError>) => (options?.client ?? client).get<GetProvidersResponses, GetProvidersErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/providers',\n ...options\n});\n\n/**\n * Reset providers status\n */\nexport const postProviders = <ThrowOnError extends boolean = false>(options: Options<PostProvidersData, ThrowOnError>) => (options.client ?? client).post<PostProvidersResponses, PostProvidersErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/providers',\n ...options\n});\n\n/**\n * Search manually for an episode subtitles\n */\nexport const getProviderEpisodes = <ThrowOnError extends boolean = false>(options: Options<GetProviderEpisodesData, ThrowOnError>) => (options.client ?? client).get<unknown, GetProviderEpisodesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/providers/episodes',\n ...options\n});\n\n/**\n * Manually download an episode subtitles\n */\nexport const postProviderEpisodes = <ThrowOnError extends boolean = false>(options: Options<PostProviderEpisodesData, ThrowOnError>) => (options.client ?? client).post<PostProviderEpisodesResponses, PostProviderEpisodesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/providers/episodes',\n ...options\n});\n\n/**\n * Search manually for a movie subtitles\n */\nexport const getProviderMovies = <ThrowOnError extends boolean = false>(options: Options<GetProviderMoviesData, ThrowOnError>) => (options.client ?? client).get<unknown, GetProviderMoviesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/providers/movies',\n ...options\n});\n\n/**\n * Manually download a movie subtitles\n */\nexport const postProviderMovies = <ThrowOnError extends boolean = false>(options: Options<PostProviderMoviesData, ThrowOnError>) => (options.client ?? client).post<PostProviderMoviesResponses, PostProviderMoviesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/providers/movies',\n ...options\n});\n\n/**\n * List series metadata for specific series\n */\nexport const getSeries = <ThrowOnError extends boolean = false>(options?: Options<GetSeriesData, ThrowOnError>) => (options?.client ?? client).get<GetSeriesResponses, GetSeriesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/series',\n ...options\n});\n\n/**\n * Run actions on specific series\n */\nexport const patchSeries = <ThrowOnError extends boolean = false>(options?: Options<PatchSeriesData, ThrowOnError>) => (options?.client ?? client).patch<PatchSeriesResponses, PatchSeriesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/series',\n ...options\n});\n\n/**\n * Update specific series languages profile\n */\nexport const postSeries = <ThrowOnError extends boolean = false>(options?: Options<PostSeriesData, ThrowOnError>) => (options?.client ?? client).post<PostSeriesResponses, PostSeriesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/series',\n ...options\n});\n\n/**\n * Return available audio and embedded subtitles tracks with external subtitles\n *\n * Used for manual subsync\n * modal\n */\nexport const getSubtitles = <ThrowOnError extends boolean = false>(options: Options<GetSubtitlesData, ThrowOnError>) => (options.client ?? client).get<GetSubtitlesResponses, GetSubtitlesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/subtitles',\n ...options\n});\n\n/**\n * Apply mods/tools on external subtitles\n */\nexport const patchSubtitles = <ThrowOnError extends boolean = false>(options: Options<PatchSubtitlesData, ThrowOnError>) => (options.client ?? client).patch<PatchSubtitlesResponses, PatchSubtitlesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/subtitles',\n ...options\n});\n\n/**\n * Guessit over subtitles filename\n */\nexport const getSubtitleNameInfo = <ThrowOnError extends boolean = false>(options: Options<GetSubtitleNameInfoData, ThrowOnError>) => (options.client ?? client).get<GetSubtitleNameInfoResponses, GetSubtitleNameInfoErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/subtitles/info',\n ...options\n});\n\n/**\n * List announcements relative to Bazarr\n */\nexport const getSystemAnnouncements = <ThrowOnError extends boolean = false>(options?: Options<GetSystemAnnouncementsData, ThrowOnError>) => (options?.client ?? client).get<GetSystemAnnouncementsResponses, GetSystemAnnouncementsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/announcements',\n ...options\n});\n\n/**\n * Mark announcement as dismissed\n */\nexport const postSystemAnnouncements = <ThrowOnError extends boolean = false>(options: Options<PostSystemAnnouncementsData, ThrowOnError>) => (options.client ?? client).post<PostSystemAnnouncementsResponses, PostSystemAnnouncementsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/announcements',\n ...options\n});\n\n/**\n * Delete a backup file\n */\nexport const deleteSystemBackups = <ThrowOnError extends boolean = false>(options: Options<DeleteSystemBackupsData, ThrowOnError>) => (options.client ?? client).delete<DeleteSystemBackupsResponses, DeleteSystemBackupsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/backups',\n ...options\n});\n\n/**\n * List backup files\n */\nexport const getSystemBackups = <ThrowOnError extends boolean = false>(options?: Options<GetSystemBackupsData, ThrowOnError>) => (options?.client ?? client).get<GetSystemBackupsResponses, GetSystemBackupsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/backups',\n ...options\n});\n\n/**\n * Restore a backup file\n */\nexport const patchSystemBackups = <ThrowOnError extends boolean = false>(options: Options<PatchSystemBackupsData, ThrowOnError>) => (options.client ?? client).patch<PatchSystemBackupsResponses, PatchSystemBackupsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/backups',\n ...options\n});\n\n/**\n * Create a new backup\n */\nexport const postSystemBackups = <ThrowOnError extends boolean = false>(options?: Options<PostSystemBackupsData, ThrowOnError>) => (options?.client ?? client).post<PostSystemBackupsResponses, PostSystemBackupsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/backups',\n ...options\n});\n\n/**\n * List health issues\n */\nexport const getSystemHealth = <ThrowOnError extends boolean = false>(options?: Options<GetSystemHealthData, ThrowOnError>) => (options?.client ?? client).get<GetSystemHealthResponses, GetSystemHealthErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/health',\n ...options\n});\n\n/**\n * Delete a job from the queue\n */\nexport const deleteSystemJobs = <ThrowOnError extends boolean = false>(options: Options<DeleteSystemJobsData, ThrowOnError>) => (options.client ?? client).delete<DeleteSystemJobsResponses, DeleteSystemJobsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/jobs',\n ...options\n});\n\n/**\n * List jobs from the queue\n */\nexport const getSystemJobs = <ThrowOnError extends boolean = false>(options?: Options<GetSystemJobsData, ThrowOnError>) => (options?.client ?? client).get<GetSystemJobsResponses, GetSystemJobsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/jobs',\n ...options\n});\n\n/**\n * Empty a specific jobs queue\n */\nexport const patchSystemJobs = <ThrowOnError extends boolean = false>(options: Options<PatchSystemJobsData, ThrowOnError>) => (options.client ?? client).patch<PatchSystemJobsResponses, PatchSystemJobsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/jobs',\n ...options\n});\n\n/**\n * Force start, move to top or move to bottom of the queue a specific job\n */\nexport const postSystemJobs = <ThrowOnError extends boolean = false>(options: Options<PostSystemJobsData, ThrowOnError>) => (options.client ?? client).post<PostSystemJobsResponses, PostSystemJobsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/jobs',\n ...options\n});\n\n/**\n * List languages for history filter or for language filter menu\n */\nexport const getLanguages = <ThrowOnError extends boolean = false>(options?: Options<GetLanguagesData, ThrowOnError>) => (options?.client ?? client).get<GetLanguagesResponses, GetLanguagesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/languages',\n ...options\n});\n\n/**\n * List languages profiles\n */\nexport const getLanguagesProfiles = <ThrowOnError extends boolean = false>(options?: Options<GetLanguagesProfilesData, ThrowOnError>) => (options?.client ?? client).get<GetLanguagesProfilesResponses, GetLanguagesProfilesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/languages/profiles',\n ...options\n});\n\n/**\n * Force log rotation and create a new log file\n */\nexport const deleteSystemLogs = <ThrowOnError extends boolean = false>(options?: Options<DeleteSystemLogsData, ThrowOnError>) => (options?.client ?? client).delete<DeleteSystemLogsResponses, DeleteSystemLogsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/logs',\n ...options\n});\n\n/**\n * List log entries\n */\nexport const getSystemLogs = <ThrowOnError extends boolean = false>(options?: Options<GetSystemLogsData, ThrowOnError>) => (options?.client ?? client).get<GetSystemLogsResponses, GetSystemLogsErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/logs',\n ...options\n});\n\n/**\n * Return status and http 200\n */\nexport const getSystemPing = <ThrowOnError extends boolean = false>(options?: Options<GetSystemPingData, ThrowOnError>) => (options?.client ?? client).get<GetSystemPingResponses, unknown, ThrowOnError>({ url: '/api/system/ping', ...options });\n\n/**\n * Get Bazarr releases\n */\nexport const getSystemReleases = <ThrowOnError extends boolean = false>(options?: Options<GetSystemReleasesData, ThrowOnError>) => (options?.client ?? client).get<GetSystemReleasesResponses, GetSystemReleasesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/releases',\n ...options\n});\n\n/**\n * List results from query\n */\nexport const getSearches = <ThrowOnError extends boolean = false>(options: Options<GetSearchesData, ThrowOnError>) => (options.client ?? client).get<GetSearchesResponses, GetSearchesErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/searches',\n ...options\n});\n\n/**\n * Return environment information and versions\n */\nexport const getSystemStatus = <ThrowOnError extends boolean = false>(options?: Options<GetSystemStatusData, ThrowOnError>) => (options?.client ?? client).get<GetSystemStatusResponses, GetSystemStatusErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/status',\n ...options\n});\n\n/**\n * List tasks\n */\nexport const getSystemTasks = <ThrowOnError extends boolean = false>(options?: Options<GetSystemTasksData, ThrowOnError>) => (options?.client ?? client).get<GetSystemTasksResponses, GetSystemTasksErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/tasks',\n ...options\n});\n\n/**\n * Run task\n */\nexport const postSystemTasks = <ThrowOnError extends boolean = false>(options: Options<PostSystemTasksData, ThrowOnError>) => (options.client ?? client).post<PostSystemTasksResponses, PostSystemTasksErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/tasks',\n ...options\n});\n\n/**\n * Test external webhook connection\n */\nexport const postSystemWebhookTest = <ThrowOnError extends boolean = false>(options?: Options<PostSystemWebhookTestData, ThrowOnError>) => (options?.client ?? client).post<PostSystemWebhookTestResponses, unknown, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/system/webhooks/test',\n ...options\n});\n\n/**\n * Trigger subtitles search on play media event in Plex\n */\nexport const postWebHooksPlex = <ThrowOnError extends boolean = false>(options: Options<PostWebHooksPlexData, ThrowOnError>) => (options.client ?? client).post<PostWebHooksPlexResponses, PostWebHooksPlexErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/webhooks/plex',\n ...options\n});\n\n/**\n * Search for missing subtitles based on Radarr webhooks\n */\nexport const postWebHooksRadarr = <ThrowOnError extends boolean = false>(options: Options<PostWebHooksRadarrData, ThrowOnError>) => (options.client ?? client).post<PostWebHooksRadarrResponses, PostWebHooksRadarrErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/webhooks/radarr',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Search for missing subtitles based on Sonarr webhooks\n */\nexport const postWebHooksSonarr = <ThrowOnError extends boolean = false>(options: Options<PostWebHooksSonarrData, ThrowOnError>) => (options.client ?? client).post<PostWebHooksSonarrResponses, PostWebHooksSonarrErrors, ThrowOnError>({\n security: [{ name: 'X-API-KEY', type: 'apiKey' }],\n url: '/api/webhooks/sonarr',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n",
17
+ "import { createServarrClient } from '../core/client';\nimport type { ServarrClientConfig } from '../core/types';\nimport { client as bazarrClient } from '../generated/bazarr/client.gen';\nimport * as BazarrApi from '../generated/bazarr/index';\n\nfunction getBazarrApiBaseUrl(baseUrl: string): string {\n // Generated SDK paths already include /api/ prefix, so strip it from the base URL\n // to avoid double-prefixing (e.g. /api/api/system/status)\n return baseUrl.replace(/\\/+$/, '').replace(/\\/api$/, '');\n}\n\nfunction getBazarrHeaders(config: ReturnType<typeof createServarrClient>) {\n return {\n 'Content-Type': 'application/json',\n ...(config.config.headers ?? {}),\n };\n}\n\n/**\n * Bazarr API client for subtitle management\n *\n * @example\n * ```typescript\n * const bazarr = new BazarrClient({\n * baseUrl: 'http://localhost:6767',\n * apiKey: 'your-api-key'\n * });\n *\n * const wantedMovies = await bazarr.getMoviesWanted();\n * const providers = await bazarr.getProviders();\n * ```\n */\nexport class BazarrClient {\n private clientConfig: ReturnType<typeof createServarrClient>;\n\n constructor(config: ServarrClientConfig) {\n this.clientConfig = createServarrClient(config);\n\n bazarrClient.setConfig({\n baseUrl: getBazarrApiBaseUrl(this.clientConfig.getBaseUrl()),\n headers: getBazarrHeaders(this.clientConfig),\n auth: this.clientConfig.config.apiKey,\n fetch: this.clientConfig.getFetch(),\n });\n }\n\n // System APIs\n\n /**\n * Get Bazarr system status and version information\n */\n async getSystemStatus() {\n return BazarrApi.getSystemStatus();\n }\n\n /**\n * Get system health check results\n */\n async getSystemHealth() {\n return BazarrApi.getSystemHealth();\n }\n\n /**\n * Ping the Bazarr instance\n */\n async ping() {\n return BazarrApi.getSystemPing();\n }\n\n /**\n * Get Bazarr releases\n */\n async getSystemReleases() {\n return BazarrApi.getSystemReleases();\n }\n\n /**\n * Get system announcements\n */\n async getSystemAnnouncements() {\n return BazarrApi.getSystemAnnouncements();\n }\n\n /**\n * Dismiss an announcement by hash\n */\n async dismissAnnouncement(hash: string) {\n return BazarrApi.postSystemAnnouncements({ query: { hash } });\n }\n\n /**\n * Get system logs\n */\n async getSystemLogs() {\n return BazarrApi.getSystemLogs();\n }\n\n /**\n * Force log rotation\n */\n async rotateLogs() {\n return BazarrApi.deleteSystemLogs();\n }\n\n /**\n * Get system tasks\n */\n async getSystemTasks() {\n return BazarrApi.getSystemTasks();\n }\n\n /**\n * Run a system task\n */\n async runSystemTask(taskId: string) {\n return BazarrApi.postSystemTasks({ query: { taskid: taskId } });\n }\n\n // Backup APIs\n\n /**\n * List backup files\n */\n async getBackups() {\n return BazarrApi.getSystemBackups();\n }\n\n /**\n * Create a new backup\n */\n async createBackup() {\n return BazarrApi.postSystemBackups();\n }\n\n /**\n * Restore a backup\n */\n async restoreBackup(filename: string) {\n return BazarrApi.patchSystemBackups({ query: { filename } });\n }\n\n /**\n * Delete a backup file\n */\n async deleteBackup(filename: string) {\n return BazarrApi.deleteSystemBackups({ query: { filename } });\n }\n\n // Job Queue APIs\n\n /**\n * List jobs in the queue\n */\n async getJobs(id?: number, status?: 'pending' | 'running' | 'failed' | 'completed') {\n const query: Record<string, any> = {};\n if (id !== undefined) query.id = id;\n if (status) query.status = status;\n\n return BazarrApi.getSystemJobs(Object.keys(query).length > 0 ? { query } : {});\n }\n\n /**\n * Force start, move to top, or move to bottom a job\n */\n async manageJob(id: number, action: string) {\n return BazarrApi.postSystemJobs({ query: { id, action } });\n }\n\n /**\n * Delete a job from the queue\n */\n async deleteJob(id: number) {\n return BazarrApi.deleteSystemJobs({ query: { id } });\n }\n\n /**\n * Empty a specific jobs queue\n */\n async emptyJobQueue(queueName: 'pending' | 'failed' | 'completed') {\n return BazarrApi.patchSystemJobs({ query: { queueName } });\n }\n\n // Language APIs\n\n /**\n * List available languages\n */\n async getLanguages(history?: string) {\n return BazarrApi.getLanguages(history ? { query: { history } } : {});\n }\n\n /**\n * List language profiles\n */\n async getLanguageProfiles() {\n return BazarrApi.getLanguagesProfiles();\n }\n\n // Series APIs\n\n /**\n * List series metadata\n */\n async getSeries(seriesIds?: number[], start?: number, length?: number) {\n const query: Record<string, any> = {};\n if (seriesIds) query['seriesid[]'] = seriesIds;\n if (start !== undefined) query.start = start;\n if (length !== undefined) query.length = length;\n\n return BazarrApi.getSeries(Object.keys(query).length > 0 ? { query } : {});\n }\n\n /**\n * Update series language profile\n */\n async updateSeriesLanguageProfile(seriesId?: number[], profileId?: string[]) {\n const query: Record<string, any> = {};\n if (seriesId) query.seriesid = seriesId;\n if (profileId) query.profileid = profileId;\n\n return BazarrApi.postSeries(Object.keys(query).length > 0 ? { query } : {});\n }\n\n /**\n * Run actions on specific series (scan-disk, search-missing, search-wanted, sync)\n */\n async runSeriesAction(seriesId?: number, action?: string) {\n const query: Record<string, any> = {};\n if (seriesId !== undefined) query.seriesid = seriesId;\n if (action) query.action = action;\n\n return BazarrApi.patchSeries(Object.keys(query).length > 0 ? { query } : {});\n }\n\n // Episodes APIs\n\n /**\n * List episodes metadata\n */\n async getEpisodes(seriesIds?: number[], episodeIds?: number[]) {\n const query: Record<string, any> = {};\n if (seriesIds) query['seriesid[]'] = seriesIds;\n if (episodeIds) query['episodeid[]'] = episodeIds;\n\n return BazarrApi.getEpisodes(Object.keys(query).length > 0 ? { query } : {});\n }\n\n /**\n * Get episodes with wanted subtitles\n */\n async getEpisodesWanted(start?: number, length?: number, episodeIds?: number[]) {\n const query: Record<string, any> = {};\n if (start !== undefined) query.start = start;\n if (length !== undefined) query.length = length;\n if (episodeIds) query['episodeid[]'] = episodeIds;\n\n return BazarrApi.getEpisodesWanted(Object.keys(query).length > 0 ? { query } : {});\n }\n\n /**\n * Get episode history events\n */\n async getEpisodesHistory(start?: number, length?: number, episodeId?: number) {\n const query: Record<string, any> = {};\n if (start !== undefined) query.start = start;\n if (length !== undefined) query.length = length;\n if (episodeId !== undefined) query.episodeid = episodeId;\n\n return BazarrApi.getEpisodesHistory(Object.keys(query).length > 0 ? { query } : {});\n }\n\n /**\n * Download episode subtitles\n */\n async downloadEpisodeSubtitles(\n seriesId: number,\n episodeId: number,\n language: string,\n forced: string,\n hi: string\n ) {\n return BazarrApi.patchEpisodesSubtitles({\n query: { seriesid: seriesId, episodeid: episodeId, language, forced, hi },\n });\n }\n\n /**\n * Upload episode subtitles\n */\n async uploadEpisodeSubtitles(\n seriesId: number,\n episodeId: number,\n language: string,\n forced: string,\n hi: string,\n file: Blob | File\n ) {\n return BazarrApi.postEpisodesSubtitles({\n body: { file },\n query: { seriesid: seriesId, episodeid: episodeId, language, forced, hi },\n });\n }\n\n /**\n * Delete episode subtitles\n */\n async deleteEpisodeSubtitles(\n seriesId: number,\n episodeId: number,\n language: string,\n forced: string,\n hi: string,\n path: string\n ) {\n return BazarrApi.deleteEpisodesSubtitles({\n query: { seriesid: seriesId, episodeid: episodeId, language, forced, hi, path },\n });\n }\n\n // Episodes Blacklist APIs\n\n /**\n * List blacklisted episode subtitles\n */\n async getEpisodesBlacklist(start?: number, length?: number) {\n const query: Record<string, any> = {};\n if (start !== undefined) query.start = start;\n if (length !== undefined) query.length = length;\n\n return BazarrApi.getEpisodesBlacklist(Object.keys(query).length > 0 ? { query } : {});\n }\n\n /**\n * Add episode subtitles to blacklist\n */\n async addEpisodeToBlacklist(\n seriesId: number,\n episodeId: number,\n provider: string,\n subsId: string,\n language: string,\n subtitlesPath: string\n ) {\n return BazarrApi.postEpisodesBlacklist({\n query: {\n seriesid: seriesId,\n episodeid: episodeId,\n provider,\n subs_id: subsId,\n language,\n subtitles_path: subtitlesPath,\n },\n });\n }\n\n /**\n * Remove episode subtitles from blacklist\n */\n async removeEpisodeFromBlacklist(all?: string, provider?: string, subsId?: string) {\n const query: Record<string, any> = {};\n if (all) query.all = all;\n if (provider) query.provider = provider;\n if (subsId) query.subs_id = subsId;\n\n return BazarrApi.deleteEpisodesBlacklist(Object.keys(query).length > 0 ? { query } : {});\n }\n\n // Movies APIs\n\n /**\n * List movies metadata\n */\n async getMovies(radarrIds?: number[], start?: number, length?: number) {\n const query: Record<string, any> = {};\n if (radarrIds) query['radarrid[]'] = radarrIds;\n if (start !== undefined) query.start = start;\n if (length !== undefined) query.length = length;\n\n return BazarrApi.getMovies(Object.keys(query).length > 0 ? { query } : {});\n }\n\n /**\n * Update movies language profile\n */\n async updateMoviesLanguageProfile(radarrId?: number[], profileId?: string[]) {\n const query: Record<string, any> = {};\n if (radarrId) query.radarrid = radarrId;\n if (profileId) query.profileid = profileId;\n\n return BazarrApi.postMovies(Object.keys(query).length > 0 ? { query } : {});\n }\n\n /**\n * Run actions on specific movies (scan-disk, search-missing, search-wanted, sync)\n */\n async runMovieAction(radarrId?: number, action?: string) {\n const query: Record<string, any> = {};\n if (radarrId !== undefined) query.radarrid = radarrId;\n if (action) query.action = action;\n\n return BazarrApi.patchMovies(Object.keys(query).length > 0 ? { query } : {});\n }\n\n /**\n * Get movies with wanted subtitles\n */\n async getMoviesWanted(start?: number, length?: number, radarrIds?: number[]) {\n const query: Record<string, any> = {};\n if (start !== undefined) query.start = start;\n if (length !== undefined) query.length = length;\n if (radarrIds) query['radarrid[]'] = radarrIds;\n\n return BazarrApi.getMoviesWanted(Object.keys(query).length > 0 ? { query } : {});\n }\n\n /**\n * Get movie history events\n */\n async getMoviesHistory(start?: number, length?: number, radarrId?: number) {\n const query: Record<string, any> = {};\n if (start !== undefined) query.start = start;\n if (length !== undefined) query.length = length;\n if (radarrId !== undefined) query.radarrid = radarrId;\n\n return BazarrApi.getMoviesHistory(Object.keys(query).length > 0 ? { query } : {});\n }\n\n /**\n * Download movie subtitles\n */\n async downloadMovieSubtitles(radarrId: number, language: string, forced: string, hi: string) {\n return BazarrApi.patchMoviesSubtitles({\n query: { radarrid: radarrId, language, forced, hi },\n });\n }\n\n /**\n * Upload movie subtitles\n */\n async uploadMovieSubtitles(\n radarrId: number,\n language: string,\n forced: string,\n hi: string,\n file: Blob | File\n ) {\n return BazarrApi.postMoviesSubtitles({\n body: { file },\n query: { radarrid: radarrId, language, forced, hi },\n });\n }\n\n /**\n * Delete movie subtitles\n */\n async deleteMovieSubtitles(\n radarrId: number,\n language: string,\n forced: string,\n hi: string,\n path: string\n ) {\n return BazarrApi.deleteMoviesSubtitles({\n query: { radarrid: radarrId, language, forced, hi, path },\n });\n }\n\n // Movies Blacklist APIs\n\n /**\n * List blacklisted movie subtitles\n */\n async getMoviesBlacklist(start?: number, length?: number) {\n const query: Record<string, any> = {};\n if (start !== undefined) query.start = start;\n if (length !== undefined) query.length = length;\n\n return BazarrApi.getMoviesBlacklist(Object.keys(query).length > 0 ? { query } : {});\n }\n\n /**\n * Add movie subtitles to blacklist\n */\n async addMovieToBlacklist(\n radarrId: number,\n provider: string,\n subsId: string,\n language: string,\n subtitlesPath: string\n ) {\n return BazarrApi.postMoviesBlacklist({\n query: {\n radarrid: radarrId,\n provider,\n subs_id: subsId,\n language,\n subtitles_path: subtitlesPath,\n },\n });\n }\n\n /**\n * Remove movie subtitles from blacklist\n */\n async removeMovieFromBlacklist(all?: string, provider?: string, subsId?: string) {\n const query: Record<string, any> = {};\n if (all) query.all = all;\n if (provider) query.provider = provider;\n if (subsId) query.subs_id = subsId;\n\n return BazarrApi.deleteMoviesBlacklist(Object.keys(query).length > 0 ? { query } : {});\n }\n\n // Provider APIs\n\n /**\n * Get subtitle providers status\n */\n async getProviders() {\n return BazarrApi.getProviders();\n }\n\n /**\n * Reset subtitle providers\n */\n async resetProviders() {\n return BazarrApi.postProviders({ query: { action: 'reset' } });\n }\n\n /**\n * Search for episode subtitles from providers\n */\n async searchEpisodeSubtitles(episodeId: number) {\n return BazarrApi.getProviderEpisodes({ query: { episodeid: episodeId } });\n }\n\n /**\n * Download episode subtitles from provider\n */\n async downloadProviderEpisodeSubtitles(\n seriesId: number,\n episodeId: number,\n hi: string,\n forced: string,\n originalFormat: string,\n provider: string,\n subtitle: string\n ) {\n return BazarrApi.postProviderEpisodes({\n query: {\n seriesid: seriesId,\n episodeid: episodeId,\n hi,\n forced,\n original_format: originalFormat,\n provider,\n subtitle,\n },\n });\n }\n\n /**\n * Search for movie subtitles from providers\n */\n async searchMovieSubtitles(radarrId: number) {\n return BazarrApi.getProviderMovies({ query: { radarrid: radarrId } });\n }\n\n /**\n * Download movie subtitles from provider\n */\n async downloadProviderMovieSubtitles(\n radarrId: number,\n hi: string,\n forced: string,\n originalFormat: string,\n provider: string,\n subtitle: string\n ) {\n return BazarrApi.postProviderMovies({\n query: {\n radarrid: radarrId,\n hi,\n forced,\n original_format: originalFormat,\n provider,\n subtitle,\n },\n });\n }\n\n // Subtitle APIs\n\n /**\n * Get subtitles tracks for a media file\n */\n async getSubtitles(data: Parameters<typeof BazarrApi.getSubtitles>[0]) {\n return BazarrApi.getSubtitles(data);\n }\n\n /**\n * Apply mods/tools on external subtitles\n */\n async applySubtitleMods(data: Parameters<typeof BazarrApi.patchSubtitles>[0]) {\n return BazarrApi.patchSubtitles(data);\n }\n\n /**\n * Get subtitle name info via guessit\n */\n async getSubtitleNameInfo(data: Parameters<typeof BazarrApi.getSubtitleNameInfo>[0]) {\n return BazarrApi.getSubtitleNameInfo(data);\n }\n\n // History APIs\n\n /**\n * Get history statistics\n */\n async getHistoryStats() {\n return BazarrApi.getHistoryStats();\n }\n\n // Badges APIs\n\n /**\n * Get UI badge counts\n */\n async getBadges() {\n return BazarrApi.getBadges();\n }\n\n // Search APIs\n\n /**\n * Search across the system\n */\n async search(data: Parameters<typeof BazarrApi.getSearches>[0]) {\n return BazarrApi.getSearches(data);\n }\n\n // Filesystem APIs\n\n /**\n * Browse Bazarr file system\n */\n async browseBazarrFs(path?: string) {\n return BazarrApi.getBrowseBazarrFs(path ? { query: { path } } : {});\n }\n\n /**\n * Browse Radarr file system\n */\n async browseRadarrFs(path?: string) {\n return BazarrApi.getBrowseRadarrFs(path ? { query: { path } } : {});\n }\n\n /**\n * Browse Sonarr file system\n */\n async browseSonarrFs(path?: string) {\n return BazarrApi.getBrowseSonarrFs(path ? { query: { path } } : {});\n }\n\n // Webhook APIs\n\n /**\n * Test external webhook connection\n */\n async testWebhook() {\n return BazarrApi.postSystemWebhookTest();\n }\n\n /**\n * Trigger Plex webhook\n */\n async triggerPlexWebhook(payload: string) {\n return BazarrApi.postWebHooksPlex({ query: { payload } });\n }\n\n /**\n * Trigger Radarr webhook\n */\n async triggerRadarrWebhook(data: Parameters<typeof BazarrApi.postWebHooksRadarr>[0]) {\n return BazarrApi.postWebHooksRadarr(data);\n }\n\n /**\n * Trigger Sonarr webhook\n */\n async triggerSonarrWebhook(data: Parameters<typeof BazarrApi.postWebHooksSonarr>[0]) {\n return BazarrApi.postWebHooksSonarr(data);\n }\n\n // Update configuration\n updateConfig(newConfig: Partial<ServarrClientConfig>) {\n const updatedConfig = { ...this.clientConfig.config, ...newConfig };\n this.clientConfig = createServarrClient(updatedConfig);\n bazarrClient.setConfig({\n baseUrl: getBazarrApiBaseUrl(this.clientConfig.getBaseUrl()),\n headers: getBazarrHeaders(this.clientConfig),\n auth: this.clientConfig.config.apiKey,\n fetch: this.clientConfig.getFetch(),\n });\n\n return this.clientConfig.config;\n }\n}\n\n// Re-export types for external consumption\nexport * from './bazarr-types.js';\n"
18
+ ],
19
+ "mappings": "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",
20
+ "debugId": "2BD161259ECE024964756E2164756E21",
21
+ "names": []
22
+ }