@maroonedsoftware/rhapsode-sdk 0.1.12 → 0.1.14

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.
@@ -25,7 +25,7 @@ export declare class PublicClient {
25
25
  */
26
26
  residency(): Promise<ResidencyDetail>;
27
27
  /**
28
- * @name Self-description
28
+ * @name OpenAPI document
29
29
  * @description This API as an OpenAPI 3.1 document, describing the core that serves it.
30
30
  */
31
31
  openapi(): Promise<OpenApiDocument>;
package/dist/index.js CHANGED
@@ -155,7 +155,7 @@ var PublicClient = class {
155
155
  return await parseJson(result);
156
156
  }
157
157
  /**
158
- * @name Self-description
158
+ * @name OpenAPI document
159
159
  * @description This API as an OpenAPI 3.1 document, describing the core that serves it.
160
160
  */
161
161
  async openapi() {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generated/sdk-options.ts","../src/generated/public/public.client.ts","../src/generated/rhapsode.sdk.ts"],"sourcesContent":["export class SdkError<TBody = unknown> extends Error {\n constructor(\n public readonly status: number,\n public readonly statusText: string,\n public readonly body: TBody,\n public readonly headers: Headers,\n ) {\n super(`${status} ${statusText}`);\n this.name = 'SdkError';\n }\n}\n\nexport interface SdkRequestInit extends RequestInit {\n /**\n * Statuses this operation declares as values rather than errors — a 304 from\n * conditional-GET middleware, or an error status the service returns deliberately.\n * Anything else at or above 400 still throws SdkError.\n */\n expectStatuses?: number[];\n}\n\nexport type SdkFetch = (url: string, init: SdkRequestInit) => Promise<Response>;\n\nexport interface SdkOptions {\n baseUrl: string;\n headers?: Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);\n fetch?: SdkFetch;\n /** Called once per request to produce a unique X-Request-ID header value */\n requestIdFactory?: () => string;\n}\n\nexport const bigIntReplacer = (_: string, value: any): any => {\n if (typeof value === 'bigint') {\n return value.toString() + 'n';\n }\n return value;\n};\n\nexport const bigIntReviver = (_: string, value: any): any => {\n if (typeof value === 'string' && /^-?\\d+n$/.test(value)) {\n return BigInt(value.slice(0, -1));\n }\n return value;\n};\n\nexport type JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\nexport function readContentType(res: Response): string {\n return res.headers.get('content-type')?.split(';')[0]?.trim() ?? '';\n}\n\n/** A v4 UUID. `crypto.randomUUID` exists only in a secure context, so plain HTTP builds one by hand. */\nfunction randomRequestId(): string {\n if (typeof crypto.randomUUID === 'function') return crypto.randomUUID();\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n bytes[6] = (bytes[6]! & 0x0f) | 0x40;\n bytes[8] = (bytes[8]! & 0x3f) | 0x80;\n const hex = Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nexport function createSdkFetch(options: SdkOptions): SdkFetch {\n const getRequestId = options.requestIdFactory ?? randomRequestId;\n return async (url: string, init: SdkRequestInit): Promise<Response> => {\n const baseHeaders = typeof options.headers === 'function' ? await options.headers() : (options.headers ?? {});\n const res = await fetch(`${options.baseUrl}${url}`, {\n ...init,\n headers: { ...baseHeaders, 'X-Request-ID': getRequestId(), ...(init.headers as Record<string, string>) },\n });\n if (!res.ok && !(init.expectStatuses ?? []).includes(res.status)) {\n const text = await res.text();\n let body: unknown;\n try {\n body = JSON.parse(text);\n } catch {\n body = text;\n }\n throw new SdkError(res.status, res.statusText, body, res.headers);\n }\n return res;\n };\n}\n\nexport function buildQueryString(query: object | undefined): string {\n const searchParams = new URLSearchParams();\n if (query) {\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined || v === null) continue;\n if (Array.isArray(v)) {\n for (const item of v) searchParams.append(k, String(item));\n } else searchParams.set(k, String(v));\n }\n }\n const qs = searchParams.toString();\n return qs ? `?${qs}` : '';\n}\n\nexport function buildHeaders(headers: object | undefined): Record<string, string> {\n const out: Record<string, string> = {};\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n if (v === undefined || v === null) continue;\n out[k] = Array.isArray(v) ? v.map(String).join(', ') : String(v);\n }\n }\n return out;\n}\n\nexport function parseBigIntHeader(name: string, value: string): bigint {\n if (/^-?\\d+n?$/.test(value)) return BigInt(value.replace(/n$/, ''));\n throw new Error(`Response header '${name}' is not a bigint: ${JSON.stringify(value)}`);\n}\n\n/**\n * Read a JSON response body.\n *\n * No reviver: `bigIntReviver` matches any string of the form `123n` anywhere in the\n * document, so a contract with no bigint field would still have a legitimate string like\n * \"123n\" silently turned into a BigInt. Clients whose contracts do use bigint import\n * `parseJsonWithBigInt` under this name instead.\n */\nexport async function parseJson<T>(res: Response): Promise<T> {\n return JSON.parse(await res.text()) as T;\n}\n\n/** `parseJson` for contracts that declare a bigint, applying the `123n` reviver. */\nexport async function parseJsonWithBigInt<T>(res: Response): Promise<T> {\n return JSON.parse(await res.text(), bigIntReviver) as T;\n}\n","import type { SdkFetch } from '../sdk-options.js';\nimport { bigIntReplacer, parseJson, buildQueryString, readContentType } from '../sdk-options.js';\nimport type {\n Capabilities,\n CatalogEntry,\n CoreHealth,\n EngineDialogueRequest,\n EngineSpeakRequest,\n EngineSummary,\n ErrorBody,\n InstallJob,\n PullRequest,\n ReinstallOutdated,\n ResidencyDetail,\n UpdateStatus,\n Voice,\n} from '../rhapsode/types/rhapsode.types.js';\nimport type { OpenApiDocument, Settings, SettingsPatch } from './types/rhapsode.public.js';\n\nexport class PublicClient {\n constructor(private fetch: SdkFetch) {}\n\n /**\n * @name Health\n * @description The core's own health, which answers even while every worker is down.\n */\n async health(): Promise<CoreHealth> {\n const result = await this.fetch(`/health`, { method: 'GET' });\n return await parseJson<CoreHealth>(result);\n }\n\n /**\n * @name Update status\n * @description Whether a newer rhapsode has been released, from a check made at most once a day.\n */\n async updateStatus(): Promise<UpdateStatus> {\n const result = await this.fetch(`/update`, { method: 'GET' });\n return await parseJson<UpdateStatus>(result);\n }\n\n /**\n * @name Check for an update\n * @description Asks GitHub for the latest release now, and answers once it has.\n */\n async checkForUpdate(): Promise<UpdateStatus> {\n const result = await this.fetch(`/update/check`, { method: 'POST' });\n return await parseJson<UpdateStatus>(result);\n }\n\n /**\n * @name Residency\n * @description What each engine holds in memory, how big it is and when it expires.\n */\n async residency(): Promise<ResidencyDetail> {\n const result = await this.fetch(`/residency`, { method: 'GET' });\n return await parseJson<ResidencyDetail>(result);\n }\n\n /**\n * @name Self-description\n * @description This API as an OpenAPI 3.1 document, describing the core that serves it.\n */\n async openapi(): Promise<OpenApiDocument> {\n const result = await this.fetch(`/openapi.json`, { method: 'GET' });\n return await parseJson<OpenApiDocument>(result);\n }\n\n /**\n * @name Engines\n * @description Every declared engine, running or not, with its code and weights licences.\n */\n async engines(): Promise<EngineSummary[]> {\n const result = await this.fetch(`/engines`, { method: 'GET' });\n return await parseJson<EngineSummary[]>(result);\n }\n\n /**\n * @name Engine capabilities\n * @description What the engine can do with the variant it has loaded, and what its other variants could.\n */\n async engineCapabilities(\n engine: string,\n ): Promise<\n | { status: 200; contentType: 'application/json'; data: Capabilities }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 503; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/capabilities`, {\n method: 'GET',\n expectStatuses: [404, 503],\n });\n switch (result.status) {\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 503:\n return { status: 503, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<Capabilities>(result) };\n }\n }\n\n /**\n * @name Voices\n * @description The engine's voices, built in and cloned.\n */\n async engineVoices(\n engine: string,\n ): Promise<{ status: 200; contentType: 'application/json'; data: Voice[] } | { status: 404; contentType: 'application/json'; data: ErrorBody }> {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/voices`, {\n method: 'GET',\n expectStatuses: [404],\n });\n switch (result.status) {\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<Voice[]>(result) };\n }\n }\n\n /**\n * @name Create a voice\n * @description Creates a voice from a reference, such as a clip to clone, or from a blend of voices the engine has.\n */\n async createVoice(\n engine: string,\n body: FormData,\n ): Promise<\n | { status: 201; contentType: 'application/json'; data: Voice }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 422; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/voices`, {\n method: 'POST',\n body: body,\n expectStatuses: [400, 403, 404, 422],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 422:\n return { status: 422, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 201, contentType: 'application/json', data: await parseJson<Voice>(result) };\n }\n }\n\n /**\n * @name Delete a voice\n * @description Deletes a voice.\n */\n async deleteVoice(\n engine: string,\n voice: string,\n ): Promise<\n | { status: 204 }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 422; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/voices/${encodeURIComponent(voice)}`, {\n method: 'DELETE',\n expectStatuses: [400, 403, 404, 422],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 422:\n return { status: 422, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 204 };\n }\n }\n\n /**\n * @name Voice preview\n * @description A short sample of the voice.\n */\n async voicePreview(\n engine: string,\n voice: string,\n ): Promise<{ status: 200; contentType: 'audio/wav'; data: Blob } | { status: 404; contentType: 'application/json'; data: ErrorBody }> {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/voices/${encodeURIComponent(voice)}/preview`, {\n method: 'GET',\n expectStatuses: [404],\n });\n switch (result.status) {\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'audio/wav', data: await result.blob() };\n }\n }\n\n /**\n * @name Speak\n * @description Speaks a line with one engine, streamed or as a finished file.\n */\n async speak(\n body: EngineSpeakRequest,\n ): Promise<\n | { status: 200; contentType: 'audio/wav' | 'audio/mpeg' | 'audio/opus' | 'audio/flac' | 'audio/l16'; data: Blob }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 422; contentType: 'application/json'; data: ErrorBody }\n | { status: 429; contentType: 'application/json'; data: ErrorBody }\n | { status: 503; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/speak`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body, bigIntReplacer),\n expectStatuses: [400, 404, 422, 429, 503],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 422:\n return { status: 422, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 429:\n return { status: 429, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 503:\n return { status: 503, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return {\n status: 200,\n contentType: readContentType(result) as 'audio/wav' | 'audio/mpeg' | 'audio/opus' | 'audio/flac' | 'audio/l16',\n data: await result.blob(),\n };\n }\n }\n\n /**\n * @name Dialogue\n * @description A conversation between speakers in one take, on a variant that declares dialogue.\n */\n async dialogue(\n engine: string,\n body: EngineDialogueRequest,\n ): Promise<\n | { status: 200; contentType: 'audio/wav' | 'audio/mpeg' | 'audio/opus' | 'audio/flac' | 'audio/l16'; data: Blob }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 422; contentType: 'application/json'; data: ErrorBody }\n | { status: 429; contentType: 'application/json'; data: ErrorBody }\n | { status: 503; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/dialogue`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body, bigIntReplacer),\n expectStatuses: [400, 404, 422, 429, 503],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 422:\n return { status: 422, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 429:\n return { status: 429, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 503:\n return { status: 503, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return {\n status: 200,\n contentType: readContentType(result) as 'audio/wav' | 'audio/mpeg' | 'audio/opus' | 'audio/flac' | 'audio/l16',\n data: await result.blob(),\n };\n }\n }\n\n /**\n * @name Catalog\n * @description Every engine this core knows how to install, with both licences, before anything is installed.\n */\n async catalog(): Promise<CatalogEntry[]> {\n const result = await this.fetch(`/catalog`, { method: 'GET' });\n return await parseJson<CatalogEntry[]>(result);\n }\n\n /**\n * @name Uninstall an engine\n * @description Removes an engine this API installed.\n */\n async uninstallEngine(\n engine: string,\n ): Promise<\n | { status: 204 }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 409; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}`, {\n method: 'DELETE',\n expectStatuses: [403, 404, 409],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 409:\n return { status: 409, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 204 };\n }\n }\n\n /**\n * @name Unload an engine\n * @description Frees the engine's model now, rather than waiting out its keep-alive.\n */\n async unloadEngine(\n engine: string,\n query?: { mode?: 'terminate' | 'unload' },\n ): Promise<\n | { status: 200; contentType: 'application/json'; data: EngineSummary }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 409; contentType: 'application/json'; data: ErrorBody }\n > {\n const qs = buildQueryString(query);\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/unload${qs}`, {\n method: 'POST',\n expectStatuses: [403, 404, 409],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 409:\n return { status: 409, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<EngineSummary>(result) };\n }\n }\n\n /**\n * @name Install an engine\n * @description Installs an engine from the catalog, as a job to follow.\n */\n async installEngine(\n engine: string,\n query?: { pull?: string; accept?: string },\n ): Promise<\n | { status: 202; contentType: 'application/json'; data: InstallJob }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 409; contentType: 'application/json'; data: ErrorBody }\n > {\n const qs = buildQueryString(query);\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/install${qs}`, {\n method: 'POST',\n expectStatuses: [400, 403, 404, 409],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 409:\n return { status: 409, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 202, contentType: 'application/json', data: await parseJson<InstallJob>(result) };\n }\n }\n\n /**\n * @name Reinstall an engine\n * @description Rebuilds an installed engine beside the old one and swaps it in once it works.\n */\n async reinstallEngine(\n engine: string,\n query?: { accept?: string },\n ): Promise<\n | { status: 202; contentType: 'application/json'; data: InstallJob }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 409; contentType: 'application/json'; data: ErrorBody }\n > {\n const qs = buildQueryString(query);\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/reinstall${qs}`, {\n method: 'POST',\n expectStatuses: [400, 403, 404, 409],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 409:\n return { status: 409, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 202, contentType: 'application/json', data: await parseJson<InstallJob>(result) };\n }\n }\n\n /**\n * @name Pull weights\n * @description Downloads a variant's weights ahead of its first load, as a job to follow.\n */\n async pullEngine(\n engine: string,\n body: PullRequest,\n ): Promise<\n | { status: 202; contentType: 'application/json'; data: InstallJob }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 409; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/pull`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body, bigIntReplacer),\n expectStatuses: [403, 404, 409],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 409:\n return { status: 409, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 202, contentType: 'application/json', data: await parseJson<InstallJob>(result) };\n }\n }\n\n /**\n * @name Install jobs\n * @description Every install job, running and finished.\n */\n async installJobs(): Promise<\n { status: 200; contentType: 'application/json'; data: InstallJob[] } | { status: 403; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/installs`, {\n method: 'GET',\n expectStatuses: [403],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<InstallJob[]>(result) };\n }\n }\n\n /**\n * @name Reinstall outdated engines\n * @description Reinstalls every engine an upgrade left behind.\n */\n async reinstallOutdated(): Promise<\n { status: 202; contentType: 'application/json'; data: ReinstallOutdated } | { status: 403; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/installs/outdated`, {\n method: 'POST',\n expectStatuses: [403],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 202, contentType: 'application/json', data: await parseJson<ReinstallOutdated>(result) };\n }\n }\n\n /**\n * @name Install job\n * @description One install job and where it has got to.\n */\n async installJob(\n job: string,\n ): Promise<\n | { status: 200; contentType: 'application/json'; data: InstallJob }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/installs/${encodeURIComponent(job)}`, {\n method: 'GET',\n expectStatuses: [403, 404],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<InstallJob>(result) };\n }\n }\n\n /**\n * @name Install job events\n * @description An install job's progress and output as server-sent events.\n */\n async installJobEvents(\n job: string,\n ): Promise<\n | { status: 200; contentType: 'text/event-stream'; data: string }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/installs/${encodeURIComponent(job)}/events`, {\n method: 'GET',\n expectStatuses: [403, 404],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'text/event-stream', data: await result.text() };\n }\n }\n\n /**\n * @name Settings\n * @description Every setting, its value, where the value came from and whether a change applies now.\n */\n async settings(): Promise<\n { status: 200; contentType: 'application/json'; data: Settings } | { status: 403; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/settings`, {\n method: 'GET',\n expectStatuses: [403],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<Settings>(result) };\n }\n }\n\n /**\n * @name Update settings\n * @description Changes settings in one transaction, and answers the whole document after the write.\n */\n async updateSettings(\n body: SettingsPatch,\n ): Promise<\n | { status: 200; contentType: 'application/json'; data: Settings }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 409; contentType: 'application/json'; data: ErrorBody }\n | { status: 422; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/settings`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body, bigIntReplacer),\n expectStatuses: [400, 403, 404, 409, 422],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 409:\n return { status: 409, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 422:\n return { status: 422, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<Settings>(result) };\n }\n }\n}\n","import type { SdkOptions } from './sdk-options.js';\nimport { createSdkFetch } from './sdk-options.js';\nimport { PublicClient } from './public/public.client.js';\n\nexport class RhapsodeSdk {\n readonly public: PublicClient;\n\n constructor(options: SdkOptions) {\n const sdkFetch = options.fetch ?? createSdkFetch(options);\n this.public = new PublicClient(sdkFetch);\n }\n}\n"],"mappings":"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","names":["SdkError","Error","status","statusText","body","headers","name","bigIntReplacer","_","value","toString","bigIntReviver","test","BigInt","slice","readContentType","res","get","split","trim","randomRequestId","crypto","randomUUID","bytes","getRandomValues","Uint8Array","hex","Array","from","b","padStart","join","createSdkFetch","options","getRequestId","requestIdFactory","url","init","baseHeaders","fetch","baseUrl","ok","expectStatuses","includes","text","JSON","parse","buildQueryString","query","searchParams","URLSearchParams","k","v","Object","entries","undefined","isArray","item","append","String","set","qs","buildHeaders","out","map","parseBigIntHeader","replace","stringify","parseJson","parseJsonWithBigInt","PublicClient","fetch","health","result","method","parseJson","updateStatus","checkForUpdate","residency","openapi","engines","engineCapabilities","engine","encodeURIComponent","expectStatuses","status","contentType","data","engineVoices","createVoice","body","deleteVoice","voice","voicePreview","blob","speak","headers","JSON","stringify","bigIntReplacer","readContentType","dialogue","catalog","uninstallEngine","unloadEngine","query","qs","buildQueryString","installEngine","reinstallEngine","pullEngine","installJobs","reinstallOutdated","installJob","job","installJobEvents","text","settings","updateSettings","RhapsodeSdk","public","options","sdkFetch","fetch","createSdkFetch","PublicClient"]}
