v0-sdk 0.5.1 → 0.5.3
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/dist/index.cjs +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -2,6 +2,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
2
2
|
|
|
3
3
|
function createFetcher(config = {}) {
|
|
4
4
|
const baseUrl = config.baseUrl || 'https://api.v0.dev/v1';
|
|
5
|
+
let sessionToken = null;
|
|
5
6
|
return async function fetcher(url, method, params = {}) {
|
|
6
7
|
const apiKey = config.apiKey || process.env.V0_API_KEY;
|
|
7
8
|
if (!apiKey) {
|
|
@@ -14,6 +15,10 @@ function createFetcher(config = {}) {
|
|
|
14
15
|
Authorization: `Bearer ${apiKey}`,
|
|
15
16
|
...params.headers
|
|
16
17
|
};
|
|
18
|
+
// Include session token in headers if available
|
|
19
|
+
if (sessionToken) {
|
|
20
|
+
headers['x-session-token'] = sessionToken;
|
|
21
|
+
}
|
|
17
22
|
if (hasBody) {
|
|
18
23
|
headers['Content-Type'] = 'application/json';
|
|
19
24
|
}
|
|
@@ -22,6 +27,11 @@ function createFetcher(config = {}) {
|
|
|
22
27
|
headers,
|
|
23
28
|
body: hasBody ? JSON.stringify(params.body) : undefined
|
|
24
29
|
});
|
|
30
|
+
// Check for session token in response headers
|
|
31
|
+
const newSessionToken = res.headers.get('x-session-token');
|
|
32
|
+
if (newSessionToken) {
|
|
33
|
+
sessionToken = newSessionToken;
|
|
34
|
+
}
|
|
25
35
|
if (!res.ok) {
|
|
26
36
|
const text = await res.text();
|
|
27
37
|
throw new Error(`HTTP ${res.status}: ${text}`);
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sources":["../src/sdk/v0.ts"],"sourcesContent":["import { createFetcher } from './core'\n\nexport type ChatDetail = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: {\n object: 'file'\n name: string\n content: string\n }[]\n }\n url: string\n messages: Array<{\n id: string\n object: 'message'\n content: string\n createdAt: string\n type:\n | 'message'\n | 'forked-block'\n | 'forked-chat'\n | 'open-in-v0'\n | 'refinement'\n | 'added-environment-variables'\n | 'added-integration'\n | 'deleted-file'\n | 'moved-file'\n | 'renamed-file'\n | 'edited-file'\n | 'replace-src'\n | 'reverted-block'\n | 'fix-with-v0'\n | 'auto-fix-with-v0'\n | 'sync-git'\n role: 'user' | 'assistant'\n }>\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n modelConfiguration: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n}\n\nexport type ChatSummary = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n }\n}\n\nexport interface DeploymentDetail {\n id: string\n object: 'deployment'\n inspectorUrl: string\n chatId: string\n projectId: string\n versionId: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface DeploymentSummary {\n id: string\n object: 'deployment'\n inspectorUrl: string\n chatId: string\n projectId: string\n versionId: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface FileDetail {\n object: 'file'\n name: string\n content: string\n}\n\nexport interface FileSummary {\n object: 'file'\n name: string\n}\n\nexport type HookDetail = {\n id: string\n object: 'hook'\n name: string\n events: Array<\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n >\n chatId?: string\n projectId?: string\n url: string\n}\n\nexport type HookEventDetail = {\n id: string\n object: 'hookEvent'\n event:\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n status?: 'pending' | 'success' | 'error'\n createdAt: string\n}\n\nexport interface HookSummary {\n id: string\n object: 'hook'\n name: string\n}\n\nexport type MessageDetail = {\n id: string\n object: 'message'\n chatId: string\n url: string\n files: {\n object: 'file'\n name: string\n }[]\n demo?: string\n text: string\n modelConfiguration: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n}\n\nexport type MessageSummary = {\n id: string\n object: 'message'\n content: string\n createdAt: string\n type:\n | 'message'\n | 'forked-block'\n | 'forked-chat'\n | 'open-in-v0'\n | 'refinement'\n | 'added-environment-variables'\n | 'added-integration'\n | 'deleted-file'\n | 'moved-file'\n | 'renamed-file'\n | 'edited-file'\n | 'replace-src'\n | 'reverted-block'\n | 'fix-with-v0'\n | 'auto-fix-with-v0'\n | 'sync-git'\n role: 'user' | 'assistant'\n}\n\nexport type ProjectDetail = {\n id: string\n object: 'project'\n name: string\n vercelProjectId?: string\n createdAt: string\n updatedAt?: string\n apiUrl: string\n webUrl: string\n chats: Array<{\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n }\n }>\n}\n\nexport interface ProjectSummary {\n id: string\n object: 'project'\n name: string\n vercelProjectId?: string\n createdAt: string\n updatedAt?: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface ScopeSummary {\n id: string\n object: 'scope'\n name?: string\n}\n\nexport type SearchResultItem = {\n id: string\n object: 'chat' | 'project'\n name: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface UserDetail {\n id: string\n object: 'user'\n name?: string\n email: string\n avatar: string\n}\n\nexport interface VercelProjectDetail {\n id: string\n object: 'vercel_project'\n name: string\n}\n\nexport type VersionDetail = {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: {\n object: 'file'\n name: string\n content: string\n }[]\n}\n\nexport type VersionSummary = {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n}\n\nexport interface ChatsCreateRequest {\n message: string\n attachments?: {\n url: string\n }[]\n system?: string\n chatPrivacy?: 'public' | 'private' | 'team-edit' | 'team' | 'unlisted'\n projectId?: string\n modelConfiguration?: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n responseMode?: 'sync' | 'async'\n}\n\nexport type ChatsCreateResponse = ChatDetail\n\nexport interface ChatsFindResponse {\n object: 'list'\n data: ChatSummary[]\n}\n\nexport type ChatsInitRequest = {\n name?: string\n chatPrivacy?: 'public' | 'private' | 'team-edit' | 'team' | 'unlisted'\n projectId?: string\n} & (\n | {\n type: 'files'\n files: Array<\n | {\n name: string\n url: string\n content?: never\n }\n | {\n name: string\n content: string\n url?: never\n }\n >\n repo?: never\n registry?: never\n zip?: never\n }\n | {\n type: 'repo'\n repo: {\n url: string\n branch?: string\n }\n files?: never\n registry?: never\n zip?: never\n }\n | {\n type: 'registry'\n registry: {\n url: string\n }\n files?: never\n repo?: never\n zip?: never\n }\n | {\n type: 'zip'\n zip: {\n url: string\n }\n files?: never\n repo?: never\n registry?: never\n }\n)\n\nexport type ChatsInitResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport interface ChatsDeleteResponse {\n id: string\n object: 'chat'\n deleted: true\n}\n\nexport type ChatsGetByIdResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport interface ChatsUpdateRequest {\n name?: string\n privacy?: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n}\n\nexport type ChatsUpdateResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport interface ChatsFavoriteRequest {\n isFavorite: boolean\n}\n\nexport interface ChatsFavoriteResponse {\n id: string\n object: 'chat'\n favorited: boolean\n}\n\nexport interface ChatsForkRequest {\n versionId?: string\n}\n\nexport type ChatsForkResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport type ProjectsGetByChatIdResponse = ProjectDetail\n\nexport interface ChatsSendMessageRequest {\n message: string\n attachments?: {\n url: string\n }[]\n modelConfiguration?: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n responseMode?: 'sync' | 'async'\n}\n\nexport type ChatsSendMessageResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n modelConfiguration: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n chatId: string\n}\n\nexport type ChatsResumeResponse = MessageDetail\n\nexport interface DeploymentsFindResponse {\n object: 'list'\n data: DeploymentDetail[]\n}\n\nexport interface DeploymentsCreateRequest {\n projectId: string\n chatId: string\n versionId: string\n}\n\nexport type DeploymentsCreateResponse = DeploymentDetail\n\nexport type DeploymentsGetByIdResponse = DeploymentDetail\n\nexport interface DeploymentsDeleteResponse {\n id: string\n object: 'deployment'\n deleted: true\n}\n\nexport interface DeploymentsFindLogsResponse {\n error?: string\n logs: string[]\n nextSince?: number\n}\n\nexport interface DeploymentsFindErrorsResponse {\n error?: string\n fullErrorText?: string\n errorType?: string\n formattedError?: string\n}\n\nexport interface HooksFindResponse {\n object: 'list'\n data: HookSummary[]\n}\n\nexport interface HooksCreateRequest {\n name: string\n events: Array<\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n >\n chatId?: string\n projectId?: string\n url: string\n}\n\nexport type HooksCreateResponse = HookDetail\n\nexport type HooksGetByIdResponse = HookDetail\n\nexport interface HooksUpdateRequest {\n name?: string\n events?: Array<\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n >\n url?: string\n}\n\nexport type HooksUpdateResponse = HookDetail\n\nexport interface HooksDeleteResponse {\n id: string\n object: 'hook'\n deleted: true\n}\n\nexport interface IntegrationsVercelProjectsFindResponse {\n object: 'list'\n data: VercelProjectDetail[]\n}\n\nexport interface IntegrationsVercelProjectsCreateRequest {\n projectId: string\n name: string\n}\n\nexport type IntegrationsVercelProjectsCreateResponse = VercelProjectDetail\n\nexport interface ProjectsFindResponse {\n object: 'list'\n data: ProjectSummary[]\n}\n\nexport interface ProjectsCreateRequest {\n name: string\n description?: string\n icon?: string\n environmentVariables?: {\n key: string\n value: string\n }[]\n instructions?: string\n}\n\nexport type ProjectsCreateResponse = ProjectDetail\n\nexport type ProjectsGetByIdResponse = ProjectDetail\n\nexport interface ProjectsAssignRequest {\n chatId: string\n}\n\nexport interface ProjectsAssignResponse {\n object: 'project'\n id: string\n assigned: true\n}\n\nexport interface RateLimitsFindResponse {\n remaining?: number\n reset?: number\n limit: number\n}\n\nexport type UserGetResponse = UserDetail\n\nexport type UserGetBillingResponse =\n | {\n billingType: 'token'\n data: {\n plan: string\n billingMode?: 'test'\n role: string\n billingCycle: {\n start: number\n end: number\n }\n balance: {\n remaining: number\n total: number\n }\n onDemand: {\n balance: number\n blocks?: {\n expirationDate?: number\n effectiveDate: number\n originalBalance: number\n currentBalance: number\n }[]\n }\n }\n }\n | {\n billingType: 'legacy'\n data: {\n remaining?: number\n reset?: number\n limit: number\n }\n }\n\nexport interface UserGetPlanResponse {\n object: 'plan'\n plan: string\n billingCycle: {\n start: number\n end: number\n }\n balance: {\n remaining: number\n total: number\n }\n}\n\nexport interface UserGetScopesResponse {\n object: 'list'\n data: ScopeSummary[]\n}\n\nexport interface V0ClientConfig {\n apiKey?: string\n baseUrl?: string\n}\n\nexport function createClient(config: V0ClientConfig = {}) {\n const fetcher = createFetcher(config)\n\n return {\n chats: {\n async create(params: ChatsCreateRequest): Promise<ChatsCreateResponse> {\n const body = {\n message: params.message,\n attachments: params.attachments,\n system: params.system,\n chatPrivacy: params.chatPrivacy,\n projectId: params.projectId,\n modelConfiguration: params.modelConfiguration,\n responseMode: params.responseMode,\n }\n return fetcher(`/chats`, 'POST', { body })\n },\n\n async find(params?: {\n limit?: string\n offset?: string\n isFavorite?: string\n }): Promise<ChatsFindResponse> {\n const query = params\n ? (Object.fromEntries(\n Object.entries({\n limit: params.limit,\n offset: params.offset,\n isFavorite: params.isFavorite,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>)\n : {}\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/chats`, 'GET', { ...(hasQuery ? { query } : {}) })\n },\n\n async init(params: ChatsInitRequest): Promise<ChatsInitResponse> {\n const body = params\n return fetcher(`/chats/init`, 'POST', { body })\n },\n\n async delete(params: { chatId: string }): Promise<ChatsDeleteResponse> {\n const pathParams = { chatId: params.chatId }\n return fetcher(`/chats/${pathParams.chatId}`, 'DELETE', { pathParams })\n },\n\n async getById(params: { chatId: string }): Promise<ChatsGetByIdResponse> {\n const pathParams = { chatId: params.chatId }\n return fetcher(`/chats/${pathParams.chatId}`, 'GET', { pathParams })\n },\n\n async update(\n params: { chatId: string } & ChatsUpdateRequest,\n ): Promise<ChatsUpdateResponse> {\n const pathParams = { chatId: params.chatId }\n const body = { name: params.name, privacy: params.privacy }\n return fetcher(`/chats/${pathParams.chatId}`, 'PATCH', {\n pathParams,\n body,\n })\n },\n\n async favorite(\n params: { chatId: string } & ChatsFavoriteRequest,\n ): Promise<ChatsFavoriteResponse> {\n const pathParams = { chatId: params.chatId }\n const body = { isFavorite: params.isFavorite }\n return fetcher(`/chats/${pathParams.chatId}/favorite`, 'PUT', {\n pathParams,\n body,\n })\n },\n\n async fork(\n params: { chatId: string } & ChatsForkRequest,\n ): Promise<ChatsForkResponse> {\n const pathParams = { chatId: params.chatId }\n const body = { versionId: params.versionId }\n return fetcher(`/chats/${pathParams.chatId}/fork`, 'POST', {\n pathParams,\n body,\n })\n },\n\n async sendMessage(\n params: { chatId: string } & ChatsSendMessageRequest,\n ): Promise<ChatsSendMessageResponse> {\n const pathParams = { chatId: params.chatId }\n const body = {\n message: params.message,\n attachments: params.attachments,\n modelConfiguration: params.modelConfiguration,\n responseMode: params.responseMode,\n }\n return fetcher(`/chats/${pathParams.chatId}/messages`, 'POST', {\n pathParams,\n body,\n })\n },\n\n async resume(params: {\n chatId: string\n messageId: string\n }): Promise<ChatsResumeResponse> {\n const pathParams = {\n chatId: params.chatId,\n messageId: params.messageId,\n }\n return fetcher(\n `/chats/${pathParams.chatId}/messages/${pathParams.messageId}/resume`,\n 'POST',\n { pathParams },\n )\n },\n },\n\n projects: {\n async getByChatId(params: {\n chatId: string\n }): Promise<ProjectsGetByChatIdResponse> {\n const pathParams = { chatId: params.chatId }\n return fetcher(`/chats/${pathParams.chatId}/project`, 'GET', {\n pathParams,\n })\n },\n\n async find(): Promise<ProjectsFindResponse> {\n return fetcher(`/projects`, 'GET', {})\n },\n\n async create(\n params: ProjectsCreateRequest,\n ): Promise<ProjectsCreateResponse> {\n const body = {\n name: params.name,\n description: params.description,\n icon: params.icon,\n environmentVariables: params.environmentVariables,\n instructions: params.instructions,\n }\n return fetcher(`/projects`, 'POST', { body })\n },\n\n async getById(params: {\n projectId: string\n }): Promise<ProjectsGetByIdResponse> {\n const pathParams = { projectId: params.projectId }\n return fetcher(`/projects/${pathParams.projectId}`, 'GET', {\n pathParams,\n })\n },\n\n async assign(\n params: { projectId: string } & ProjectsAssignRequest,\n ): Promise<ProjectsAssignResponse> {\n const pathParams = { projectId: params.projectId }\n const body = { chatId: params.chatId }\n return fetcher(`/projects/${pathParams.projectId}/assign`, 'POST', {\n pathParams,\n body,\n })\n },\n },\n\n deployments: {\n async find(params: {\n projectId: string\n chatId: string\n versionId: string\n }): Promise<DeploymentsFindResponse> {\n const query = Object.fromEntries(\n Object.entries({\n projectId: params.projectId,\n chatId: params.chatId,\n versionId: params.versionId,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n return fetcher(`/deployments`, 'GET', { query })\n },\n\n async create(\n params: DeploymentsCreateRequest,\n ): Promise<DeploymentsCreateResponse> {\n const body = {\n projectId: params.projectId,\n chatId: params.chatId,\n versionId: params.versionId,\n }\n return fetcher(`/deployments`, 'POST', { body })\n },\n\n async getById(params: {\n deploymentId: string\n }): Promise<DeploymentsGetByIdResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n return fetcher(`/deployments/${pathParams.deploymentId}`, 'GET', {\n pathParams,\n })\n },\n\n async delete(params: {\n deploymentId: string\n }): Promise<DeploymentsDeleteResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n return fetcher(`/deployments/${pathParams.deploymentId}`, 'DELETE', {\n pathParams,\n })\n },\n\n async findLogs(params: {\n deploymentId: string\n since?: string\n }): Promise<DeploymentsFindLogsResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n const query = Object.fromEntries(\n Object.entries({\n since: params.since,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/deployments/${pathParams.deploymentId}/logs`, 'GET', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async findErrors(params: {\n deploymentId: string\n }): Promise<DeploymentsFindErrorsResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n return fetcher(\n `/deployments/${pathParams.deploymentId}/errors`,\n 'GET',\n { pathParams },\n )\n },\n },\n\n hooks: {\n async find(): Promise<HooksFindResponse> {\n return fetcher(`/hooks`, 'GET', {})\n },\n\n async create(params: HooksCreateRequest): Promise<HooksCreateResponse> {\n const body = {\n name: params.name,\n events: params.events,\n chatId: params.chatId,\n projectId: params.projectId,\n url: params.url,\n }\n return fetcher(`/hooks`, 'POST', { body })\n },\n\n async getById(params: { hookId: string }): Promise<HooksGetByIdResponse> {\n const pathParams = { hookId: params.hookId }\n return fetcher(`/hooks/${pathParams.hookId}`, 'GET', { pathParams })\n },\n\n async update(\n params: { hookId: string } & HooksUpdateRequest,\n ): Promise<HooksUpdateResponse> {\n const pathParams = { hookId: params.hookId }\n const body = {\n name: params.name,\n events: params.events,\n url: params.url,\n }\n return fetcher(`/hooks/${pathParams.hookId}`, 'PATCH', {\n pathParams,\n body,\n })\n },\n\n async delete(params: { hookId: string }): Promise<HooksDeleteResponse> {\n const pathParams = { hookId: params.hookId }\n return fetcher(`/hooks/${pathParams.hookId}`, 'DELETE', { pathParams })\n },\n },\n\n integrations: {\n vercel: {\n projects: {\n async find(): Promise<IntegrationsVercelProjectsFindResponse> {\n return fetcher(`/integrations/vercel/projects`, 'GET', {})\n },\n\n async create(\n params: IntegrationsVercelProjectsCreateRequest,\n ): Promise<IntegrationsVercelProjectsCreateResponse> {\n const body = { projectId: params.projectId, name: params.name }\n return fetcher(`/integrations/vercel/projects`, 'POST', { body })\n },\n },\n },\n },\n\n rateLimits: {\n async find(params?: { scope?: string }): Promise<RateLimitsFindResponse> {\n const query = params\n ? (Object.fromEntries(\n Object.entries({\n scope: params.scope,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>)\n : {}\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/rate-limits`, 'GET', {\n ...(hasQuery ? { query } : {}),\n })\n },\n },\n\n user: {\n async get(): Promise<UserGetResponse> {\n return fetcher(`/user`, 'GET', {})\n },\n\n async getBilling(params?: {\n scope?: string\n }): Promise<UserGetBillingResponse> {\n const query = params\n ? (Object.fromEntries(\n Object.entries({\n scope: params.scope,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>)\n : {}\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/user/billing`, 'GET', {\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async getPlan(): Promise<UserGetPlanResponse> {\n return fetcher(`/user/plan`, 'GET', {})\n },\n\n async getScopes(): Promise<UserGetScopesResponse> {\n return fetcher(`/user/scopes`, 'GET', {})\n },\n },\n }\n}\n\n// Default client for backward compatibility\nexport const v0 = createClient()\n"],"names":[],"mappings":"AAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWO;AACP;AACA;AACA;AACA;AAKO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AAQO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AAkBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../src/sdk/v0.ts"],"sourcesContent":["import { createFetcher } from './core'\n\nexport type AssistantMessageContentRichPart =\n | {\n createdAt: number\n finishedAt: number | null\n lastPartSentAt: number | null\n taskNameActive?: string | null\n taskNameComplete?: string | null\n error?:\n | {\n type: 'INPUT_SCHEMA_ERROR'\n flattenedError: Record<string, any>\n message?: never\n code?: never\n }\n | {\n type: 'HANDLED_EXECUTION_ERROR'\n message: string\n code: 'GENERIC_ERROR'\n flattenedError?: never\n }\n | {\n type: 'UNHANDLED_EXECUTION_ERROR'\n flattenedError?: never\n message?: never\n code?: never\n }\n id: string\n llmContent?:\n | Array<\n | {\n type: 'text'\n text: string\n url?: never\n }\n | {\n type: 'image'\n url: string\n text?: never\n }\n >\n | any\n type: 'task-thinking-v1'\n parts: Array<\n | {\n type: 'thinking-end'\n duration: number\n thought: string\n }\n | {\n type: 'parse-error'\n duration?: never\n thought?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-start-v1'\n parts: Array<\n | {\n type: 'launch-tasks'\n }\n | {\n type: 'parse-error'\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-stopped-v1'\n parts: Array<\n | {\n type: 'manually-stopped-on-client'\n invocations?: never\n }\n | {\n type: 'orchestrator-invocations-exhausted'\n invocations: number\n }\n | {\n type: 'subagent-invocations-exhausted'\n invocations: number\n }\n | {\n type: 'agent-timeout'\n invocations?: never\n }\n | {\n type: 'orchestrator-error'\n invocations?: never\n }\n | {\n type: 'parse-error'\n invocations?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-diagnostics-v1'\n parts: Array<\n | {\n type: 'diagnostic-invocations-exhausted'\n summaries?: never\n }\n | {\n type: 'fetching-diagnostics'\n summaries?: never\n }\n | {\n type: 'diagnostics-passed'\n summaries?: never\n }\n | {\n type: 'diagnostics-found-issues'\n summaries: string[]\n }\n | {\n type: 'parse-error'\n summaries?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-coding-v1'\n parts: Array<\n | {\n type: 'code-project'\n isVersioned: boolean\n changedFiles: {\n fileName: string\n baseName: string\n isActive: boolean\n isTerminated: boolean\n isDeleted: boolean\n isMoved: boolean\n }[]\n latestDeploymentInfo?: any\n lastDeployedAt?: string\n lastEditedAt?: string\n needsBlockSource: boolean\n blockId: string\n meta: Record<string, any>\n closed: boolean\n lang: string\n source: string\n }\n | {\n type: 'parse-error'\n isVersioned?: never\n changedFiles?: never\n latestDeploymentInfo?: never\n lastDeployedAt?: never\n lastEditedAt?: never\n needsBlockSource?: never\n blockId?: never\n meta?: never\n closed?: never\n lang?: never\n source?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-fetch-from-web-v1'\n parts: Array<\n | {\n type: 'starting-fetch-from-web'\n url: string\n favicon?: never\n image?: never\n title?: never\n publishedDate?: never\n }\n | {\n type: 'finished-fetch-from-web'\n url: string\n favicon: string | null\n image: string | null\n title: string | null\n publishedDate: string | null\n }\n | {\n type: 'parse-error'\n url?: never\n favicon?: never\n image?: never\n title?: never\n publishedDate?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-inspect-site-v1'\n parts: Array<\n | {\n type: 'starting-inspect-site'\n url: string\n screenshotUrl?: never\n path?: never\n pageTitle?: never\n logoUrl?: never\n screenshotResults?: never\n }\n | {\n type: 'screenshot'\n screenshotUrl?: string | null\n url: string\n path?: string | null\n pageTitle?: string | null\n logoUrl?: string | null\n screenshotResults?: never\n }\n | {\n type: 'inspect-site-complete'\n screenshotResults: Array<{\n type: 'screenshot'\n screenshotUrl?: string | null\n title?: string | null\n }>\n url?: never\n screenshotUrl?: never\n path?: never\n pageTitle?: never\n logoUrl?: never\n }\n | {\n type: 'parse-error'\n url?: never\n screenshotUrl?: never\n path?: never\n pageTitle?: never\n logoUrl?: never\n screenshotResults?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-search-web-v1'\n parts: Array<\n | {\n type: 'starting-web-search'\n query: string\n count?: never\n answer?: never\n citations?: never\n }\n | {\n type: 'got-results'\n count: number\n query?: never\n answer?: never\n citations?: never\n }\n | {\n type: 'failed-web-search'\n query?: never\n count?: never\n answer?: never\n citations?: never\n }\n | {\n type: 'finished-web-search'\n answer: string\n citations: Array<{\n url: string\n favicon: string | null\n image: string | null\n title: string | null\n publishedDate: string | null\n }>\n query?: never\n count?: never\n }\n | {\n type: 'parse-error'\n query?: never\n count?: never\n answer?: never\n citations?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-manage-todos-v1'\n parts: Array<\n | {\n type: 'starting-todo-manager'\n updatedList?: never\n plan?: never\n }\n | {\n type: 'updated-todo-list'\n updatedList: Array<{\n status: 'todo' | 'in-progress' | 'done'\n task: string\n }>\n plan?: never\n }\n | {\n type: 'read-todo-list'\n updatedList?: never\n plan?: never\n }\n | {\n type: 'generated-technical-plan'\n plan: string\n updatedList?: never\n }\n | {\n type: 'parse-error'\n updatedList?: never\n plan?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-search-repo-v1'\n parts: Array<\n | {\n type: 'starting-repo-search'\n query: string\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'ls'\n path?: string\n query?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'ls-results'\n numFiles: number\n query?: never\n path?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'grepping-repo'\n pattern: string\n path?: string\n globPattern?: string\n query?: never\n numFiles?: never\n numMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'grep-results'\n numMatches: number\n pattern: string\n query?: never\n path?: never\n numFiles?: never\n globPattern?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'select-files'\n filePaths: string[]\n query?: never\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'reading-file'\n filePath: string\n offset?: number | null\n limit?: number | null\n query?: never\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePaths?: never\n result?: never\n }\n | {\n type: 'repo-search-result'\n query: string\n result: string\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n }\n | {\n type: 'parse-error'\n query?: never\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-run-shell-command-v1'\n parts: Array<\n | {\n type: 'starting-shell-command'\n command: string\n directory?: string | null\n description?: string | null\n output?: never\n exitCode?: never\n backgroundPids?: never\n }\n | {\n type: 'finished-shell-command'\n output: string\n exitCode: number\n backgroundPids: number[]\n directory?: string | null\n command: string\n description?: never\n }\n | {\n type: 'parse-error'\n command?: never\n directory?: never\n description?: never\n output?: never\n exitCode?: never\n backgroundPids?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-read-files-v1'\n parts: Array<\n | {\n type: 'starting-read-files'\n filePaths: string[]\n fileContents?: never\n }\n | {\n type: 'finished-read-files'\n fileContents: Record<string, any>\n filePaths?: never\n }\n | {\n type: 'parse-error'\n filePaths?: never\n fileContents?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-generate-design-inspiration-v1'\n parts: Array<\n | {\n type: 'starting-design-inspiration'\n prompt: string\n images?: never\n }\n | {\n type: 'finished-design-inspiration'\n images: Array<{\n url: string\n description: string | null\n uploadedAt: string | null\n score?: number\n }>\n prompt?: never\n }\n | {\n type: 'parse-error'\n prompt?: never\n images?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-request-install-integration-v1'\n parts: Array<\n | {\n type: 'request-install-integration'\n steps: Array<{\n type: 'add-integration' | 'add-env-var'\n stepName: string\n }>\n }\n | {\n type: 'parse-error'\n steps?: never\n }\n >\n }\n\nexport type ChatDetail = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: {\n object: 'file'\n name: string\n content: string\n }[]\n }\n url: string\n messages: Array<{\n id: string\n object: 'message'\n content: string\n createdAt: string\n type:\n | 'message'\n | 'forked-block'\n | 'forked-chat'\n | 'open-in-v0'\n | 'refinement'\n | 'added-environment-variables'\n | 'added-integration'\n | 'deleted-file'\n | 'moved-file'\n | 'renamed-file'\n | 'edited-file'\n | 'replace-src'\n | 'reverted-block'\n | 'fix-with-v0'\n | 'auto-fix-with-v0'\n | 'sync-git'\n role: 'user' | 'assistant'\n }>\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n modelConfiguration: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n}\n\nexport type ChatSummary = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n }\n}\n\nexport interface DeploymentDetail {\n id: string\n object: 'deployment'\n inspectorUrl: string\n chatId: string\n projectId: string\n versionId: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface DeploymentSummary {\n id: string\n object: 'deployment'\n inspectorUrl: string\n chatId: string\n projectId: string\n versionId: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface FileDetail {\n object: 'file'\n name: string\n content: string\n}\n\nexport interface FileSummary {\n object: 'file'\n name: string\n}\n\nexport type HookDetail = {\n id: string\n object: 'hook'\n name: string\n events: Array<\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n >\n chatId?: string\n projectId?: string\n url: string\n}\n\nexport type HookEventDetail = {\n id: string\n object: 'hookEvent'\n event:\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n status?: 'pending' | 'success' | 'error'\n createdAt: string\n}\n\nexport interface HookSummary {\n id: string\n object: 'hook'\n name: string\n}\n\nexport type MessageDetail = {\n id: string\n object: 'message'\n chatId: string\n url: string\n files: {\n object: 'file'\n name: string\n }[]\n demo?: string\n text: string\n modelConfiguration: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n}\n\nexport type MessageSummary = {\n id: string\n object: 'message'\n content: string\n createdAt: string\n type:\n | 'message'\n | 'forked-block'\n | 'forked-chat'\n | 'open-in-v0'\n | 'refinement'\n | 'added-environment-variables'\n | 'added-integration'\n | 'deleted-file'\n | 'moved-file'\n | 'renamed-file'\n | 'edited-file'\n | 'replace-src'\n | 'reverted-block'\n | 'fix-with-v0'\n | 'auto-fix-with-v0'\n | 'sync-git'\n role: 'user' | 'assistant'\n}\n\nexport type ProjectDetail = {\n id: string\n object: 'project'\n name: string\n vercelProjectId?: string\n createdAt: string\n updatedAt?: string\n apiUrl: string\n webUrl: string\n chats: Array<{\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n }\n }>\n}\n\nexport interface ProjectSummary {\n id: string\n object: 'project'\n name: string\n vercelProjectId?: string\n createdAt: string\n updatedAt?: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface ScopeSummary {\n id: string\n object: 'scope'\n name?: string\n}\n\nexport type SearchResultItem = {\n id: string\n object: 'chat' | 'project'\n name: string\n createdAt: string\n updatedAt?: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface UserDetail {\n id: string\n object: 'user'\n name?: string\n email: string\n avatar: string\n}\n\nexport interface VercelProjectDetail {\n id: string\n object: 'vercel_project'\n name: string\n}\n\nexport interface VercelProjectSummary {\n id: string\n object: 'vercel_project'\n name: string\n}\n\nexport type VersionDetail = {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: {\n object: 'file'\n name: string\n content: string\n }[]\n}\n\nexport type VersionSummary = {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n}\n\nexport interface ChatsCreateRequest {\n message: string\n attachments?: {\n url: string\n }[]\n system?: string\n chatPrivacy?: 'public' | 'private' | 'team-edit' | 'team' | 'unlisted'\n projectId?: string\n modelConfiguration?: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n responseMode?: 'sync' | 'async'\n}\n\nexport type ChatsCreateResponse = ChatDetail\n\nexport interface ChatsFindResponse {\n object: 'list'\n data: ChatSummary[]\n}\n\nexport type ChatsInitRequest = {\n name?: string\n chatPrivacy?: 'public' | 'private' | 'team-edit' | 'team' | 'unlisted'\n projectId?: string\n} & (\n | {\n type: 'files'\n files: Array<\n | {\n name: string\n url: string\n content?: never\n }\n | {\n name: string\n content: string\n url?: never\n }\n >\n repo?: never\n registry?: never\n zip?: never\n }\n | {\n type: 'repo'\n repo: {\n url: string\n branch?: string\n }\n files?: never\n registry?: never\n zip?: never\n }\n | {\n type: 'registry'\n registry: {\n url: string\n }\n files?: never\n repo?: never\n zip?: never\n }\n | {\n type: 'zip'\n zip: {\n url: string\n }\n files?: never\n repo?: never\n registry?: never\n }\n)\n\nexport type ChatsInitResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport interface ChatsDeleteResponse {\n id: string\n object: 'chat'\n deleted: true\n}\n\nexport type ChatsGetByIdResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport interface ChatsUpdateRequest {\n name?: string\n privacy?: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n}\n\nexport type ChatsUpdateResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport interface ChatsFavoriteRequest {\n isFavorite: boolean\n}\n\nexport interface ChatsFavoriteResponse {\n id: string\n object: 'chat'\n favorited: boolean\n}\n\nexport interface ChatsForkRequest {\n versionId?: string\n}\n\nexport type ChatsForkResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport type ProjectsGetByChatIdResponse = ProjectDetail\n\nexport interface ChatsSendMessageRequest {\n message: string\n attachments?: {\n url: string\n }[]\n modelConfiguration?: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n responseMode?: 'sync' | 'async'\n}\n\nexport type ChatsSendMessageResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n modelConfiguration: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n chatId: string\n}\n\nexport type ChatsResumeResponse = MessageDetail\n\nexport interface DeploymentsFindResponse {\n object: 'list'\n data: DeploymentDetail[]\n}\n\nexport interface DeploymentsCreateRequest {\n projectId: string\n chatId: string\n versionId: string\n}\n\nexport type DeploymentsCreateResponse = DeploymentDetail\n\nexport type DeploymentsGetByIdResponse = DeploymentDetail\n\nexport interface DeploymentsDeleteResponse {\n id: string\n object: 'deployment'\n deleted: true\n}\n\nexport interface DeploymentsFindLogsResponse {\n error?: string\n logs: string[]\n nextSince?: number\n}\n\nexport interface DeploymentsFindErrorsResponse {\n error?: string\n fullErrorText?: string\n errorType?: string\n formattedError?: string\n}\n\nexport interface HooksFindResponse {\n object: 'list'\n data: HookSummary[]\n}\n\nexport interface HooksCreateRequest {\n name: string\n events: Array<\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n >\n chatId?: string\n projectId?: string\n url: string\n}\n\nexport type HooksCreateResponse = HookDetail\n\nexport type HooksGetByIdResponse = HookDetail\n\nexport interface HooksUpdateRequest {\n name?: string\n events?: Array<\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n >\n url?: string\n}\n\nexport type HooksUpdateResponse = HookDetail\n\nexport interface HooksDeleteResponse {\n id: string\n object: 'hook'\n deleted: true\n}\n\nexport interface IntegrationsVercelProjectsFindResponse {\n object: 'list'\n data: VercelProjectDetail[]\n}\n\nexport interface IntegrationsVercelProjectsCreateRequest {\n projectId: string\n name: string\n}\n\nexport type IntegrationsVercelProjectsCreateResponse = VercelProjectDetail\n\nexport interface ProjectsFindResponse {\n object: 'list'\n data: ProjectSummary[]\n}\n\nexport interface ProjectsCreateRequest {\n name: string\n description?: string\n icon?: string\n environmentVariables?: {\n key: string\n value: string\n }[]\n instructions?: string\n}\n\nexport type ProjectsCreateResponse = ProjectDetail\n\nexport type ProjectsGetByIdResponse = ProjectDetail\n\nexport interface ProjectsAssignRequest {\n chatId: string\n}\n\nexport interface ProjectsAssignResponse {\n object: 'project'\n id: string\n assigned: true\n}\n\nexport interface RateLimitsFindResponse {\n remaining?: number\n reset?: number\n limit: number\n}\n\nexport type UserGetResponse = UserDetail\n\nexport type UserGetBillingResponse =\n | {\n billingType: 'token'\n data: {\n plan: string\n billingMode?: 'test'\n role: string\n billingCycle: {\n start: number\n end: number\n }\n balance: {\n remaining: number\n total: number\n }\n onDemand: {\n balance: number\n blocks?: {\n expirationDate?: number\n effectiveDate: number\n originalBalance: number\n currentBalance: number\n }[]\n }\n }\n }\n | {\n billingType: 'legacy'\n data: {\n remaining?: number\n reset?: number\n limit: number\n }\n }\n\nexport interface UserGetPlanResponse {\n object: 'plan'\n plan: string\n billingCycle: {\n start: number\n end: number\n }\n balance: {\n remaining: number\n total: number\n }\n}\n\nexport interface UserGetScopesResponse {\n object: 'list'\n data: ScopeSummary[]\n}\n\nexport interface V0ClientConfig {\n apiKey?: string\n baseUrl?: string\n}\n\nexport function createClient(config: V0ClientConfig = {}) {\n const fetcher = createFetcher(config)\n\n return {\n chats: {\n async create(params: ChatsCreateRequest): Promise<ChatsCreateResponse> {\n const body = {\n message: params.message,\n attachments: params.attachments,\n system: params.system,\n chatPrivacy: params.chatPrivacy,\n projectId: params.projectId,\n modelConfiguration: params.modelConfiguration,\n responseMode: params.responseMode,\n }\n return fetcher(`/chats`, 'POST', { body })\n },\n\n async find(params?: {\n limit?: string\n offset?: string\n isFavorite?: string\n }): Promise<ChatsFindResponse> {\n const query = params\n ? (Object.fromEntries(\n Object.entries({\n limit: params.limit,\n offset: params.offset,\n isFavorite: params.isFavorite,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>)\n : {}\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/chats`, 'GET', { ...(hasQuery ? { query } : {}) })\n },\n\n async init(params: ChatsInitRequest): Promise<ChatsInitResponse> {\n const body = params\n return fetcher(`/chats/init`, 'POST', { body })\n },\n\n async delete(params: { chatId: string }): Promise<ChatsDeleteResponse> {\n const pathParams = { chatId: params.chatId }\n return fetcher(`/chats/${pathParams.chatId}`, 'DELETE', { pathParams })\n },\n\n async getById(params: { chatId: string }): Promise<ChatsGetByIdResponse> {\n const pathParams = { chatId: params.chatId }\n return fetcher(`/chats/${pathParams.chatId}`, 'GET', { pathParams })\n },\n\n async update(\n params: { chatId: string } & ChatsUpdateRequest,\n ): Promise<ChatsUpdateResponse> {\n const pathParams = { chatId: params.chatId }\n const body = { name: params.name, privacy: params.privacy }\n return fetcher(`/chats/${pathParams.chatId}`, 'PATCH', {\n pathParams,\n body,\n })\n },\n\n async favorite(\n params: { chatId: string } & ChatsFavoriteRequest,\n ): Promise<ChatsFavoriteResponse> {\n const pathParams = { chatId: params.chatId }\n const body = { isFavorite: params.isFavorite }\n return fetcher(`/chats/${pathParams.chatId}/favorite`, 'PUT', {\n pathParams,\n body,\n })\n },\n\n async fork(\n params: { chatId: string } & ChatsForkRequest,\n ): Promise<ChatsForkResponse> {\n const pathParams = { chatId: params.chatId }\n const body = { versionId: params.versionId }\n return fetcher(`/chats/${pathParams.chatId}/fork`, 'POST', {\n pathParams,\n body,\n })\n },\n\n async sendMessage(\n params: { chatId: string } & ChatsSendMessageRequest,\n ): Promise<ChatsSendMessageResponse> {\n const pathParams = { chatId: params.chatId }\n const body = {\n message: params.message,\n attachments: params.attachments,\n modelConfiguration: params.modelConfiguration,\n responseMode: params.responseMode,\n }\n return fetcher(`/chats/${pathParams.chatId}/messages`, 'POST', {\n pathParams,\n body,\n })\n },\n\n async resume(params: {\n chatId: string\n messageId: string\n }): Promise<ChatsResumeResponse> {\n const pathParams = {\n chatId: params.chatId,\n messageId: params.messageId,\n }\n return fetcher(\n `/chats/${pathParams.chatId}/messages/${pathParams.messageId}/resume`,\n 'POST',\n { pathParams },\n )\n },\n },\n\n projects: {\n async getByChatId(params: {\n chatId: string\n }): Promise<ProjectsGetByChatIdResponse> {\n const pathParams = { chatId: params.chatId }\n return fetcher(`/chats/${pathParams.chatId}/project`, 'GET', {\n pathParams,\n })\n },\n\n async find(): Promise<ProjectsFindResponse> {\n return fetcher(`/projects`, 'GET', {})\n },\n\n async create(\n params: ProjectsCreateRequest,\n ): Promise<ProjectsCreateResponse> {\n const body = {\n name: params.name,\n description: params.description,\n icon: params.icon,\n environmentVariables: params.environmentVariables,\n instructions: params.instructions,\n }\n return fetcher(`/projects`, 'POST', { body })\n },\n\n async getById(params: {\n projectId: string\n }): Promise<ProjectsGetByIdResponse> {\n const pathParams = { projectId: params.projectId }\n return fetcher(`/projects/${pathParams.projectId}`, 'GET', {\n pathParams,\n })\n },\n\n async assign(\n params: { projectId: string } & ProjectsAssignRequest,\n ): Promise<ProjectsAssignResponse> {\n const pathParams = { projectId: params.projectId }\n const body = { chatId: params.chatId }\n return fetcher(`/projects/${pathParams.projectId}/assign`, 'POST', {\n pathParams,\n body,\n })\n },\n },\n\n deployments: {\n async find(params: {\n projectId: string\n chatId: string\n versionId: string\n }): Promise<DeploymentsFindResponse> {\n const query = Object.fromEntries(\n Object.entries({\n projectId: params.projectId,\n chatId: params.chatId,\n versionId: params.versionId,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n return fetcher(`/deployments`, 'GET', { query })\n },\n\n async create(\n params: DeploymentsCreateRequest,\n ): Promise<DeploymentsCreateResponse> {\n const body = {\n projectId: params.projectId,\n chatId: params.chatId,\n versionId: params.versionId,\n }\n return fetcher(`/deployments`, 'POST', { body })\n },\n\n async getById(params: {\n deploymentId: string\n }): Promise<DeploymentsGetByIdResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n return fetcher(`/deployments/${pathParams.deploymentId}`, 'GET', {\n pathParams,\n })\n },\n\n async delete(params: {\n deploymentId: string\n }): Promise<DeploymentsDeleteResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n return fetcher(`/deployments/${pathParams.deploymentId}`, 'DELETE', {\n pathParams,\n })\n },\n\n async findLogs(params: {\n deploymentId: string\n since?: string\n }): Promise<DeploymentsFindLogsResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n const query = Object.fromEntries(\n Object.entries({\n since: params.since,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/deployments/${pathParams.deploymentId}/logs`, 'GET', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async findErrors(params: {\n deploymentId: string\n }): Promise<DeploymentsFindErrorsResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n return fetcher(\n `/deployments/${pathParams.deploymentId}/errors`,\n 'GET',\n { pathParams },\n )\n },\n },\n\n hooks: {\n async find(): Promise<HooksFindResponse> {\n return fetcher(`/hooks`, 'GET', {})\n },\n\n async create(params: HooksCreateRequest): Promise<HooksCreateResponse> {\n const body = {\n name: params.name,\n events: params.events,\n chatId: params.chatId,\n projectId: params.projectId,\n url: params.url,\n }\n return fetcher(`/hooks`, 'POST', { body })\n },\n\n async getById(params: { hookId: string }): Promise<HooksGetByIdResponse> {\n const pathParams = { hookId: params.hookId }\n return fetcher(`/hooks/${pathParams.hookId}`, 'GET', { pathParams })\n },\n\n async update(\n params: { hookId: string } & HooksUpdateRequest,\n ): Promise<HooksUpdateResponse> {\n const pathParams = { hookId: params.hookId }\n const body = {\n name: params.name,\n events: params.events,\n url: params.url,\n }\n return fetcher(`/hooks/${pathParams.hookId}`, 'PATCH', {\n pathParams,\n body,\n })\n },\n\n async delete(params: { hookId: string }): Promise<HooksDeleteResponse> {\n const pathParams = { hookId: params.hookId }\n return fetcher(`/hooks/${pathParams.hookId}`, 'DELETE', { pathParams })\n },\n },\n\n integrations: {\n vercel: {\n projects: {\n async find(): Promise<IntegrationsVercelProjectsFindResponse> {\n return fetcher(`/integrations/vercel/projects`, 'GET', {})\n },\n\n async create(\n params: IntegrationsVercelProjectsCreateRequest,\n ): Promise<IntegrationsVercelProjectsCreateResponse> {\n const body = { projectId: params.projectId, name: params.name }\n return fetcher(`/integrations/vercel/projects`, 'POST', { body })\n },\n },\n },\n },\n\n rateLimits: {\n async find(params?: { scope?: string }): Promise<RateLimitsFindResponse> {\n const query = params\n ? (Object.fromEntries(\n Object.entries({\n scope: params.scope,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>)\n : {}\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/rate-limits`, 'GET', {\n ...(hasQuery ? { query } : {}),\n })\n },\n },\n\n user: {\n async get(): Promise<UserGetResponse> {\n return fetcher(`/user`, 'GET', {})\n },\n\n async getBilling(params?: {\n scope?: string\n }): Promise<UserGetBillingResponse> {\n const query = params\n ? (Object.fromEntries(\n Object.entries({\n scope: params.scope,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>)\n : {}\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/user/billing`, 'GET', {\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async getPlan(): Promise<UserGetPlanResponse> {\n return fetcher(`/user/plan`, 'GET', {})\n },\n\n async getScopes(): Promise<UserGetScopesResponse> {\n return fetcher(`/user/scopes`, 'GET', {})\n },\n },\n }\n}\n\n// Default client for backward compatibility\nexport const v0 = createClient()\n"],"names":[],"mappings":"AAuiBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWO;AACP;AACA;AACA;AACA;AAKO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AAUO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AAuBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
function createFetcher(config = {}) {
|
|
2
2
|
const baseUrl = config.baseUrl || 'https://api.v0.dev/v1';
|
|
3
|
+
let sessionToken = null;
|
|
3
4
|
return async function fetcher(url, method, params = {}) {
|
|
4
5
|
const apiKey = config.apiKey || process.env.V0_API_KEY;
|
|
5
6
|
if (!apiKey) {
|
|
@@ -12,6 +13,10 @@ function createFetcher(config = {}) {
|
|
|
12
13
|
Authorization: `Bearer ${apiKey}`,
|
|
13
14
|
...params.headers
|
|
14
15
|
};
|
|
16
|
+
// Include session token in headers if available
|
|
17
|
+
if (sessionToken) {
|
|
18
|
+
headers['x-session-token'] = sessionToken;
|
|
19
|
+
}
|
|
15
20
|
if (hasBody) {
|
|
16
21
|
headers['Content-Type'] = 'application/json';
|
|
17
22
|
}
|
|
@@ -20,6 +25,11 @@ function createFetcher(config = {}) {
|
|
|
20
25
|
headers,
|
|
21
26
|
body: hasBody ? JSON.stringify(params.body) : undefined
|
|
22
27
|
});
|
|
28
|
+
// Check for session token in response headers
|
|
29
|
+
const newSessionToken = res.headers.get('x-session-token');
|
|
30
|
+
if (newSessionToken) {
|
|
31
|
+
sessionToken = newSessionToken;
|
|
32
|
+
}
|
|
23
33
|
if (!res.ok) {
|
|
24
34
|
const text = await res.text();
|
|
25
35
|
throw new Error(`HTTP ${res.status}: ${text}`);
|