v0-sdk 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +13 -0
- package/README.md +36 -12
- package/dist/index.cjs +99 -0
- package/dist/index.d.ts +28 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +99 -1
- package/package.json +10 -5
package/LICENSE
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Copyright 2025 Vercel, Inc.
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# v0
|
|
1
|
+
# v0-sdk
|
|
2
2
|
|
|
3
3
|
> **⚠️ Developer Preview**: This SDK is currently in beta and is subject to change. Use in production at your own risk.
|
|
4
4
|
|
|
@@ -30,13 +30,13 @@ const chat = await v0.chats.create({
|
|
|
30
30
|
message: 'Create a responsive navbar with Tailwind CSS',
|
|
31
31
|
system: 'You are an expert React developer',
|
|
32
32
|
})
|
|
33
|
-
console.log(`Chat created: ${chat.
|
|
33
|
+
console.log(`Chat created: ${chat.webUrl}`)
|
|
34
34
|
|
|
35
35
|
// Preview generated code
|
|
36
|
-
console.log(`Preview URL: ${chat.
|
|
36
|
+
console.log(`Preview URL: ${chat.latestVersion?.demoUrl}`)
|
|
37
37
|
|
|
38
38
|
// Use in your application
|
|
39
|
-
const previewHtml = `<iframe src="${chat.
|
|
39
|
+
const previewHtml = `<iframe src="${chat.latestVersion?.demoUrl}" width="100%" height="600px"></iframe>`
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
## Features
|
|
@@ -106,6 +106,26 @@ const result = await v0.chats.create({
|
|
|
106
106
|
})
|
|
107
107
|
```
|
|
108
108
|
|
|
109
|
+
#### Streaming Chat Creation
|
|
110
|
+
|
|
111
|
+
Create a chat with streaming response for real-time output:
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
import { parseStreamingResponse } from 'v0-sdk'
|
|
115
|
+
|
|
116
|
+
const stream = await v0.chats.create({
|
|
117
|
+
message: 'Create a React button component',
|
|
118
|
+
responseMode: 'experimental_stream',
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
// Parse the streaming response
|
|
122
|
+
for await (const event of parseStreamingResponse(stream)) {
|
|
123
|
+
if (event.event === 'message') {
|
|
124
|
+
console.log('Received chunk:', event.data)
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
109
129
|
#### Get Chat by ID
|
|
110
130
|
|
|
111
131
|
```typescript
|
|
@@ -127,7 +147,7 @@ const response = await v0.chats.sendMessage({
|
|
|
127
147
|
- `v0.chats.delete({ chatId })` - Delete a chat
|
|
128
148
|
- `v0.chats.favorite({ chatId })` - Favorite a chat
|
|
129
149
|
- `v0.chats.unfavorite({ chatId })` - Unfavorite a chat
|
|
130
|
-
- `v0.
|
|
150
|
+
- `v0.projects.getByChatId({ chatId })` - Get chat's associated project
|
|
131
151
|
|
|
132
152
|
### Project Operations
|
|
133
153
|
|
|
@@ -186,8 +206,8 @@ The SDK includes complete type definitions for all API operations:
|
|
|
186
206
|
import type {
|
|
187
207
|
ChatsCreateRequest,
|
|
188
208
|
ChatsCreateResponse,
|
|
189
|
-
|
|
190
|
-
|
|
209
|
+
UserDetail,
|
|
210
|
+
ProjectDetail,
|
|
191
211
|
V0ClientConfig,
|
|
192
212
|
} from 'v0-sdk'
|
|
193
213
|
|
|
@@ -223,7 +243,7 @@ try {
|
|
|
223
243
|
The SDK includes comprehensive test coverage. Run tests with:
|
|
224
244
|
|
|
225
245
|
```bash
|
|
226
|
-
|
|
246
|
+
pnpm test
|
|
227
247
|
```
|
|
228
248
|
|
|
229
249
|
## Development
|
|
@@ -231,7 +251,7 @@ npm test
|
|
|
231
251
|
### Building
|
|
232
252
|
|
|
233
253
|
```bash
|
|
234
|
-
|
|
254
|
+
pnpm build
|
|
235
255
|
```
|
|
236
256
|
|
|
237
257
|
### Generating SDK
|
|
@@ -239,13 +259,17 @@ npm run build
|
|
|
239
259
|
The SDK is generated from the OpenAPI specification:
|
|
240
260
|
|
|
241
261
|
```bash
|
|
242
|
-
|
|
262
|
+
pnpm sdk:generate
|
|
243
263
|
```
|
|
244
264
|
|
|
245
265
|
### Running Tests
|
|
246
266
|
|
|
247
267
|
```bash
|
|
248
|
-
|
|
268
|
+
# Run tests once (CI mode)
|
|
269
|
+
pnpm test
|
|
270
|
+
|
|
271
|
+
# Run tests in watch mode
|
|
272
|
+
pnpm test:watch
|
|
249
273
|
```
|
|
250
274
|
|
|
251
275
|
## Resources
|
|
@@ -255,4 +279,4 @@ npm test
|
|
|
255
279
|
|
|
256
280
|
## License
|
|
257
281
|
|
|
258
|
-
|
|
282
|
+
Apache 2.0
|
package/dist/index.cjs
CHANGED
|
@@ -13,6 +13,7 @@ function createFetcher(config = {}) {
|
|
|
13
13
|
const hasBody = method !== 'GET' && params.body;
|
|
14
14
|
const headers = {
|
|
15
15
|
Authorization: `Bearer ${apiKey}`,
|
|
16
|
+
'User-Agent': 'v0-sdk/0.1.0',
|
|
16
17
|
...params.headers
|
|
17
18
|
};
|
|
18
19
|
// Include session token in headers if available
|
|
@@ -39,9 +40,95 @@ function createFetcher(config = {}) {
|
|
|
39
40
|
return res.json();
|
|
40
41
|
};
|
|
41
42
|
}
|
|
43
|
+
// Utility function to parse streaming events
|
|
44
|
+
async function* parseStreamingResponse(stream) {
|
|
45
|
+
const reader = stream.getReader();
|
|
46
|
+
const decoder = new TextDecoder();
|
|
47
|
+
let buffer = '';
|
|
48
|
+
try {
|
|
49
|
+
while(true){
|
|
50
|
+
const { done, value } = await reader.read();
|
|
51
|
+
if (done) break;
|
|
52
|
+
buffer += decoder.decode(value, {
|
|
53
|
+
stream: true
|
|
54
|
+
});
|
|
55
|
+
const lines = buffer.split('\n');
|
|
56
|
+
buffer = lines.pop() || ''; // Keep the last incomplete line in buffer
|
|
57
|
+
for (const line of lines){
|
|
58
|
+
if (line.trim() === '') continue;
|
|
59
|
+
if (line.startsWith('data: ')) {
|
|
60
|
+
const data = line.slice(6);
|
|
61
|
+
if (data === '[DONE]') return;
|
|
62
|
+
try {
|
|
63
|
+
yield {
|
|
64
|
+
event: 'message',
|
|
65
|
+
data: data
|
|
66
|
+
};
|
|
67
|
+
} catch (e) {
|
|
68
|
+
console.warn('Failed to parse streaming data:', e);
|
|
69
|
+
}
|
|
70
|
+
} else if (line.startsWith('event: ')) {
|
|
71
|
+
const event = line.slice(7);
|
|
72
|
+
yield {
|
|
73
|
+
event: event,
|
|
74
|
+
data: ''
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
} finally{
|
|
80
|
+
reader.releaseLock();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function createStreamingFetcher(config = {}) {
|
|
84
|
+
const baseUrl = config.baseUrl || 'https://api.v0.dev/v1';
|
|
85
|
+
let sessionToken = null;
|
|
86
|
+
return async function streamingFetcher(url, method, params = {}) {
|
|
87
|
+
const apiKey = config.apiKey || process.env.V0_API_KEY;
|
|
88
|
+
if (!apiKey) {
|
|
89
|
+
throw new Error('API key is required. Provide it via config.apiKey or V0_API_KEY environment variable');
|
|
90
|
+
}
|
|
91
|
+
const queryString = params.query ? '?' + new URLSearchParams(params.query).toString() : '';
|
|
92
|
+
const finalUrl = baseUrl + url + queryString;
|
|
93
|
+
const hasBody = method !== 'GET' && params.body;
|
|
94
|
+
const headers = {
|
|
95
|
+
Authorization: `Bearer ${apiKey}`,
|
|
96
|
+
'User-Agent': 'v0-sdk/0.1.0',
|
|
97
|
+
Accept: 'text/event-stream',
|
|
98
|
+
'Cache-Control': 'no-cache',
|
|
99
|
+
...params.headers
|
|
100
|
+
};
|
|
101
|
+
// Include session token in headers if available
|
|
102
|
+
if (sessionToken) {
|
|
103
|
+
headers['x-session-token'] = sessionToken;
|
|
104
|
+
}
|
|
105
|
+
if (hasBody) {
|
|
106
|
+
headers['Content-Type'] = 'application/json';
|
|
107
|
+
}
|
|
108
|
+
const res = await fetch(finalUrl, {
|
|
109
|
+
method,
|
|
110
|
+
headers,
|
|
111
|
+
body: hasBody ? JSON.stringify(params.body) : undefined
|
|
112
|
+
});
|
|
113
|
+
// Check for session token in response headers
|
|
114
|
+
const newSessionToken = res.headers.get('x-session-token');
|
|
115
|
+
if (newSessionToken) {
|
|
116
|
+
sessionToken = newSessionToken;
|
|
117
|
+
}
|
|
118
|
+
if (!res.ok) {
|
|
119
|
+
const text = await res.text();
|
|
120
|
+
throw new Error(`HTTP ${res.status}: ${text}`);
|
|
121
|
+
}
|
|
122
|
+
if (!res.body) {
|
|
123
|
+
throw new Error('No response body available for streaming');
|
|
124
|
+
}
|
|
125
|
+
return res.body;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
42
128
|
|
|
43
129
|
function createClient(config = {}) {
|
|
44
130
|
const fetcher = createFetcher(config);
|
|
131
|
+
const streamingFetcher = createStreamingFetcher(config);
|
|
45
132
|
return {
|
|
46
133
|
chats: {
|
|
47
134
|
async create (params) {
|
|
@@ -55,6 +142,11 @@ function createClient(config = {}) {
|
|
|
55
142
|
responseMode: params.responseMode,
|
|
56
143
|
designSystemId: params.designSystemId
|
|
57
144
|
};
|
|
145
|
+
if (params.responseMode === 'experimental_stream') {
|
|
146
|
+
return await streamingFetcher(`/chats`, 'POST', {
|
|
147
|
+
body
|
|
148
|
+
});
|
|
149
|
+
}
|
|
58
150
|
return fetcher(`/chats`, 'POST', {
|
|
59
151
|
body
|
|
60
152
|
});
|
|
@@ -158,6 +250,12 @@ function createClient(config = {}) {
|
|
|
158
250
|
modelConfiguration: params.modelConfiguration,
|
|
159
251
|
responseMode: params.responseMode
|
|
160
252
|
};
|
|
253
|
+
if (params.responseMode === 'experimental_stream') {
|
|
254
|
+
return await streamingFetcher(`/chats/${pathParams.chatId}/messages`, 'POST', {
|
|
255
|
+
pathParams,
|
|
256
|
+
body
|
|
257
|
+
});
|
|
258
|
+
}
|
|
161
259
|
return fetcher(`/chats/${pathParams.chatId}/messages`, 'POST', {
|
|
162
260
|
pathParams,
|
|
163
261
|
body
|
|
@@ -530,4 +628,5 @@ function createClient(config = {}) {
|
|
|
530
628
|
const v0 = createClient();
|
|
531
629
|
|
|
532
630
|
exports.createClient = createClient;
|
|
631
|
+
exports.parseStreamingResponse = parseStreamingResponse;
|
|
533
632
|
exports.v0 = v0;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
interface StreamEvent {
|
|
2
|
+
event?: string;
|
|
3
|
+
data: string;
|
|
4
|
+
}
|
|
5
|
+
declare function parseStreamingResponse(stream: ReadableStream<Uint8Array>): AsyncGenerator<StreamEvent, void, unknown>;
|
|
6
|
+
|
|
1
7
|
type ChatDetail = {
|
|
2
8
|
id: string;
|
|
3
9
|
object: 'chat';
|
|
@@ -448,10 +454,11 @@ interface ChatsCreateRequest {
|
|
|
448
454
|
imageGenerations?: boolean;
|
|
449
455
|
thinking?: boolean;
|
|
450
456
|
};
|
|
451
|
-
responseMode?: 'sync' | 'async';
|
|
457
|
+
responseMode?: 'sync' | 'async' | 'experimental_stream';
|
|
452
458
|
designSystemId?: string | null;
|
|
453
459
|
}
|
|
454
460
|
type ChatsCreateResponse = ChatDetail;
|
|
461
|
+
type ChatsCreateStreamResponse = ReadableStream<Uint8Array>;
|
|
455
462
|
interface ChatsFindResponse {
|
|
456
463
|
object: 'list';
|
|
457
464
|
data: ChatSummary[];
|
|
@@ -477,6 +484,7 @@ type ChatsInitRequest = {
|
|
|
477
484
|
lockAllFiles?: never;
|
|
478
485
|
registry?: never;
|
|
479
486
|
zip?: never;
|
|
487
|
+
templateId?: never;
|
|
480
488
|
} | {
|
|
481
489
|
type: 'repo';
|
|
482
490
|
repo: {
|
|
@@ -487,6 +495,7 @@ type ChatsInitRequest = {
|
|
|
487
495
|
files?: never;
|
|
488
496
|
registry?: never;
|
|
489
497
|
zip?: never;
|
|
498
|
+
templateId?: never;
|
|
490
499
|
} | {
|
|
491
500
|
type: 'registry';
|
|
492
501
|
registry: {
|
|
@@ -496,6 +505,7 @@ type ChatsInitRequest = {
|
|
|
496
505
|
files?: never;
|
|
497
506
|
repo?: never;
|
|
498
507
|
zip?: never;
|
|
508
|
+
templateId?: never;
|
|
499
509
|
} | {
|
|
500
510
|
type: 'zip';
|
|
501
511
|
zip: {
|
|
@@ -505,6 +515,15 @@ type ChatsInitRequest = {
|
|
|
505
515
|
files?: never;
|
|
506
516
|
repo?: never;
|
|
507
517
|
registry?: never;
|
|
518
|
+
templateId?: never;
|
|
519
|
+
} | {
|
|
520
|
+
type: 'template';
|
|
521
|
+
templateId: string;
|
|
522
|
+
files?: never;
|
|
523
|
+
repo?: never;
|
|
524
|
+
lockAllFiles?: never;
|
|
525
|
+
registry?: never;
|
|
526
|
+
zip?: never;
|
|
508
527
|
});
|
|
509
528
|
type ChatsInitResponse = ChatDetail;
|
|
510
529
|
interface ChatsDeleteResponse {
|
|
@@ -551,9 +570,10 @@ interface ChatsSendMessageRequest {
|
|
|
551
570
|
imageGenerations?: boolean;
|
|
552
571
|
thinking?: boolean;
|
|
553
572
|
};
|
|
554
|
-
responseMode?: 'sync' | 'async';
|
|
573
|
+
responseMode?: 'sync' | 'async' | 'experimental_stream';
|
|
555
574
|
}
|
|
556
575
|
type ChatsSendMessageResponse = ChatDetail;
|
|
576
|
+
type ChatsSendMessageStreamResponse = ReadableStream<Uint8Array>;
|
|
557
577
|
type ChatsGetMessageResponse = MessageDetail;
|
|
558
578
|
interface ChatsFindVersionsResponse {
|
|
559
579
|
object: 'list';
|
|
@@ -766,7 +786,7 @@ interface V0ClientConfig {
|
|
|
766
786
|
}
|
|
767
787
|
declare function createClient(config?: V0ClientConfig): {
|
|
768
788
|
chats: {
|
|
769
|
-
create(params: ChatsCreateRequest): Promise<ChatsCreateResponse>;
|
|
789
|
+
create(params: ChatsCreateRequest): Promise<ChatsCreateResponse | ChatsCreateStreamResponse>;
|
|
770
790
|
find(params?: {
|
|
771
791
|
limit?: string;
|
|
772
792
|
offset?: string;
|
|
@@ -795,7 +815,7 @@ declare function createClient(config?: V0ClientConfig): {
|
|
|
795
815
|
}): Promise<ChatsFindMessagesResponse>;
|
|
796
816
|
sendMessage(params: {
|
|
797
817
|
chatId: string;
|
|
798
|
-
} & ChatsSendMessageRequest): Promise<ChatsSendMessageResponse>;
|
|
818
|
+
} & ChatsSendMessageRequest): Promise<ChatsSendMessageResponse | ChatsSendMessageStreamResponse>;
|
|
799
819
|
getMessage(params: {
|
|
800
820
|
chatId: string;
|
|
801
821
|
messageId: string;
|
|
@@ -912,7 +932,7 @@ declare function createClient(config?: V0ClientConfig): {
|
|
|
912
932
|
};
|
|
913
933
|
declare const v0: {
|
|
914
934
|
chats: {
|
|
915
|
-
create(params: ChatsCreateRequest): Promise<ChatsCreateResponse>;
|
|
935
|
+
create(params: ChatsCreateRequest): Promise<ChatsCreateResponse | ChatsCreateStreamResponse>;
|
|
916
936
|
find(params?: {
|
|
917
937
|
limit?: string;
|
|
918
938
|
offset?: string;
|
|
@@ -941,7 +961,7 @@ declare const v0: {
|
|
|
941
961
|
}): Promise<ChatsFindMessagesResponse>;
|
|
942
962
|
sendMessage(params: {
|
|
943
963
|
chatId: string;
|
|
944
|
-
} & ChatsSendMessageRequest): Promise<ChatsSendMessageResponse>;
|
|
964
|
+
} & ChatsSendMessageRequest): Promise<ChatsSendMessageResponse | ChatsSendMessageStreamResponse>;
|
|
945
965
|
getMessage(params: {
|
|
946
966
|
chatId: string;
|
|
947
967
|
messageId: string;
|
|
@@ -1057,6 +1077,6 @@ declare const v0: {
|
|
|
1057
1077
|
};
|
|
1058
1078
|
};
|
|
1059
1079
|
|
|
1060
|
-
export { createClient, v0 };
|
|
1061
|
-
export type { ChatDetail, ChatSummary, ChatsCreateRequest, ChatsCreateResponse, ChatsDeleteResponse, ChatsFavoriteRequest, ChatsFavoriteResponse, ChatsFindMessagesResponse, ChatsFindResponse, ChatsFindVersionsResponse, ChatsForkRequest, ChatsForkResponse, ChatsGetByIdResponse, ChatsGetMessageResponse, ChatsGetVersionResponse, ChatsInitRequest, ChatsInitResponse, ChatsResumeResponse, ChatsSendMessageRequest, ChatsSendMessageResponse, ChatsUpdateRequest, ChatsUpdateResponse, ChatsUpdateVersionRequest, ChatsUpdateVersionResponse, DeploymentDetail, DeploymentSummary, DeploymentsCreateRequest, DeploymentsCreateResponse, DeploymentsDeleteResponse, DeploymentsFindErrorsResponse, DeploymentsFindLogsResponse, DeploymentsFindResponse, DeploymentsGetByIdResponse, EnvironmentVariableDetailSchema, EnvironmentVariableSummarySchema, EnvironmentVariablesListSchema, FileDetail, FileSummary, HookDetail, HookEventDetail, HookSummary, HooksCreateRequest, HooksCreateResponse, HooksDeleteResponse, HooksFindResponse, HooksGetByIdResponse, HooksUpdateRequest, HooksUpdateResponse, IntegrationConnectionDetailSchema, IntegrationConnectionListSchema, IntegrationConnectionSummarySchema, IntegrationDetailSchema, IntegrationListSchema, IntegrationSummarySchema, IntegrationsVercelProjectsCreateRequest, IntegrationsVercelProjectsCreateResponse, IntegrationsVercelProjectsFindResponse, MessageDetail, MessageSummary, MessageSummaryList, ProductDetailSchema, ProductListSchema, ProductSummarySchema, ProjectDetail, ProjectSummary, ProjectsAssignRequest, ProjectsAssignResponse, ProjectsCreateEnvVarsRequest, ProjectsCreateEnvVarsResponse, ProjectsCreateRequest, ProjectsCreateResponse, ProjectsDeleteEnvVarsRequest, ProjectsDeleteEnvVarsResponse, ProjectsFindEnvVarsResponse, ProjectsFindResponse, ProjectsGetByChatIdResponse, ProjectsGetByIdResponse, ProjectsGetEnvVarResponse, ProjectsUpdateEnvVarsRequest, ProjectsUpdateEnvVarsResponse, ProjectsUpdateRequest, ProjectsUpdateResponse, RateLimitsFindResponse, ScopeSummary, SearchResultItem, UserDetail, UserGetBillingResponse, UserGetPlanResponse, UserGetResponse, UserGetScopesResponse, V0ClientConfig, VercelProjectDetail, VercelProjectSummary, VersionDetail, VersionSummary, VersionSummaryList };
|
|
1080
|
+
export { createClient, parseStreamingResponse, v0 };
|
|
1081
|
+
export type { ChatDetail, ChatSummary, ChatsCreateRequest, ChatsCreateResponse, ChatsCreateStreamResponse, ChatsDeleteResponse, ChatsFavoriteRequest, ChatsFavoriteResponse, ChatsFindMessagesResponse, ChatsFindResponse, ChatsFindVersionsResponse, ChatsForkRequest, ChatsForkResponse, ChatsGetByIdResponse, ChatsGetMessageResponse, ChatsGetVersionResponse, ChatsInitRequest, ChatsInitResponse, ChatsResumeResponse, ChatsSendMessageRequest, ChatsSendMessageResponse, ChatsSendMessageStreamResponse, ChatsUpdateRequest, ChatsUpdateResponse, ChatsUpdateVersionRequest, ChatsUpdateVersionResponse, DeploymentDetail, DeploymentSummary, DeploymentsCreateRequest, DeploymentsCreateResponse, DeploymentsDeleteResponse, DeploymentsFindErrorsResponse, DeploymentsFindLogsResponse, DeploymentsFindResponse, DeploymentsGetByIdResponse, EnvironmentVariableDetailSchema, EnvironmentVariableSummarySchema, EnvironmentVariablesListSchema, FileDetail, FileSummary, HookDetail, HookEventDetail, HookSummary, HooksCreateRequest, HooksCreateResponse, HooksDeleteResponse, HooksFindResponse, HooksGetByIdResponse, HooksUpdateRequest, HooksUpdateResponse, IntegrationConnectionDetailSchema, IntegrationConnectionListSchema, IntegrationConnectionSummarySchema, IntegrationDetailSchema, IntegrationListSchema, IntegrationSummarySchema, IntegrationsVercelProjectsCreateRequest, IntegrationsVercelProjectsCreateResponse, IntegrationsVercelProjectsFindResponse, MessageDetail, MessageSummary, MessageSummaryList, ProductDetailSchema, ProductListSchema, ProductSummarySchema, ProjectDetail, ProjectSummary, ProjectsAssignRequest, ProjectsAssignResponse, ProjectsCreateEnvVarsRequest, ProjectsCreateEnvVarsResponse, ProjectsCreateRequest, ProjectsCreateResponse, ProjectsDeleteEnvVarsRequest, ProjectsDeleteEnvVarsResponse, ProjectsFindEnvVarsResponse, ProjectsFindResponse, ProjectsGetByChatIdResponse, ProjectsGetByIdResponse, ProjectsGetEnvVarResponse, ProjectsUpdateEnvVarsRequest, ProjectsUpdateEnvVarsResponse, ProjectsUpdateRequest, ProjectsUpdateResponse, RateLimitsFindResponse, ScopeSummary, SearchResultItem, StreamEvent, UserDetail, UserGetBillingResponse, UserGetPlanResponse, UserGetResponse, UserGetScopesResponse, V0ClientConfig, VercelProjectDetail, VercelProjectSummary, VersionDetail, VersionSummary, VersionSummaryList };
|
|
1062
1082
|
//# sourceMappingURL=index.d.ts.map
|
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 createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n files: {\n object: 'file'\n name: string\n content: string\n locked: boolean\n }[]\n }\n /** @deprecated */\n url: string\n messages: Array<{\n id: string\n object: 'message'\n content: string\n experimental_content?: Array<\n | [0, unknown[]]\n | [\n 1,\n {\n title?: string\n [key: string]: unknown\n },\n ]\n >\n createdAt: string\n updatedAt?: 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 finishReason?:\n | 'stop'\n | 'length'\n | 'content-filter'\n | 'tool-calls'\n | 'error'\n | 'other'\n | 'unknown'\n apiUrl: string\n }>\n files?: {\n lang: string\n meta: Record<string, unknown>\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' | 'v0-gpt-5'\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 createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: 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 EnvironmentVariableDetailSchema {\n id: string\n object: 'environment_variable'\n key: string\n value: string\n decrypted: boolean\n createdAt: number\n updatedAt?: number\n}\n\nexport interface EnvironmentVariableSummarySchema {\n id: string\n object: 'environment_variable'\n key: string\n value: string\n decrypted: boolean\n createdAt: number\n updatedAt?: number\n}\n\nexport interface EnvironmentVariablesListSchema {\n object: 'list'\n data: {\n id: string\n object: 'environment_variable'\n key: string\n value: string\n decrypted: boolean\n createdAt: number\n updatedAt?: number\n }[]\n}\n\nexport interface FileDetail {\n object: 'file'\n name: string\n content: string\n locked: boolean\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 >\n chatId?: string\n url: string\n}\n\nexport type HookEventDetail = {\n id: string\n object: 'hook_event'\n event:\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.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 interface IntegrationConnectionDetailSchema {\n object: 'integration_connection'\n id: string\n connected: boolean\n integration: {\n id: string\n object: 'integration'\n slug: string\n name: string\n }\n metadata?: Record<string, unknown>\n}\n\nexport interface IntegrationConnectionListSchema {\n object: 'list'\n data: {\n object: 'integration_connection'\n id: string\n connected: boolean\n integration: {\n id: string\n object: 'integration'\n slug: string\n name: string\n }\n }[]\n}\n\nexport interface IntegrationConnectionSummarySchema {\n object: 'integration_connection'\n id: string\n connected: boolean\n integration: {\n id: string\n object: 'integration'\n slug: string\n name: string\n }\n}\n\nexport interface IntegrationDetailSchema {\n id: string\n object: 'integration'\n slug: string\n name: string\n description: string\n iconUrl: string\n}\n\nexport interface IntegrationListSchema {\n object: 'list'\n data: {\n id: string\n object: 'integration'\n slug: string\n name: string\n description: string\n iconUrl: string\n }[]\n}\n\nexport interface IntegrationSummarySchema {\n id: string\n object: 'integration'\n slug: string\n name: string\n}\n\nexport type MessageDetail = {\n id: string\n object: 'message'\n content: string\n experimental_content?: Array<\n | [0, unknown[]]\n | [\n 1,\n {\n title?: string\n [key: string]: unknown\n },\n ]\n >\n createdAt: string\n updatedAt?: 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 finishReason?:\n | 'stop'\n | 'length'\n | 'content-filter'\n | 'tool-calls'\n | 'error'\n | 'other'\n | 'unknown'\n apiUrl: string\n chatId: string\n}\n\nexport type MessageSummary = {\n id: string\n object: 'message'\n content: string\n experimental_content?: Array<\n | [0, unknown[]]\n | [\n 1,\n {\n title?: string\n [key: string]: unknown\n },\n ]\n >\n createdAt: string\n updatedAt?: 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 finishReason?:\n | 'stop'\n | 'length'\n | 'content-filter'\n | 'tool-calls'\n | 'error'\n | 'other'\n | 'unknown'\n apiUrl: string\n}\n\nexport type MessageSummaryList = {\n object: 'list'\n data: Array<{\n id: string\n object: 'message'\n content: string\n experimental_content?: Array<\n | [0, unknown[]]\n | [\n 1,\n {\n title?: string\n [key: string]: unknown\n },\n ]\n >\n createdAt: string\n updatedAt?: 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 finishReason?:\n | 'stop'\n | 'length'\n | 'content-filter'\n | 'tool-calls'\n | 'error'\n | 'other'\n | 'unknown'\n apiUrl: string\n }>\n pagination: {\n hasMore: boolean\n nextCursor?: string\n nextUrl?: string\n }\n}\n\nexport interface ProductDetailSchema {\n object: 'product'\n id: string\n slug: string\n name: string\n description: string\n iconUrl: string\n iconBackgroundColor?: string\n}\n\nexport interface ProductListSchema {\n object: 'list'\n data: {\n object: 'product'\n id: string\n slug: string\n name: string\n description: string\n iconUrl: string\n }[]\n}\n\nexport interface ProductSummarySchema {\n object: 'product'\n id: string\n slug: string\n name: string\n description: string\n iconUrl: string\n}\n\nexport type ProjectDetail = {\n id: string\n object: 'project'\n name: string\n privacy: 'private' | 'team'\n vercelProjectId?: string\n createdAt: string\n updatedAt?: string\n apiUrl: string\n webUrl: string\n description?: string\n instructions?: 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 createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n }\n }>\n}\n\nexport type ProjectSummary = {\n id: string\n object: 'project'\n name: string\n privacy: 'private' | 'team'\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 createdAt: string\n updatedAt?: string\n files: {\n object: 'file'\n name: string\n content: string\n locked: boolean\n }[]\n}\n\nexport type VersionSummary = {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n}\n\nexport type VersionSummaryList = {\n object: 'list'\n data: Array<{\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n }>\n pagination: {\n hasMore: boolean\n nextCursor?: string\n nextUrl?: string\n }\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' | 'v0-gpt-5'\n imageGenerations?: boolean\n thinking?: boolean\n }\n responseMode?: 'sync' | 'async'\n designSystemId?: string | null\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 locked?: boolean\n content?: never\n }\n | {\n name: string\n content: string\n locked?: boolean\n url?: never\n }\n >\n repo?: never\n lockAllFiles?: never\n registry?: never\n zip?: never\n }\n | {\n type: 'repo'\n repo: {\n url: string\n branch?: string\n }\n lockAllFiles?: boolean\n files?: never\n registry?: never\n zip?: never\n }\n | {\n type: 'registry'\n registry: {\n url: string\n }\n lockAllFiles?: boolean\n files?: never\n repo?: never\n zip?: never\n }\n | {\n type: 'zip'\n zip: {\n url: string\n }\n lockAllFiles?: boolean\n files?: never\n repo?: never\n registry?: never\n }\n)\n\nexport type ChatsInitResponse = ChatDetail\n\nexport interface ChatsDeleteResponse {\n id: string\n object: 'chat'\n deleted: true\n}\n\nexport type ChatsGetByIdResponse = ChatDetail\n\nexport interface ChatsUpdateRequest {\n name?: string\n privacy?: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n}\n\nexport type ChatsUpdateResponse = ChatDetail\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 privacy?: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n}\n\nexport type ChatsForkResponse = ChatDetail\n\nexport type ProjectsGetByChatIdResponse = ProjectDetail\n\nexport interface ChatsFindMessagesResponse {\n object: 'list'\n data: MessageSummary[]\n pagination: {\n hasMore: boolean\n nextCursor?: string\n nextUrl?: string\n }\n}\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' | 'v0-gpt-5'\n imageGenerations?: boolean\n thinking?: boolean\n }\n responseMode?: 'sync' | 'async'\n}\n\nexport type ChatsSendMessageResponse = ChatDetail\n\nexport type ChatsGetMessageResponse = MessageDetail\n\nexport interface ChatsFindVersionsResponse {\n object: 'list'\n data: VersionSummary[]\n pagination: {\n hasMore: boolean\n nextCursor?: string\n nextUrl?: string\n }\n}\n\nexport type ChatsGetVersionResponse = VersionDetail\n\nexport interface ChatsUpdateVersionRequest {\n files: {\n name: string\n content: string\n locked?: boolean\n }[]\n}\n\nexport type ChatsUpdateVersionResponse = VersionDetail\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 >\n chatId?: 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 >\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 vercelProjectId?: string\n privacy?: 'private' | 'team'\n}\n\nexport type ProjectsCreateResponse = ProjectDetail\n\nexport type ProjectsGetByIdResponse = ProjectDetail\n\nexport interface ProjectsUpdateRequest {\n name?: string\n description?: string\n instructions?: string\n privacy?: 'private' | 'team'\n}\n\nexport type ProjectsUpdateResponse = 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 ProjectsFindEnvVarsResponse {\n object: 'list'\n data: EnvironmentVariableSummarySchema[]\n}\n\nexport interface ProjectsCreateEnvVarsRequest {\n environmentVariables: {\n key: string\n value: string\n }[]\n upsert?: boolean\n}\n\nexport interface ProjectsCreateEnvVarsResponse {\n object: 'list'\n data: EnvironmentVariableSummarySchema[]\n}\n\nexport interface ProjectsUpdateEnvVarsRequest {\n environmentVariables: {\n id: string\n value: string\n }[]\n}\n\nexport interface ProjectsUpdateEnvVarsResponse {\n object: 'list'\n data: EnvironmentVariableSummarySchema[]\n}\n\nexport interface ProjectsDeleteEnvVarsRequest {\n environmentVariableIds: string[]\n}\n\nexport interface ProjectsDeleteEnvVarsResponse {\n object: 'list'\n data: {\n id: string\n object: 'environment_variable'\n deleted: true\n }[]\n}\n\nexport interface ProjectsGetEnvVarResponse {\n object: 'environment_variable'\n data: EnvironmentVariableDetailSchema\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 designSystemId: params.designSystemId,\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, privacy: params.privacy }\n return fetcher(`/chats/${pathParams.chatId}/fork`, 'POST', {\n pathParams,\n body,\n })\n },\n\n async findMessages(params: {\n chatId: string\n limit?: string\n cursor?: string\n }): Promise<ChatsFindMessagesResponse> {\n const pathParams = { chatId: params.chatId }\n const query = Object.fromEntries(\n Object.entries({\n limit: params.limit,\n cursor: params.cursor,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/chats/${pathParams.chatId}/messages`, 'GET', {\n pathParams,\n ...(hasQuery ? { query } : {}),\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 getMessage(params: {\n chatId: string\n messageId: string\n }): Promise<ChatsGetMessageResponse> {\n const pathParams = {\n chatId: params.chatId,\n messageId: params.messageId,\n }\n return fetcher(\n `/chats/${pathParams.chatId}/messages/${pathParams.messageId}`,\n 'GET',\n { pathParams },\n )\n },\n\n async findVersions(params: {\n chatId: string\n limit?: string\n cursor?: string\n }): Promise<ChatsFindVersionsResponse> {\n const pathParams = { chatId: params.chatId }\n const query = Object.fromEntries(\n Object.entries({\n limit: params.limit,\n cursor: params.cursor,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/chats/${pathParams.chatId}/versions`, 'GET', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async getVersion(params: {\n chatId: string\n versionId: string\n }): Promise<ChatsGetVersionResponse> {\n const pathParams = {\n chatId: params.chatId,\n versionId: params.versionId,\n }\n return fetcher(\n `/chats/${pathParams.chatId}/versions/${pathParams.versionId}`,\n 'GET',\n { pathParams },\n )\n },\n\n async updateVersion(\n params: {\n chatId: string\n versionId: string\n } & ChatsUpdateVersionRequest,\n ): Promise<ChatsUpdateVersionResponse> {\n const pathParams = {\n chatId: params.chatId,\n versionId: params.versionId,\n }\n const body = { files: params.files }\n return fetcher(\n `/chats/${pathParams.chatId}/versions/${pathParams.versionId}`,\n 'PATCH',\n { pathParams, 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 vercelProjectId: params.vercelProjectId,\n privacy: params.privacy,\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 update(\n params: { projectId: string } & ProjectsUpdateRequest,\n ): Promise<ProjectsUpdateResponse> {\n const pathParams = { projectId: params.projectId }\n const body = {\n name: params.name,\n description: params.description,\n instructions: params.instructions,\n privacy: params.privacy,\n }\n return fetcher(`/projects/${pathParams.projectId}`, 'PATCH', {\n pathParams,\n body,\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 async findEnvVars(params: {\n projectId: string\n decrypted?: string\n }): Promise<ProjectsFindEnvVarsResponse> {\n const pathParams = { projectId: params.projectId }\n const query = Object.fromEntries(\n Object.entries({\n decrypted: params.decrypted,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/projects/${pathParams.projectId}/env-vars`, 'GET', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async createEnvVars(\n params: {\n projectId: string\n decrypted?: string\n } & ProjectsCreateEnvVarsRequest,\n ): Promise<ProjectsCreateEnvVarsResponse> {\n const pathParams = { projectId: params.projectId }\n const query = Object.fromEntries(\n Object.entries({\n decrypted: params.decrypted,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const body = {\n environmentVariables: params.environmentVariables,\n upsert: params.upsert,\n }\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/projects/${pathParams.projectId}/env-vars`, 'POST', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n body,\n })\n },\n\n async updateEnvVars(\n params: {\n projectId: string\n decrypted?: string\n } & ProjectsUpdateEnvVarsRequest,\n ): Promise<ProjectsUpdateEnvVarsResponse> {\n const pathParams = { projectId: params.projectId }\n const query = Object.fromEntries(\n Object.entries({\n decrypted: params.decrypted,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const body = { environmentVariables: params.environmentVariables }\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/projects/${pathParams.projectId}/env-vars`, 'PATCH', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n body,\n })\n },\n\n async deleteEnvVars(\n params: { projectId: string } & ProjectsDeleteEnvVarsRequest,\n ): Promise<ProjectsDeleteEnvVarsResponse> {\n const pathParams = { projectId: params.projectId }\n const body = { environmentVariableIds: params.environmentVariableIds }\n return fetcher(\n `/projects/${pathParams.projectId}/env-vars/delete`,\n 'POST',\n { pathParams, body },\n )\n },\n\n async getEnvVar(params: {\n projectId: string\n environmentVariableId: string\n decrypted?: string\n }): Promise<ProjectsGetEnvVarResponse> {\n const pathParams = {\n projectId: params.projectId,\n environmentVariableId: params.environmentVariableId,\n }\n const query = Object.fromEntries(\n Object.entries({\n decrypted: params.decrypted,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(\n `/projects/${pathParams.projectId}/env-vars/${pathParams.environmentVariableId}`,\n 'GET',\n { pathParams, ...(hasQuery ? { query } : {}) },\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 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;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;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;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;AACO;AACP;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;AACO;AACP;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;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;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;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;AACO;AACP;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACO;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACA;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;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;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/core.ts","../src/sdk/v0.ts"],"sourcesContent":["export interface ClientConfig {\n apiKey?: string\n baseUrl?: string\n}\n\nexport function createFetcher(config: ClientConfig = {}) {\n const baseUrl = config.baseUrl || 'https://api.v0.dev/v1'\n let sessionToken: string | null = null\n\n return async function fetcher(\n url: string,\n method: string,\n params: {\n body?: any\n query?: Record<string, string>\n pathParams?: Record<string, string>\n headers?: Record<string, string>\n } = {},\n ): Promise<any> {\n const apiKey = config.apiKey || process.env.V0_API_KEY\n\n if (!apiKey) {\n throw new Error(\n 'API key is required. Provide it via config.apiKey or V0_API_KEY environment variable',\n )\n }\n\n const queryString = params.query\n ? '?' + new URLSearchParams(params.query).toString()\n : ''\n\n const finalUrl = baseUrl + url + queryString\n\n const hasBody = method !== 'GET' && params.body\n const headers: Record<string, string> = {\n Authorization: `Bearer ${apiKey}`,\n 'User-Agent': 'v0-sdk/0.1.0',\n ...params.headers,\n }\n\n // Include session token in headers if available\n if (sessionToken) {\n headers['x-session-token'] = sessionToken\n }\n\n if (hasBody) {\n headers['Content-Type'] = 'application/json'\n }\n\n const res = await fetch(finalUrl, {\n method,\n headers,\n body: hasBody ? JSON.stringify(params.body) : undefined,\n })\n\n // Check for session token in response headers\n const newSessionToken = res.headers.get('x-session-token')\n if (newSessionToken) {\n sessionToken = newSessionToken\n }\n\n if (!res.ok) {\n const text = await res.text()\n throw new Error(`HTTP ${res.status}: ${text}`)\n }\n\n return res.json()\n }\n}\n\n// Streaming response types\nexport interface StreamEvent {\n event?: string\n data: string\n}\n\n// Utility function to parse streaming events\nexport async function* parseStreamingResponse(\n stream: ReadableStream<Uint8Array>,\n): AsyncGenerator<StreamEvent, void, unknown> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() || '' // Keep the last incomplete line in buffer\n\n for (const line of lines) {\n if (line.trim() === '') continue\n\n if (line.startsWith('data: ')) {\n const data = line.slice(6)\n if (data === '[DONE]') return\n\n try {\n yield {\n event: 'message',\n data: data,\n }\n } catch (e) {\n console.warn('Failed to parse streaming data:', e)\n }\n } else if (line.startsWith('event: ')) {\n const event = line.slice(7)\n yield {\n event: event,\n data: '',\n }\n }\n }\n }\n } finally {\n reader.releaseLock()\n }\n}\n\nexport function createStreamingFetcher(config: ClientConfig = {}) {\n const baseUrl = config.baseUrl || 'https://api.v0.dev/v1'\n let sessionToken: string | null = null\n\n return async function streamingFetcher(\n url: string,\n method: string,\n params: {\n body?: any\n query?: Record<string, string>\n pathParams?: Record<string, string>\n headers?: Record<string, string>\n } = {},\n ): Promise<ReadableStream<Uint8Array>> {\n const apiKey = config.apiKey || process.env.V0_API_KEY\n\n if (!apiKey) {\n throw new Error(\n 'API key is required. Provide it via config.apiKey or V0_API_KEY environment variable',\n )\n }\n\n const queryString = params.query\n ? '?' + new URLSearchParams(params.query).toString()\n : ''\n\n const finalUrl = baseUrl + url + queryString\n\n const hasBody = method !== 'GET' && params.body\n const headers: Record<string, string> = {\n Authorization: `Bearer ${apiKey}`,\n 'User-Agent': 'v0-sdk/0.1.0',\n Accept: 'text/event-stream',\n 'Cache-Control': 'no-cache',\n ...params.headers,\n }\n\n // Include session token in headers if available\n if (sessionToken) {\n headers['x-session-token'] = sessionToken\n }\n\n if (hasBody) {\n headers['Content-Type'] = 'application/json'\n }\n\n const res = await fetch(finalUrl, {\n method,\n headers,\n body: hasBody ? JSON.stringify(params.body) : undefined,\n })\n\n // Check for session token in response headers\n const newSessionToken = res.headers.get('x-session-token')\n if (newSessionToken) {\n sessionToken = newSessionToken\n }\n\n if (!res.ok) {\n const text = await res.text()\n throw new Error(`HTTP ${res.status}: ${text}`)\n }\n\n if (!res.body) {\n throw new Error('No response body available for streaming')\n }\n\n return res.body\n }\n}\n","import { createFetcher, createStreamingFetcher } from './core'\n\n// Re-export streaming utilities from core\nexport { parseStreamingResponse, type StreamEvent } 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 createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n files: {\n object: 'file'\n name: string\n content: string\n locked: boolean\n }[]\n }\n /** @deprecated */\n url: string\n messages: Array<{\n id: string\n object: 'message'\n content: string\n experimental_content?: Array<\n | [0, unknown[]]\n | [\n 1,\n {\n title?: string\n [key: string]: unknown\n },\n ]\n >\n createdAt: string\n updatedAt?: 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 finishReason?:\n | 'stop'\n | 'length'\n | 'content-filter'\n | 'tool-calls'\n | 'error'\n | 'other'\n | 'unknown'\n apiUrl: string\n }>\n files?: {\n lang: string\n meta: Record<string, unknown>\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' | 'v0-gpt-5'\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 createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: 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 EnvironmentVariableDetailSchema {\n id: string\n object: 'environment_variable'\n key: string\n value: string\n decrypted: boolean\n createdAt: number\n updatedAt?: number\n}\n\nexport interface EnvironmentVariableSummarySchema {\n id: string\n object: 'environment_variable'\n key: string\n value: string\n decrypted: boolean\n createdAt: number\n updatedAt?: number\n}\n\nexport interface EnvironmentVariablesListSchema {\n object: 'list'\n data: {\n id: string\n object: 'environment_variable'\n key: string\n value: string\n decrypted: boolean\n createdAt: number\n updatedAt?: number\n }[]\n}\n\nexport interface FileDetail {\n object: 'file'\n name: string\n content: string\n locked: boolean\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 >\n chatId?: string\n url: string\n}\n\nexport type HookEventDetail = {\n id: string\n object: 'hook_event'\n event:\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.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 interface IntegrationConnectionDetailSchema {\n object: 'integration_connection'\n id: string\n connected: boolean\n integration: {\n id: string\n object: 'integration'\n slug: string\n name: string\n }\n metadata?: Record<string, unknown>\n}\n\nexport interface IntegrationConnectionListSchema {\n object: 'list'\n data: {\n object: 'integration_connection'\n id: string\n connected: boolean\n integration: {\n id: string\n object: 'integration'\n slug: string\n name: string\n }\n }[]\n}\n\nexport interface IntegrationConnectionSummarySchema {\n object: 'integration_connection'\n id: string\n connected: boolean\n integration: {\n id: string\n object: 'integration'\n slug: string\n name: string\n }\n}\n\nexport interface IntegrationDetailSchema {\n id: string\n object: 'integration'\n slug: string\n name: string\n description: string\n iconUrl: string\n}\n\nexport interface IntegrationListSchema {\n object: 'list'\n data: {\n id: string\n object: 'integration'\n slug: string\n name: string\n description: string\n iconUrl: string\n }[]\n}\n\nexport interface IntegrationSummarySchema {\n id: string\n object: 'integration'\n slug: string\n name: string\n}\n\nexport type MessageDetail = {\n id: string\n object: 'message'\n content: string\n experimental_content?: Array<\n | [0, unknown[]]\n | [\n 1,\n {\n title?: string\n [key: string]: unknown\n },\n ]\n >\n createdAt: string\n updatedAt?: 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 finishReason?:\n | 'stop'\n | 'length'\n | 'content-filter'\n | 'tool-calls'\n | 'error'\n | 'other'\n | 'unknown'\n apiUrl: string\n chatId: string\n}\n\nexport type MessageSummary = {\n id: string\n object: 'message'\n content: string\n experimental_content?: Array<\n | [0, unknown[]]\n | [\n 1,\n {\n title?: string\n [key: string]: unknown\n },\n ]\n >\n createdAt: string\n updatedAt?: 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 finishReason?:\n | 'stop'\n | 'length'\n | 'content-filter'\n | 'tool-calls'\n | 'error'\n | 'other'\n | 'unknown'\n apiUrl: string\n}\n\nexport type MessageSummaryList = {\n object: 'list'\n data: Array<{\n id: string\n object: 'message'\n content: string\n experimental_content?: Array<\n | [0, unknown[]]\n | [\n 1,\n {\n title?: string\n [key: string]: unknown\n },\n ]\n >\n createdAt: string\n updatedAt?: 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 finishReason?:\n | 'stop'\n | 'length'\n | 'content-filter'\n | 'tool-calls'\n | 'error'\n | 'other'\n | 'unknown'\n apiUrl: string\n }>\n pagination: {\n hasMore: boolean\n nextCursor?: string\n nextUrl?: string\n }\n}\n\nexport interface ProductDetailSchema {\n object: 'product'\n id: string\n slug: string\n name: string\n description: string\n iconUrl: string\n iconBackgroundColor?: string\n}\n\nexport interface ProductListSchema {\n object: 'list'\n data: {\n object: 'product'\n id: string\n slug: string\n name: string\n description: string\n iconUrl: string\n }[]\n}\n\nexport interface ProductSummarySchema {\n object: 'product'\n id: string\n slug: string\n name: string\n description: string\n iconUrl: string\n}\n\nexport type ProjectDetail = {\n id: string\n object: 'project'\n name: string\n privacy: 'private' | 'team'\n vercelProjectId?: string\n createdAt: string\n updatedAt?: string\n apiUrl: string\n webUrl: string\n description?: string\n instructions?: 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 createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n }\n }>\n}\n\nexport type ProjectSummary = {\n id: string\n object: 'project'\n name: string\n privacy: 'private' | 'team'\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 createdAt: string\n updatedAt?: string\n files: {\n object: 'file'\n name: string\n content: string\n locked: boolean\n }[]\n}\n\nexport type VersionSummary = {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n}\n\nexport type VersionSummaryList = {\n object: 'list'\n data: Array<{\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n }>\n pagination: {\n hasMore: boolean\n nextCursor?: string\n nextUrl?: string\n }\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' | 'v0-gpt-5'\n imageGenerations?: boolean\n thinking?: boolean\n }\n responseMode?: 'sync' | 'async' | 'experimental_stream'\n designSystemId?: string | null\n}\n\nexport type ChatsCreateResponse = ChatDetail\n\nexport type ChatsCreateStreamResponse = ReadableStream<Uint8Array>\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 locked?: boolean\n content?: never\n }\n | {\n name: string\n content: string\n locked?: boolean\n url?: never\n }\n >\n repo?: never\n lockAllFiles?: never\n registry?: never\n zip?: never\n templateId?: never\n }\n | {\n type: 'repo'\n repo: {\n url: string\n branch?: string\n }\n lockAllFiles?: boolean\n files?: never\n registry?: never\n zip?: never\n templateId?: never\n }\n | {\n type: 'registry'\n registry: {\n url: string\n }\n lockAllFiles?: boolean\n files?: never\n repo?: never\n zip?: never\n templateId?: never\n }\n | {\n type: 'zip'\n zip: {\n url: string\n }\n lockAllFiles?: boolean\n files?: never\n repo?: never\n registry?: never\n templateId?: never\n }\n | {\n type: 'template'\n templateId: string\n files?: never\n repo?: never\n lockAllFiles?: never\n registry?: never\n zip?: never\n }\n)\n\nexport type ChatsInitResponse = ChatDetail\n\nexport interface ChatsDeleteResponse {\n id: string\n object: 'chat'\n deleted: true\n}\n\nexport type ChatsGetByIdResponse = ChatDetail\n\nexport interface ChatsUpdateRequest {\n name?: string\n privacy?: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n}\n\nexport type ChatsUpdateResponse = ChatDetail\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 privacy?: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n}\n\nexport type ChatsForkResponse = ChatDetail\n\nexport type ProjectsGetByChatIdResponse = ProjectDetail\n\nexport interface ChatsFindMessagesResponse {\n object: 'list'\n data: MessageSummary[]\n pagination: {\n hasMore: boolean\n nextCursor?: string\n nextUrl?: string\n }\n}\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' | 'v0-gpt-5'\n imageGenerations?: boolean\n thinking?: boolean\n }\n responseMode?: 'sync' | 'async' | 'experimental_stream'\n}\n\nexport type ChatsSendMessageResponse = ChatDetail\n\nexport type ChatsSendMessageStreamResponse = ReadableStream<Uint8Array>\n\nexport type ChatsGetMessageResponse = MessageDetail\n\nexport interface ChatsFindVersionsResponse {\n object: 'list'\n data: VersionSummary[]\n pagination: {\n hasMore: boolean\n nextCursor?: string\n nextUrl?: string\n }\n}\n\nexport type ChatsGetVersionResponse = VersionDetail\n\nexport interface ChatsUpdateVersionRequest {\n files: {\n name: string\n content: string\n locked?: boolean\n }[]\n}\n\nexport type ChatsUpdateVersionResponse = VersionDetail\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 >\n chatId?: 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 >\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 vercelProjectId?: string\n privacy?: 'private' | 'team'\n}\n\nexport type ProjectsCreateResponse = ProjectDetail\n\nexport type ProjectsGetByIdResponse = ProjectDetail\n\nexport interface ProjectsUpdateRequest {\n name?: string\n description?: string\n instructions?: string\n privacy?: 'private' | 'team'\n}\n\nexport type ProjectsUpdateResponse = 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 ProjectsFindEnvVarsResponse {\n object: 'list'\n data: EnvironmentVariableSummarySchema[]\n}\n\nexport interface ProjectsCreateEnvVarsRequest {\n environmentVariables: {\n key: string\n value: string\n }[]\n upsert?: boolean\n}\n\nexport interface ProjectsCreateEnvVarsResponse {\n object: 'list'\n data: EnvironmentVariableSummarySchema[]\n}\n\nexport interface ProjectsUpdateEnvVarsRequest {\n environmentVariables: {\n id: string\n value: string\n }[]\n}\n\nexport interface ProjectsUpdateEnvVarsResponse {\n object: 'list'\n data: EnvironmentVariableSummarySchema[]\n}\n\nexport interface ProjectsDeleteEnvVarsRequest {\n environmentVariableIds: string[]\n}\n\nexport interface ProjectsDeleteEnvVarsResponse {\n object: 'list'\n data: {\n id: string\n object: 'environment_variable'\n deleted: true\n }[]\n}\n\nexport interface ProjectsGetEnvVarResponse {\n object: 'environment_variable'\n data: EnvironmentVariableDetailSchema\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 const streamingFetcher = createStreamingFetcher(config)\n\n return {\n chats: {\n async create(\n params: ChatsCreateRequest,\n ): Promise<ChatsCreateResponse | ChatsCreateStreamResponse> {\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 designSystemId: params.designSystemId,\n }\n\n if (params.responseMode === 'experimental_stream') {\n return await streamingFetcher(`/chats`, 'POST', { body })\n }\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, privacy: params.privacy }\n return fetcher(`/chats/${pathParams.chatId}/fork`, 'POST', {\n pathParams,\n body,\n })\n },\n\n async findMessages(params: {\n chatId: string\n limit?: string\n cursor?: string\n }): Promise<ChatsFindMessagesResponse> {\n const pathParams = { chatId: params.chatId }\n const query = Object.fromEntries(\n Object.entries({\n limit: params.limit,\n cursor: params.cursor,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/chats/${pathParams.chatId}/messages`, 'GET', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async sendMessage(\n params: { chatId: string } & ChatsSendMessageRequest,\n ): Promise<ChatsSendMessageResponse | ChatsSendMessageStreamResponse> {\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\n if (params.responseMode === 'experimental_stream') {\n return await streamingFetcher(\n `/chats/${pathParams.chatId}/messages`,\n 'POST',\n { pathParams, body },\n )\n }\n\n return fetcher(`/chats/${pathParams.chatId}/messages`, 'POST', {\n pathParams,\n body,\n })\n },\n\n async getMessage(params: {\n chatId: string\n messageId: string\n }): Promise<ChatsGetMessageResponse> {\n const pathParams = {\n chatId: params.chatId,\n messageId: params.messageId,\n }\n return fetcher(\n `/chats/${pathParams.chatId}/messages/${pathParams.messageId}`,\n 'GET',\n { pathParams },\n )\n },\n\n async findVersions(params: {\n chatId: string\n limit?: string\n cursor?: string\n }): Promise<ChatsFindVersionsResponse> {\n const pathParams = { chatId: params.chatId }\n const query = Object.fromEntries(\n Object.entries({\n limit: params.limit,\n cursor: params.cursor,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/chats/${pathParams.chatId}/versions`, 'GET', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async getVersion(params: {\n chatId: string\n versionId: string\n }): Promise<ChatsGetVersionResponse> {\n const pathParams = {\n chatId: params.chatId,\n versionId: params.versionId,\n }\n return fetcher(\n `/chats/${pathParams.chatId}/versions/${pathParams.versionId}`,\n 'GET',\n { pathParams },\n )\n },\n\n async updateVersion(\n params: {\n chatId: string\n versionId: string\n } & ChatsUpdateVersionRequest,\n ): Promise<ChatsUpdateVersionResponse> {\n const pathParams = {\n chatId: params.chatId,\n versionId: params.versionId,\n }\n const body = { files: params.files }\n return fetcher(\n `/chats/${pathParams.chatId}/versions/${pathParams.versionId}`,\n 'PATCH',\n { pathParams, 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 vercelProjectId: params.vercelProjectId,\n privacy: params.privacy,\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 update(\n params: { projectId: string } & ProjectsUpdateRequest,\n ): Promise<ProjectsUpdateResponse> {\n const pathParams = { projectId: params.projectId }\n const body = {\n name: params.name,\n description: params.description,\n instructions: params.instructions,\n privacy: params.privacy,\n }\n return fetcher(`/projects/${pathParams.projectId}`, 'PATCH', {\n pathParams,\n body,\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 async findEnvVars(params: {\n projectId: string\n decrypted?: string\n }): Promise<ProjectsFindEnvVarsResponse> {\n const pathParams = { projectId: params.projectId }\n const query = Object.fromEntries(\n Object.entries({\n decrypted: params.decrypted,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/projects/${pathParams.projectId}/env-vars`, 'GET', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async createEnvVars(\n params: {\n projectId: string\n decrypted?: string\n } & ProjectsCreateEnvVarsRequest,\n ): Promise<ProjectsCreateEnvVarsResponse> {\n const pathParams = { projectId: params.projectId }\n const query = Object.fromEntries(\n Object.entries({\n decrypted: params.decrypted,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const body = {\n environmentVariables: params.environmentVariables,\n upsert: params.upsert,\n }\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/projects/${pathParams.projectId}/env-vars`, 'POST', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n body,\n })\n },\n\n async updateEnvVars(\n params: {\n projectId: string\n decrypted?: string\n } & ProjectsUpdateEnvVarsRequest,\n ): Promise<ProjectsUpdateEnvVarsResponse> {\n const pathParams = { projectId: params.projectId }\n const query = Object.fromEntries(\n Object.entries({\n decrypted: params.decrypted,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const body = { environmentVariables: params.environmentVariables }\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/projects/${pathParams.projectId}/env-vars`, 'PATCH', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n body,\n })\n },\n\n async deleteEnvVars(\n params: { projectId: string } & ProjectsDeleteEnvVarsRequest,\n ): Promise<ProjectsDeleteEnvVarsResponse> {\n const pathParams = { projectId: params.projectId }\n const body = { environmentVariableIds: params.environmentVariableIds }\n return fetcher(\n `/projects/${pathParams.projectId}/env-vars/delete`,\n 'POST',\n { pathParams, body },\n )\n },\n\n async getEnvVar(params: {\n projectId: string\n environmentVariableId: string\n decrypted?: string\n }): Promise<ProjectsGetEnvVarResponse> {\n const pathParams = {\n projectId: params.projectId,\n environmentVariableId: params.environmentVariableId,\n }\n const query = Object.fromEntries(\n Object.entries({\n decrypted: params.decrypted,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(\n `/projects/${pathParams.projectId}/env-vars/${pathParams.environmentVariableId}`,\n 'GET',\n { pathParams, ...(hasQuery ? { query } : {}) },\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 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":"AAUO;AACP;AACA;AACA;AACO;;ACbA;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;AACO;AACP;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;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;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;AACO;AACP;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;AACO;AACP;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;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;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;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;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACO;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACA;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;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;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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
|
@@ -11,6 +11,7 @@ function createFetcher(config = {}) {
|
|
|
11
11
|
const hasBody = method !== 'GET' && params.body;
|
|
12
12
|
const headers = {
|
|
13
13
|
Authorization: `Bearer ${apiKey}`,
|
|
14
|
+
'User-Agent': 'v0-sdk/0.1.0',
|
|
14
15
|
...params.headers
|
|
15
16
|
};
|
|
16
17
|
// Include session token in headers if available
|
|
@@ -37,9 +38,95 @@ function createFetcher(config = {}) {
|
|
|
37
38
|
return res.json();
|
|
38
39
|
};
|
|
39
40
|
}
|
|
41
|
+
// Utility function to parse streaming events
|
|
42
|
+
async function* parseStreamingResponse(stream) {
|
|
43
|
+
const reader = stream.getReader();
|
|
44
|
+
const decoder = new TextDecoder();
|
|
45
|
+
let buffer = '';
|
|
46
|
+
try {
|
|
47
|
+
while(true){
|
|
48
|
+
const { done, value } = await reader.read();
|
|
49
|
+
if (done) break;
|
|
50
|
+
buffer += decoder.decode(value, {
|
|
51
|
+
stream: true
|
|
52
|
+
});
|
|
53
|
+
const lines = buffer.split('\n');
|
|
54
|
+
buffer = lines.pop() || ''; // Keep the last incomplete line in buffer
|
|
55
|
+
for (const line of lines){
|
|
56
|
+
if (line.trim() === '') continue;
|
|
57
|
+
if (line.startsWith('data: ')) {
|
|
58
|
+
const data = line.slice(6);
|
|
59
|
+
if (data === '[DONE]') return;
|
|
60
|
+
try {
|
|
61
|
+
yield {
|
|
62
|
+
event: 'message',
|
|
63
|
+
data: data
|
|
64
|
+
};
|
|
65
|
+
} catch (e) {
|
|
66
|
+
console.warn('Failed to parse streaming data:', e);
|
|
67
|
+
}
|
|
68
|
+
} else if (line.startsWith('event: ')) {
|
|
69
|
+
const event = line.slice(7);
|
|
70
|
+
yield {
|
|
71
|
+
event: event,
|
|
72
|
+
data: ''
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
} finally{
|
|
78
|
+
reader.releaseLock();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function createStreamingFetcher(config = {}) {
|
|
82
|
+
const baseUrl = config.baseUrl || 'https://api.v0.dev/v1';
|
|
83
|
+
let sessionToken = null;
|
|
84
|
+
return async function streamingFetcher(url, method, params = {}) {
|
|
85
|
+
const apiKey = config.apiKey || process.env.V0_API_KEY;
|
|
86
|
+
if (!apiKey) {
|
|
87
|
+
throw new Error('API key is required. Provide it via config.apiKey or V0_API_KEY environment variable');
|
|
88
|
+
}
|
|
89
|
+
const queryString = params.query ? '?' + new URLSearchParams(params.query).toString() : '';
|
|
90
|
+
const finalUrl = baseUrl + url + queryString;
|
|
91
|
+
const hasBody = method !== 'GET' && params.body;
|
|
92
|
+
const headers = {
|
|
93
|
+
Authorization: `Bearer ${apiKey}`,
|
|
94
|
+
'User-Agent': 'v0-sdk/0.1.0',
|
|
95
|
+
Accept: 'text/event-stream',
|
|
96
|
+
'Cache-Control': 'no-cache',
|
|
97
|
+
...params.headers
|
|
98
|
+
};
|
|
99
|
+
// Include session token in headers if available
|
|
100
|
+
if (sessionToken) {
|
|
101
|
+
headers['x-session-token'] = sessionToken;
|
|
102
|
+
}
|
|
103
|
+
if (hasBody) {
|
|
104
|
+
headers['Content-Type'] = 'application/json';
|
|
105
|
+
}
|
|
106
|
+
const res = await fetch(finalUrl, {
|
|
107
|
+
method,
|
|
108
|
+
headers,
|
|
109
|
+
body: hasBody ? JSON.stringify(params.body) : undefined
|
|
110
|
+
});
|
|
111
|
+
// Check for session token in response headers
|
|
112
|
+
const newSessionToken = res.headers.get('x-session-token');
|
|
113
|
+
if (newSessionToken) {
|
|
114
|
+
sessionToken = newSessionToken;
|
|
115
|
+
}
|
|
116
|
+
if (!res.ok) {
|
|
117
|
+
const text = await res.text();
|
|
118
|
+
throw new Error(`HTTP ${res.status}: ${text}`);
|
|
119
|
+
}
|
|
120
|
+
if (!res.body) {
|
|
121
|
+
throw new Error('No response body available for streaming');
|
|
122
|
+
}
|
|
123
|
+
return res.body;
|
|
124
|
+
};
|
|
125
|
+
}
|
|
40
126
|
|
|
41
127
|
function createClient(config = {}) {
|
|
42
128
|
const fetcher = createFetcher(config);
|
|
129
|
+
const streamingFetcher = createStreamingFetcher(config);
|
|
43
130
|
return {
|
|
44
131
|
chats: {
|
|
45
132
|
async create (params) {
|
|
@@ -53,6 +140,11 @@ function createClient(config = {}) {
|
|
|
53
140
|
responseMode: params.responseMode,
|
|
54
141
|
designSystemId: params.designSystemId
|
|
55
142
|
};
|
|
143
|
+
if (params.responseMode === 'experimental_stream') {
|
|
144
|
+
return await streamingFetcher(`/chats`, 'POST', {
|
|
145
|
+
body
|
|
146
|
+
});
|
|
147
|
+
}
|
|
56
148
|
return fetcher(`/chats`, 'POST', {
|
|
57
149
|
body
|
|
58
150
|
});
|
|
@@ -156,6 +248,12 @@ function createClient(config = {}) {
|
|
|
156
248
|
modelConfiguration: params.modelConfiguration,
|
|
157
249
|
responseMode: params.responseMode
|
|
158
250
|
};
|
|
251
|
+
if (params.responseMode === 'experimental_stream') {
|
|
252
|
+
return await streamingFetcher(`/chats/${pathParams.chatId}/messages`, 'POST', {
|
|
253
|
+
pathParams,
|
|
254
|
+
body
|
|
255
|
+
});
|
|
256
|
+
}
|
|
159
257
|
return fetcher(`/chats/${pathParams.chatId}/messages`, 'POST', {
|
|
160
258
|
pathParams,
|
|
161
259
|
body
|
|
@@ -527,4 +625,4 @@ function createClient(config = {}) {
|
|
|
527
625
|
// Default client for backward compatibility
|
|
528
626
|
const v0 = createClient();
|
|
529
627
|
|
|
530
|
-
export { createClient, v0 };
|
|
628
|
+
export { createClient, parseStreamingResponse, v0 };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "v0-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "TypeScript SDK for the v0 Platform API",
|
|
5
5
|
"homepage": "https://v0.dev/docs/api",
|
|
6
6
|
"repository": {
|
|
@@ -24,9 +24,10 @@
|
|
|
24
24
|
"type-check": "tsc --noEmit",
|
|
25
25
|
"type-check:go": "tsgo --noEmit",
|
|
26
26
|
"build": "bunchee",
|
|
27
|
-
"generate": "tsx src/scripts/generate.ts && pnpm format",
|
|
27
|
+
"sdk:generate": "tsx src/scripts/generate.ts && pnpm format",
|
|
28
28
|
"format": "prettier --write \"**/*.{ts,tsx,md}\"",
|
|
29
|
-
"test": "vitest"
|
|
29
|
+
"test": "vitest run",
|
|
30
|
+
"test:watch": "vitest"
|
|
30
31
|
},
|
|
31
32
|
"keywords": [
|
|
32
33
|
"v0",
|
|
@@ -35,9 +36,9 @@
|
|
|
35
36
|
"chat",
|
|
36
37
|
"sdk"
|
|
37
38
|
],
|
|
38
|
-
"license": "
|
|
39
|
+
"license": "Apache-2.0",
|
|
39
40
|
"devDependencies": {
|
|
40
|
-
"@types/node": "22.
|
|
41
|
+
"@types/node": "^22.12.0",
|
|
41
42
|
"@typescript/native-preview": "7.0.0-dev.20250613.1",
|
|
42
43
|
"bunchee": "^6.5.2",
|
|
43
44
|
"prettier": "^3.3.3",
|
|
@@ -45,6 +46,10 @@
|
|
|
45
46
|
"typescript": "5.7.3",
|
|
46
47
|
"vitest": "^3.2.4"
|
|
47
48
|
},
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": ">=22",
|
|
51
|
+
"pnpm": ">=9"
|
|
52
|
+
},
|
|
48
53
|
"prettier": {
|
|
49
54
|
"semi": false,
|
|
50
55
|
"singleQuote": true,
|