1
+ {"version":3,"sources":["../src/generated/sdk-options.ts","../src/generated/public/public.client.ts","../src/generated/rhapsode.sdk.ts"],"sourcesContent":["export class SdkError<TBody = unknown> extends Error {\n constructor(\n public readonly status: number,\n public readonly statusText: string,\n public readonly body: TBody,\n public readonly headers: Headers,\n ) {\n super(`${status} ${statusText}`);\n this.name = 'SdkError';\n }\n}\n\nexport interface SdkRequestInit extends RequestInit {\n /**\n * Statuses this operation declares as values rather than errors — a 304 from\n * conditional-GET middleware, or an error status the service returns deliberately.\n * Anything else at or above 400 still throws SdkError.\n */\n expectStatuses?: number[];\n}\n\nexport type SdkFetch = (url: string, init: SdkRequestInit) => Promise<Response>;\n\nexport interface SdkOptions {\n baseUrl: string;\n headers?: Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);\n fetch?: SdkFetch;\n /** Called once per request to produce a unique X-Request-ID header value */\n requestIdFactory?: () => string;\n}\n\nexport const bigIntReplacer = (_: string, value: any): any => {\n if (typeof value === 'bigint') {\n return value.toString() + 'n';\n }\n return value;\n};\n\nexport const bigIntReviver = (_: string, value: any): any => {\n if (typeof value === 'string' && /^-?\\d+n$/.test(value)) {\n return BigInt(value.slice(0, -1));\n }\n return value;\n};\n\nexport type JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\nexport function readContentType(res: Response): string {\n return res.headers.get('content-type')?.split(';')[0]?.trim() ?? '';\n}\n\n/** A v4 UUID. `crypto.randomUUID` exists only in a secure context, so plain HTTP builds one by hand. */\nfunction randomRequestId(): string {\n if (typeof crypto.randomUUID === 'function') return crypto.randomUUID();\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n bytes[6] = (bytes[6]! & 0x0f) | 0x40;\n bytes[8] = (bytes[8]! & 0x3f) | 0x80;\n const hex = Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nexport function createSdkFetch(options: SdkOptions): SdkFetch {\n const getRequestId = options.requestIdFactory ?? randomRequestId;\n return async (url: string, init: SdkRequestInit): Promise<Response> => {\n const baseHeaders = typeof options.headers === 'function' ? await options.headers() : (options.headers ?? {});\n const res = await fetch(`${options.baseUrl}${url}`, {\n ...init,\n headers: { ...baseHeaders, 'X-Request-ID': getRequestId(), ...(init.headers as Record<string, string>) },\n });\n if (!res.ok && !(init.expectStatuses ?? []).includes(res.status)) {\n const text = await res.text();\n let body: unknown;\n try {\n body = JSON.parse(text);\n } catch {\n body = text;\n }\n throw new SdkError(res.status, res.statusText, body, res.headers);\n }\n return res;\n };\n}\n\nexport function buildQueryString(query: object | undefined): string {\n const searchParams = new URLSearchParams();\n if (query) {\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined || v === null) continue;\n if (Array.isArray(v)) {\n for (const item of v) searchParams.append(k, String(item));\n } else searchParams.set(k, String(v));\n }\n }\n const qs = searchParams.toString();\n return qs ? `?${qs}` : '';\n}\n\nexport function buildHeaders(headers: object | undefined): Record<string, string> {\n const out: Record<string, string> = {};\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n if (v === undefined || v === null) continue;\n out[k] = Array.isArray(v) ? v.map(String).join(', ') : String(v);\n }\n }\n return out;\n}\n\nexport function parseBigIntHeader(name: string, value: string): bigint {\n if (/^-?\\d+n?$/.test(value)) return BigInt(value.replace(/n$/, ''));\n throw new Error(`Response header '${name}' is not a bigint: ${JSON.stringify(value)}`);\n}\n\n/**\n * Read a JSON response body.\n *\n * No reviver: `bigIntReviver` matches any string of the form `123n` anywhere in the\n * document, so a contract with no bigint field would still have a legitimate string like\n * \"123n\" silently turned into a BigInt. Clients whose contracts do use bigint import\n * `parseJsonWithBigInt` under this name instead.\n */\nexport async function parseJson<T>(res: Response): Promise<T> {\n return JSON.parse(await res.text()) as T;\n}\n\n/** `parseJson` for contracts that declare a bigint, applying the `123n` reviver. */\nexport async function parseJsonWithBigInt<T>(res: Response): Promise<T> {\n return JSON.parse(await res.text(), bigIntReviver) as T;\n}\n","import type { SdkFetch } from '../sdk-options.js';\nimport { bigIntReplacer, parseJson, buildQueryString, readContentType } from '../sdk-options.js';\nimport type {\n Capabilities,\n CatalogEntry,\n CoreHealth,\n EngineDialogueRequest,\n EngineSpeakRequest,\n EngineSummary,\n ErrorBody,\n InstallJob,\n PullRequest,\n ReinstallOutdated,\n ResidencyDetail,\n UpdateStatus,\n Voice,\n} from '../rhapsode/types/rhapsode.types.js';\nimport type { OpenApiDocument, Settings, SettingsPatch } from './types/rhapsode.public.js';\n\nexport class PublicClient {\n constructor(private fetch: SdkFetch) {}\n\n /**\n * @name Health\n * @description The core's own health, which answers even while every worker is down.\n */\n async health(): Promise<CoreHealth> {\n const result = await this.fetch(`/health`, { method: 'GET' });\n return await parseJson<CoreHealth>(result);\n }\n\n /**\n * @name Update status\n * @description Whether a newer rhapsode has been released, from a check made at most once a day.\n */\n async updateStatus(): Promise<UpdateStatus> {\n const result = await this.fetch(`/update`, { method: 'GET' });\n return await parseJson<UpdateStatus>(result);\n }\n\n /**\n * @name Check for an update\n * @description Asks GitHub for the latest release now, and answers once it has.\n */\n async checkForUpdate(): Promise<UpdateStatus> {\n const result = await this.fetch(`/update/check`, { method: 'POST' });\n return await parseJson<UpdateStatus>(result);\n }\n\n /**\n * @name Residency\n * @description What each engine holds in memory, how big it is and when it expires.\n */\n async residency(): Promise<ResidencyDetail> {\n const result = await this.fetch(`/residency`, { method: 'GET' });\n return await parseJson<ResidencyDetail>(result);\n }\n\n /**\n * @name OpenAPI document\n * @description This API as an OpenAPI 3.1 document, describing the core that serves it.\n */\n async openapi(): Promise<OpenApiDocument> {\n const result = await this.fetch(`/openapi.json`, { method: 'GET' });\n return await parseJson<OpenApiDocument>(result);\n }\n\n /**\n * @name Engines\n * @description Every declared engine, running or not, with its code and weights licences.\n */\n async engines(): Promise<EngineSummary[]> {\n const result = await this.fetch(`/engines`, { method: 'GET' });\n return await parseJson<EngineSummary[]>(result);\n }\n\n /**\n * @name Engine capabilities\n * @description What the engine can do with the variant it has loaded, and what its other variants could.\n */\n async engineCapabilities(\n engine: string,\n ): Promise<\n | { status: 200; contentType: 'application/json'; data: Capabilities }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 503; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/capabilities`, {\n method: 'GET',\n expectStatuses: [404, 503],\n });\n switch (result.status) {\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 503:\n return { status: 503, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<Capabilities>(result) };\n }\n }\n\n /**\n * @name Voices\n * @description The engine's voices, built in and cloned.\n */\n async engineVoices(\n engine: string,\n ): Promise<{ status: 200; contentType: 'application/json'; data: Voice[] } | { status: 404; contentType: 'application/json'; data: ErrorBody }> {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/voices`, {\n method: 'GET',\n expectStatuses: [404],\n });\n switch (result.status) {\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<Voice[]>(result) };\n }\n }\n\n /**\n * @name Create a voice\n * @description Creates a voice from a reference, such as a clip to clone, or from a blend of voices the engine has.\n */\n async createVoice(\n engine: string,\n body: FormData,\n ): Promise<\n | { status: 201; contentType: 'application/json'; data: Voice }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 422; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/voices`, {\n method: 'POST',\n body: body,\n expectStatuses: [400, 403, 404, 422],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 422:\n return { status: 422, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 201, contentType: 'application/json', data: await parseJson<Voice>(result) };\n }\n }\n\n /**\n * @name Delete a voice\n * @description Deletes a voice.\n */\n async deleteVoice(\n engine: string,\n voice: string,\n ): Promise<\n | { status: 204 }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 422; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/voices/${encodeURIComponent(voice)}`, {\n method: 'DELETE',\n expectStatuses: [400, 403, 404, 422],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 422:\n return { status: 422, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 204 };\n }\n }\n\n /**\n * @name Voice preview\n * @description A short sample of the voice.\n */\n async voicePreview(\n engine: string,\n voice: string,\n ): Promise<{ status: 200; contentType: 'audio/wav'; data: Blob } | { status: 404; contentType: 'application/json'; data: ErrorBody }> {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/voices/${encodeURIComponent(voice)}/preview`, {\n method: 'GET',\n expectStatuses: [404],\n });\n switch (result.status) {\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'audio/wav', data: await result.blob() };\n }\n }\n\n /**\n * @name Speak\n * @description Speaks a line with one engine, streamed or as a finished file.\n */\n async speak(\n body: EngineSpeakRequest,\n ): Promise<\n | { status: 200; contentType: 'audio/wav' | 'audio/mpeg' | 'audio/opus' | 'audio/flac' | 'audio/l16'; data: Blob }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 422; contentType: 'application/json'; data: ErrorBody }\n | { status: 429; contentType: 'application/json'; data: ErrorBody }\n | { status: 503; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/speak`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body, bigIntReplacer),\n expectStatuses: [400, 404, 422, 429, 503],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 422:\n return { status: 422, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 429:\n return { status: 429, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 503:\n return { status: 503, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return {\n status: 200,\n contentType: readContentType(result) as 'audio/wav' | 'audio/mpeg' | 'audio/opus' | 'audio/flac' | 'audio/l16',\n data: await result.blob(),\n };\n }\n }\n\n /**\n * @name Dialogue\n * @description A conversation between speakers in one take, on a variant that declares dialogue.\n */\n async dialogue(\n engine: string,\n body: EngineDialogueRequest,\n ): Promise<\n | { status: 200; contentType: 'audio/wav' | 'audio/mpeg' | 'audio/opus' | 'audio/flac' | 'audio/l16'; data: Blob }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 422; contentType: 'application/json'; data: ErrorBody }\n | { status: 429; contentType: 'application/json'; data: ErrorBody }\n | { status: 503; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/dialogue`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body, bigIntReplacer),\n expectStatuses: [400, 404, 422, 429, 503],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 422:\n return { status: 422, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 429:\n return { status: 429, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 503:\n return { status: 503, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return {\n status: 200,\n contentType: readContentType(result) as 'audio/wav' | 'audio/mpeg' | 'audio/opus' | 'audio/flac' | 'audio/l16',\n data: await result.blob(),\n };\n }\n }\n\n /**\n * @name Catalog\n * @description Every engine this core knows how to install, with both licences, before anything is installed.\n */\n async catalog(): Promise<CatalogEntry[]> {\n const result = await this.fetch(`/catalog`, { method: 'GET' });\n return await parseJson<CatalogEntry[]>(result);\n }\n\n /**\n * @name Uninstall an engine\n * @description Removes an engine this API installed.\n */\n async uninstallEngine(\n engine: string,\n ): Promise<\n | { status: 204 }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 409; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}`, {\n method: 'DELETE',\n expectStatuses: [403, 404, 409],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 409:\n return { status: 409, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 204 };\n }\n }\n\n /**\n * @name Unload an engine\n * @description Frees the engine's model now, rather than waiting out its keep-alive.\n */\n async unloadEngine(\n engine: string,\n query?: { mode?: 'terminate' | 'unload' },\n ): Promise<\n | { status: 200; contentType: 'application/json'; data: EngineSummary }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 409; contentType: 'application/json'; data: ErrorBody }\n > {\n const qs = buildQueryString(query);\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/unload${qs}`, {\n method: 'POST',\n expectStatuses: [403, 404, 409],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 409:\n return { status: 409, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<EngineSummary>(result) };\n }\n }\n\n /**\n * @name Install an engine\n * @description Installs an engine from the catalog, as a job to follow.\n */\n async installEngine(\n engine: string,\n query?: { pull?: string; accept?: string },\n ): Promise<\n | { status: 202; contentType: 'application/json'; data: InstallJob }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 409; contentType: 'application/json'; data: ErrorBody }\n > {\n const qs = buildQueryString(query);\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/install${qs}`, {\n method: 'POST',\n expectStatuses: [400, 403, 404, 409],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 409:\n return { status: 409, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 202, contentType: 'application/json', data: await parseJson<InstallJob>(result) };\n }\n }\n\n /**\n * @name Reinstall an engine\n * @description Rebuilds an installed engine beside the old one and swaps it in once it works.\n */\n async reinstallEngine(\n engine: string,\n query?: { accept?: string },\n ): Promise<\n | { status: 202; contentType: 'application/json'; data: InstallJob }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 409; contentType: 'application/json'; data: ErrorBody }\n > {\n const qs = buildQueryString(query);\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/reinstall${qs}`, {\n method: 'POST',\n expectStatuses: [400, 403, 404, 409],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 409:\n return { status: 409, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 202, contentType: 'application/json', data: await parseJson<InstallJob>(result) };\n }\n }\n\n /**\n * @name Pull weights\n * @description Downloads a variant's weights ahead of its first load, as a job to follow.\n */\n async pullEngine(\n engine: string,\n body: PullRequest,\n ): Promise<\n | { status: 202; contentType: 'application/json'; data: InstallJob }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 409; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/engines/${encodeURIComponent(engine)}/pull`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body, bigIntReplacer),\n expectStatuses: [403, 404, 409],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 409:\n return { status: 409, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 202, contentType: 'application/json', data: await parseJson<InstallJob>(result) };\n }\n }\n\n /**\n * @name Install jobs\n * @description Every install job, running and finished.\n */\n async installJobs(): Promise<\n { status: 200; contentType: 'application/json'; data: InstallJob[] } | { status: 403; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/installs`, {\n method: 'GET',\n expectStatuses: [403],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<InstallJob[]>(result) };\n }\n }\n\n /**\n * @name Reinstall outdated engines\n * @description Reinstalls every engine an upgrade left behind.\n */\n async reinstallOutdated(): Promise<\n { status: 202; contentType: 'application/json'; data: ReinstallOutdated } | { status: 403; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/installs/outdated`, {\n method: 'POST',\n expectStatuses: [403],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 202, contentType: 'application/json', data: await parseJson<ReinstallOutdated>(result) };\n }\n }\n\n /**\n * @name Install job\n * @description One install job and where it has got to.\n */\n async installJob(\n job: string,\n ): Promise<\n | { status: 200; contentType: 'application/json'; data: InstallJob }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/installs/${encodeURIComponent(job)}`, {\n method: 'GET',\n expectStatuses: [403, 404],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<InstallJob>(result) };\n }\n }\n\n /**\n * @name Install job events\n * @description An install job's progress and output as server-sent events.\n */\n async installJobEvents(\n job: string,\n ): Promise<\n | { status: 200; contentType: 'text/event-stream'; data: string }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/installs/${encodeURIComponent(job)}/events`, {\n method: 'GET',\n expectStatuses: [403, 404],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'text/event-stream', data: await result.text() };\n }\n }\n\n /**\n * @name Settings\n * @description Every setting, its value, where the value came from and whether a change applies now.\n */\n async settings(): Promise<\n { status: 200; contentType: 'application/json'; data: Settings } | { status: 403; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/settings`, {\n method: 'GET',\n expectStatuses: [403],\n });\n switch (result.status) {\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<Settings>(result) };\n }\n }\n\n /**\n * @name Update settings\n * @description Changes settings in one transaction, and answers the whole document after the write.\n */\n async updateSettings(\n body: SettingsPatch,\n ): Promise<\n | { status: 200; contentType: 'application/json'; data: Settings }\n | { status: 400; contentType: 'application/json'; data: ErrorBody }\n | { status: 403; contentType: 'application/json'; data: ErrorBody }\n | { status: 404; contentType: 'application/json'; data: ErrorBody }\n | { status: 409; contentType: 'application/json'; data: ErrorBody }\n | { status: 422; contentType: 'application/json'; data: ErrorBody }\n > {\n const result = await this.fetch(`/settings`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body, bigIntReplacer),\n expectStatuses: [400, 403, 404, 409, 422],\n });\n switch (result.status) {\n case 400:\n return { status: 400, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 403:\n return { status: 403, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 404:\n return { status: 404, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 409:\n return { status: 409, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n case 422:\n return { status: 422, contentType: 'application/json', data: await parseJson<ErrorBody>(result) };\n default:\n return { status: 200, contentType: 'application/json', data: await parseJson<Settings>(result) };\n }\n }\n}\n","import type { SdkOptions } from './sdk-options.js';\nimport { createSdkFetch } from './sdk-options.js';\nimport { PublicClient } from './public/public.client.js';\n\nexport class RhapsodeSdk {\n readonly public: PublicClient;\n\n constructor(options: SdkOptions) {\n const sdkFetch = options.fetch ?? createSdkFetch(options);\n this.public = new PublicClient(sdkFetch);\n }\n}\n"],"mappings":"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","names":["SdkError","Error","status","statusText","body","headers","name","bigIntReplacer","_","value","toString","bigIntReviver","test","BigInt","slice","readContentType","res","get","split","trim","randomRequestId","crypto","randomUUID","bytes","getRandomValues","Uint8Array","hex","Array","from","b","padStart","join","createSdkFetch","options","getRequestId","requestIdFactory","url","init","baseHeaders","fetch","baseUrl","ok","expectStatuses","includes","text","JSON","parse","buildQueryString","query","searchParams","URLSearchParams","k","v","Object","entries","undefined","isArray","item","append","String","set","qs","buildHeaders","out","map","parseBigIntHeader","replace","stringify","parseJson","parseJsonWithBigInt","PublicClient","fetch","health","result","method","parseJson","updateStatus","checkForUpdate","residency","openapi","engines","engineCapabilities","engine","encodeURIComponent","expectStatuses","status","contentType","data","engineVoices","createVoice","body","deleteVoice","voice","voicePreview","blob","speak","headers","JSON","stringify","bigIntReplacer","readContentType","dialogue","catalog","uninstallEngine","unloadEngine","query","qs","buildQueryString","installEngine","reinstallEngine","pullEngine","installJobs","reinstallOutdated","installJob","job","installJobEvents","text","settings","updateSettings","RhapsodeSdk","public","options","sdkFetch","fetch","createSdkFetch","PublicClient"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maroonedsoftware/rhapsode-sdk",
3
- "version": "0.1.12",
3
+ "version": "0.1.14",
4
4
  "description": "A typed client for the rhapsode public API, generated from contracts/.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -26,7 +26,7 @@
26
26
  "devDependencies": {
27
27
  "@repo/config-eslint": "0.0.0",
28
28
  "@repo/config-typescript": "0.0.0",
29
- "@rhapsode/core": "0.1.12",
29
+ "@rhapsode/core": "0.1.14",
30
30
  "vitest": "^5.0.0"
31
31
  },
32
32
  "publishConfig": {