opencode-puter-auth 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -0
- package/dist/ai-provider/index.d.ts +28 -0
- package/dist/ai-provider/index.d.ts.map +1 -0
- package/dist/ai-provider/index.js +28 -0
- package/dist/ai-provider/index.js.map +1 -0
- package/dist/ai-provider/puter-chat-language-model.d.ts +53 -0
- package/dist/ai-provider/puter-chat-language-model.d.ts.map +1 -0
- package/dist/ai-provider/puter-chat-language-model.js +405 -0
- package/dist/ai-provider/puter-chat-language-model.js.map +1 -0
- package/dist/ai-provider/puter-chat-settings.d.ts +106 -0
- package/dist/ai-provider/puter-chat-settings.d.ts.map +1 -0
- package/dist/ai-provider/puter-chat-settings.js +7 -0
- package/dist/ai-provider/puter-chat-settings.js.map +1 -0
- package/dist/ai-provider/puter-provider.d.ts +58 -0
- package/dist/ai-provider/puter-provider.d.ts.map +1 -0
- package/dist/ai-provider/puter-provider.js +149 -0
- package/dist/ai-provider/puter-provider.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +18 -4
- package/dist/plugin.js.map +1 -1
- package/dist/provider.d.ts +228 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +611 -0
- package/dist/provider.js.map +1 -0
- package/package.json +3 -1
package/dist/provider.js
ADDED
|
@@ -0,0 +1,611 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Puter Provider Integration
|
|
3
|
+
*
|
|
4
|
+
* This module provides two transformation paths:
|
|
5
|
+
*
|
|
6
|
+
* 1. Google Generative Language API format (for google provider integration)
|
|
7
|
+
* - Used when Puter models are configured under provider.google
|
|
8
|
+
* - Transforms Google's format to Puter's format
|
|
9
|
+
*
|
|
10
|
+
* 2. OpenAI-compatible format (for standalone puter provider)
|
|
11
|
+
* - Used when Puter is configured as a separate provider with @ai-sdk/openai-compatible
|
|
12
|
+
* - Transforms OpenAI's format to Puter's format
|
|
13
|
+
*
|
|
14
|
+
* The custom fetch function intercepts requests and routes them to Puter's API.
|
|
15
|
+
*/
|
|
16
|
+
const PUTER_API_URL = 'https://api.puter.com';
|
|
17
|
+
// Puter model prefix - models starting with this are routed to Puter
|
|
18
|
+
const PUTER_MODEL_PREFIX = 'puter-';
|
|
19
|
+
// Fake Puter API endpoint that we intercept
|
|
20
|
+
const PUTER_LOCAL_API = 'localhost:8080';
|
|
21
|
+
/**
|
|
22
|
+
* Check if a request is targeting the Puter provider
|
|
23
|
+
*/
|
|
24
|
+
export function isPuterRequest(input) {
|
|
25
|
+
const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
|
|
26
|
+
// Check for localhost:8080 fake endpoint (OpenAI-compatible format)
|
|
27
|
+
if (url.includes(PUTER_LOCAL_API)) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
// Check for puter- prefix in Google API format
|
|
31
|
+
if (url.includes(`/models/${PUTER_MODEL_PREFIX}`)) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if the request is using OpenAI format (vs Google format)
|
|
38
|
+
*/
|
|
39
|
+
export function isOpenAIFormat(url) {
|
|
40
|
+
return url.includes('/chat/completions') || url.includes(PUTER_LOCAL_API);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Extract model ID from the request URL
|
|
44
|
+
*/
|
|
45
|
+
export function extractModelFromUrl(url) {
|
|
46
|
+
// OpenAI format: model is in the request body, not URL
|
|
47
|
+
// Google format: .../models/puter-claude-opus-4-5:generateContent
|
|
48
|
+
const match = url.match(/\/models\/([^:\/]+)/);
|
|
49
|
+
const modelWithPrefix = match?.[1] || 'puter-claude-opus-4-5';
|
|
50
|
+
// Strip the puter- prefix to get the actual Puter model name
|
|
51
|
+
return modelWithPrefix.startsWith(PUTER_MODEL_PREFIX)
|
|
52
|
+
? modelWithPrefix.slice(PUTER_MODEL_PREFIX.length)
|
|
53
|
+
: modelWithPrefix;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Check if the request is for streaming
|
|
57
|
+
*/
|
|
58
|
+
export function isStreamingRequest(url) {
|
|
59
|
+
return url.includes('streamGenerateContent') || url.includes('alt=sse');
|
|
60
|
+
}
|
|
61
|
+
// ============================================================================
|
|
62
|
+
// OpenAI Format Transformations
|
|
63
|
+
// ============================================================================
|
|
64
|
+
/**
|
|
65
|
+
* Transform OpenAI chat completion request to Puter format
|
|
66
|
+
*/
|
|
67
|
+
export function transformOpenAIToPuter(body, authToken) {
|
|
68
|
+
// Strip puter- prefix from model name if present
|
|
69
|
+
const model = body.model?.startsWith(PUTER_MODEL_PREFIX)
|
|
70
|
+
? body.model.slice(PUTER_MODEL_PREFIX.length)
|
|
71
|
+
: body.model || 'claude-opus-4-5';
|
|
72
|
+
// Transform messages
|
|
73
|
+
const messages = body.messages?.map(msg => {
|
|
74
|
+
if (msg.role === 'tool') {
|
|
75
|
+
return {
|
|
76
|
+
role: 'tool',
|
|
77
|
+
content: typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content),
|
|
78
|
+
tool_call_id: msg.tool_call_id,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
if (msg.role === 'assistant' && msg.tool_calls) {
|
|
82
|
+
return {
|
|
83
|
+
role: 'assistant',
|
|
84
|
+
content: typeof msg.content === 'string' ? msg.content : '',
|
|
85
|
+
tool_calls: msg.tool_calls.map(tc => ({
|
|
86
|
+
id: tc.id,
|
|
87
|
+
type: 'function',
|
|
88
|
+
function: {
|
|
89
|
+
name: tc.function.name,
|
|
90
|
+
arguments: tc.function.arguments,
|
|
91
|
+
},
|
|
92
|
+
})),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
role: msg.role,
|
|
97
|
+
content: typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content),
|
|
98
|
+
};
|
|
99
|
+
}) || [];
|
|
100
|
+
// Transform tools
|
|
101
|
+
let tools;
|
|
102
|
+
if (body.tools && body.tools.length > 0) {
|
|
103
|
+
tools = body.tools.map(tool => ({
|
|
104
|
+
type: 'function',
|
|
105
|
+
function: {
|
|
106
|
+
name: tool.function.name,
|
|
107
|
+
description: tool.function.description || '',
|
|
108
|
+
parameters: tool.function.parameters || { type: 'object', properties: {} },
|
|
109
|
+
},
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
interface: 'puter-chat-completion',
|
|
114
|
+
service: 'ai-chat',
|
|
115
|
+
method: 'complete',
|
|
116
|
+
args: {
|
|
117
|
+
messages,
|
|
118
|
+
model,
|
|
119
|
+
stream: body.stream || false,
|
|
120
|
+
max_tokens: body.max_tokens,
|
|
121
|
+
temperature: body.temperature,
|
|
122
|
+
tools,
|
|
123
|
+
},
|
|
124
|
+
auth_token: authToken,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Transform Puter response to OpenAI chat completion format
|
|
129
|
+
*/
|
|
130
|
+
export function transformPuterToOpenAI(puterResponse) {
|
|
131
|
+
const message = puterResponse.message;
|
|
132
|
+
return {
|
|
133
|
+
id: `chatcmpl-${Date.now()}`,
|
|
134
|
+
object: 'chat.completion',
|
|
135
|
+
created: Math.floor(Date.now() / 1000),
|
|
136
|
+
model: 'puter',
|
|
137
|
+
choices: [{
|
|
138
|
+
index: 0,
|
|
139
|
+
message: {
|
|
140
|
+
role: 'assistant',
|
|
141
|
+
content: message?.content || null,
|
|
142
|
+
tool_calls: message?.tool_calls?.map(tc => ({
|
|
143
|
+
id: tc.id,
|
|
144
|
+
type: 'function',
|
|
145
|
+
function: {
|
|
146
|
+
name: tc.function.name,
|
|
147
|
+
arguments: tc.function.arguments,
|
|
148
|
+
},
|
|
149
|
+
})),
|
|
150
|
+
},
|
|
151
|
+
finish_reason: mapFinishReason(puterResponse.finish_reason),
|
|
152
|
+
}],
|
|
153
|
+
usage: puterResponse.usage ? {
|
|
154
|
+
prompt_tokens: puterResponse.usage.prompt_tokens,
|
|
155
|
+
completion_tokens: puterResponse.usage.completion_tokens,
|
|
156
|
+
total_tokens: puterResponse.usage.total_tokens,
|
|
157
|
+
} : undefined,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Transform Puter stream chunk to OpenAI SSE format
|
|
162
|
+
*/
|
|
163
|
+
export function transformPuterStreamToOpenAI(chunk) {
|
|
164
|
+
const delta = {};
|
|
165
|
+
if (chunk.text) {
|
|
166
|
+
delta.content = chunk.text;
|
|
167
|
+
}
|
|
168
|
+
if (chunk.reasoning) {
|
|
169
|
+
// Include reasoning as a special field (some clients support this)
|
|
170
|
+
delta.content = (delta.content || '') + chunk.reasoning;
|
|
171
|
+
}
|
|
172
|
+
if (chunk.tool_calls && chunk.tool_calls.length > 0) {
|
|
173
|
+
delta.tool_calls = chunk.tool_calls.map((tc, idx) => ({
|
|
174
|
+
index: idx,
|
|
175
|
+
id: tc.id,
|
|
176
|
+
type: 'function',
|
|
177
|
+
function: {
|
|
178
|
+
name: tc.function.name,
|
|
179
|
+
arguments: tc.function.arguments,
|
|
180
|
+
},
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
183
|
+
const response = {
|
|
184
|
+
id: `chatcmpl-${Date.now()}`,
|
|
185
|
+
object: 'chat.completion.chunk',
|
|
186
|
+
created: Math.floor(Date.now() / 1000),
|
|
187
|
+
model: 'puter',
|
|
188
|
+
choices: [{
|
|
189
|
+
index: 0,
|
|
190
|
+
delta,
|
|
191
|
+
finish_reason: chunk.done || chunk.finish_reason ? mapFinishReason(chunk.finish_reason) : null,
|
|
192
|
+
}],
|
|
193
|
+
};
|
|
194
|
+
return `data: ${JSON.stringify(response)}\n\n`;
|
|
195
|
+
}
|
|
196
|
+
function mapFinishReason(reason) {
|
|
197
|
+
if (!reason)
|
|
198
|
+
return null;
|
|
199
|
+
if (reason === 'tool_calls')
|
|
200
|
+
return 'tool_calls';
|
|
201
|
+
if (reason === 'length')
|
|
202
|
+
return 'length';
|
|
203
|
+
return 'stop';
|
|
204
|
+
}
|
|
205
|
+
// ============================================================================
|
|
206
|
+
// Google Format Transformations (for backward compatibility)
|
|
207
|
+
// ============================================================================
|
|
208
|
+
/**
|
|
209
|
+
* Transform Google Generative Language API content to Puter message format
|
|
210
|
+
*/
|
|
211
|
+
function transformContentToPuterMessage(content) {
|
|
212
|
+
const role = content.role === 'model' ? 'assistant' : content.role;
|
|
213
|
+
if (Array.isArray(content.parts)) {
|
|
214
|
+
const textParts = content.parts
|
|
215
|
+
.filter((p) => 'text' in p && typeof p.text === 'string')
|
|
216
|
+
.map(p => p.text);
|
|
217
|
+
const functionCalls = content.parts
|
|
218
|
+
.filter((p) => 'functionCall' in p);
|
|
219
|
+
const functionResponses = content.parts
|
|
220
|
+
.filter((p) => 'functionResponse' in p);
|
|
221
|
+
if (functionCalls.length > 0) {
|
|
222
|
+
return {
|
|
223
|
+
role: 'assistant',
|
|
224
|
+
content: textParts.join('\n') || '',
|
|
225
|
+
tool_calls: functionCalls.map((fc, idx) => ({
|
|
226
|
+
id: `call_${idx}`,
|
|
227
|
+
type: 'function',
|
|
228
|
+
function: {
|
|
229
|
+
name: fc.functionCall.name,
|
|
230
|
+
arguments: JSON.stringify(fc.functionCall.args),
|
|
231
|
+
},
|
|
232
|
+
})),
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
if (functionResponses.length > 0) {
|
|
236
|
+
const fr = functionResponses[0];
|
|
237
|
+
return {
|
|
238
|
+
role: 'tool',
|
|
239
|
+
content: typeof fr.functionResponse.response === 'string'
|
|
240
|
+
? fr.functionResponse.response
|
|
241
|
+
: JSON.stringify(fr.functionResponse.response),
|
|
242
|
+
tool_call_id: fr.functionResponse.id || `call_0`,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
role,
|
|
247
|
+
content: textParts.join('\n'),
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
role,
|
|
252
|
+
content: '',
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Transform Google Generative Language API request body to Puter format
|
|
257
|
+
*/
|
|
258
|
+
export function transformRequestToPuter(body, model, streaming, authToken) {
|
|
259
|
+
const messages = [];
|
|
260
|
+
// Add system instruction if present
|
|
261
|
+
if (body.systemInstruction) {
|
|
262
|
+
const systemText = typeof body.systemInstruction === 'string'
|
|
263
|
+
? body.systemInstruction
|
|
264
|
+
: body.systemInstruction.parts?.map(p => p.text).join('\n') || '';
|
|
265
|
+
if (systemText) {
|
|
266
|
+
messages.push({
|
|
267
|
+
role: 'system',
|
|
268
|
+
content: systemText,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Transform contents
|
|
273
|
+
if (body.contents) {
|
|
274
|
+
for (const content of body.contents) {
|
|
275
|
+
messages.push(transformContentToPuterMessage(content));
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Transform tools
|
|
279
|
+
let tools;
|
|
280
|
+
if (body.tools && body.tools.length > 0) {
|
|
281
|
+
tools = [];
|
|
282
|
+
for (const tool of body.tools) {
|
|
283
|
+
if (tool.functionDeclarations) {
|
|
284
|
+
for (const fn of tool.functionDeclarations) {
|
|
285
|
+
tools.push({
|
|
286
|
+
type: 'function',
|
|
287
|
+
function: {
|
|
288
|
+
name: fn.name,
|
|
289
|
+
description: fn.description || '',
|
|
290
|
+
parameters: fn.parameters || { type: 'object', properties: {} },
|
|
291
|
+
},
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return {
|
|
298
|
+
interface: 'puter-chat-completion',
|
|
299
|
+
service: 'ai-chat',
|
|
300
|
+
method: 'complete',
|
|
301
|
+
args: {
|
|
302
|
+
messages,
|
|
303
|
+
model,
|
|
304
|
+
stream: streaming,
|
|
305
|
+
max_tokens: body.generationConfig?.maxOutputTokens,
|
|
306
|
+
temperature: body.generationConfig?.temperature,
|
|
307
|
+
tools,
|
|
308
|
+
},
|
|
309
|
+
auth_token: authToken,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Transform Puter response to Google Generative Language API format
|
|
314
|
+
*/
|
|
315
|
+
export function transformPuterResponseToGoogle(puterResponse) {
|
|
316
|
+
const content = puterResponse.message?.content || '';
|
|
317
|
+
const toolCalls = puterResponse.message?.tool_calls;
|
|
318
|
+
const parts = [];
|
|
319
|
+
if (content) {
|
|
320
|
+
parts.push({ text: content });
|
|
321
|
+
}
|
|
322
|
+
if (toolCalls && toolCalls.length > 0) {
|
|
323
|
+
for (const tc of toolCalls) {
|
|
324
|
+
parts.push({
|
|
325
|
+
functionCall: {
|
|
326
|
+
name: tc.function.name,
|
|
327
|
+
args: JSON.parse(tc.function.arguments),
|
|
328
|
+
},
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
let finishReason = 'STOP';
|
|
333
|
+
if (puterResponse.finish_reason === 'tool_calls') {
|
|
334
|
+
finishReason = 'TOOL_CALLS';
|
|
335
|
+
}
|
|
336
|
+
else if (puterResponse.finish_reason === 'length') {
|
|
337
|
+
finishReason = 'MAX_TOKENS';
|
|
338
|
+
}
|
|
339
|
+
return {
|
|
340
|
+
candidates: [{
|
|
341
|
+
content: {
|
|
342
|
+
role: 'model',
|
|
343
|
+
parts,
|
|
344
|
+
},
|
|
345
|
+
finishReason,
|
|
346
|
+
index: 0,
|
|
347
|
+
}],
|
|
348
|
+
usageMetadata: puterResponse.usage ? {
|
|
349
|
+
promptTokenCount: puterResponse.usage.prompt_tokens,
|
|
350
|
+
candidatesTokenCount: puterResponse.usage.completion_tokens,
|
|
351
|
+
totalTokenCount: puterResponse.usage.total_tokens,
|
|
352
|
+
} : undefined,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Transform a Puter streaming chunk to Google SSE format
|
|
357
|
+
*/
|
|
358
|
+
export function transformPuterStreamChunkToGoogle(chunk) {
|
|
359
|
+
const parts = [];
|
|
360
|
+
if (chunk.text) {
|
|
361
|
+
parts.push({ text: chunk.text });
|
|
362
|
+
}
|
|
363
|
+
if (chunk.reasoning) {
|
|
364
|
+
parts.push({
|
|
365
|
+
thought: true,
|
|
366
|
+
text: chunk.reasoning,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
if (chunk.tool_calls && chunk.tool_calls.length > 0) {
|
|
370
|
+
for (const tc of chunk.tool_calls) {
|
|
371
|
+
parts.push({
|
|
372
|
+
functionCall: {
|
|
373
|
+
name: tc.function.name,
|
|
374
|
+
args: JSON.parse(tc.function.arguments),
|
|
375
|
+
},
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
let finishReason;
|
|
380
|
+
if (chunk.done || chunk.finish_reason) {
|
|
381
|
+
finishReason = chunk.finish_reason === 'tool_calls' ? 'TOOL_CALLS' : 'STOP';
|
|
382
|
+
}
|
|
383
|
+
const response = {
|
|
384
|
+
candidates: [{
|
|
385
|
+
content: {
|
|
386
|
+
role: 'model',
|
|
387
|
+
parts,
|
|
388
|
+
},
|
|
389
|
+
finishReason,
|
|
390
|
+
index: 0,
|
|
391
|
+
}],
|
|
392
|
+
};
|
|
393
|
+
return `data: ${JSON.stringify(response)}\n\n`;
|
|
394
|
+
}
|
|
395
|
+
// ============================================================================
|
|
396
|
+
// Request Handler
|
|
397
|
+
// ============================================================================
|
|
398
|
+
/**
|
|
399
|
+
* Make a request to Puter API and return transformed response
|
|
400
|
+
*/
|
|
401
|
+
export async function makePuterRequest(input, init, authToken, config = {}) {
|
|
402
|
+
const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
|
|
403
|
+
const useOpenAIFormat = isOpenAIFormat(url);
|
|
404
|
+
let puterBody;
|
|
405
|
+
let streaming = false;
|
|
406
|
+
if (useOpenAIFormat) {
|
|
407
|
+
// Parse OpenAI format request
|
|
408
|
+
let openaiBody = {};
|
|
409
|
+
if (init?.body) {
|
|
410
|
+
try {
|
|
411
|
+
openaiBody = JSON.parse(init.body);
|
|
412
|
+
}
|
|
413
|
+
catch {
|
|
414
|
+
// If parsing fails, use empty body
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
streaming = openaiBody.stream || false;
|
|
418
|
+
puterBody = transformOpenAIToPuter(openaiBody, authToken);
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
// Parse Google format request
|
|
422
|
+
const model = extractModelFromUrl(url);
|
|
423
|
+
streaming = isStreamingRequest(url);
|
|
424
|
+
let googleBody = {};
|
|
425
|
+
if (init?.body) {
|
|
426
|
+
try {
|
|
427
|
+
googleBody = JSON.parse(init.body);
|
|
428
|
+
}
|
|
429
|
+
catch {
|
|
430
|
+
// If parsing fails, use empty body
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
puterBody = transformRequestToPuter(googleBody, model, streaming, authToken);
|
|
434
|
+
}
|
|
435
|
+
const apiUrl = config.api_base_url || PUTER_API_URL;
|
|
436
|
+
const timeout = config.api_timeout_ms || 120000;
|
|
437
|
+
const controller = new AbortController();
|
|
438
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
439
|
+
try {
|
|
440
|
+
const response = await fetch(`${apiUrl}/drivers/call`, {
|
|
441
|
+
method: 'POST',
|
|
442
|
+
headers: {
|
|
443
|
+
'Content-Type': 'application/json',
|
|
444
|
+
},
|
|
445
|
+
body: JSON.stringify(puterBody),
|
|
446
|
+
signal: controller.signal,
|
|
447
|
+
});
|
|
448
|
+
clearTimeout(timeoutId);
|
|
449
|
+
if (!response.ok) {
|
|
450
|
+
const errorText = await response.text();
|
|
451
|
+
if (useOpenAIFormat) {
|
|
452
|
+
return new Response(JSON.stringify({
|
|
453
|
+
error: {
|
|
454
|
+
message: `Puter API error: ${errorText}`,
|
|
455
|
+
type: response.status >= 500 ? 'server_error' : 'invalid_request_error',
|
|
456
|
+
code: response.status,
|
|
457
|
+
},
|
|
458
|
+
}), {
|
|
459
|
+
status: response.status,
|
|
460
|
+
headers: { 'Content-Type': 'application/json' },
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
return new Response(JSON.stringify({
|
|
465
|
+
error: {
|
|
466
|
+
code: response.status,
|
|
467
|
+
message: `Puter API error: ${errorText}`,
|
|
468
|
+
status: response.status >= 500 ? 'INTERNAL' : 'INVALID_ARGUMENT',
|
|
469
|
+
},
|
|
470
|
+
}), {
|
|
471
|
+
status: response.status,
|
|
472
|
+
headers: { 'Content-Type': 'application/json' },
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
if (streaming) {
|
|
477
|
+
return handleStreamingResponse(response, useOpenAIFormat);
|
|
478
|
+
}
|
|
479
|
+
else {
|
|
480
|
+
const puterResponse = await response.json();
|
|
481
|
+
if (useOpenAIFormat) {
|
|
482
|
+
const openaiResponse = transformPuterToOpenAI(puterResponse.result);
|
|
483
|
+
return new Response(JSON.stringify(openaiResponse), {
|
|
484
|
+
status: 200,
|
|
485
|
+
headers: { 'Content-Type': 'application/json' },
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
const googleResponse = transformPuterResponseToGoogle(puterResponse.result);
|
|
490
|
+
return new Response(JSON.stringify(googleResponse), {
|
|
491
|
+
status: 200,
|
|
492
|
+
headers: { 'Content-Type': 'application/json' },
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
catch (error) {
|
|
498
|
+
clearTimeout(timeoutId);
|
|
499
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
500
|
+
if (useOpenAIFormat) {
|
|
501
|
+
return new Response(JSON.stringify({
|
|
502
|
+
error: {
|
|
503
|
+
message: `Puter request failed: ${message}`,
|
|
504
|
+
type: 'server_error',
|
|
505
|
+
code: 500,
|
|
506
|
+
},
|
|
507
|
+
}), {
|
|
508
|
+
status: 500,
|
|
509
|
+
headers: { 'Content-Type': 'application/json' },
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
return new Response(JSON.stringify({
|
|
514
|
+
error: {
|
|
515
|
+
code: 500,
|
|
516
|
+
message: `Puter request failed: ${message}`,
|
|
517
|
+
status: 'INTERNAL',
|
|
518
|
+
},
|
|
519
|
+
}), {
|
|
520
|
+
status: 500,
|
|
521
|
+
headers: { 'Content-Type': 'application/json' },
|
|
522
|
+
});
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Handle streaming response from Puter
|
|
528
|
+
*/
|
|
529
|
+
async function handleStreamingResponse(response, useOpenAIFormat) {
|
|
530
|
+
if (!response.body) {
|
|
531
|
+
return new Response('No response body', { status: 500 });
|
|
532
|
+
}
|
|
533
|
+
const decoder = new TextDecoder();
|
|
534
|
+
const encoder = new TextEncoder();
|
|
535
|
+
let buffer = '';
|
|
536
|
+
const transformStream = new TransformStream({
|
|
537
|
+
async transform(chunk, controller) {
|
|
538
|
+
buffer += decoder.decode(chunk, { stream: true });
|
|
539
|
+
const lines = buffer.split('\n');
|
|
540
|
+
buffer = lines.pop() || '';
|
|
541
|
+
for (const line of lines) {
|
|
542
|
+
if (!line.trim())
|
|
543
|
+
continue;
|
|
544
|
+
try {
|
|
545
|
+
const puterChunk = JSON.parse(line);
|
|
546
|
+
const transformedChunk = useOpenAIFormat
|
|
547
|
+
? transformPuterStreamToOpenAI(puterChunk)
|
|
548
|
+
: transformPuterStreamChunkToGoogle(puterChunk);
|
|
549
|
+
controller.enqueue(encoder.encode(transformedChunk));
|
|
550
|
+
}
|
|
551
|
+
catch {
|
|
552
|
+
// Skip malformed lines
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
},
|
|
556
|
+
flush(controller) {
|
|
557
|
+
if (buffer.trim()) {
|
|
558
|
+
try {
|
|
559
|
+
const puterChunk = JSON.parse(buffer);
|
|
560
|
+
const transformedChunk = useOpenAIFormat
|
|
561
|
+
? transformPuterStreamToOpenAI(puterChunk)
|
|
562
|
+
: transformPuterStreamChunkToGoogle(puterChunk);
|
|
563
|
+
controller.enqueue(encoder.encode(transformedChunk));
|
|
564
|
+
}
|
|
565
|
+
catch {
|
|
566
|
+
// Ignore
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
// Send [DONE] for OpenAI format
|
|
570
|
+
if (useOpenAIFormat) {
|
|
571
|
+
controller.enqueue(encoder.encode('data: [DONE]\n\n'));
|
|
572
|
+
}
|
|
573
|
+
},
|
|
574
|
+
});
|
|
575
|
+
const transformedBody = response.body.pipeThrough(transformStream);
|
|
576
|
+
return new Response(transformedBody, {
|
|
577
|
+
status: 200,
|
|
578
|
+
headers: {
|
|
579
|
+
'Content-Type': 'text/event-stream',
|
|
580
|
+
'Cache-Control': 'no-cache',
|
|
581
|
+
'Connection': 'keep-alive',
|
|
582
|
+
},
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
// ============================================================================
|
|
586
|
+
// Custom Fetch Factory
|
|
587
|
+
// ============================================================================
|
|
588
|
+
/**
|
|
589
|
+
* Create a custom fetch function for Puter provider integration.
|
|
590
|
+
*
|
|
591
|
+
* This function intercepts requests to Puter endpoints and routes them
|
|
592
|
+
* through Puter's API with proper request/response transformation.
|
|
593
|
+
*
|
|
594
|
+
* Supports both OpenAI-compatible format (for standalone puter provider)
|
|
595
|
+
* and Google Generative Language API format (for google provider integration).
|
|
596
|
+
*
|
|
597
|
+
* @param authToken - The Puter authentication token
|
|
598
|
+
* @param config - Optional Puter configuration
|
|
599
|
+
* @returns A fetch function that can be used by OpenCode's AI SDK
|
|
600
|
+
*/
|
|
601
|
+
export function createPuterFetch(authToken, config = {}) {
|
|
602
|
+
return async (input, init) => {
|
|
603
|
+
// Only intercept Puter requests, pass through everything else
|
|
604
|
+
if (!isPuterRequest(input)) {
|
|
605
|
+
return fetch(input, init);
|
|
606
|
+
}
|
|
607
|
+
// Route through Puter API with transformation
|
|
608
|
+
return makePuterRequest(input, init, authToken, config);
|
|
609
|
+
};
|
|
610
|
+
}
|
|
611
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAE9C,qEAAqE;AACrE,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAEpC,4CAA4C;AAC5C,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAwB;IACrD,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE,KAAiB,CAAC,GAAG,CAAC;IAE3G,oEAAoE;IACpE,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+CAA+C;IAC/C,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,kBAAkB,EAAE,CAAC,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,uDAAuD;IACvD,kEAAkE;IAClE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC/C,MAAM,eAAe,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,uBAAuB,CAAC;IAE9D,6DAA6D;IAC7D,OAAO,eAAe,CAAC,UAAU,CAAC,kBAAkB,CAAC;QACnD,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAClD,CAAC,CAAC,eAAe,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC1E,CAAC;AAED,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAiC,EACjC,SAAiB;IAEjB,iDAAiD;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,kBAAkB,CAAC;QACtD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,iBAAiB,CAAC;IAEpC,qBAAqB;IACrB,MAAM,QAAQ,GAAuB,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;QAC5D,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,OAAO;gBACL,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;gBACpF,YAAY,EAAE,GAAG,CAAC,YAAY;aAC/B,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YAC/C,OAAO;gBACL,IAAI,EAAE,WAAoB;gBAC1B,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC3D,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACpC,EAAE,EAAE,EAAE,CAAC,EAAE;oBACT,IAAI,EAAE,UAAmB;oBACzB,QAAQ,EAAE;wBACR,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;wBACtB,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS;qBACjC;iBACF,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAuC;YACjD,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;SACrF,CAAC;IACJ,CAAC,CAAC,IAAI,EAAE,CAAC;IAET,kBAAkB;IAClB,IAAI,KAA8B,CAAC;IACnC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,EAAE,UAAmB;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;gBACxB,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE;gBAC5C,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;aAC3E;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAED,OAAO;QACL,SAAS,EAAE,uBAAuB;QAClC,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE;YACJ,QAAQ;YACR,KAAK;YACL,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;YAC5B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK;SACN;QACD,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,aAAgC;IACrE,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;IAEtC,OAAO;QACL,EAAE,EAAE,YAAY,IAAI,CAAC,GAAG,EAAE,EAAE;QAC5B,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACtC,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,CAAC;gBACR,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE;oBACP,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI;oBACjC,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBAC1C,EAAE,EAAE,EAAE,CAAC,EAAE;wBACT,IAAI,EAAE,UAAmB;wBACzB,QAAQ,EAAE;4BACR,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;4BACtB,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS;yBACjC;qBACF,CAAC,CAAC;iBACJ;gBACD,aAAa,EAAE,eAAe,CAAC,aAAa,CAAC,aAAa,CAAC;aAC5D,CAAC;QACF,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3B,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,aAAa;YAChD,iBAAiB,EAAE,aAAa,CAAC,KAAK,CAAC,iBAAiB;YACxD,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC,YAAY;SAC/C,CAAC,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAA2B;IACtE,MAAM,KAAK,GAAgB,EAAE,CAAC;IAE9B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,mEAAmE;QACnE,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACpD,KAAK,EAAE,GAAG;YACV,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,IAAI,EAAE,UAAmB;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;gBACtB,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS;aACjC;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAED,MAAM,QAAQ,GAAsB;QAClC,EAAE,EAAE,YAAY,IAAI,CAAC,GAAG,EAAE,EAAE;QAC5B,MAAM,EAAE,uBAAuB;QAC/B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACtC,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,CAAC;gBACR,KAAK,EAAE,CAAC;gBACR,KAAK;gBACL,aAAa,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI;aAC/F,CAAC;KACH,CAAC;IAEF,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjD,CAAC;AAED,SAAS,eAAe,CAAC,MAAe;IACtC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IACjD,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+EAA+E;AAC/E,6DAA6D;AAC7D,+EAA+E;AAE/E;;GAEG;AACH,SAAS,8BAA8B,CAAC,OAAsB;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAgD,CAAC;IAE/G,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAyB,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;aAC/E,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEpB,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK;aAChC,MAAM,CAAC,CAAC,CAAC,EAA0D,EAAE,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;QAE9F,MAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK;aACpC,MAAM,CAAC,CAAC,CAAC,EAA+E,EAAE,CAAC,kBAAkB,IAAI,CAAC,CAAC,CAAC;QAEvH,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACnC,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC1C,EAAE,EAAE,QAAQ,GAAG,EAAE;oBACjB,IAAI,EAAE,UAAmB;oBACzB,QAAQ,EAAE;wBACR,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI;wBAC1B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;qBAChD;iBACF,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;QAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAChC,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,OAAO,EAAE,CAAC,gBAAgB,CAAC,QAAQ,KAAK,QAAQ;oBACvD,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ;oBAC9B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;gBAChD,YAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,IAAI,QAAQ;aACjD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAkC,EAClC,KAAa,EACb,SAAkB,EAClB,SAAiB;IAEjB,MAAM,QAAQ,GAAuB,EAAE,CAAC;IAExC,oCAAoC;IACpC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,iBAAiB,KAAK,QAAQ;YAC3D,CAAC,CAAC,IAAI,CAAC,iBAAiB;YACxB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAEpE,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,UAAU;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,KAA8B,CAAC;IACnC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,GAAG,EAAE,CAAC;QACX,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC9B,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC3C,KAAK,CAAC,IAAI,CAAC;wBACT,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE;4BACR,IAAI,EAAE,EAAE,CAAC,IAAI;4BACb,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE;4BACjC,UAAU,EAAE,EAAE,CAAC,UAAU,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;yBAChE;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,uBAAuB;QAClC,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE;YACJ,QAAQ;YACR,KAAK;YACL,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,eAAe;YAClD,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW;YAC/C,KAAK;SACN;QACD,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAAC,aAAgC;IAC7E,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;IACrD,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC;IAEpD,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC;gBACT,YAAY,EAAE;oBACZ,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;oBACtB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;iBACxC;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,YAAY,GAAW,MAAM,CAAC;IAClC,IAAI,aAAa,CAAC,aAAa,KAAK,YAAY,EAAE,CAAC;QACjD,YAAY,GAAG,YAAY,CAAC;IAC9B,CAAC;SAAM,IAAI,aAAa,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;QACpD,YAAY,GAAG,YAAY,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,UAAU,EAAE,CAAC;gBACX,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK;iBACN;gBACD,YAAY;gBACZ,KAAK,EAAE,CAAC;aACT,CAAC;QACF,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;YACnC,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,aAAa;YACnD,oBAAoB,EAAE,aAAa,CAAC,KAAK,CAAC,iBAAiB;YAC3D,eAAe,EAAE,aAAa,CAAC,KAAK,CAAC,YAAY;SAClD,CAAC,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iCAAiC,CAAC,KAA2B;IAC3E,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC;YACT,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,KAAK,CAAC,SAAS;SACR,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC;gBACT,YAAY,EAAE;oBACZ,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;oBACtB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;iBACxC;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,YAAgC,CAAC;IACrC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACtC,YAAY,GAAG,KAAK,CAAC,aAAa,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9E,CAAC;IAED,MAAM,QAAQ,GAAkC;QAC9C,UAAU,EAAE,CAAC;gBACX,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK;iBACN;gBACD,YAAY;gBACZ,KAAK,EAAE,CAAC;aACT,CAAC;KACH,CAAC;IAEF,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjD,CAAC;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAwB,EACxB,IAA6B,EAC7B,SAAiB,EACjB,SAA+B,EAAE;IAEjC,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE,KAAiB,CAAC,GAAG,CAAC;IAC3G,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,SAA2B,CAAC;IAChC,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI,eAAe,EAAE,CAAC;QACpB,8BAA8B;QAC9B,IAAI,UAAU,GAAgC,EAAE,CAAC;QACjD,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,mCAAmC;YACrC,CAAC;QACH,CAAC;QACD,SAAS,GAAG,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC;QACvC,SAAS,GAAG,sBAAsB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,8BAA8B;QAC9B,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACvC,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAEpC,IAAI,UAAU,GAAiC,EAAE,CAAC;QAClD,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,mCAAmC;YACrC,CAAC;QACH,CAAC;QACD,SAAS,GAAG,uBAAuB,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,IAAI,aAAa,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC;IAEhD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAEhE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,eAAe,EAAE;YACrD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAC/B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,YAAY,CAAC,SAAS,CAAC,CAAC;QAExB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAExC,IAAI,eAAe,EAAE,CAAC;gBACpB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;oBACjC,KAAK,EAAE;wBACL,OAAO,EAAE,oBAAoB,SAAS,EAAE;wBACxC,IAAI,EAAE,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,uBAAuB;wBACvE,IAAI,EAAE,QAAQ,CAAC,MAAM;qBACtB;iBACF,CAAC,EAAE;oBACF,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;oBACjC,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ,CAAC,MAAM;wBACrB,OAAO,EAAE,oBAAoB,SAAS,EAAE;wBACxC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB;qBACjE;iBACF,CAAC,EAAE;oBACF,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,uBAAuB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAmC,CAAC;YAE7E,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,cAAc,GAAG,sBAAsB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACpE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE;oBAClD,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,cAAc,GAAG,8BAA8B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC5E,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE;oBAClD,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAY,CAAC,SAAS,CAAC,CAAC;QAExB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAEzE,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;gBACjC,KAAK,EAAE;oBACL,OAAO,EAAE,yBAAyB,OAAO,EAAE;oBAC3C,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE,GAAG;iBACV;aACF,CAAC,EAAE;gBACF,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;gBACjC,KAAK,EAAE;oBACL,IAAI,EAAE,GAAG;oBACT,OAAO,EAAE,yBAAyB,OAAO,EAAE;oBAC3C,MAAM,EAAE,UAAU;iBACnB;aACF,CAAC,EAAE;gBACF,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB,CAAC,QAAkB,EAAE,eAAwB;IACjF,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,QAAQ,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAElC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC;QAC1C,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU;YAC/B,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,SAAS;gBAE3B,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAyB,CAAC;oBAC5D,MAAM,gBAAgB,GAAG,eAAe;wBACtC,CAAC,CAAC,4BAA4B,CAAC,UAAU,CAAC;wBAC1C,CAAC,CAAC,iCAAiC,CAAC,UAAU,CAAC,CAAC;oBAClD,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACvD,CAAC;gBAAC,MAAM,CAAC;oBACP,uBAAuB;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,CAAC,UAAU;YACd,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAClB,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAyB,CAAC;oBAC9D,MAAM,gBAAgB,GAAG,eAAe;wBACtC,CAAC,CAAC,4BAA4B,CAAC,UAAU,CAAC;wBAC1C,CAAC,CAAC,iCAAiC,CAAC,UAAU,CAAC,CAAC;oBAClD,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACvD,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,IAAI,eAAe,EAAE,CAAC;gBACpB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAEnE,OAAO,IAAI,QAAQ,CAAC,eAAe,EAAE;QACnC,MAAM,EAAE,GAAG;QACX,OAAO,EAAE;YACP,cAAc,EAAE,mBAAmB;YACnC,eAAe,EAAE,UAAU;YAC3B,YAAY,EAAE,YAAY;SAC3B;KACF,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,SAA+B,EAAE;IAEjC,OAAO,KAAK,EAAE,KAAwB,EAAE,IAAkB,EAAqB,EAAE;QAC/E,8DAA8D;QAC9D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,8CAA8C;QAC9C,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-puter-auth",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Puter.com OAuth auth plugin for OpenCode - FREE UNLIMITED access to Claude Opus 4.5, Sonnet 4.5, GPT-5, Gemini, and 500+ AI models",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -69,6 +69,8 @@
|
|
|
69
69
|
"vitest": "^4.0.0"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
+
"@ai-sdk/provider": "^3.0.3",
|
|
73
|
+
"@ai-sdk/provider-utils": "^4.0.7",
|
|
72
74
|
"open": "^11.0.0",
|
|
73
75
|
"xdg-basedir": "^5.1.0",
|
|
74
76
|
"zod": "^4.3.5"
|