/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/client/src/generated/client.ts
1 029 строк
35 KB
Kit Langton
feat(client): generate complete protocol client (#34164)
28 июн 2026, 05:25
Не верифицирован
28 июн 2026, 05:25
dfeb1b5
Код
Авторство
О чём код?
import type { HealthGetOutput, LocationGetInput, LocationGetOutput, AgentsListInput, AgentsListOutput, SessionsListInput, SessionsListOutput, SessionsCreateInput, SessionsCreateOutput, SessionsActiveOutput, SessionsGetInput, SessionsGetOutput, SessionsSwitchAgentInput, SessionsSwitchAgentOutput, SessionsSwitchModelInput, SessionsSwitchModelOutput, SessionsPromptInput, SessionsPromptOutput, SessionsCompactInput, SessionsCompactOutput, SessionsWaitInput, SessionsWaitOutput, SessionsStageInput, SessionsStageOutput, SessionsClearInput, SessionsClearOutput, SessionsCommitInput, SessionsCommitOutput, SessionsContextInput, SessionsContextOutput, SessionsHistoryInput, SessionsHistoryOutput, SessionsEventsInput, SessionsEventsOutput, SessionsInterruptInput, SessionsInterruptOutput, SessionsMessageInput, SessionsMessageOutput, MessagesListInput, MessagesListOutput, ModelsListInput, ModelsListOutput, ProvidersListInput, ProvidersListOutput, ProvidersGetInput, ProvidersGetOutput, IntegrationsListInput, IntegrationsListOutput, IntegrationsGetInput, IntegrationsGetOutput, IntegrationsConnectKeyInput, IntegrationsConnectKeyOutput, IntegrationsConnectOauthInput, IntegrationsConnectOauthOutput, IntegrationsAttemptStatusInput, IntegrationsAttemptStatusOutput, IntegrationsAttemptCompleteInput, IntegrationsAttemptCompleteOutput, IntegrationsAttemptCancelInput, IntegrationsAttemptCancelOutput, CredentialsUpdateInput, CredentialsUpdateOutput, CredentialsRemoveInput, CredentialsRemoveOutput, PermissionsListRequestsInput, PermissionsListRequestsOutput, PermissionsListSavedInput, PermissionsListSavedOutput, PermissionsRemoveSavedInput, PermissionsRemoveSavedOutput, PermissionsCreateInput, PermissionsCreateOutput, PermissionsListInput, PermissionsListOutput, PermissionsGetInput, PermissionsGetOutput, PermissionsReplyInput, PermissionsReplyOutput, FilesListInput, FilesListOutput, FilesFindInput, FilesFindOutput, CommandsListInput, CommandsListOutput, SkillsListInput, SkillsListOutput, EventsSubscribeOutput, PtysListInput, PtysListOutput, PtysCreateInput, PtysCreateOutput, PtysGetInput, PtysGetOutput, PtysUpdateInput, PtysUpdateOutput, PtysRemoveInput, PtysRemoveOutput, QuestionsListRequestsInput, QuestionsListRequestsOutput, QuestionsListInput, QuestionsListOutput, QuestionsReplyInput, QuestionsReplyOutput, QuestionsRejectInput, QuestionsRejectOutput, ReferencesListInput, ReferencesListOutput, ProjectCopiesCreateInput, ProjectCopiesCreateOutput, ProjectCopiesRemoveInput, ProjectCopiesRemoveOutput, ProjectCopiesRefreshInput, ProjectCopiesRefreshOutput, } from "./types" import { ClientError } from "./client-error" export interface ClientOptions { readonly baseUrl: string readonly fetch?: typeof globalThis.fetch readonly headers?: HeadersInit } export interface RequestOptions { readonly signal?: AbortSignal readonly headers?: HeadersInit } interface RequestDescriptor { readonly method: string readonly path: string readonly query?: Record<string, unknown> readonly headers?: Record<string, unknown> readonly body?: unknown readonly successStatus: number readonly declaredStatuses: ReadonlyArray<number> readonly empty: boolean } export function make(options: ClientOptions) { const fetch = options.fetch ?? globalThis.fetch const prepare = (descriptor: RequestDescriptor, requestOptions?: RequestOptions) => { const url = new URL(descriptor.path, options.baseUrl) for (const [key, value] of Object.entries(descriptor.query ?? {})) appendQuery(url.searchParams, key, value) const headers = new Headers(options.headers) for (const [key, value] of Object.entries(descriptor.headers ?? {})) { if (value !== undefined && value !== null) headers.set(key, String(value)) } for (const [key, value] of new Headers(requestOptions?.headers)) headers.set(key, value) if (descriptor.body !== undefined && !headers.has("content-type")) headers.set("content-type", "application/json") return { url, init: { method: descriptor.method, signal: requestOptions?.signal, headers, body: descriptor.body === undefined ? undefined : JSON.stringify(descriptor.body), } satisfies RequestInit, } } const execute = async (descriptor: RequestDescriptor, requestOptions?: RequestOptions) => { try { const prepared = prepare(descriptor, requestOptions) return await fetch(prepared.url, prepared.init) } catch (cause) { throw new ClientError("Transport", { cause }) } } const responseError = async (response: Response, descriptor: RequestDescriptor): Promise<never> => { if (descriptor.declaredStatuses.includes(response.status)) throw await json(response) try { await response.body?.cancel() } catch {} throw new ClientError("UnexpectedStatus", { cause: { status: response.status } }) } const request = async <A>(descriptor: RequestDescriptor, requestOptions?: RequestOptions): Promise<A> => { const response = await execute(descriptor, requestOptions) if (response.status !== descriptor.successStatus) return responseError(response, descriptor) if (descriptor.empty) { try { await response.body?.cancel() } catch {} return undefined as A } return (await json(response)) as A } const sse = <A>(descriptor: RequestDescriptor, requestOptions?: RequestOptions): AsyncIterable<A> => ({ async *[Symbol.asyncIterator]() { const response = await execute(descriptor, requestOptions) if (response.status !== descriptor.successStatus) await responseError(response, descriptor) if (!isContentType(response, "text/event-stream")) { try { await response.body?.cancel() } catch {} throw new ClientError("UnsupportedContentType") } if (response.body === null) throw new ClientError("MalformedResponse") const reader = response.body.getReader() const decoder = new TextDecoder() let buffer = "" try { while (true) { let next try { next = await reader.read() } catch (cause) { throw new ClientError("Transport", { cause }) } buffer += decoder.decode(next.value, { stream: !next.done }) if (buffer.length > 1_048_576) throw new ClientError("MalformedResponse") const trailingCarriageReturn = !next.done && buffer.endsWith("\r") if (trailingCarriageReturn) buffer = buffer.slice(0, -1) buffer = buffer.replaceAll("\r\n", "\n").replaceAll("\r", "\n") if (trailingCarriageReturn) buffer += "\r" if (next.done && buffer !== "") buffer += "\n\n" let boundary = buffer.indexOf("\n\n") while (boundary >= 0) { const block = buffer.slice(0, boundary) buffer = buffer.slice(boundary + 2) const data = block .split("\n") .flatMap((line) => (line.startsWith("data:") ? [line.slice(5).trimStart()] : [])) .join("\n") if (data !== "") { try { yield JSON.parse(data) as A } catch (cause) { throw new ClientError("MalformedResponse", { cause }) } } boundary = buffer.indexOf("\n\n") } if (next.done) return } } finally { try { await reader.cancel() } catch {} reader.releaseLock() } }, }) return { health: { get: (requestOptions?: RequestOptions) => request<HealthGetOutput>( { method: "GET", path: `/api/health`, successStatus: 200, declaredStatuses: [401, 400], empty: false }, requestOptions, ), }, location: { get: (input?: LocationGetInput, requestOptions?: RequestOptions) => request<LocationGetOutput>( { method: "GET", path: `/api/location`, query: { location: input?.["location"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), }, agents: { list: (input?: AgentsListInput, requestOptions?: RequestOptions) => request<AgentsListOutput>( { method: "GET", path: `/api/agent`, query: { location: input?.["location"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), }, sessions: { list: (input?: SessionsListInput, requestOptions?: RequestOptions) => request<SessionsListOutput>( { method: "GET", path: `/api/session`, query: { workspace: input?.["workspace"], limit: input?.["limit"], order: input?.["order"], search: input?.["search"], directory: input?.["directory"], project: input?.["project"], subpath: input?.["subpath"], cursor: input?.["cursor"], }, successStatus: 200, declaredStatuses: [400, 401], empty: false, }, requestOptions, ), create: (input?: SessionsCreateInput, requestOptions?: RequestOptions) => request<{ readonly data: SessionsCreateOutput }>( { method: "POST", path: `/api/session`, body: { id: input?.["id"], agent: input?.["agent"], model: input?.["model"], location: input?.["location"], }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ).then((value) => value.data), active: (requestOptions?: RequestOptions) => request<{ readonly data: SessionsActiveOutput }>( { method: "GET", path: `/api/session/active`, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ).then((value) => value.data), get: (input: SessionsGetInput, requestOptions?: RequestOptions) => request<{ readonly data: SessionsGetOutput }>( { method: "GET", path: `/api/session/${encodeURIComponent(input.sessionID)}`, successStatus: 200, declaredStatuses: [404, 400, 401], empty: false, }, requestOptions, ).then((value) => value.data), switchAgent: (input: SessionsSwitchAgentInput, requestOptions?: RequestOptions) => request<SessionsSwitchAgentOutput>( { method: "POST", path: `/api/session/${encodeURIComponent(input.sessionID)}/agent`, body: { agent: input["agent"] }, successStatus: 204, declaredStatuses: [404, 400, 401], empty: true, }, requestOptions, ), switchModel: (input: SessionsSwitchModelInput, requestOptions?: RequestOptions) => request<SessionsSwitchModelOutput>( { method: "POST", path: `/api/session/${encodeURIComponent(input.sessionID)}/model`, body: { model: input["model"] }, successStatus: 204, declaredStatuses: [404, 400, 401], empty: true, }, requestOptions, ), prompt: (input: SessionsPromptInput, requestOptions?: RequestOptions) => request<{ readonly data: SessionsPromptOutput }>( { method: "POST", path: `/api/session/${encodeURIComponent(input.sessionID)}/prompt`, body: { id: input["id"], prompt: input["prompt"], delivery: input["delivery"], resume: input["resume"] }, successStatus: 200, declaredStatuses: [409, 404, 400, 401], empty: false, }, requestOptions, ).then((value) => value.data), compact: (input: SessionsCompactInput, requestOptions?: RequestOptions) => request<SessionsCompactOutput>( { method: "POST", path: `/api/session/${encodeURIComponent(input.sessionID)}/compact`, successStatus: 204, declaredStatuses: [404, 503, 400, 401], empty: true, }, requestOptions, ), wait: (input: SessionsWaitInput, requestOptions?: RequestOptions) => request<SessionsWaitOutput>( { method: "POST", path: `/api/session/${encodeURIComponent(input.sessionID)}/wait`, successStatus: 204, declaredStatuses: [404, 503, 400, 401], empty: true, }, requestOptions, ), stage: (input: SessionsStageInput, requestOptions?: RequestOptions) => request<{ readonly data: SessionsStageOutput }>( { method: "POST", path: `/api/session/${encodeURIComponent(input.sessionID)}/revert/stage`, body: { messageID: input["messageID"], files: input["files"] }, successStatus: 200, declaredStatuses: [404, 500, 400, 401], empty: false, }, requestOptions, ).then((value) => value.data), clear: (input: SessionsClearInput, requestOptions?: RequestOptions) => request<SessionsClearOutput>( { method: "POST", path: `/api/session/${encodeURIComponent(input.sessionID)}/revert/clear`, successStatus: 204, declaredStatuses: [404, 500, 400, 401], empty: true, }, requestOptions, ), commit: (input: SessionsCommitInput, requestOptions?: RequestOptions) => request<SessionsCommitOutput>( { method: "POST", path: `/api/session/${encodeURIComponent(input.sessionID)}/revert/commit`, successStatus: 204, declaredStatuses: [404, 400, 401], empty: true, }, requestOptions, ), context: (input: SessionsContextInput, requestOptions?: RequestOptions) => request<{ readonly data: SessionsContextOutput }>( { method: "GET", path: `/api/session/${encodeURIComponent(input.sessionID)}/context`, successStatus: 200, declaredStatuses: [404, 500, 400, 401], empty: false, }, requestOptions, ).then((value) => value.data), history: (input: SessionsHistoryInput, requestOptions?: RequestOptions) => request<SessionsHistoryOutput>( { method: "GET", path: `/api/session/${encodeURIComponent(input.sessionID)}/history`, query: { limit: input["limit"], after: input["after"] }, successStatus: 200, declaredStatuses: [404, 400, 401], empty: false, }, requestOptions, ), events: (input: SessionsEventsInput, requestOptions?: RequestOptions): AsyncIterable<SessionsEventsOutput> => sse<SessionsEventsOutput>( { method: "GET", path: `/api/session/${encodeURIComponent(input.sessionID)}/event`, query: { after: input["after"] }, successStatus: 200, declaredStatuses: [404, 400, 401], empty: false, }, requestOptions, ), interrupt: (input: SessionsInterruptInput, requestOptions?: RequestOptions) => request<SessionsInterruptOutput>( { method: "POST", path: `/api/session/${encodeURIComponent(input.sessionID)}/interrupt`, successStatus: 204, declaredStatuses: [404, 400, 401], empty: true, }, requestOptions, ), message: (input: SessionsMessageInput, requestOptions?: RequestOptions) => request<{ readonly data: SessionsMessageOutput }>( { method: "GET", path: `/api/session/${encodeURIComponent(input.sessionID)}/message/${encodeURIComponent(input.messageID)}`, successStatus: 200, declaredStatuses: [404, 400, 401], empty: false, }, requestOptions, ).then((value) => value.data), }, messages: { list: (input: MessagesListInput, requestOptions?: RequestOptions) => request<MessagesListOutput>( { method: "GET", path: `/api/session/${encodeURIComponent(input.sessionID)}/message`, query: { limit: input["limit"], order: input["order"], cursor: input["cursor"] }, successStatus: 200, declaredStatuses: [400, 404, 500, 401], empty: false, }, requestOptions, ), }, models: { list: (input?: ModelsListInput, requestOptions?: RequestOptions) => request<ModelsListOutput>( { method: "GET", path: `/api/model`, query: { location: input?.["location"] }, successStatus: 200, declaredStatuses: [503, 401, 400], empty: false, }, requestOptions, ), }, providers: { list: (input?: ProvidersListInput, requestOptions?: RequestOptions) => request<ProvidersListOutput>( { method: "GET", path: `/api/provider`, query: { location: input?.["location"] }, successStatus: 200, declaredStatuses: [503, 401, 400], empty: false, }, requestOptions, ), get: (input: ProvidersGetInput, requestOptions?: RequestOptions) => request<ProvidersGetOutput>( { method: "GET", path: `/api/provider/${encodeURIComponent(input.providerID)}`, query: { location: input["location"] }, successStatus: 200, declaredStatuses: [404, 503, 401, 400], empty: false, }, requestOptions, ), }, integrations: { list: (input?: IntegrationsListInput, requestOptions?: RequestOptions) => request<IntegrationsListOutput>( { method: "GET", path: `/api/integration`, query: { location: input?.["location"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), get: (input: IntegrationsGetInput, requestOptions?: RequestOptions) => request<IntegrationsGetOutput>( { method: "GET", path: `/api/integration/${encodeURIComponent(input.integrationID)}`, query: { location: input["location"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), connectKey: (input: IntegrationsConnectKeyInput, requestOptions?: RequestOptions) => request<IntegrationsConnectKeyOutput>( { method: "POST", path: `/api/integration/${encodeURIComponent(input.integrationID)}/connect/key`, query: { location: input["location"] }, body: { key: input["key"], label: input["label"] }, successStatus: 204, declaredStatuses: [400, 401], empty: true, }, requestOptions, ), connectOauth: (input: IntegrationsConnectOauthInput, requestOptions?: RequestOptions) => request<IntegrationsConnectOauthOutput>( { method: "POST", path: `/api/integration/${encodeURIComponent(input.integrationID)}/connect/oauth`, query: { location: input["location"] }, body: { methodID: input["methodID"], inputs: input["inputs"], label: input["label"] }, successStatus: 200, declaredStatuses: [400, 401], empty: false, }, requestOptions, ), attemptStatus: (input: IntegrationsAttemptStatusInput, requestOptions?: RequestOptions) => request<IntegrationsAttemptStatusOutput>( { method: "GET", path: `/api/integration/attempt/${encodeURIComponent(input.attemptID)}`, query: { location: input["location"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), attemptComplete: (input: IntegrationsAttemptCompleteInput, requestOptions?: RequestOptions) => request<IntegrationsAttemptCompleteOutput>( { method: "POST", path: `/api/integration/attempt/${encodeURIComponent(input.attemptID)}/complete`, query: { location: input["location"] }, body: { code: input["code"] }, successStatus: 204, declaredStatuses: [400, 401], empty: true, }, requestOptions, ), attemptCancel: (input: IntegrationsAttemptCancelInput, requestOptions?: RequestOptions) => request<IntegrationsAttemptCancelOutput>( { method: "DELETE", path: `/api/integration/attempt/${encodeURIComponent(input.attemptID)}`, query: { location: input["location"] }, successStatus: 204, declaredStatuses: [401, 400], empty: true, }, requestOptions, ), }, credentials: { update: (input: CredentialsUpdateInput, requestOptions?: RequestOptions) => request<CredentialsUpdateOutput>( { method: "PATCH", path: `/api/credential/${encodeURIComponent(input.credentialID)}`, query: { location: input["location"] }, body: { label: input["label"] }, successStatus: 204, declaredStatuses: [401, 400], empty: true, }, requestOptions, ), remove: (input: CredentialsRemoveInput, requestOptions?: RequestOptions) => request<CredentialsRemoveOutput>( { method: "DELETE", path: `/api/credential/${encodeURIComponent(input.credentialID)}`, query: { location: input["location"] }, successStatus: 204, declaredStatuses: [401, 400], empty: true, }, requestOptions, ), }, permissions: { listRequests: (input?: PermissionsListRequestsInput, requestOptions?: RequestOptions) => request<PermissionsListRequestsOutput>( { method: "GET", path: `/api/permission/request`, query: { location: input?.["location"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), listSaved: (input?: PermissionsListSavedInput, requestOptions?: RequestOptions) => request<{ readonly data: PermissionsListSavedOutput }>( { method: "GET", path: `/api/permission/saved`, query: { projectID: input?.["projectID"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ).then((value) => value.data), removeSaved: (input: PermissionsRemoveSavedInput, requestOptions?: RequestOptions) => request<PermissionsRemoveSavedOutput>( { method: "DELETE", path: `/api/permission/saved/${encodeURIComponent(input.id)}`, successStatus: 204, declaredStatuses: [401, 400], empty: true, }, requestOptions, ), create: (input: PermissionsCreateInput, requestOptions?: RequestOptions) => request<{ readonly data: PermissionsCreateOutput }>( { method: "POST", path: `/api/session/${encodeURIComponent(input.sessionID)}/permission`, body: { id: input["id"], action: input["action"], resources: input["resources"], save: input["save"], metadata: input["metadata"], source: input["source"], agent: input["agent"], }, successStatus: 200, declaredStatuses: [404, 400, 401], empty: false, }, requestOptions, ).then((value) => value.data), list: (input: PermissionsListInput, requestOptions?: RequestOptions) => request<{ readonly data: PermissionsListOutput }>( { method: "GET", path: `/api/session/${encodeURIComponent(input.sessionID)}/permission`, successStatus: 200, declaredStatuses: [404, 400, 401], empty: false, }, requestOptions, ).then((value) => value.data), get: (input: PermissionsGetInput, requestOptions?: RequestOptions) => request<{ readonly data: PermissionsGetOutput }>( { method: "GET", path: `/api/session/${encodeURIComponent(input.sessionID)}/permission/${encodeURIComponent(input.requestID)}`, successStatus: 200, declaredStatuses: [404, 400, 401], empty: false, }, requestOptions, ).then((value) => value.data), reply: (input: PermissionsReplyInput, requestOptions?: RequestOptions) => request<PermissionsReplyOutput>( { method: "POST", path: `/api/session/${encodeURIComponent(input.sessionID)}/permission/${encodeURIComponent(input.requestID)}/reply`, body: { reply: input["reply"], message: input["message"] }, successStatus: 204, declaredStatuses: [404, 400, 401], empty: true, }, requestOptions, ), }, files: { list: (input?: FilesListInput, requestOptions?: RequestOptions) => request<FilesListOutput>( { method: "GET", path: `/api/fs/list`, query: { location: input?.["location"], path: input?.["path"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), find: (input: FilesFindInput, requestOptions?: RequestOptions) => request<FilesFindOutput>( { method: "GET", path: `/api/fs/find`, query: { location: input["location"], query: input["query"], type: input["type"], limit: input["limit"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), }, commands: { list: (input?: CommandsListInput, requestOptions?: RequestOptions) => request<CommandsListOutput>( { method: "GET", path: `/api/command`, query: { location: input?.["location"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), }, skills: { list: (input?: SkillsListInput, requestOptions?: RequestOptions) => request<SkillsListOutput>( { method: "GET", path: `/api/skill`, query: { location: input?.["location"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), }, events: { subscribe: (requestOptions?: RequestOptions): AsyncIterable<EventsSubscribeOutput> => sse<EventsSubscribeOutput>( { method: "GET", path: `/api/event`, successStatus: 200, declaredStatuses: [401, 400], empty: false }, requestOptions, ), }, ptys: { list: (input?: PtysListInput, requestOptions?: RequestOptions) => request<PtysListOutput>( { method: "GET", path: `/api/pty`, query: { location: input?.["location"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), create: (input?: PtysCreateInput, requestOptions?: RequestOptions) => request<PtysCreateOutput>( { method: "POST", path: `/api/pty`, query: { location: input?.["location"] }, body: { command: input?.["command"], args: input?.["args"], cwd: input?.["cwd"], title: input?.["title"], env: input?.["env"], }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), get: (input: PtysGetInput, requestOptions?: RequestOptions) => request<PtysGetOutput>( { method: "GET", path: `/api/pty/${encodeURIComponent(input.ptyID)}`, query: { location: input["location"] }, successStatus: 200, declaredStatuses: [404, 401, 400], empty: false, }, requestOptions, ), update: (input: PtysUpdateInput, requestOptions?: RequestOptions) => request<PtysUpdateOutput>( { method: "PUT", path: `/api/pty/${encodeURIComponent(input.ptyID)}`, query: { location: input["location"] }, body: { title: input["title"], size: input["size"] }, successStatus: 200, declaredStatuses: [404, 401, 400], empty: false, }, requestOptions, ), remove: (input: PtysRemoveInput, requestOptions?: RequestOptions) => request<PtysRemoveOutput>( { method: "DELETE", path: `/api/pty/${encodeURIComponent(input.ptyID)}`, query: { location: input["location"] }, successStatus: 204, declaredStatuses: [404, 401, 400], empty: true, }, requestOptions, ), }, questions: { listRequests: (input?: QuestionsListRequestsInput, requestOptions?: RequestOptions) => request<QuestionsListRequestsOutput>( { method: "GET", path: `/api/question/request`, query: { location: input?.["location"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), list: (input: QuestionsListInput, requestOptions?: RequestOptions) => request<{ readonly data: QuestionsListOutput }>( { method: "GET", path: `/api/session/${encodeURIComponent(input.sessionID)}/question`, successStatus: 200, declaredStatuses: [404, 400, 401], empty: false, }, requestOptions, ).then((value) => value.data), reply: (input: QuestionsReplyInput, requestOptions?: RequestOptions) => request<QuestionsReplyOutput>( { method: "POST", path: `/api/session/${encodeURIComponent(input.sessionID)}/question/${encodeURIComponent(input.requestID)}/reply`, body: { answers: input["answers"] }, successStatus: 204, declaredStatuses: [404, 400, 401], empty: true, }, requestOptions, ), reject: (input: QuestionsRejectInput, requestOptions?: RequestOptions) => request<QuestionsRejectOutput>( { method: "POST", path: `/api/session/${encodeURIComponent(input.sessionID)}/question/${encodeURIComponent(input.requestID)}/reject`, successStatus: 204, declaredStatuses: [404, 400, 401], empty: true, }, requestOptions, ), }, references: { list: (input?: ReferencesListInput, requestOptions?: RequestOptions) => request<ReferencesListOutput>( { method: "GET", path: `/api/reference`, query: { location: input?.["location"] }, successStatus: 200, declaredStatuses: [401, 400], empty: false, }, requestOptions, ), }, projectCopies: { create: (input: ProjectCopiesCreateInput, requestOptions?: RequestOptions) => request<ProjectCopiesCreateOutput>( { method: "POST", path: `/experimental/project/${encodeURIComponent(input.projectID)}/copy`, query: { location: input["location"] }, body: { strategy: input["strategy"], directory: input["directory"], name: input["name"] }, successStatus: 200, declaredStatuses: [400, 401], empty: false, }, requestOptions, ), remove: (input: ProjectCopiesRemoveInput, requestOptions?: RequestOptions) => request<ProjectCopiesRemoveOutput>( { method: "DELETE", path: `/experimental/project/${encodeURIComponent(input.projectID)}/copy`, query: { location: input["location"] }, body: { directory: input["directory"], force: input["force"] }, successStatus: 204, declaredStatuses: [400, 401], empty: true, }, requestOptions, ), refresh: (input: ProjectCopiesRefreshInput, requestOptions?: RequestOptions) => request<ProjectCopiesRefreshOutput>( { method: "POST", path: `/experimental/project/${encodeURIComponent(input.projectID)}/copy/refresh`, query: { location: input["location"] }, successStatus: 204, declaredStatuses: [400, 401], empty: true, }, requestOptions, ), }, } } function appendQuery(params: URLSearchParams, key: string, value: unknown): void { if (value === undefined || value === null) return if (Array.isArray(value)) { for (const item of value) appendQuery(params, key, item) return } if (typeof value === "object") { for (const [child, item] of Object.entries(value)) appendQuery(params, `${key}[${child}]`, item) return } params.append(key, String(value)) } async function json(response: Response): Promise<unknown> { if (!isContentType(response, "application/json") && !response.headers.get("content-type")?.includes("+json")) { try { await response.body?.cancel() } catch {} throw new ClientError("UnsupportedContentType") } let text: string try { text = await response.text() } catch (cause) { throw new ClientError("Transport", { cause }) } if (text === "") throw new ClientError("MalformedResponse") try { return JSON.parse(text) } catch (cause) { throw new ClientError("MalformedResponse", { cause }) } } function isContentType(response: Response, expected: string) { return response.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() === expected }