@skailar-ai/sdk 0.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/streaming.ts","../src/resources/chat.ts","../src/resources/models.ts","../src/resources/images.ts","../src/internal/binary.ts","../src/resources/audio.ts","../src/resources/uploads.ts","../src/client.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * The typed error hierarchy thrown by the Skailar SDK.\n *\n * Every failure surfaces as a subclass of {@link SkailarError}, so a single\n * `catch (err) { if (err instanceof SkailarError) ... }` covers the whole SDK.\n * Transport/network failures become {@link SkailarConnectionError}; any non-2xx\n * HTTP response becomes the most specific {@link SkailarAPIError} subclass for\n * its status code.\n *\n * @packageDocumentation\n */\n\n/**\n * Normalized shape extracted from a Skailar error response body.\n *\n * The gateway has been observed to return a flat body\n * (`{ \"error\": \"invalid_api_key\", \"message\": \"...\" }`) and, inside streams, a\n * nested body (`{ \"error\": { \"type\": \"...\", \"message\": \"...\" } }`).\n * {@link parseErrorBody} collapses both into this structure.\n */\nexport interface ParsedErrorBody {\n /** Machine-readable error code, e.g. `\"invalid_api_key\"`. */\n code: string | undefined;\n /** Human-readable error message. */\n message: string | undefined;\n}\n\n/**\n * Extract a `{ code, message }` pair from an arbitrary parsed error body.\n *\n * Tolerant of three layouts: flat (`{ error: \"code\", message: \"msg\" }`), nested\n * object (`{ error: { type|code, message } }`), and OpenAI-style\n * (`{ error: { code, message } }`). Unknown shapes yield two `undefined` values\n * rather than throwing.\n *\n * @param body - The already-JSON-parsed response body (or `undefined`).\n * @returns The normalized code and message, each possibly `undefined`.\n */\nexport function parseErrorBody(body: unknown): ParsedErrorBody {\n if (typeof body !== \"object\" || body === null) {\n return { code: undefined, message: undefined };\n }\n const root = body as Record<string, unknown>;\n const err = root[\"error\"];\n\n if (typeof err === \"string\") {\n const message = typeof root[\"message\"] === \"string\" ? (root[\"message\"] as string) : err;\n return { code: err, message };\n }\n\n if (typeof err === \"object\" && err !== null) {\n const nested = err as Record<string, unknown>;\n const code =\n typeof nested[\"type\"] === \"string\"\n ? (nested[\"type\"] as string)\n : typeof nested[\"code\"] === \"string\"\n ? (nested[\"code\"] as string)\n : undefined;\n const message =\n typeof nested[\"message\"] === \"string\" ? (nested[\"message\"] as string) : undefined;\n return { code, message };\n }\n\n const topMessage = typeof root[\"message\"] === \"string\" ? (root[\"message\"] as string) : undefined;\n return { code: undefined, message: topMessage };\n}\n\n/** Fields shared by the constructors of every concrete SDK error. */\ninterface SkailarErrorOptions {\n /** Human-readable message; falls back to a per-class default. */\n message?: string | undefined;\n /** Machine-readable error code from the response body, if any. */\n code?: string | undefined;\n /** Value of the response `x-request-id` header, if present. */\n requestId?: string | undefined;\n /** The raw response body (parsed JSON or raw text) for diagnostics. */\n raw?: unknown;\n /** Underlying cause, e.g. the original network error. */\n cause?: unknown;\n}\n\n/**\n * Abstract base class for all errors thrown by the Skailar SDK.\n *\n * Not thrown directly; serves as the common `instanceof` target. The `abstract`\n * marker forbids `new SkailarError()` while still allowing subclasses to call `super`.\n */\nexport abstract class SkailarError extends Error {\n /** HTTP status code, or `null` for non-HTTP failures (e.g. network). */\n readonly status: number | null;\n /** Machine-readable error code from the body, if any. */\n readonly code: string | undefined;\n /** Correlation id from the `x-request-id` response header, if any. */\n readonly requestId: string | undefined;\n /** The raw response body captured for debugging. */\n readonly raw: unknown;\n\n /**\n * @param status - HTTP status, or `null` when not applicable.\n * @param options - Message, code, request id, raw body and cause.\n */\n protected constructor(status: number | null, options: SkailarErrorOptions = {}) {\n super(options.message ?? \"Skailar SDK error\", { cause: options.cause });\n this.name = new.target.name;\n this.status = status;\n this.code = options.code;\n this.requestId = options.requestId;\n this.raw = options.raw;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * Raised when the request never produced an HTTP response: DNS failures,\n * connection resets, TLS errors, and client-side timeouts/aborts driven by the\n * configured `timeout`. Its {@link SkailarError.status} is always `null`.\n */\nexport class SkailarConnectionError extends SkailarError {\n /** @param options - Message and originating cause. */\n constructor(options: { message?: string; cause?: unknown } = {}) {\n super(null, {\n message: options.message ?? \"Failed to connect to the Skailar API\",\n cause: options.cause,\n });\n }\n}\n\n/**\n * Base class for any non-2xx HTTP response from the gateway.\n * {@link SkailarAPIError.from} is the factory that inspects the status code and\n * returns the most specific subclass.\n */\nexport class SkailarAPIError extends SkailarError {\n /**\n * @param status - The HTTP status code of the response.\n * @param options - Message, code, request id and raw body.\n */\n constructor(status: number, options: SkailarErrorOptions = {}) {\n super(status, options);\n }\n\n /**\n * Build the most specific {@link SkailarAPIError} subclass for a status code.\n *\n * @param status - The HTTP status code returned by the gateway.\n * @param parsed - The normalized `{ code, message }` from {@link parseErrorBody}.\n * @param requestId - The `x-request-id` header value, if present.\n * @param raw - The raw response body for diagnostics.\n * @param retryAfter - Seconds from a `Retry-After` header, for 429 responses.\n * @returns A {@link SkailarAuthError}, {@link SkailarBadRequestError},\n * {@link SkailarNotFoundError}, {@link SkailarRateLimitError},\n * {@link SkailarUpstreamError}, or a plain {@link SkailarAPIError}.\n */\n static from(\n status: number,\n parsed: ParsedErrorBody,\n requestId: string | undefined,\n raw: unknown,\n retryAfter?: number | undefined,\n ): SkailarAPIError {\n const options: SkailarErrorOptions = {\n message: parsed.message,\n code: parsed.code,\n requestId,\n raw,\n };\n switch (status) {\n case 401:\n return new SkailarAuthError(options);\n case 400:\n return new SkailarBadRequestError(options);\n case 404:\n return new SkailarNotFoundError(options);\n case 429:\n return new SkailarRateLimitError({ ...options, retryAfter });\n default:\n if (status >= 500) return new SkailarUpstreamError(status, options);\n return new SkailarAPIError(status, options);\n }\n }\n}\n\n/** HTTP 401 — the API key is missing, malformed, or revoked. */\nexport class SkailarAuthError extends SkailarAPIError {\n /** @param options - Error details. */\n constructor(options: SkailarErrorOptions = {}) {\n super(401, { message: \"Invalid or missing API key\", ...options });\n }\n}\n\n/** HTTP 400 — the request was malformed or failed validation. */\nexport class SkailarBadRequestError extends SkailarAPIError {\n /** @param options - Error details. */\n constructor(options: SkailarErrorOptions = {}) {\n super(400, { message: \"Bad request\", ...options });\n }\n}\n\n/** HTTP 404 — the requested resource (e.g. a model id) does not exist. */\nexport class SkailarNotFoundError extends SkailarAPIError {\n /** @param options - Error details. */\n constructor(options: SkailarErrorOptions = {}) {\n super(404, { message: \"Resource not found\", ...options });\n }\n}\n\n/**\n * HTTP 429 — the account exceeded its rate limit.\n *\n * When the gateway provides a `Retry-After` header, its value (in seconds) is\n * exposed as {@link SkailarRateLimitError.retryAfter} and honored by the\n * client's automatic retry logic.\n */\nexport class SkailarRateLimitError extends SkailarAPIError {\n /** Seconds to wait before retrying, parsed from `Retry-After`; `undefined` if absent/unparseable. */\n readonly retryAfter: number | undefined;\n\n /** @param options - Error details plus the optional `retryAfter` seconds. */\n constructor(options: SkailarErrorOptions & { retryAfter?: number | undefined } = {}) {\n super(429, { message: \"Rate limit exceeded\", ...options });\n this.retryAfter = options.retryAfter;\n }\n}\n\n/**\n * HTTP 5xx — the upstream model provider failed or timed out. The gateway\n * propagates provider 5xx failures (502/503/504) with a structured body. These\n * are transient and are retried automatically.\n */\nexport class SkailarUpstreamError extends SkailarAPIError {\n /**\n * @param status - The specific 5xx status code.\n * @param options - Error details.\n */\n constructor(status: number, options: SkailarErrorOptions = {}) {\n super(status, { message: \"Upstream provider error\", ...options });\n }\n}\n","/**\n * A dependency-free Server-Sent Events parser and the {@link ChatCompletionStream}\n * wrapper that exposes a chat completion SSE response as an abortable async iterable.\n *\n * @packageDocumentation\n */\n\nimport { SkailarAPIError, SkailarConnectionError, parseErrorBody } from \"./errors\";\nimport type { ChatCompletionChunk } from \"./types/chat\";\n\n/**\n * Incrementally decode a byte stream into SSE `data:` payload strings, in\n * arrival order, excluding the terminal `[DONE]` sentinel.\n *\n * Implements just the slice of the SSE grammar the gateway emits: UTF-8 `data:`\n * lines separated by `\\n`, events delimited by blank lines, terminated by a\n * literal `data: [DONE]`. A partial line left in the buffer across reads is\n * preserved and completed by the next chunk. Comment lines (`:` prefix) and\n * non-`data:` fields are ignored. Yielding stops at `[DONE]`; reaching\n * end-of-stream without `[DONE]` simply ends the generator.\n *\n * On any exit — normal completion, `[DONE]`, an error, or the consumer\n * abandoning the `for await` early — the reader is cancelled before its lock is\n * released, so the underlying fetch connection is torn down instead of leaving\n * bytes streaming from the network.\n *\n * @param stream - The response body as a stream of UTF-8 encoded bytes.\n * @param signal - Optional abort signal; aborting rejects the iteration.\n * @returns An async generator yielding the raw string after each `data:` field.\n * @throws {@link SkailarConnectionError} If the underlying read is aborted or fails.\n */\nexport async function* parseSSE(\n stream: ReadableStream<Uint8Array>,\n signal?: AbortSignal,\n): AsyncGenerator<string, void, unknown> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n if (signal?.aborted) {\n throw new SkailarConnectionError({ message: \"Stream aborted\", cause: signal.reason });\n }\n\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n let newlineIndex: number;\n while ((newlineIndex = buffer.indexOf(\"\\n\")) !== -1) {\n const rawLine = buffer.slice(0, newlineIndex);\n buffer = buffer.slice(newlineIndex + 1);\n const line = rawLine.endsWith(\"\\r\") ? rawLine.slice(0, -1) : rawLine;\n\n if (line === \"\" || line.startsWith(\":\")) continue;\n if (!line.startsWith(\"data:\")) continue;\n\n const data = line.slice(5).trimStart();\n if (data === \"[DONE]\") return;\n yield data;\n }\n }\n\n const tail = buffer.trim();\n if (tail.startsWith(\"data:\")) {\n const data = tail.slice(5).trimStart();\n if (data !== \"[DONE]\" && data !== \"\") yield data;\n }\n } catch (err) {\n if (err instanceof SkailarConnectionError) throw err;\n throw new SkailarConnectionError({ message: \"Stream read failed\", cause: err });\n } finally {\n await reader.cancel().catch(() => {});\n reader.releaseLock();\n }\n}\n\n/**\n * An abortable async iterable of {@link ChatCompletionChunk} values, returned by\n * `chat.completions.create({ stream: true })`.\n *\n * Iterate it with `for await`; each iteration yields one decoded chunk. Mirrors\n * the ergonomics of `openai-node`'s stream, including the {@link ChatCompletionStream.controller}\n * for cancellation.\n *\n * @example\n * ```ts\n * const stream = await client.chat.completions.create({\n * model: \"gemini-2.5-flash-lite\",\n * messages: [{ role: \"user\", content: \"hi\" }],\n * stream: true,\n * });\n * for await (const chunk of stream) {\n * process.stdout.write(chunk.choices[0]?.delta?.content ?? \"\");\n * }\n * ```\n */\nexport class ChatCompletionStream implements AsyncIterable<ChatCompletionChunk> {\n /**\n * The {@link AbortController} governing the underlying HTTP request. Call\n * `stream.controller.abort()` to cancel an in-flight stream; the active\n * `for await` loop then terminates promptly.\n */\n readonly controller: AbortController;\n\n /** The raw SSE byte stream backing this iterator. */\n private readonly body: ReadableStream<Uint8Array>;\n\n /**\n * @param body - The response body stream of SSE bytes.\n * @param controller - The abort controller tied to the originating request.\n */\n constructor(body: ReadableStream<Uint8Array>, controller: AbortController) {\n this.body = body;\n this.controller = controller;\n }\n\n /**\n * Decode the SSE byte stream into typed chunks.\n *\n * Each `data:` payload is `JSON.parse`d. If a payload carries an `error` field\n * (the gateway's in-band failure signal), iteration throws the corresponding\n * {@link SkailarAPIError} instead of yielding. Malformed JSON payloads are\n * skipped defensively.\n *\n * @returns An async generator over {@link ChatCompletionChunk} values.\n * @throws {@link SkailarAPIError} When the stream delivers an in-band error event.\n * @throws {@link SkailarConnectionError} When the stream is aborted or read fails.\n */\n private async *decode(): AsyncGenerator<ChatCompletionChunk, void, unknown> {\n for await (const data of parseSSE(this.body, this.controller.signal)) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(data);\n } catch {\n continue;\n }\n\n if (parsed !== null && typeof parsed === \"object\" && \"error\" in parsed) {\n const { code, message } = parseErrorBody(parsed);\n throw SkailarAPIError.from(\n 500,\n { code, message: message ?? \"Streaming error\" },\n undefined,\n parsed,\n );\n }\n\n yield parsed as ChatCompletionChunk;\n }\n }\n\n /**\n * Iterate the decoded chunks. Abandoning the iteration early (a `break` or\n * `return` inside a `for await`) invokes the returned iterator's `return()`,\n * which aborts {@link ChatCompletionStream.controller} so the underlying fetch\n * request is cancelled — not merely the body reader — and then runs the\n * generator's own cleanup ({@link parseSSE}'s `finally`: reader cancel +\n * lock release). Normal completion and thrown errors are unaffected.\n *\n * @returns An async iterator over {@link ChatCompletionChunk} values.\n */\n [Symbol.asyncIterator](): AsyncIterator<ChatCompletionChunk> {\n const inner = this.decode();\n const controller = this.controller;\n return {\n next: () => inner.next(),\n async return(value?: unknown): Promise<IteratorResult<ChatCompletionChunk>> {\n controller.abort();\n if (inner.return) await inner.return(value as undefined);\n return { done: true, value: undefined };\n },\n throw: (err) => (inner.throw ? inner.throw(err) : Promise.reject(err)),\n };\n }\n}\n","/**\n * The chat resource, exposing `client.chat.completions.create(...)` with the\n * same call shape as `openai`'s chat completions.\n *\n * @packageDocumentation\n */\n\nimport type { RequestOptions, Skailar } from \"../client\";\nimport type { ChatCompletionStream } from \"../streaming\";\nimport type {\n ChatCompletion,\n ChatCompletionRequest,\n} from \"../types/chat\";\n\n/** A chat completion request that explicitly opts into streaming. */\ninterface StreamingRequest extends ChatCompletionRequest {\n stream: true;\n}\n\n/** A chat completion request that does not stream. */\ninterface NonStreamingRequest extends ChatCompletionRequest {\n stream?: false;\n}\n\n/**\n * The `completions` sub-namespace of the chat resource. Holds\n * {@link ChatCompletions.create}, whose return type is narrowed by the `stream`\n * field of the request via overloads.\n */\nexport class ChatCompletions {\n /** The owning client used to dispatch requests. */\n private readonly client: Skailar;\n\n /** @param client - The owning {@link Skailar} client. */\n constructor(client: Skailar) {\n this.client = client;\n }\n\n /**\n * Create a buffered (non-streamed) chat completion.\n *\n * @param body - The request with `stream` omitted or `false`.\n * @param options - Optional per-call signal, timeout and headers.\n * @returns The fully-formed {@link ChatCompletion}.\n */\n create(body: NonStreamingRequest, options?: RequestOptions): Promise<ChatCompletion>;\n /**\n * Create a streamed chat completion.\n *\n * @param body - The request with `stream: true`.\n * @param options - Optional per-call signal, timeout and headers. The stream\n * is also cancellable via its `.controller`.\n * @returns A {@link ChatCompletionStream} async-iterable of chunks, exposing\n * `.controller` for cancellation.\n */\n create(body: StreamingRequest, options?: RequestOptions): Promise<ChatCompletionStream>;\n /**\n * Create a chat completion whose mode is chosen at runtime. Use this form when\n * `stream` is a non-literal `boolean` (e.g. `stream: shouldStream`), where the\n * concrete return type cannot be known at compile time; narrow the result with\n * `instanceof ChatCompletionStream` or by checking the `stream` flag yourself.\n *\n * @param body - The request with a dynamic `stream` boolean.\n * @param options - Optional per-call signal, timeout and headers.\n * @returns Either a {@link ChatCompletion} or a {@link ChatCompletionStream}.\n */\n create(\n body: ChatCompletionRequest & { stream?: boolean },\n options?: RequestOptions,\n ): Promise<ChatCompletion | ChatCompletionStream>;\n /**\n * Implementation backing the public overloads.\n *\n * @param body - The chat completion request.\n * @param options - Optional per-call signal, timeout and headers.\n * @returns Either a {@link ChatCompletion} or a {@link ChatCompletionStream}\n * depending on `body.stream`.\n * @throws {@link SkailarBadRequestError} On HTTP 400 (malformed request).\n * @throws {@link SkailarAuthError} On HTTP 401 (bad key).\n * @throws {@link SkailarRateLimitError} On HTTP 429 (after exhausting retries).\n * @throws {@link SkailarUpstreamError} On HTTP 5xx (after exhausting retries).\n * @throws {@link SkailarConnectionError} On network failure, timeout or abort.\n */\n create(\n body: ChatCompletionRequest,\n options?: RequestOptions,\n ): Promise<ChatCompletion> | Promise<ChatCompletionStream> {\n if (body.stream === true) {\n return this.client.request({\n method: \"POST\",\n path: \"/v1/chat/completions\",\n body,\n expect: \"stream\",\n signal: options?.signal,\n timeout: options?.timeout,\n headers: options?.headers,\n });\n }\n return this.client.request<ChatCompletion>({\n method: \"POST\",\n path: \"/v1/chat/completions\",\n body,\n expect: \"json\",\n signal: options?.signal,\n timeout: options?.timeout,\n headers: options?.headers,\n });\n }\n}\n\n/** The chat resource root, mirroring `openai`'s `client.chat`. */\nexport class ChatResource {\n /** The chat completions namespace. */\n readonly completions: ChatCompletions;\n\n /** @param client - The owning {@link Skailar} client. */\n constructor(client: Skailar) {\n this.completions = new ChatCompletions(client);\n }\n}\n","/**\n * The models resource, exposing `client.models.list()` and\n * `client.models.retrieve(id)`.\n *\n * @packageDocumentation\n */\n\nimport type { RequestOptions, Skailar } from \"../client\";\nimport type { Model, ModelList, ModelSummary } from \"../types/models\";\n\n/** Model discovery operations. */\nexport class ModelsResource {\n /** The owning client used to dispatch requests. */\n private readonly client: Skailar;\n\n /** @param client - The owning {@link Skailar} client. */\n constructor(client: Skailar) {\n this.client = client;\n }\n\n /**\n * List every model the gateway can route to. Unwraps the\n * `{ object: \"list\", data }` envelope and returns just `data` as a plain array.\n *\n * @param options - Optional per-call signal, timeout and headers.\n * @returns A promise resolving to the array of {@link ModelSummary} cards.\n */\n async list(options?: RequestOptions): Promise<ModelSummary[]> {\n const res = await this.client.request<ModelList>({\n method: \"GET\",\n path: \"/v1/models\",\n expect: \"json\",\n signal: options?.signal,\n timeout: options?.timeout,\n headers: options?.headers,\n });\n return res.data;\n }\n\n /**\n * Retrieve the full detail card for a single model.\n *\n * @param id - The model identifier; may contain slashes (e.g.\n * `\"google/gemini-2.5-pro\"`), which are preserved in the path.\n * @param options - Optional per-call signal, timeout and headers.\n * @returns A promise resolving to the {@link Model} detail.\n * @throws {@link SkailarNotFoundError} If no model matches the id.\n */\n retrieve(id: string, options?: RequestOptions): Promise<Model> {\n const encoded = id.split(\"/\").map(encodeURIComponent).join(\"/\");\n return this.client.request<Model>({\n method: \"GET\",\n path: `/v1/models/${encoded}`,\n expect: \"json\",\n signal: options?.signal,\n timeout: options?.timeout,\n headers: options?.headers,\n });\n }\n}\n","/**\n * The images resource, exposing `client.images.generate(...)`.\n *\n * @packageDocumentation\n */\n\nimport type { RequestOptions, Skailar } from \"../client\";\nimport type {\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"../types/images\";\n\n/** Image generation operations. */\nexport class ImagesResource {\n /** The owning client used to dispatch requests. */\n private readonly client: Skailar;\n\n /** @param client - The owning {@link Skailar} client. */\n constructor(client: Skailar) {\n this.client = client;\n }\n\n /**\n * Generate one or more images from a text prompt. Named `generate` to match\n * `openai`'s `images.generate(...)`.\n *\n * @param body - The generation request; see {@link ImageGenerationRequest}.\n * @param options - Optional per-call signal, timeout and headers.\n * @returns A promise resolving to the {@link ImageGenerationResponse}, whose\n * `data` entries carry either a `url` or inline `b64_json`.\n * @throws {@link SkailarBadRequestError} On HTTP 400.\n * @throws {@link SkailarRateLimitError} On HTTP 429 (after exhausting retries).\n */\n generate(\n body: ImageGenerationRequest,\n options?: RequestOptions,\n ): Promise<ImageGenerationResponse> {\n return this.client.request<ImageGenerationResponse>({\n method: \"POST\",\n path: \"/v1/images/generations\",\n body,\n expect: \"json\",\n signal: options?.signal,\n timeout: options?.timeout,\n headers: options?.headers,\n });\n }\n}\n","/**\n * Internal helpers for normalizing caller-supplied binary payloads into the\n * base64 strings the Skailar gateway expects. Runtime-agnostic across Node 18+,\n * Bun, Deno and browsers.\n *\n * @packageDocumentation\n */\n\nimport type { BinaryInput } from \"../types/audio\";\n\n/**\n * Encode a byte array as a standard (non-URL-safe) base64 string, without any\n * `data:` prefix.\n *\n * Prefers Node's `Buffer` when present (fast path on Node/Bun) and otherwise\n * falls back to `btoa` over a binary string, chunked to avoid call-stack limits\n * on large inputs in browser/Deno environments.\n *\n * @param bytes - The raw bytes to encode.\n * @returns The base64 representation.\n */\nfunction bytesToBase64(bytes: Uint8Array): string {\n const maybeBuffer = (globalThis as { Buffer?: typeof import(\"node:buffer\").Buffer }).Buffer;\n if (maybeBuffer) {\n return maybeBuffer.from(bytes).toString(\"base64\");\n }\n\n let binary = \"\";\n const chunkSize = 0x8000;\n for (let i = 0; i < bytes.length; i += chunkSize) {\n const chunk = bytes.subarray(i, i + chunkSize);\n binary += String.fromCharCode(...chunk);\n }\n return btoa(binary);\n}\n\n/**\n * Normalize any {@link BinaryInput} into a base64 string (no `data:` prefix).\n *\n * A `string` input is assumed to be pre-encoded base64 and returned unchanged. A\n * {@link Blob} is read via its async `arrayBuffer()`; `ArrayBuffer` and\n * `Uint8Array` are encoded directly. This lets the public API accept whichever\n * representation the caller already holds.\n *\n * @remarks\n * A `string` is taken literally as already-encoded base64 and is **not**\n * validated. Passing raw text (e.g. `\"hello world\"`) is silently forwarded to\n * the gateway, which will decode it as base64 and produce corrupt bytes or a\n * `400`. Pass a {@link Uint8Array} / {@link ArrayBuffer} / {@link Blob} when you\n * hold raw bytes; reserve the `string` form for values you have already encoded.\n *\n * @param input - The payload as bytes, a buffer, a {@link Blob}, or a base64 string.\n * @returns A promise resolving to the base64 string.\n */\nexport async function toBase64(input: BinaryInput): Promise<string> {\n if (typeof input === \"string\") return input;\n if (input instanceof Uint8Array) return bytesToBase64(input);\n if (input instanceof ArrayBuffer) return bytesToBase64(new Uint8Array(input));\n if (typeof Blob !== \"undefined\" && input instanceof Blob) {\n const buffer = await input.arrayBuffer();\n return bytesToBase64(new Uint8Array(buffer));\n }\n throw new TypeError(\"Unsupported binary input; expected Uint8Array, ArrayBuffer, Blob or base64 string\");\n}\n","/**\n * The audio resource, exposing `client.audio.transcriptions.create(...)` and\n * `client.audio.speech.create(...)`.\n *\n * @packageDocumentation\n */\n\nimport type { RequestOptions, Skailar } from \"../client\";\nimport { SkailarConnectionError } from \"../errors\";\nimport { toBase64 } from \"../internal/binary\";\nimport type {\n SpeechCreateParams,\n TranscriptionCreateParams,\n TranscriptionResponse,\n} from \"../types/audio\";\n\n/** Audio transcription operations (speech-to-text, Whisper-backed). */\nexport class AudioTranscriptions {\n /** The owning client used to dispatch requests. */\n private readonly client: Skailar;\n\n /** @param client - The owning {@link Skailar} client. */\n constructor(client: Skailar) {\n this.client = client;\n }\n\n /**\n * Transcribe an audio clip to text. The supplied bytes are base64-encoded\n * client-side into the gateway's `base64` field. When `mime` is omitted and\n * `file` is a {@link Blob} carrying a `type`, that type is used; otherwise the\n * gateway default (`audio/wav`) applies.\n *\n * @param params - The audio and its MIME type; see {@link TranscriptionCreateParams}.\n * `file` may be a {@link Uint8Array}, {@link ArrayBuffer}, {@link Blob} or a\n * pre-encoded base64 string.\n * @param options - Optional per-call signal, timeout and headers.\n * @returns A promise resolving to the {@link TranscriptionResponse}.\n */\n async create(\n params: TranscriptionCreateParams,\n options?: RequestOptions,\n ): Promise<TranscriptionResponse> {\n const base64 = await toBase64(params.file);\n const mime =\n params.mime ??\n (typeof Blob !== \"undefined\" && params.file instanceof Blob && params.file.type\n ? (params.file.type as TranscriptionCreateParams[\"mime\"])\n : undefined);\n return this.client.request<TranscriptionResponse>({\n method: \"POST\",\n path: \"/v1/audio/transcriptions\",\n body: { base64, mime },\n expect: \"json\",\n signal: options?.signal,\n timeout: options?.timeout,\n headers: options?.headers,\n });\n }\n}\n\n/** Speech synthesis operations (text-to-speech). */\nexport class AudioSpeech {\n /** The owning client used to dispatch requests. */\n private readonly client: Skailar;\n\n /** @param client - The owning {@link Skailar} client. */\n constructor(client: Skailar) {\n this.client = client;\n }\n\n /**\n * Synthesize speech and return the raw MP3 audio stream. Unlike the JSON\n * endpoints, this returns the response body stream directly so large audio\n * payloads need not be buffered in memory.\n *\n * Pass `options.signal` to cancel the request: aborting it before the response\n * arrives rejects this call, and aborting it while the MP3 is still downloading\n * tears down the underlying connection so the body stops mid-stream.\n *\n * @param params - The text and voice; see {@link SpeechCreateParams}.\n * @param options - Optional per-call signal, timeout and headers.\n * @returns A promise resolving to a `ReadableStream<Uint8Array>` of\n * `audio/mpeg` bytes, suitable for piping to a file, an HTTP response, or an\n * audio element.\n * @throws {@link SkailarConnectionError} If the response unexpectedly lacks a body.\n * @throws {@link SkailarBadRequestError} On HTTP 400 (e.g. text exceeding 4000 chars).\n */\n async create(\n params: SpeechCreateParams,\n options?: RequestOptions,\n ): Promise<ReadableStream<Uint8Array>> {\n const response = await this.client.request({\n method: \"POST\",\n path: \"/v1/audio/speech\",\n body: { input: params.input, voice: params.voice },\n headers: { Accept: \"audio/mpeg\", ...options?.headers },\n expect: \"response\",\n signal: options?.signal,\n timeout: options?.timeout,\n });\n if (!response.body) {\n throw new SkailarConnectionError({ message: \"Speech response had no audio body\" });\n }\n return response.body;\n }\n}\n\n/** The audio resource root, grouping transcription and speech. */\nexport class AudioResource {\n /** Speech-to-text operations. */\n readonly transcriptions: AudioTranscriptions;\n /** Text-to-speech operations. */\n readonly speech: AudioSpeech;\n\n /** @param client - The owning {@link Skailar} client. */\n constructor(client: Skailar) {\n this.transcriptions = new AudioTranscriptions(client);\n this.speech = new AudioSpeech(client);\n }\n}\n","/**\n * The uploads resource, exposing `client.uploads.images.create(...)` and\n * `client.uploads.files.create(...)` for storing assets in Skailar storage and\n * receiving an embeddable URL.\n *\n * @packageDocumentation\n */\n\nimport type { Skailar } from \"../client\";\nimport { toBase64 } from \"../internal/binary\";\nimport type {\n FileUploadCreateParams,\n ImageUploadCreateParams,\n UploadResponse,\n} from \"../types/uploads\";\n\n/** Image upload operations (`POST /v1/uploads/images`). */\nexport class ImageUploads {\n /** The owning client used to dispatch requests. */\n private readonly client: Skailar;\n\n /** @param client - The owning {@link Skailar} client. */\n constructor(client: Skailar) {\n this.client = client;\n }\n\n /**\n * Upload an image and obtain a URL usable as vision input. `data` may be a\n * {@link Uint8Array}, {@link ArrayBuffer}, {@link Blob} or a pre-encoded base64\n * string; it is base64-encoded client-side into the gateway's `base64` field.\n *\n * @param params - The image bytes and content type; see {@link ImageUploadCreateParams}.\n * @returns A promise resolving to the {@link UploadResponse} whose `url` can be\n * embedded in a chat completion as an `image_url` content part.\n */\n async create(params: ImageUploadCreateParams): Promise<UploadResponse> {\n const base64 = await toBase64(params.data);\n return this.client.request<UploadResponse>({\n method: \"POST\",\n path: \"/v1/uploads/images\",\n body: { base64, content_type: params.contentType },\n expect: \"json\",\n });\n }\n}\n\n/** File upload operations (`POST /v1/uploads/files`). */\nexport class FileUploads {\n /** The owning client used to dispatch requests. */\n private readonly client: Skailar;\n\n /** @param client - The owning {@link Skailar} client. */\n constructor(client: Skailar) {\n this.client = client;\n }\n\n /**\n * Upload a document (`application/pdf` or `text/plain`). `data` accepts the\n * same forms as image upload and is base64-encoded client-side.\n *\n * @param params - The document bytes and content type; see {@link FileUploadCreateParams}.\n * @returns A promise resolving to the {@link UploadResponse} with the stored asset URL.\n */\n async create(params: FileUploadCreateParams): Promise<UploadResponse> {\n const base64 = await toBase64(params.data);\n return this.client.request<UploadResponse>({\n method: \"POST\",\n path: \"/v1/uploads/files\",\n body: { base64, content_type: params.contentType },\n expect: \"json\",\n });\n }\n}\n\n/** The uploads resource root, grouping image and file uploads. */\nexport class UploadsResource {\n /** Image upload operations. */\n readonly images: ImageUploads;\n /** File/document upload operations. */\n readonly files: FileUploads;\n\n /** @param client - The owning {@link Skailar} client. */\n constructor(client: Skailar) {\n this.images = new ImageUploads(client);\n this.files = new FileUploads(client);\n }\n}\n","/**\n * The {@link Skailar} client: configuration, the shared fetch dispatch pipeline\n * (timeout, retry with backoff, error mapping) and the resource namespaces hung\n * off it.\n *\n * @packageDocumentation\n */\n\nimport {\n SkailarConnectionError,\n SkailarAPIError,\n SkailarRateLimitError,\n parseErrorBody,\n} from \"./errors\";\nimport { ChatCompletionStream } from \"./streaming\";\nimport { ChatResource } from \"./resources/chat\";\nimport { ModelsResource } from \"./resources/models\";\nimport { ImagesResource } from \"./resources/images\";\nimport { AudioResource } from \"./resources/audio\";\nimport { UploadsResource } from \"./resources/uploads\";\nimport type { PingKeyResponse } from \"./types/index\";\n\n/**\n * Configuration accepted by the {@link Skailar} constructor. Every field is\n * optional; omitted fields fall back to environment variables or library\n * defaults as documented per property.\n */\nexport interface SkailarOptions {\n /**\n * Skailar API key of the form `skl_live_<43 url-safe base64 chars>`. Defaults\n * to `process.env.SKAILAR_API_KEY`; if neither is provided the constructor throws.\n *\n * @remarks\n * The format is **not** validated locally — only emptiness is checked. A\n * malformed or wrong-provider key (e.g. an OpenAI `sk-...` key passed by\n * mistake) is accepted here and rejected at the first request with a\n * {@link SkailarAuthError} (HTTP 401).\n */\n apiKey?: string;\n /**\n * Base URL of the gateway, without a trailing `/v1` (default\n * `\"https://api.skailar.com\"`). The `/v1/...` path is appended by the SDK.\n * Point this at `http://localhost:8080` for a local gateway.\n */\n baseURL?: string;\n /**\n * Per-request timeout in milliseconds (default `60000`). Applies to each\n * attempt independently; a timed-out attempt becomes a\n * {@link SkailarConnectionError} and is eligible for retry.\n */\n timeout?: number;\n /**\n * Maximum automatic retries for transient failures (default `2`). Retries\n * apply only to HTTP 429, HTTP 5xx, and connection errors; non-429 4xx\n * responses are never retried.\n */\n maxRetries?: number;\n /**\n * Custom `fetch` implementation, primarily for testing (default global\n * `fetch`). No binding is applied; pass an already-bound function if your\n * implementation requires a specific receiver.\n */\n fetch?: typeof fetch;\n /**\n * Headers merged into every request. The SDK's own `Authorization`,\n * `Content-Type` and `Accept`, plus explicit per-call headers, take precedence.\n */\n defaultHeaders?: Record<string, string>;\n}\n\n/**\n * Per-call request options accepted as the trailing argument of every resource\n * method (e.g. `chat.completions.create(body, options)`). Mirrors the\n * `openai-node` convention so the wire body stays separate from transport\n * concerns. Every field is optional and overrides the client-level default for\n * this one call.\n */\nexport interface RequestOptions {\n /**\n * Signal to cancel this call. Aborting before the response arrives rejects the\n * call with a {@link SkailarConnectionError}; for streaming/audio bodies,\n * aborting mid-transfer tears down the connection.\n */\n signal?: AbortSignal;\n /**\n * Per-call timeout in milliseconds, overriding {@link SkailarOptions.timeout}\n * for this request only.\n */\n timeout?: number;\n /** Extra headers merged into this request, overriding client defaults. */\n headers?: Record<string, string>;\n}\n\n/** Internal description of a single HTTP request to dispatch. */\ninterface InternalRequest {\n method: \"GET\" | \"POST\";\n /** Path beginning with `/v1/...`, relative to {@link SkailarOptions.baseURL}. */\n path: string;\n /** Optional JSON body; serialized with `JSON.stringify`. */\n body?: unknown;\n /** Extra headers for this request only. */\n headers?: Record<string, string>;\n /** Expected response handling: parsed JSON, raw `Response`, or SSE stream. */\n expect: \"json\" | \"response\" | \"stream\";\n /**\n * External abort signal composed with the timeout. Used for streaming, where\n * the caller-visible {@link ChatCompletionStream.controller} drives cancellation.\n */\n signal?: AbortSignal;\n /** Per-call timeout override in ms; falls back to {@link Skailar.timeout}. */\n timeout?: number;\n}\n\n/**\n * Sleep for the given duration, rejecting early if the signal aborts.\n *\n * @param ms - Milliseconds to wait.\n * @param signal - Optional signal that, when aborted, rejects the sleep.\n * @returns A promise resolving after `ms`, or rejecting on abort.\n */\nfunction delay(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new SkailarConnectionError({ message: \"Aborted\", cause: signal.reason }));\n return;\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n reject(new SkailarConnectionError({ message: \"Aborted\", cause: signal?.reason }));\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\n/**\n * Parse a `Retry-After` header value into seconds — the header's native unit\n * and the unit exposed on {@link SkailarRateLimitError.retryAfter}. Call sites\n * that need a millisecond delay multiply by 1000 themselves.\n *\n * @param header - The raw header value, a number of seconds or an HTTP date.\n * @returns The delay in seconds, or `undefined` if absent/unparseable.\n */\nfunction parseRetryAfter(header: string | null): number | undefined {\n if (!header) return undefined;\n const seconds = Number(header);\n if (Number.isFinite(seconds)) return Math.max(0, seconds);\n const date = Date.parse(header);\n if (Number.isFinite(date)) return Math.max(0, Math.ceil((date - Date.now()) / 1000));\n return undefined;\n}\n\n/**\n * Wrap a byte stream so `onDone` runs exactly once when it terminates — whether\n * it closes normally, errors, or is cancelled by the consumer. Used to detach\n * the external-abort listener for `response`/`stream` results whose body outlives\n * the {@link Skailar.request} call, so a long-lived caller `AbortSignal` does not\n * accumulate listeners across requests.\n *\n * @param source - The original response body stream.\n * @param onDone - Idempotent cleanup to run on terminal state.\n * @returns A stream that mirrors `source` and triggers `onDone` when finished.\n */\nfunction withCleanup(\n source: ReadableStream<Uint8Array>,\n onDone: () => void,\n): ReadableStream<Uint8Array> {\n let done = false;\n const finish = () => {\n if (done) return;\n done = true;\n onDone();\n };\n const reader = source.getReader();\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n const { done: streamDone, value } = await reader.read();\n if (streamDone) {\n finish();\n controller.close();\n return;\n }\n controller.enqueue(value);\n } catch (err) {\n finish();\n controller.error(err);\n }\n },\n async cancel(reason) {\n finish();\n await reader.cancel(reason);\n },\n });\n}\n\n/**\n * Read the request-correlation id from a response's headers, checking the common\n * header spellings so the id is captured regardless of casing convention.\n *\n * @param headers - The response headers.\n * @returns The first present correlation id, or `undefined`.\n */\nfunction extractRequestId(headers: Headers): string | undefined {\n return (\n headers.get(\"x-request-id\") ??\n headers.get(\"x-skailar-request-id\") ??\n headers.get(\"request-id\") ??\n undefined\n );\n}\n\n/**\n * The official Skailar API client. Construct once and reuse. Resource namespaces\n * ({@link Skailar.chat}, {@link Skailar.models}, etc.) provide the\n * OpenAI-compatible and Skailar-native operations. All network access flows\n * through {@link Skailar.request}, which centralizes authentication, timeouts,\n * retries and error mapping.\n *\n * @example\n * ```ts\n * import Skailar from \"@skailar-ai/sdk\";\n * const client = new Skailar({ apiKey: \"skl_live_...\" });\n * const res = await client.chat.completions.create({\n * model: \"claude-sonnet-4-6\",\n * messages: [{ role: \"user\", content: \"Hello!\" }],\n * });\n * console.log(res.choices[0]?.message.content);\n * ```\n */\nexport class Skailar {\n /** Resolved API key sent as the bearer token. */\n readonly apiKey: string;\n /** Resolved base URL with any trailing slash removed. */\n readonly baseURL: string;\n /** Resolved per-attempt timeout in milliseconds. */\n readonly timeout: number;\n /** Resolved maximum retry count. */\n readonly maxRetries: number;\n /** Default headers merged into every request. */\n readonly defaultHeaders: Record<string, string>;\n\n /** The `fetch` implementation used for all requests. */\n private readonly fetchImpl: typeof fetch;\n\n /** Chat completions (OpenAI-compatible). */\n readonly chat: ChatResource;\n /** Model discovery. */\n readonly models: ModelsResource;\n /** Image generation. */\n readonly images: ImagesResource;\n /** Speech synthesis and transcription. */\n readonly audio: AudioResource;\n /** Direct uploads to Skailar storage. */\n readonly uploads: UploadsResource;\n\n /**\n * @param options - Client configuration; see {@link SkailarOptions}.\n * @throws If no API key is resolvable (neither `options.apiKey` nor\n * `SKAILAR_API_KEY`). A key that is present but malformed is **not** rejected\n * here; it fails at the first request with a {@link SkailarAuthError}.\n */\n constructor(options: SkailarOptions = {}) {\n const env =\n typeof process !== \"undefined\" && process.env ? process.env[\"SKAILAR_API_KEY\"] : undefined;\n const apiKey = options.apiKey ?? env;\n if (!apiKey) {\n throw new Error(\n \"Missing Skailar API key. Pass { apiKey } or set the SKAILAR_API_KEY environment variable.\",\n );\n }\n\n this.apiKey = apiKey;\n this.baseURL = (options.baseURL ?? \"https://api.skailar.com\").replace(/\\/+$/, \"\");\n this.timeout = options.timeout ?? 60_000;\n this.maxRetries = options.maxRetries ?? 2;\n this.defaultHeaders = options.defaultHeaders ?? {};\n this.fetchImpl = options.fetch ?? globalThis.fetch;\n\n if (typeof this.fetchImpl !== \"function\") {\n throw new Error(\"No fetch implementation available; pass { fetch } explicitly.\");\n }\n\n this.chat = new ChatResource(this);\n this.models = new ModelsResource(this);\n this.images = new ImagesResource(this);\n this.audio = new AudioResource(this);\n this.uploads = new UploadsResource(this);\n }\n\n /**\n * Verify the configured API key against `GET /v1/ping-key`.\n *\n * @param options - Optional per-call signal, timeout and headers.\n * @returns The `{ status, user_id }` payload when the key is valid.\n * @throws {@link SkailarAuthError} If the key is missing, invalid or revoked.\n */\n ping(options?: RequestOptions): Promise<PingKeyResponse> {\n return this.request<PingKeyResponse>({\n method: \"GET\",\n path: \"/v1/ping-key\",\n expect: \"json\",\n signal: options?.signal,\n timeout: options?.timeout,\n headers: options?.headers,\n });\n }\n\n /**\n * Dispatch a request expecting a JSON body, with retries.\n *\n * @typeParam T - The expected shape of the parsed JSON response.\n * @param options - The request description.\n * @returns The parsed JSON response body typed as `T`.\n */\n request<T>(options: InternalRequest & { expect: \"json\" }): Promise<T>;\n /**\n * Dispatch a request expecting the raw {@link Response}, with retries.\n *\n * @param options - The request description.\n * @returns The successful `Response`, body unread (e.g. for audio streams).\n */\n request(options: InternalRequest & { expect: \"response\" }): Promise<Response>;\n /**\n * Dispatch a streaming request, returning a chat completion stream.\n *\n * @param options - The request description with `expect: \"stream\"`.\n * @returns A {@link ChatCompletionStream} over the SSE response.\n */\n request(options: InternalRequest & { expect: \"stream\" }): Promise<ChatCompletionStream>;\n /**\n * Core dispatch implementation shared by all resources.\n *\n * Applies, per attempt: header assembly with bearer auth, a timeout-derived\n * {@link AbortSignal} composed with any caller signal, execution of\n * {@link SkailarOptions.fetch}, and error mapping. Retries HTTP 429, HTTP 5xx\n * and transient connection failures up to {@link Skailar.maxRetries}, backing\n * off with full-jitter exponential delay and honoring a server `Retry-After`\n * when present. Non-429 4xx responses fail fast.\n *\n * Transport failures are reported as {@link SkailarConnectionError} with a\n * message distinguishing three causes: an external `signal` abort\n * (non-retryable), an internal timeout once {@link Skailar.timeout} elapses\n * (retryable), and a generic network failure (retryable).\n *\n * @param options - The request description.\n * @returns The parsed JSON, raw `Response`, or {@link ChatCompletionStream}\n * depending on `options.expect`.\n */\n async request(\n options: InternalRequest,\n ): Promise<unknown> {\n const url = `${this.baseURL}${options.path}`;\n const isStream = options.expect === \"stream\";\n const timeoutMs = options.timeout ?? this.timeout;\n let attempt = 0;\n\n while (true) {\n const controller = new AbortController();\n const onExternalAbort = () => controller.abort(options.signal?.reason);\n if (options.signal) {\n if (options.signal.aborted) controller.abort(options.signal.reason);\n else options.signal.addEventListener(\"abort\", onExternalAbort);\n }\n const detachExternal = () =>\n options.signal?.removeEventListener(\"abort\", onExternalAbort);\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort(new Error(\"Request timed out\"));\n }, timeoutMs);\n\n let response: Response;\n try {\n response = await this.fetchImpl(url, {\n method: options.method,\n headers: this.buildHeaders(options),\n body: options.body === undefined ? undefined : JSON.stringify(options.body),\n signal: controller.signal,\n });\n } catch (err) {\n clearTimeout(timer);\n detachExternal();\n const externallyAborted = options.signal?.aborted ?? false;\n const connErr = new SkailarConnectionError({\n message: externallyAborted\n ? \"Request aborted\"\n : timedOut\n ? `Request timed out after ${timeoutMs}ms`\n : \"Network request to the Skailar API failed\",\n cause: err,\n });\n if (externallyAborted || !this.shouldRetry(attempt)) throw connErr;\n attempt += 1;\n await delay(this.backoff(attempt), options.signal);\n continue;\n }\n\n clearTimeout(timer);\n\n if (!response.ok) {\n detachExternal();\n const apiError = await this.toApiError(response);\n const retryAfterMs =\n apiError instanceof SkailarRateLimitError && apiError.retryAfter !== undefined\n ? apiError.retryAfter * 1000\n : undefined;\n if (this.isRetryableStatus(response.status) && this.shouldRetry(attempt)) {\n attempt += 1;\n await delay(retryAfterMs ?? this.backoff(attempt), options.signal);\n continue;\n }\n throw apiError;\n }\n\n if (isStream || options.expect === \"response\") {\n if (!response.body) {\n detachExternal();\n throw new SkailarConnectionError({\n message: isStream ? \"Streaming response had no body\" : \"Response had no body\",\n });\n }\n const body = withCleanup(response.body, detachExternal);\n if (isStream) return new ChatCompletionStream(body, controller);\n return new Response(body, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n\n detachExternal();\n return (await response.json()) as unknown;\n }\n }\n\n /**\n * Assemble the outgoing header set for a request, applying defaults, auth,\n * content-type and accept in precedence order.\n *\n * @param options - The request description.\n * @returns The header record to send.\n */\n private buildHeaders(options: InternalRequest): Record<string, string> {\n const headers: Record<string, string> = {\n ...this.defaultHeaders,\n Authorization: `Bearer ${this.apiKey}`,\n Accept: options.expect === \"stream\" ? \"text/event-stream\" : \"application/json\",\n };\n if (options.body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n if (options.headers) Object.assign(headers, options.headers);\n return headers;\n }\n\n /**\n * Convert a non-2xx {@link Response} into the most specific\n * {@link SkailarAPIError} subclass. Reads the body once, attempting JSON first\n * and falling back to raw text, then defers classification to\n * {@link SkailarAPIError.from}.\n *\n * @param response - The failed HTTP response.\n * @returns The mapped error.\n */\n private async toApiError(response: Response): Promise<SkailarAPIError> {\n const text = await response.text().catch(() => \"\");\n let raw: unknown = text;\n try {\n raw = text ? JSON.parse(text) : undefined;\n } catch {\n raw = text;\n }\n const parsed = parseErrorBody(raw);\n const requestId = extractRequestId(response.headers);\n const retryAfter =\n response.status === 429 ? parseRetryAfter(response.headers.get(\"retry-after\")) : undefined;\n return SkailarAPIError.from(response.status, parsed, requestId, raw, retryAfter);\n }\n\n /**\n * Whether a status code is eligible for automatic retry (429 and any 5xx).\n *\n * @param status - The HTTP status code.\n * @returns `true` if retryable.\n */\n private isRetryableStatus(status: number): boolean {\n return status === 429 || status >= 500;\n }\n\n /**\n * Whether another attempt remains within the retry budget.\n *\n * @param attempt - The count of attempts already made (before increment).\n * @returns `true` if a retry is permitted.\n */\n private shouldRetry(attempt: number): boolean {\n return attempt < this.maxRetries;\n }\n\n /**\n * Compute a full-jitter exponential backoff delay: a random value in\n * `[0, min(cap, base * 2^attempt))`, capped at 8000ms. Jitter spreads retries\n * from many clients to avoid synchronized thundering-herd load on the gateway.\n *\n * @param attempt - The retry number, starting at 1 for the first retry.\n * @returns A randomized delay in milliseconds.\n */\n private backoff(attempt: number): number {\n const base = 500;\n const cap = 8000;\n const exponential = Math.min(cap, base * 2 ** attempt);\n return Math.random() * exponential;\n }\n}\n","/**\n * Public entry point of the Skailar TypeScript SDK.\n *\n * Exports {@link Skailar} as both the default and a named export, the full typed\n * error hierarchy, the {@link ChatCompletionStream} helper, and every public\n * request/response type.\n *\n * @example Default import\n * ```ts\n * import Skailar from \"@skailar-ai/sdk\";\n * const client = new Skailar({ apiKey: \"skl_live_...\" });\n * ```\n *\n * @example Named imports\n * ```ts\n * import { Skailar, SkailarError, SkailarRateLimitError } from \"@skailar-ai/sdk\";\n * ```\n *\n * @packageDocumentation\n */\n\nimport { Skailar } from \"./client\";\n\nexport { Skailar };\nexport type { SkailarOptions, RequestOptions } from \"./client\";\n\nexport default Skailar;\n\nexport {\n SkailarError,\n SkailarAPIError,\n SkailarAuthError,\n SkailarBadRequestError,\n SkailarNotFoundError,\n SkailarRateLimitError,\n SkailarUpstreamError,\n SkailarConnectionError,\n} from \"./errors\";\nexport type { ParsedErrorBody } from \"./errors\";\n\nexport { ChatCompletionStream, parseSSE } from \"./streaming\";\n\nexport type * from \"./types/index\";\n"]}