@zorveus/sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +236 -0
- package/dist/index.d.mts +919 -0
- package/dist/index.d.ts +919 -0
- package/dist/index.js +1205 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1158 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +34 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/http/headers.ts","../src/errors/zorveus-error.ts","../src/http/transport.ts","../src/http/sse.ts","../src/types/chat.ts","../src/resources/chat/completions.ts","../src/resources/chat/index.ts","../src/resources/embeddings.ts","../src/resources/models.ts","../src/client.ts","../src/utils/decimal.ts","../src/resources/product-users.ts","../src/resources/provider-credentials.ts","../src/service-client.ts","../src/utils/crypto.ts","../src/oauth.ts"],"sourcesContent":["/**\n * Builds HTTP headers for Zorveus API requests.\n */\nexport function buildHeaders(options: {\n apiKey?: string;\n defaultHeaders?: Record<string, string>;\n customHeaders?: Record<string, string>;\n contentType?: string;\n}): Record<string, string> {\n const headers: Record<string, string> = {\n Accept: \"application/json\"\n };\n\n // Only set User-Agent in server/Node.js environments where allowed\n if (typeof window === \"undefined\") {\n headers[\"User-Agent\"] = \"@zorveus/sdk/0.1.0\";\n }\n\n if (options.contentType) {\n headers[\"Content-Type\"] = options.contentType;\n }\n\n if (options.apiKey) {\n headers[\"Authorization\"] = `Bearer ${options.apiKey}`;\n }\n\n // Merge default client headers\n if (options.defaultHeaders) {\n Object.assign(headers, options.defaultHeaders);\n }\n\n // Merge per-request headers\n if (options.customHeaders) {\n Object.assign(headers, options.customHeaders);\n }\n\n return headers;\n}\n","/**\n * Base class for all Zorveus SDK errors.\n */\nexport class ZorveusError extends Error {\n readonly status?: number;\n readonly code?: string;\n readonly param?: string;\n readonly type?: string;\n readonly headers?: Record<string, string>;\n readonly rawBody?: unknown;\n\n constructor(\n message: string,\n options: {\n status?: number;\n code?: string;\n param?: string;\n type?: string;\n headers?: Record<string, string>;\n rawBody?: unknown;\n cause?: unknown;\n } = {}\n ) {\n super(message);\n this.name = \"ZorveusError\";\n this.status = options.status;\n this.code = options.code;\n this.param = options.param;\n this.type = options.type;\n this.headers = options.headers;\n this.rawBody = options.rawBody;\n if (options.cause) {\n this.cause = options.cause;\n }\n\n // Restore prototype chain\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * Thrown when an HTTP request fails before receiving a response (network drops, DNS failures, aborts/timeouts).\n */\nexport class APIConnectionError extends ZorveusError {\n constructor(message = \"Connection to Zorveus API failed\", options: { cause?: unknown } = {}) {\n super(message, options);\n this.name = \"APIConnectionError\";\n if (options.cause) {\n this.cause = options.cause;\n }\n }\n}\n\n/**\n * Base class for all HTTP 4xx and 5xx responses from the Zorveus API.\n */\nexport class APIStatusError extends ZorveusError {\n constructor(\n message: string,\n options: {\n status: number;\n code?: string;\n param?: string;\n type?: string;\n headers?: Record<string, string>;\n rawBody?: unknown;\n }\n ) {\n super(message, options);\n this.name = \"APIStatusError\";\n }\n}\n\n/**\n * HTTP 401: Invalid or expired API key, Service key, or OAuth access token.\n */\nexport class AuthenticationError extends APIStatusError {\n constructor(message = \"Invalid or expired Zorveus credentials\", options: Omit<ConstructorParameters<typeof APIStatusError>[1], \"status\"> & { status?: number } = {}) {\n super(message, { ...options, status: options.status ?? 401 });\n this.name = \"AuthenticationError\";\n }\n}\n\n/**\n * HTTP 403: Forbidden access, insufficient scope, or model not permitted.\n */\nexport class PermissionDeniedError extends APIStatusError {\n constructor(message = \"Permission denied for this operation or model\", options: Omit<ConstructorParameters<typeof APIStatusError>[1], \"status\"> & { status?: number } = {}) {\n super(message, { ...options, status: options.status ?? 403 });\n this.name = \"PermissionDeniedError\";\n }\n}\n\n/**\n * HTTP 404: Requested resource (app, user, credential, model) was not found.\n */\nexport class NotFoundError extends APIStatusError {\n constructor(message = \"Resource not found\", options: Omit<ConstructorParameters<typeof APIStatusError>[1], \"status\"> & { status?: number } = {}) {\n super(message, { ...options, status: options.status ?? 404 });\n this.name = \"NotFoundError\";\n }\n}\n\n/**\n * HTTP 422: Request schema validation failure.\n */\nexport class UnprocessableEntityError extends APIStatusError {\n constructor(message = \"Request validation failed\", options: Omit<ConstructorParameters<typeof APIStatusError>[1], \"status\"> & { status?: number } = {}) {\n super(message, { ...options, status: options.status ?? 422 });\n this.name = \"UnprocessableEntityError\";\n }\n}\n\n/**\n * HTTP 429: Rate limit exceeded or quota exhausted.\n */\nexport class RateLimitError extends APIStatusError {\n constructor(message = \"Rate limit exceeded. Please retry after some time.\", options: Omit<ConstructorParameters<typeof APIStatusError>[1], \"status\"> & { status?: number } = {}) {\n super(message, { ...options, status: options.status ?? 429 });\n this.name = \"RateLimitError\";\n }\n}\n\n/**\n * HTTP 500, 502, 503, 504: Zorveus internal server or upstream gateway error.\n */\nexport class InternalServerError extends APIStatusError {\n constructor(message = \"Zorveus internal server error\", options: Omit<ConstructorParameters<typeof APIStatusError>[1], \"status\"> & { status?: number } = {}) {\n super(message, { ...options, status: options.status ?? 500 });\n this.name = \"InternalServerError\";\n }\n}\n\n/**\n * Base class for Zorveus financial and business constraint errors.\n */\nexport class ZorveusBusinessError extends APIStatusError {\n constructor(\n message: string,\n options: {\n status: number;\n code?: string;\n param?: string;\n type?: string;\n headers?: Record<string, string>;\n rawBody?: unknown;\n }\n ) {\n super(message, options);\n this.name = \"ZorveusBusinessError\";\n }\n}\n\n/**\n * HTTP 402: Organization or product-user wallet balance is exhausted.\n */\nexport class InsufficientFundsError extends ZorveusBusinessError {\n constructor(message = \"Wallet balance exhausted. Top up required.\", options: Omit<ConstructorParameters<typeof ZorveusBusinessError>[1], \"status\"> & { status?: number } = {}) {\n super(message, { ...options, status: options.status ?? 402, code: options.code ?? \"insufficient_funds\" });\n this.name = \"InsufficientFundsError\";\n }\n}\n\n/**\n * HTTP 402/403: Monthly or daily spending cap reached for organization, app connection, or product user.\n */\nexport class CapExceededError extends ZorveusBusinessError {\n constructor(message = \"Spending cap limit reached\", options: Omit<ConstructorParameters<typeof ZorveusBusinessError>[1], \"status\"> & { status?: number } = {}) {\n super(message, { ...options, status: options.status ?? 402, code: options.code ?? \"cap_exceeded\" });\n this.name = \"CapExceededError\";\n }\n}\n\n/**\n * HTTP 403: Product user credit grant has expired.\n */\nexport class CreditGrantExpiredError extends ZorveusBusinessError {\n constructor(message = \"Product user credit grant has expired\", options: Omit<ConstructorParameters<typeof ZorveusBusinessError>[1], \"status\"> & { status?: number } = {}) {\n super(message, { ...options, status: options.status ?? 403, code: options.code ?? \"credit_grant_expired\" });\n this.name = \"CreditGrantExpiredError\";\n }\n}\n\n/**\n * Factory that parses HTTP status code and response payload into the most specific ZorveusError subclass.\n */\nexport function createAPIError(\n status: number,\n body: unknown,\n headers?: Record<string, string>\n): APIStatusError {\n let message = `Request failed with status ${status}`;\n let code: string | undefined;\n let param: string | undefined;\n let type: string | undefined;\n\n // Normalize string error bodies (including single-quoted Python dict strings)\n let parsedBody: unknown = body;\n if (typeof body === \"string\") {\n try {\n parsedBody = JSON.parse(body);\n } catch {\n try {\n parsedBody = JSON.parse(body.replace(/'/g, '\"'));\n } catch {\n const codeMatch = body.match(/['\"]code['\"]\\s*:\\s*['\"]([^'\"]+)['\"]/);\n const msgMatch = body.match(/['\"]message['\"]\\s*:\\s*['\"]([^'\"]+)['\"]/);\n if (msgMatch?.[1]) message = msgMatch[1];\n if (codeMatch?.[1]) code = codeMatch[1];\n }\n }\n }\n\n // Extract structured error details if available\n if (parsedBody && typeof parsedBody === \"object\") {\n const obj = parsedBody as Record<string, unknown>;\n\n if (obj.error && typeof obj.error === \"object\") {\n const err = obj.error as Record<string, unknown>;\n if (typeof err.message === \"string\") message = err.message;\n if (typeof err.code === \"string\") code = err.code;\n if (typeof err.param === \"string\") param = err.param;\n if (typeof err.type === \"string\") type = err.type;\n } else if (typeof obj.detail === \"string\") {\n message = obj.detail;\n } else if (Array.isArray(obj.detail) && obj.detail.length > 0) {\n const first = obj.detail[0];\n if (first && typeof first.msg === \"string\") {\n message = first.msg;\n }\n } else if (typeof obj.message === \"string\") {\n message = obj.message;\n }\n }\n\n const options = { status, code, param, type, headers, rawBody: body };\n\n // Check specific business error codes first\n const normalizedCode = (code || \"\").toLowerCase();\n if (\n normalizedCode.includes(\"cap_exceed\") ||\n normalizedCode.includes(\"spend_cap\") ||\n message.toLowerCase().includes(\"spending cap\")\n ) {\n return new CapExceededError(message, options);\n }\n\n if (\n normalizedCode.includes(\"insufficient_funds\") ||\n normalizedCode.includes(\"balance_exhausted\") ||\n normalizedCode.includes(\"insufficient_balance\") ||\n normalizedCode.includes(\"wallet_empty\") ||\n message.toLowerCase().includes(\"insufficient funds\") ||\n message.toLowerCase().includes(\"balance exhausted\") ||\n message.toLowerCase().includes(\"wallet is empty\")\n ) {\n return new InsufficientFundsError(message, options);\n }\n\n if (normalizedCode.includes(\"grant_expired\")) {\n return new CreditGrantExpiredError(message, options);\n }\n\n // Check by HTTP status code\n if (status === 401) {\n return new AuthenticationError(message, options);\n }\n\n if (status === 402) {\n return new InsufficientFundsError(message, options);\n }\n\n if (status === 403) {\n return new PermissionDeniedError(message, options);\n }\n\n if (status === 404) {\n return new NotFoundError(message, options);\n }\n\n if (status === 422) {\n return new UnprocessableEntityError(message, options);\n }\n\n if (status === 429) {\n return new RateLimitError(message, options);\n }\n\n if (status >= 500) {\n return new InternalServerError(message, options);\n }\n\n return new APIStatusError(message, options);\n}\n","import { buildHeaders } from \"./headers\";\nimport { APIConnectionError, createAPIError } from \"../errors/zorveus-error\";\nimport type { RequestOptions } from \"../types/client\";\n\nexport interface HttpRequestOptions extends RequestOptions {\n method?: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\" | \"HEAD\" | \"OPTIONS\";\n body?: unknown;\n query?: Record<string, unknown>;\n isGateway?: boolean;\n stream?: boolean;\n}\n\nexport class HTTPTransport {\n readonly apiKey: string;\n readonly baseURL: string;\n readonly gatewayBaseURL: string;\n readonly timeout: number;\n readonly maxRetries: number;\n readonly defaultHeaders: Record<string, string>;\n readonly fetchFn: typeof globalThis.fetch;\n\n constructor(options: {\n apiKey: string;\n baseURL?: string;\n gatewayBaseURL?: string;\n timeout?: number;\n maxRetries?: number;\n defaultHeaders?: Record<string, string>;\n fetch?: typeof globalThis.fetch;\n }) {\n if (!options || !options.apiKey) {\n throw new Error(\"HTTPTransport initialized without an apiKey.\");\n }\n\n this.apiKey = options.apiKey;\n this.baseURL = (options.baseURL || \"https://api.zorveus.com\").replace(/\\/+$/, \"\");\n this.gatewayBaseURL = (options.gatewayBaseURL || `${this.baseURL}/v1`).replace(/\\/+$/, \"\");\n this.timeout = options.timeout ?? 60000;\n this.maxRetries = options.maxRetries ?? 2;\n this.defaultHeaders = options.defaultHeaders || {};\n this.fetchFn = options.fetch || globalThis.fetch.bind(globalThis);\n }\n\n /**\n * Executes an HTTP request with timeout, strict idempotency-aware retries, and error mapping.\n */\n async request<T>(path: string, options: HttpRequestOptions = {}): Promise<T> {\n const method = options.method || \"GET\";\n const isGateway = options.isGateway ?? false;\n const rootUrl = isGateway ? this.gatewayBaseURL : this.baseURL;\n const url = this.buildUrl(rootUrl, path, options.query);\n\n const isJsonBody = options.body !== undefined && !(options.body instanceof FormData);\n const contentType = isJsonBody ? \"application/json\" : undefined;\n\n const customHeaders = { ...options.headers };\n if (options.idempotencyKey) {\n customHeaders[\"X-Idempotency-Key\"] = options.idempotencyKey;\n }\n\n const headers = buildHeaders({\n apiKey: this.apiKey,\n defaultHeaders: this.defaultHeaders,\n customHeaders,\n contentType\n });\n\n const isSafeMethod = method === \"GET\" || method === \"HEAD\" || method === \"OPTIONS\";\n const isIdempotent = isSafeMethod || Boolean(options.isIdempotent || options.idempotencyKey);\n\n const maxRetries = isIdempotent ? (options.maxRetries ?? this.maxRetries) : 0;\n const timeoutMs = options.timeout ?? this.timeout;\n\n if (options.signal?.aborted) {\n throw new APIConnectionError(\"Request was cancelled by user\");\n }\n\n let attempt = 0;\n\n while (true) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n const onAbort = () => controller.abort();\n\n if (options.signal) {\n options.signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n\n try {\n const bodyContent = isJsonBody ? JSON.stringify(options.body) : (options.body as BodyInit | undefined);\n\n const response = await this.fetchFn(url.toString(), {\n method,\n headers,\n body: bodyContent,\n signal: controller.signal\n });\n\n if (options.stream) {\n if (!response.ok) {\n const errorBody = await this.parseResponseBody(response);\n throw createAPIError(response.status, errorBody, this.extractHeaders(response.headers));\n }\n\n if (!response.body) {\n throw new APIConnectionError(\"Streaming response body is null\");\n }\n\n return response.body as unknown as T;\n }\n\n if (!response.ok) {\n const errorBody = await this.parseResponseBody(response);\n const shouldRetry = isIdempotent && this.shouldRetryStatus(response.status) && attempt < maxRetries;\n\n if (shouldRetry) {\n attempt++;\n const delay = this.calculateRetryDelay(attempt, response.headers.get(\"retry-after\"));\n await this.sleep(delay);\n continue;\n }\n\n throw createAPIError(response.status, errorBody, this.extractHeaders(response.headers));\n }\n\n if (response.status === 204) {\n return undefined as unknown as T;\n }\n\n const data = await this.parseResponseBody(response);\n return data as T;\n } catch (error) {\n if (error && typeof error === \"object\" && \"status\" in error) {\n throw error;\n }\n\n const isAbortError = error instanceof Error && error.name === \"AbortError\";\n const wasUserAborted = options.signal?.aborted;\n\n if (isAbortError && wasUserAborted) {\n throw new APIConnectionError(\"Request was cancelled by user\", { cause: error });\n }\n\n const isTimeout = isAbortError && !wasUserAborted;\n const errorMessage = isTimeout ? `Request timed out after ${timeoutMs}ms` : \"Network request failed\";\n\n if (isIdempotent && attempt < maxRetries) {\n attempt++;\n const delay = this.calculateRetryDelay(attempt);\n await this.sleep(delay);\n continue;\n }\n\n throw new APIConnectionError(errorMessage, { cause: error });\n } finally {\n clearTimeout(timeoutId);\n if (options.signal) {\n options.signal.removeEventListener(\"abort\", onAbort);\n }\n }\n }\n }\n\n private buildUrl(base: string, path: string, query?: Record<string, unknown>): URL {\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n const url = new URL(`${base}${normalizedPath}`);\n\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item !== undefined && item !== null) {\n url.searchParams.append(key, String(item));\n }\n }\n } else {\n url.searchParams.append(key, String(value));\n }\n }\n }\n\n return url;\n }\n\n private async parseResponseBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) {\n return null;\n }\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n }\n\n private extractHeaders(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n }\n\n private shouldRetryStatus(status: number): boolean {\n return status === 429 || status === 500 || status === 502 || status === 503 || status === 504;\n }\n\n private calculateRetryDelay(attempt: number, retryAfterHeader?: string | null): number {\n if (retryAfterHeader) {\n const parsedSeconds = parseInt(retryAfterHeader, 10);\n if (!isNaN(parsedSeconds) && parsedSeconds > 0) {\n return parsedSeconds * 1000;\n }\n const parsedDate = Date.parse(retryAfterHeader);\n if (!isNaN(parsedDate)) {\n const diff = parsedDate - Date.now();\n if (diff > 0) {\n return diff;\n }\n }\n }\n\n const baseDelay = 500;\n const maxBackoff = Math.min(10000, baseDelay * Math.pow(2, Math.max(0, attempt - 1)));\n const jitter = Math.floor(Math.random() * maxBackoff);\n return Math.max(baseDelay, jitter);\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import type { ChatCompletionChunk } from \"../types/chat\";\n\n/**\n * Parses Server-Sent Events (SSE) from a byte ReadableStream and yields ChatCompletionChunk objects.\n * Zero external dependencies — pure standard Web Streams & async iteration.\n */\nexport async function* parseSSEStream(\n stream: ReadableStream<Uint8Array>\n): AsyncIterableIterator<ChatCompletionChunk> {\n const reader = stream.getReader();\n const decoder = new TextDecoder(\"utf-8\");\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(/\\r?\\n/);\n\n // Keep the last incomplete fragment in the buffer\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Skip empty lines or SSE comment lines\n if (!trimmed || trimmed.startsWith(\":\")) {\n continue;\n }\n\n // Check for SSE data line\n if (trimmed.startsWith(\"data:\")) {\n const dataContent = trimmed.slice(5).trim();\n\n // OpenAI standard stream termination signal\n if (dataContent === \"[DONE]\") {\n return;\n }\n\n try {\n const parsed = JSON.parse(dataContent) as ChatCompletionChunk;\n yield parsed;\n } catch {\n // If the chunk is not valid JSON, ignore and continue\n }\n }\n }\n }\n\n // Flush any remaining buffer text\n if (buffer.trim()) {\n const trimmed = buffer.trim();\n if (trimmed.startsWith(\"data:\")) {\n const dataContent = trimmed.slice(5).trim();\n if (dataContent !== \"[DONE]\") {\n try {\n const parsed = JSON.parse(dataContent) as ChatCompletionChunk;\n yield parsed;\n } catch {\n // Ignore incomplete trailing fragment\n }\n }\n }\n }\n } finally {\n try {\n await reader.cancel();\n } catch {\n // Ignore cancel errors if stream is already closed\n }\n reader.releaseLock();\n }\n}\n","export type ChatCompletionRole = \"system\" | \"user\" | \"assistant\" | \"tool\" | \"function\";\n\nexport interface ChatMessageToolCall {\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string;\n };\n}\n\nexport interface ChatMessage {\n role: ChatCompletionRole;\n content: string | null;\n name?: string;\n tool_call_id?: string;\n tool_calls?: ChatMessageToolCall[];\n}\n\nexport interface ChatCompletionTool {\n type: \"function\";\n function: {\n name: string;\n description?: string;\n parameters?: Record<string, unknown>;\n };\n}\n\nexport interface ZorveusMetadata {\n /**\n * The startup's external customer ID (e.g. \"usr_ext_8842\").\n */\n externalUserId?: string;\n\n /**\n * Customer's display name.\n */\n displayName?: string;\n\n /**\n * Customer's email.\n */\n userEmail?: string;\n\n /**\n * Custom metadata key-value pairs (e.g. `{ plan: \"pro\", teamId: \"team_402\" }`).\n */\n metadata?: Record<string, unknown>;\n}\n\nexport interface ZorveusGatewayProductUserMetadata {\n display_name?: string | null;\n email?: string | null;\n metadata?: Record<string, unknown> | null;\n}\n\nexport interface ZorveusGatewayMetadata {\n external_user_id?: string;\n product_user?: ZorveusGatewayProductUserMetadata;\n}\n\n/**\n * Formats SDK metadata into Gateway request body contract format.\n */\nexport function formatGatewayMetadata(\n meta?: ZorveusMetadata\n): ZorveusGatewayMetadata | undefined {\n if (!meta) return undefined;\n\n const result: ZorveusGatewayMetadata = {};\n\n if (meta.externalUserId) {\n result.external_user_id = meta.externalUserId;\n }\n\n if (meta.displayName !== undefined || meta.userEmail !== undefined || meta.metadata !== undefined) {\n result.product_user = {\n display_name: meta.displayName ?? null,\n email: meta.userEmail ?? null,\n metadata: meta.metadata ?? null\n };\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\nexport interface ChatCompletionCreateParamsBase {\n model: string;\n messages: ChatMessage[];\n temperature?: number;\n top_p?: number;\n n?: number;\n max_tokens?: number;\n max_completion_tokens?: number;\n stop?: string | string[];\n presence_penalty?: number;\n frequency_penalty?: number;\n logit_bias?: Record<string, number>;\n user?: string;\n tools?: ChatCompletionTool[];\n tool_choice?: \"none\" | \"auto\" | \"required\" | { type: \"function\"; function: { name: string } };\n response_format?: { type: \"text\" | \"json_object\" | \"json_schema\"; json_schema?: Record<string, unknown> };\n seed?: number;\n\n /**\n * Inline Zorveus product-user metadata attribution.\n */\n zorveusMetadata?: ZorveusMetadata;\n\n /**\n * Gateway request body metadata payload override.\n */\n metadata?: Record<string, unknown>;\n}\n\nexport interface ChatCompletionCreateParamsNonStreaming extends ChatCompletionCreateParamsBase {\n stream?: false;\n}\n\nexport interface ChatCompletionCreateParamsStreaming extends ChatCompletionCreateParamsBase {\n stream: true;\n}\n\nexport type ChatCompletionCreateParams =\n | ChatCompletionCreateParamsNonStreaming\n | ChatCompletionCreateParamsStreaming;\n\nexport interface ChatCompletionChoice {\n index: number;\n message: ChatMessage;\n finish_reason: \"stop\" | \"length\" | \"tool_calls\" | \"content_filter\" | \"function_call\" | null;\n logprobs?: unknown;\n}\n\nexport interface ChatCompletionChunkChoiceDelta {\n role?: ChatCompletionRole;\n content?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: \"function\";\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n}\n\nexport interface ChatCompletionChunkChoice {\n index: number;\n delta: ChatCompletionChunkChoiceDelta;\n finish_reason: \"stop\" | \"length\" | \"tool_calls\" | \"content_filter\" | \"function_call\" | null;\n logprobs?: unknown;\n}\n\nexport interface ChatCompletionUsage {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n prompt_tokens_details?: {\n cached_tokens?: number;\n };\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\n\nexport interface ChatCompletion {\n id: string;\n object: \"chat.completion\";\n created: number;\n model: string;\n choices: ChatCompletionChoice[];\n usage?: ChatCompletionUsage;\n system_fingerprint?: string;\n}\n\nexport interface ChatCompletionChunk {\n id: string;\n object: \"chat.completion.chunk\";\n created: number;\n model: string;\n choices: ChatCompletionChunkChoice[];\n usage?: ChatCompletionUsage;\n system_fingerprint?: string;\n}\n","import type { HTTPTransport } from \"../../http/transport\";\nimport { parseSSEStream } from \"../../http/sse\";\nimport type { RequestOptions } from \"../../types/client\";\nimport {\n formatGatewayMetadata,\n type ChatCompletion,\n type ChatCompletionChunk,\n type ChatCompletionCreateParams,\n type ChatCompletionCreateParamsNonStreaming,\n type ChatCompletionCreateParamsStreaming\n} from \"../../types/chat\";\n\nexport class Completions {\n private readonly transport: HTTPTransport;\n\n constructor(transport: HTTPTransport) {\n this.transport = transport;\n }\n\n /**\n * Creates a model response for the given chat conversation.\n * Supports standard single-response and Server-Sent Events (SSE) streaming modes.\n */\n async create(\n params: ChatCompletionCreateParamsStreaming,\n options?: RequestOptions\n ): Promise<AsyncIterableIterator<ChatCompletionChunk>>;\n async create(\n params: ChatCompletionCreateParamsNonStreaming,\n options?: RequestOptions\n ): Promise<ChatCompletion>;\n async create(\n params: ChatCompletionCreateParams,\n options?: RequestOptions\n ): Promise<ChatCompletion | AsyncIterableIterator<ChatCompletionChunk>>;\n async create(\n params: ChatCompletionCreateParams,\n options: RequestOptions = {}\n ): Promise<ChatCompletion | AsyncIterableIterator<ChatCompletionChunk>> {\n const isStreaming = Boolean(params.stream);\n const { zorveusMetadata, metadata: explicitMetadata, ...requestBody } = params;\n\n // Build the request body metadata payload expected by Zorveus Gateway\n const gatewayMetadata = formatGatewayMetadata(zorveusMetadata);\n const combinedMetadata = explicitMetadata\n ? { ...gatewayMetadata, ...explicitMetadata }\n : gatewayMetadata;\n\n const payload = {\n ...requestBody,\n ...(combinedMetadata ? { metadata: combinedMetadata } : {})\n };\n\n if (isStreaming) {\n const responseStream = await this.transport.request<ReadableStream<Uint8Array>>(\n \"/chat/completions\",\n {\n method: \"POST\",\n body: { ...payload, stream: true },\n isGateway: true,\n stream: true,\n ...options\n }\n );\n\n return parseSSEStream(responseStream);\n }\n\n return this.transport.request<ChatCompletion>(\"/chat/completions\", {\n method: \"POST\",\n body: payload,\n isGateway: true,\n stream: false,\n ...options\n });\n }\n}\n","import type { HTTPTransport } from \"../../http/transport\";\nimport { Completions } from \"./completions\";\n\nexport class Chat {\n readonly completions: Completions;\n\n constructor(transport: HTTPTransport) {\n this.completions = new Completions(transport);\n }\n}\n","import type { HTTPTransport } from \"../http/transport\";\nimport type { RequestOptions } from \"../types/client\";\nimport { formatGatewayMetadata, type EmbeddingCreateParams, type EmbeddingCreateResponse } from \"../types\";\n\nexport class Embeddings {\n private readonly transport: HTTPTransport;\n\n constructor(transport: HTTPTransport) {\n this.transport = transport;\n }\n\n /**\n * Creates an embedding vector representing the input text.\n */\n async create(\n params: EmbeddingCreateParams,\n options: RequestOptions = {}\n ): Promise<EmbeddingCreateResponse> {\n const { zorveusMetadata, ...requestBody } = params;\n\n const gatewayMetadata = formatGatewayMetadata(zorveusMetadata);\n const payload = {\n ...requestBody,\n ...(gatewayMetadata ? { metadata: gatewayMetadata } : {})\n };\n\n return this.transport.request<EmbeddingCreateResponse>(\"/embeddings\", {\n method: \"POST\",\n body: payload,\n isGateway: true,\n ...options\n });\n }\n}\n","import type { HTTPTransport } from \"../http/transport\";\nimport type { RequestOptions } from \"../types/client\";\nimport type { Model, ModelListParams, ModelListResponse } from \"../types/models\";\n\nexport class Models {\n private readonly transport: HTTPTransport;\n\n constructor(transport: HTTPTransport) {\n this.transport = transport;\n }\n\n /**\n * Lists available models on the Zorveus gateway.\n */\n async list(\n params: ModelListParams = {},\n options: RequestOptions = {}\n ): Promise<ModelListResponse> {\n const query: Record<string, unknown> = {};\n if (params.routeStatus) {\n query.route_status = params.routeStatus;\n }\n\n return this.transport.request<ModelListResponse>(\"/models\", {\n method: \"GET\",\n query,\n isGateway: true,\n ...options\n });\n }\n\n /**\n * Retrieves information about a specific model.\n */\n async retrieve(\n modelId: string,\n options: RequestOptions = {}\n ): Promise<Model> {\n return this.transport.request<Model>(`/models/${encodeURIComponent(modelId)}`, {\n method: \"GET\",\n isGateway: true,\n ...options\n });\n }\n}\n","import { HTTPTransport } from \"./http/transport\";\nimport { Chat } from \"./resources/chat/index\";\nimport { Embeddings } from \"./resources/embeddings\";\nimport { Models } from \"./resources/models\";\nimport type {\n ZorveusInferenceClientOptions,\n RequestOptions,\n InferenceKeyUsageResponse\n} from \"./types/client\";\n\n/**\n * Zorveus Inference Client (Gateway Data Plane).\n * Authenticated via Inference Key (`zrv_...`) or API Key issued via OAuth (`access_token`).\n */\nexport class ZorveusInferenceClient {\n readonly chat: Chat;\n readonly embeddings: Embeddings;\n readonly models: Models;\n protected readonly transport: HTTPTransport;\n\n constructor(options: ZorveusInferenceClientOptions) {\n if (!options || !options.apiKey) {\n throw new Error(\n \"ZorveusInferenceClient requires an 'apiKey' (Inference Key or OAuth Access Token).\"\n );\n }\n\n const baseURL = options.baseURL\n ? options.baseURL.replace(/\\/+$/, \"\")\n : options.gatewayBaseURL\n ? options.gatewayBaseURL.replace(/\\/v1\\/?$/, \"\").replace(/\\/+$/, \"\")\n : \"https://api.zorveus.com\";\n\n const gatewayBaseURL = (options.gatewayBaseURL || `${baseURL}/v1`).replace(/\\/+$/, \"\");\n\n this.transport = new HTTPTransport({\n apiKey: options.apiKey,\n baseURL,\n gatewayBaseURL,\n timeout: options.timeout,\n maxRetries: options.maxRetries,\n defaultHeaders: options.defaultHeaders,\n fetch: options.fetch\n });\n\n this.chat = new Chat(this.transport);\n this.embeddings = new Embeddings(this.transport);\n this.models = new Models(this.transport);\n }\n\n /**\n * Retrieves live spend, budget cap, and balance for the active inference key (`GET /inference-keys/usage`).\n */\n async getUsage(options: RequestOptions = {}): Promise<InferenceKeyUsageResponse> {\n return this.transport.request<InferenceKeyUsageResponse>(\"/inference-keys/usage\", {\n method: \"GET\",\n ...options\n });\n }\n}\n\n/**\n * Primary Zorveus client class for gateway inference.\n */\nexport class Zorveus extends ZorveusInferenceClient {}\n","/**\n * Validates that a monetary value is a valid decimal string (e.g., \"15.0000\").\n * Financial safety rule: floating-point arithmetic is avoided for monetary amounts.\n */\nexport function isValidDecimalString(value: unknown): value is string {\n if (typeof value !== \"string\") {\n return false;\n }\n\n const trimmed = value.trim();\n if (!trimmed) {\n return false;\n }\n\n // Regex matching standard decimal representation (optional sign, digits, optional dot with digits)\n const decimalRegex = /^-?\\d+(\\.\\d+)?$/;\n return decimalRegex.test(trimmed);\n}\n\n/**\n * Asserts that a given balance or monetary parameter is a valid decimal string.\n */\nexport function assertDecimalString(value: unknown, fieldName: string): string {\n if (typeof value === \"number\") {\n return value.toFixed(4);\n }\n\n if (isValidDecimalString(value)) {\n return value.trim();\n }\n\n throw new TypeError(\n `Field '${fieldName}' must be a valid decimal string (e.g. \"15.0000\"), received: ${JSON.stringify(value)}`\n );\n}\n","import type { HTTPTransport } from \"../http/transport\";\nimport { assertDecimalString } from \"../utils/decimal\";\nimport type { RequestOptions } from \"../types/client\";\nimport type {\n UpsertProductUserParams,\n UpsertProductUserResponse,\n ProductUserResponse,\n ProductUserListResponse,\n ProductUserListParams,\n GetProductUserByExternalIdParams,\n GetProductUserCreditSummaryByExternalIdParams,\n ProductUserCreditSummaryResponse,\n GrantCreditParams,\n GrantCreditByExternalIdParams,\n GrantProductUserCreditsResponse,\n ProductUserCreditGrantListResponse,\n ListCreditGrantsParams,\n ListCreditGrantsByExternalIdParams,\n RevokeProductUserCreditGrantResponse\n} from \"../types/product-users\";\n\nexport class ProductUsers {\n private readonly transport: HTTPTransport;\n\n constructor(transport: HTTPTransport) {\n this.transport = transport;\n }\n\n /**\n * Upserts a product user by external user ID (`PUT /product-users/by-external-id`).\n * Creates the user if they do not exist, or updates their profile if they do.\n */\n async createOrUpdate(\n params: UpsertProductUserParams,\n options: RequestOptions = {}\n ): Promise<UpsertProductUserResponse> {\n const payload = {\n ...(params.appId ? { app_id: params.appId } : {}),\n external_user_id: params.externalUserId,\n display_name: params.displayName ?? null,\n email: params.email ?? null,\n metadata: params.metadata ?? null\n };\n\n const query = params.orgId ? { org_id: params.orgId } : undefined;\n\n return this.transport.request<UpsertProductUserResponse>(\"/product-users/by-external-id\", {\n method: \"PUT\",\n body: payload,\n query,\n ...options\n });\n }\n\n /**\n * Alias for `createOrUpdate` (`PUT /product-users/by-external-id`).\n */\n async upsert(\n params: UpsertProductUserParams,\n options: RequestOptions = {}\n ): Promise<UpsertProductUserResponse> {\n return this.createOrUpdate(params, options);\n }\n\n /**\n * Retrieves a single product end-user by ID (`GET /product-users/{product_end_user_id}`).\n */\n async get(\n productEndUserId: string,\n options: RequestOptions = {}\n ): Promise<ProductUserResponse> {\n return this.transport.request<ProductUserResponse>(\n `/product-users/${encodeURIComponent(productEndUserId)}`,\n {\n method: \"GET\",\n ...options\n }\n );\n }\n\n /**\n * Retrieves a product user profile by external ID (`GET /product-users/by-external-id`).\n * Returns complete profile with usage, active cap, and live credits.\n */\n async getByExternalId(\n params: GetProductUserByExternalIdParams,\n options: RequestOptions = {}\n ): Promise<ProductUserResponse> {\n const query: Record<string, unknown> = {\n app_id: params.appId,\n external_user_id: params.externalUserId\n };\n\n if (params.orgId) {\n query.org_id = params.orgId;\n }\n\n return this.transport.request<ProductUserResponse>(\"/product-users/by-external-id\", {\n method: \"GET\",\n query,\n ...options\n });\n }\n\n /**\n * Retrieves a product user's live credit summary by external ID (`GET /product-users/by-external-id/credit-summary`).\n */\n async getCreditSummaryByExternalId(\n params: GetProductUserCreditSummaryByExternalIdParams,\n options: RequestOptions = {}\n ): Promise<ProductUserCreditSummaryResponse> {\n const query: Record<string, unknown> = {\n app_id: params.appId,\n external_user_id: params.externalUserId\n };\n\n if (params.currency) {\n query.currency = params.currency;\n }\n\n if (params.orgId) {\n query.org_id = params.orgId;\n }\n\n return this.transport.request<ProductUserCreditSummaryResponse>(\n \"/product-users/by-external-id/credit-summary\",\n {\n method: \"GET\",\n query,\n ...options\n }\n );\n }\n\n /**\n * Lists product end-users for an organization (`GET /product-users`).\n */\n async list(\n params: ProductUserListParams = {},\n options: RequestOptions = {}\n ): Promise<ProductUserListResponse> {\n const query: Record<string, unknown> = {};\n if (params.orgId) query.org_id = params.orgId;\n if (params.limit !== undefined) query.limit = params.limit;\n if (params.offset !== undefined) query.offset = params.offset;\n\n return this.transport.request<ProductUserListResponse>(\"/product-users\", {\n method: \"GET\",\n query,\n ...options\n });\n }\n\n /**\n * Grants startup-funded AI credits to a product user (`POST /product-users/{id}/credit-grants`).\n * Validates amount as a strict financial decimal string.\n */\n async grantCredit(\n productEndUserId: string,\n params: GrantCreditParams,\n options: RequestOptions = {}\n ): Promise<GrantProductUserCreditsResponse> {\n const amount = assertDecimalString(params.amount, \"grantCredit.amount\");\n\n const payload = {\n app_id: params.appId,\n amount,\n currency: params.currency || \"USD\",\n reason: params.reason ?? null,\n expires_at: params.expiresAt ?? null,\n metadata: params.metadata ?? null\n };\n\n const query = params.orgId ? { org_id: params.orgId } : undefined;\n\n return this.transport.request<GrantProductUserCreditsResponse>(\n `/product-users/${encodeURIComponent(productEndUserId)}/credit-grants`,\n {\n method: \"POST\",\n body: payload,\n query,\n ...options\n }\n );\n }\n\n /**\n * Grants credits to an end user by external ID (`POST /product-users/by-external-id/credit-grants`).\n * Automatically provisions the product user if they do not exist yet.\n */\n async grantCreditByExternalId(\n params: GrantCreditByExternalIdParams,\n options: RequestOptions = {}\n ): Promise<GrantProductUserCreditsResponse> {\n const amount = assertDecimalString(params.amount, \"grantCreditByExternalId.amount\");\n\n const payload = {\n app_id: params.appId,\n external_user_id: params.externalUserId,\n display_name: params.displayName ?? null,\n email: params.email ?? null,\n amount,\n currency: params.currency || \"USD\",\n source: params.source ?? null,\n reason: params.reason ?? null,\n expires_at: params.expiresAt ?? null,\n metadata: params.metadata ?? null\n };\n\n const query = params.orgId ? { org_id: params.orgId } : undefined;\n\n return this.transport.request<GrantProductUserCreditsResponse>(\n \"/product-users/by-external-id/credit-grants\",\n {\n method: \"POST\",\n body: payload,\n query,\n ...options\n }\n );\n }\n\n /**\n * Lists credit grants for a product user (`GET /product-users/{id}/credit-grants`).\n * Accepts either an external user ID or a Zorveus product user ID.\n */\n async listCreditGrants(\n userIdentifier: string,\n params: ListCreditGrantsParams = {},\n options: RequestOptions = {}\n ): Promise<ProductUserCreditGrantListResponse> {\n const query: Record<string, unknown> = {};\n if (params.appId) query.app_id = params.appId;\n if (params.orgId) query.org_id = params.orgId;\n if (params.limit !== undefined) query.limit = params.limit;\n if (params.offset !== undefined) query.offset = params.offset;\n\n return this.transport.request<ProductUserCreditGrantListResponse>(\n `/product-users/${encodeURIComponent(userIdentifier)}/credit-grants`,\n {\n method: \"GET\",\n query,\n ...options\n }\n );\n }\n\n /**\n * Lists credit grants for a product user by external ID (`GET /product-users/by-external-id/credit-grants`).\n */\n async listCreditGrantsByExternalId(\n params: ListCreditGrantsByExternalIdParams,\n options: RequestOptions = {}\n ): Promise<ProductUserCreditGrantListResponse> {\n const query: Record<string, unknown> = {\n app_id: params.appId,\n external_user_id: params.externalUserId\n };\n\n if (params.status) query.status = params.status;\n if (params.source) query.source = params.source;\n if (params.limit !== undefined) query.limit = params.limit;\n if (params.orgId) query.org_id = params.orgId;\n\n return this.transport.request<ProductUserCreditGrantListResponse>(\n \"/product-users/by-external-id/credit-grants\",\n {\n method: \"GET\",\n query,\n ...options\n }\n );\n }\n\n /**\n * Revokes an active credit grant (`POST /product-users/{id}/credit-grants/{grantId}/revoke`).\n */\n async revokeCredit(\n productEndUserId: string,\n creditGrantId: string,\n options: RequestOptions = {}\n ): Promise<RevokeProductUserCreditGrantResponse> {\n return this.transport.request<RevokeProductUserCreditGrantResponse>(\n `/product-users/${encodeURIComponent(productEndUserId)}/credit-grants/${encodeURIComponent(creditGrantId)}/revoke`,\n {\n method: \"POST\",\n ...options\n }\n );\n }\n}\n","import type { HTTPTransport } from \"../http/transport\";\nimport type { RequestOptions } from \"../types/client\";\nimport type {\n CreateProviderCredentialParams,\n ProviderCredentialResponse,\n ProviderCredentialListResponse,\n ListProviderCredentialsParams,\n RotateProviderCredentialParams,\n RotateProviderCredentialResponse,\n ProviderCredentialProviderCatalogResponse\n} from \"../types/provider-credentials\";\n\nexport class ProviderCredentials {\n private readonly transport: HTTPTransport;\n\n constructor(transport: HTTPTransport) {\n this.transport = transport;\n }\n\n /**\n * Registers an organization BYOK provider credential via Service Key (`POST /provider-credentials/org-programmatic`).\n */\n async create(\n params: CreateProviderCredentialParams,\n options: RequestOptions = {}\n ): Promise<ProviderCredentialResponse> {\n const payload = {\n provider: params.provider,\n credential_name: params.credentialName,\n api_key: params.apiKey,\n secret_kind: params.secretKind || \"api_key\",\n model_policies: params.modelPolicies || [],\n provider_config: params.providerConfig ?? null,\n routing_mode: params.routingMode || \"auto_resolve\",\n routing_priority: params.routingPriority ?? 100\n };\n\n const query = params.orgId ? { org_id: params.orgId } : undefined;\n\n return this.transport.request<ProviderCredentialResponse>(\n \"/provider-credentials/org-programmatic\",\n {\n method: \"POST\",\n body: payload,\n query,\n ...options\n }\n );\n }\n\n /**\n * Lists BYOK provider credentials for an organization (`GET /provider-credentials/org-programmatic`).\n */\n async list(\n params: ListProviderCredentialsParams = {},\n options: RequestOptions = {}\n ): Promise<ProviderCredentialListResponse> {\n const query: Record<string, unknown> = {};\n if (params.orgId) query.org_id = params.orgId;\n if (params.status) query.status = params.status;\n\n return this.transport.request<ProviderCredentialListResponse>(\n \"/provider-credentials/org-programmatic\",\n {\n method: \"GET\",\n query,\n ...options\n }\n );\n }\n\n /**\n * Rotates a provider credential secret (`POST /provider-credentials/org-programmatic/{id}/rotate`).\n */\n async rotate(\n providerCredentialId: string,\n params: RotateProviderCredentialParams,\n options: RequestOptions = {}\n ): Promise<RotateProviderCredentialResponse> {\n const payload = {\n api_key: params.apiKey,\n secret_kind: params.secretKind || \"api_key\"\n };\n\n const query = params.orgId ? { org_id: params.orgId } : undefined;\n\n return this.transport.request<RotateProviderCredentialResponse>(\n `/provider-credentials/org-programmatic/${encodeURIComponent(providerCredentialId)}/rotate`,\n {\n method: \"POST\",\n body: payload,\n query,\n ...options\n }\n );\n }\n\n /**\n * Deletes a provider credential (`DELETE /provider-credentials/org-programmatic/{id}`).\n */\n async delete(\n providerCredentialId: string,\n options: RequestOptions = {}\n ): Promise<void> {\n return this.transport.request<void>(\n `/provider-credentials/org-programmatic/${encodeURIComponent(providerCredentialId)}`,\n {\n method: \"DELETE\",\n ...options\n }\n );\n }\n\n /**\n * Lists supported AI provider catalog (`GET /provider-credentials/providers`).\n */\n async listProviders(\n options: RequestOptions = {}\n ): Promise<ProviderCredentialProviderCatalogResponse> {\n return this.transport.request<ProviderCredentialProviderCatalogResponse>(\n \"/provider-credentials/providers\",\n {\n method: \"GET\",\n ...options\n }\n );\n }\n}\n","import { HTTPTransport } from \"./http/transport\";\nimport { ProductUsers } from \"./resources/product-users\";\nimport { ProviderCredentials } from \"./resources/provider-credentials\";\nimport type { ZorveusServiceClientOptions } from \"./types/client\";\n\n/**\n * Zorveus Service Client (Server-to-Server Management Control Plane).\n * Authenticated via Organization Service Key (`zrv_service_...`).\n * WARNING: Never export or use this client in browser applications.\n */\nexport class ZorveusServiceClient {\n readonly productUsers: ProductUsers;\n readonly providerCredentials: ProviderCredentials;\n protected readonly transport: HTTPTransport;\n\n constructor(options: ZorveusServiceClientOptions) {\n if (!options || !options.apiKey) {\n throw new Error(\n \"ZorveusServiceClient requires an 'apiKey' (Organization Service Key 'zrv_service_...').\"\n );\n }\n\n const baseURL = (options.baseURL || \"https://api.zorveus.com\").replace(/\\/+$/, \"\");\n\n this.transport = new HTTPTransport({\n apiKey: options.apiKey,\n baseURL,\n timeout: options.timeout,\n maxRetries: options.maxRetries,\n defaultHeaders: options.defaultHeaders,\n fetch: options.fetch\n });\n\n this.productUsers = new ProductUsers(this.transport);\n this.providerCredentials = new ProviderCredentials(this.transport);\n }\n}\n","/**\n * Isomorphic Web Crypto helper for RFC 7636 PKCE.\n * Uses globalThis.crypto which is available in Node 18+, Edge, Browsers, Bun, Deno, etc.\n */\n\nfunction getCrypto(): Crypto {\n if (typeof globalThis.crypto !== \"undefined\" && globalThis.crypto.subtle) {\n return globalThis.crypto;\n }\n throw new Error(\"Web Crypto API (crypto.subtle) is not available in the current environment.\");\n}\n\n/**\n * Converts a Uint8Array or ArrayBuffer into a URL-safe Base64 string without padding.\n */\nexport function base64UrlEncode(buffer: ArrayBuffer | Uint8Array): string {\n const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n let binary = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n\n // Use btoa if available in globalThis, or Buffer fallback in Node\n const base64 = typeof btoa === \"function\"\n ? btoa(binary)\n : Buffer.from(bytes).toString(\"base64\");\n\n return base64\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\n/**\n * Generates cryptographically secure random bytes as a base64url string.\n */\nexport function generateRandomString(byteLength = 32): string {\n const crypto = getCrypto();\n const randomBytes = new Uint8Array(byteLength);\n crypto.getRandomValues(randomBytes);\n return base64UrlEncode(randomBytes);\n}\n\n/**\n * Generates an SHA-256 hash formatted as a base64url string.\n */\nexport async function sha256Base64Url(plainText: string): Promise<string> {\n const crypto = getCrypto();\n const encoder = new TextEncoder();\n const data = encoder.encode(plainText);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n return base64UrlEncode(hashBuffer);\n}\n","import { generateRandomString, sha256Base64Url } from \"./utils/crypto\";\nimport { createAPIError } from \"./errors/zorveus-error\";\nimport type {\n PKCEData,\n AuthorizationUrlParams,\n TokenExchangeParams,\n TokenRevocationParams,\n OAuthTokenResponse,\n CallbackValidationOptions,\n CallbackValidationResult\n} from \"./types/oauth\";\n\n/**\n * Isomorphic OAuth PKCE and token management utilities for Zorveus.\n */\nexport class ZorveusOAuth {\n /**\n * Generates an RFC 7636 PKCE code_verifier, code_challenge (S256), and CSRF state parameter.\n */\n static async generatePKCE(byteLength = 32): Promise<PKCEData> {\n const codeVerifier = generateRandomString(byteLength);\n const codeChallenge = await sha256Base64Url(codeVerifier);\n const state = generateRandomString(32);\n\n return {\n codeVerifier,\n codeChallenge,\n state\n };\n }\n\n /**\n * Constructs the Zorveus OAuth PKCE consent URL.\n */\n static getAuthorizationUrl(params: AuthorizationUrlParams): string {\n const baseUrl = (params.baseURL || \"https://api.zorveus.com\").replace(/\\/+$/, \"\");\n const url = new URL(`${baseUrl}/oauth/authorize`);\n\n url.searchParams.set(\"client_id\", params.clientId);\n url.searchParams.set(\"redirect_uri\", params.redirectUri);\n url.searchParams.set(\"state\", params.state);\n url.searchParams.set(\"code_challenge\", params.codeChallenge);\n url.searchParams.set(\"code_challenge_method\", \"S256\");\n url.searchParams.set(\"response_type\", \"code\");\n\n const scopes = params.scopes\n ? Array.isArray(params.scopes) ? params.scopes.join(\" \") : params.scopes\n : \"inference:write models:*\";\n\n url.searchParams.set(\"scope\", scopes);\n\n return url.toString();\n }\n\n /**\n * Validates OAuth redirect parameters against expected CSRF state.\n */\n static validateCallback(options: CallbackValidationOptions): CallbackValidationResult {\n let params: URLSearchParams;\n\n if (typeof options.urlOrParams === \"string\") {\n const urlStr = options.urlOrParams;\n const queryIdx = urlStr.indexOf(\"?\");\n const search = queryIdx !== -1 ? urlStr.slice(queryIdx) : urlStr;\n params = new URLSearchParams(search);\n } else if (options.urlOrParams instanceof URLSearchParams) {\n params = options.urlOrParams;\n } else if (options.urlOrParams && typeof options.urlOrParams === \"object\") {\n params = new URLSearchParams();\n for (const [key, value] of Object.entries(options.urlOrParams)) {\n if (value !== undefined && value !== null && value !== \"undefined\" && value !== \"null\") {\n params.set(key, String(value));\n }\n }\n } else {\n params = new URLSearchParams();\n }\n\n const rawError = params.get(\"error\");\n const isRealError = rawError && rawError !== \"undefined\" && rawError !== \"null\";\n if (isRealError) {\n const rawDesc = params.get(\"error_description\");\n const errorDescription = rawDesc && rawDesc !== \"undefined\" && rawDesc !== \"null\" ? rawDesc : undefined;\n return {\n valid: false,\n error: rawError,\n errorDescription\n };\n }\n\n const rawCode = params.get(\"code\");\n const code = rawCode && rawCode !== \"undefined\" && rawCode !== \"null\" ? rawCode : undefined;\n if (!code) {\n return {\n valid: false,\n error: \"invalid_response\",\n errorDescription: \"Missing authorization code in redirect params\"\n };\n }\n\n const rawState = params.get(\"state\");\n const state = rawState && rawState !== \"undefined\" && rawState !== \"null\" ? rawState : undefined;\n if (options.expectedState && state !== options.expectedState) {\n return {\n valid: false,\n error: \"state_mismatch\",\n errorDescription: \"State parameter does not match expected CSRF token\"\n };\n }\n\n return {\n valid: true,\n code,\n state\n };\n }\n\n /**\n * Exchanges an OAuth authorization code for a Zorveus inference key using application/x-www-form-urlencoded.\n */\n static async exchangeToken(params: TokenExchangeParams): Promise<OAuthTokenResponse> {\n const baseUrl = (params.baseURL || \"https://api.zorveus.com\").replace(/\\/+$/, \"\");\n const url = `${baseUrl}/oauth/token`;\n\n const bodyParams = new URLSearchParams();\n bodyParams.append(\"grant_type\", \"authorization_code\");\n bodyParams.append(\"client_id\", params.clientId);\n bodyParams.append(\"code\", params.code);\n bodyParams.append(\"code_verifier\", params.codeVerifier);\n bodyParams.append(\"redirect_uri\", params.redirectUri);\n\n if (params.clientSecret) {\n bodyParams.append(\"client_secret\", params.clientSecret);\n }\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\"\n };\n\n if (typeof window === \"undefined\") {\n headers[\"User-Agent\"] = \"@zorveus/sdk/0.1.0\";\n }\n\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n body: bodyParams.toString()\n });\n\n if (!response.ok) {\n let errorBody: unknown;\n try {\n errorBody = await response.json();\n } catch {\n errorBody = await response.text();\n }\n\n throw createAPIError(response.status, errorBody);\n }\n\n const tokenData = (await response.json()) as OAuthTokenResponse;\n return tokenData;\n }\n\n /**\n * Revokes an existing OAuth token or app connection using application/x-www-form-urlencoded.\n */\n static async revokeToken(params: TokenRevocationParams): Promise<void> {\n const baseUrl = (params.baseURL || \"https://api.zorveus.com\").replace(/\\/+$/, \"\");\n const url = `${baseUrl}/oauth/revoke`;\n\n const bodyParams = new URLSearchParams();\n bodyParams.append(\"token\", params.token);\n\n if (params.clientId) {\n bodyParams.append(\"client_id\", params.clientId);\n }\n\n if (params.clientSecret) {\n bodyParams.append(\"client_secret\", params.clientSecret);\n }\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\"\n };\n\n if (typeof window === \"undefined\") {\n headers[\"User-Agent\"] = \"@zorveus/sdk/0.1.0\";\n }\n\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n body: bodyParams.toString()\n });\n\n if (!response.ok) {\n let errorBody: unknown;\n try {\n errorBody = await response.json();\n } catch {\n errorBody = await response.text();\n }\n throw createAPIError(response.status, errorBody);\n }\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zorveus/sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Official TypeScript/JavaScript SDK for Zorveus AI Gateway and Management API",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"default": "./dist/index.mjs"
|
|
13
|
+
},
|
|
14
|
+
"require": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"default": "./dist/index.js"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=18.0.0"
|
|
28
|
+
},
|
|
29
|
+
"sideEffects": false,
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsup",
|
|
32
|
+
"typecheck": "tsc --noEmit"
|
|
33
|
+
}
|
|
34
|
+
}
|