@iamtoricool/opencool-qwen-auth 0.0.1-alpha → 0.0.2-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/auth/auth.d.ts +72 -0
- package/dist/lib/auth/auth.d.ts.map +1 -0
- package/dist/lib/auth/auth.js +212 -0
- package/dist/lib/auth/auth.js.map +1 -0
- package/dist/lib/auth/browser-session.d.ts +49 -0
- package/dist/lib/auth/browser-session.d.ts.map +1 -0
- package/dist/lib/auth/browser-session.js +211 -0
- package/dist/lib/auth/browser-session.js.map +1 -0
- package/dist/lib/auth/browser.d.ts +17 -0
- package/dist/lib/auth/browser.d.ts.map +1 -0
- package/dist/lib/auth/browser.js +86 -0
- package/dist/lib/auth/browser.js.map +1 -0
- package/dist/lib/auth/server.d.ts +14 -0
- package/dist/lib/auth/server.d.ts.map +1 -0
- package/dist/lib/auth/server.js +253 -0
- package/dist/lib/auth/server.js.map +1 -0
- package/dist/lib/config.d.ts +28 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +67 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +77 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +109 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/logger.d.ts +49 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +56 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/oauth-success.html +83 -0
- package/dist/lib/request/fetch-helpers.d.ts +66 -0
- package/dist/lib/request/fetch-helpers.d.ts.map +1 -0
- package/dist/lib/request/fetch-helpers.js +193 -0
- package/dist/lib/request/fetch-helpers.js.map +1 -0
- package/dist/lib/request/request-transformer.d.ts +27 -0
- package/dist/lib/request/request-transformer.d.ts.map +1 -0
- package/dist/lib/request/request-transformer.js +159 -0
- package/dist/lib/request/request-transformer.js.map +1 -0
- package/dist/lib/request/response-handler.d.ts +32 -0
- package/dist/lib/request/response-handler.d.ts.map +1 -0
- package/dist/lib/request/response-handler.js +176 -0
- package/dist/lib/request/response-handler.js.map +1 -0
- package/dist/lib/types.d.ts +159 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +5 -0
- package/dist/lib/types.js.map +1 -0
- package/iamtoricool-opencool-qwen-auth-0.0.1-alpha.tgz +0 -0
- package/package.json +1 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response handling utilities
|
|
3
|
+
* Handles SSE parsing and conversion to JSON for non-streaming requests
|
|
4
|
+
*/
|
|
5
|
+
import type { SSEEventData } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Parse SSE stream data to extract the final response
|
|
8
|
+
* @param text - Raw SSE response text
|
|
9
|
+
* @returns Array of parsed SSE events
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseSseStream(text: string): SSEEventData[];
|
|
12
|
+
/**
|
|
13
|
+
* Convert SSE stream to OpenAI-compatible JSON response
|
|
14
|
+
* This is used for non-streaming requests that receive SSE responses
|
|
15
|
+
* @param events - Parsed SSE events
|
|
16
|
+
* @returns OpenAI-compatible chat completion response
|
|
17
|
+
*/
|
|
18
|
+
export declare function convertSseToChatCompletion(events: SSEEventData[]): Record<string, unknown>;
|
|
19
|
+
/**
|
|
20
|
+
* Convert SSE response to JSON response for non-streaming requests
|
|
21
|
+
* @param response - Original SSE response
|
|
22
|
+
* @param headers - Response headers to preserve
|
|
23
|
+
* @returns JSON response
|
|
24
|
+
*/
|
|
25
|
+
export declare function convertSseToJson(response: Response, headers: Headers): Promise<Response>;
|
|
26
|
+
/**
|
|
27
|
+
* Ensure response has proper content-type headers
|
|
28
|
+
* @param originalHeaders - Original response headers
|
|
29
|
+
* @returns Headers with proper content-type
|
|
30
|
+
*/
|
|
31
|
+
export declare function ensureContentType(originalHeaders: Headers): Headers;
|
|
32
|
+
//# sourceMappingURL=response-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-handler.d.ts","sourceRoot":"","sources":["../../../lib/request/response-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAwBhD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAe3D;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,YAAY,EAAE,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2EzB;AAmBD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,QAAQ,CAAC,CAwBnB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CASnE"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response handling utilities
|
|
3
|
+
* Handles SSE parsing and conversion to JSON for non-streaming requests
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Parse an SSE (Server-Sent Events) data line
|
|
7
|
+
* @param line - SSE data line (e.g., "data: {...}")
|
|
8
|
+
* @returns Parsed event data or null if invalid
|
|
9
|
+
*/
|
|
10
|
+
function parseSseLine(line) {
|
|
11
|
+
if (!line.startsWith("data: "))
|
|
12
|
+
return null;
|
|
13
|
+
const data = line.substring(6); // Remove "data: " prefix
|
|
14
|
+
// Check for [DONE] marker
|
|
15
|
+
if (data === "[DONE]") {
|
|
16
|
+
return { type: "done" };
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
return JSON.parse(data);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Parse SSE stream data to extract the final response
|
|
27
|
+
* @param text - Raw SSE response text
|
|
28
|
+
* @returns Array of parsed SSE events
|
|
29
|
+
*/
|
|
30
|
+
export function parseSseStream(text) {
|
|
31
|
+
const events = [];
|
|
32
|
+
const lines = text.split("\n");
|
|
33
|
+
for (const line of lines) {
|
|
34
|
+
const trimmed = line.trim();
|
|
35
|
+
if (!trimmed || !trimmed.startsWith("data: "))
|
|
36
|
+
continue;
|
|
37
|
+
const event = parseSseLine(trimmed);
|
|
38
|
+
if (event) {
|
|
39
|
+
events.push(event);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return events;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Convert SSE stream to OpenAI-compatible JSON response
|
|
46
|
+
* This is used for non-streaming requests that receive SSE responses
|
|
47
|
+
* @param events - Parsed SSE events
|
|
48
|
+
* @returns OpenAI-compatible chat completion response
|
|
49
|
+
*/
|
|
50
|
+
export function convertSseToChatCompletion(events) {
|
|
51
|
+
// Collect all choices from the events
|
|
52
|
+
const choices = [];
|
|
53
|
+
let model = "unknown";
|
|
54
|
+
for (const event of events) {
|
|
55
|
+
// Handle different event types
|
|
56
|
+
if (event.type === "message_start" && event.message) {
|
|
57
|
+
const msg = event.message;
|
|
58
|
+
if (msg.model) {
|
|
59
|
+
model = String(msg.model);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Handle content block deltas
|
|
63
|
+
if (event.type === "content_block_delta" || event.type === "delta") {
|
|
64
|
+
const delta = (event.delta || {});
|
|
65
|
+
const index = event.index ?? 0;
|
|
66
|
+
// Ensure choice exists
|
|
67
|
+
while (choices.length <= index) {
|
|
68
|
+
choices.push({
|
|
69
|
+
index: choices.length,
|
|
70
|
+
message: {
|
|
71
|
+
role: "assistant",
|
|
72
|
+
content: "",
|
|
73
|
+
},
|
|
74
|
+
finish_reason: null,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
const choice = choices[index];
|
|
78
|
+
const message = (choice.message || {});
|
|
79
|
+
// Append text content
|
|
80
|
+
if (delta.text) {
|
|
81
|
+
message.content = String(message.content || "") + String(delta.text);
|
|
82
|
+
}
|
|
83
|
+
// Handle tool calls
|
|
84
|
+
if (delta.tool_calls) {
|
|
85
|
+
const existingToolCalls = (message.tool_calls || []);
|
|
86
|
+
const newToolCalls = delta.tool_calls;
|
|
87
|
+
message.tool_calls = [...existingToolCalls, ...newToolCalls];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Handle message delta (finish reason)
|
|
91
|
+
if (event.type === "message_delta" && event.delta) {
|
|
92
|
+
const delta = event.delta;
|
|
93
|
+
if (delta.stop_reason && choices.length > 0) {
|
|
94
|
+
choices[0].finish_reason = mapStopReason(String(delta.stop_reason));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Set default finish_reason if not set
|
|
99
|
+
for (const choice of choices) {
|
|
100
|
+
if (choice.finish_reason === null) {
|
|
101
|
+
choice.finish_reason = "stop";
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
id: `chatcmpl-${Date.now()}`,
|
|
106
|
+
object: "chat.completion",
|
|
107
|
+
created: Math.floor(Date.now() / 1000),
|
|
108
|
+
model,
|
|
109
|
+
choices,
|
|
110
|
+
usage: {
|
|
111
|
+
prompt_tokens: 0,
|
|
112
|
+
completion_tokens: 0,
|
|
113
|
+
total_tokens: 0,
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Map Qwen stop reasons to OpenAI-compatible finish_reason values
|
|
119
|
+
* @param stopReason - Qwen stop reason
|
|
120
|
+
* @returns OpenAI-compatible finish reason
|
|
121
|
+
*/
|
|
122
|
+
function mapStopReason(stopReason) {
|
|
123
|
+
const reasonMap = {
|
|
124
|
+
end_turn: "stop",
|
|
125
|
+
stop: "stop",
|
|
126
|
+
max_tokens: "length",
|
|
127
|
+
tool_use: "tool_calls",
|
|
128
|
+
content_filter: "content_filter",
|
|
129
|
+
};
|
|
130
|
+
return reasonMap[stopReason] || stopReason;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Convert SSE response to JSON response for non-streaming requests
|
|
134
|
+
* @param response - Original SSE response
|
|
135
|
+
* @param headers - Response headers to preserve
|
|
136
|
+
* @returns JSON response
|
|
137
|
+
*/
|
|
138
|
+
export async function convertSseToJson(response, headers) {
|
|
139
|
+
try {
|
|
140
|
+
const text = await response.text();
|
|
141
|
+
const events = parseSseStream(text);
|
|
142
|
+
const completion = convertSseToChatCompletion(events);
|
|
143
|
+
// Create JSON response
|
|
144
|
+
return new Response(JSON.stringify(completion), {
|
|
145
|
+
status: response.status,
|
|
146
|
+
statusText: response.statusText,
|
|
147
|
+
headers: {
|
|
148
|
+
...Object.fromEntries(headers.entries()),
|
|
149
|
+
"Content-Type": "application/json",
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
// If conversion fails, return original response
|
|
155
|
+
console.error("Failed to convert SSE to JSON:", error);
|
|
156
|
+
return new Response(response.body, {
|
|
157
|
+
status: response.status,
|
|
158
|
+
statusText: response.statusText,
|
|
159
|
+
headers,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Ensure response has proper content-type headers
|
|
165
|
+
* @param originalHeaders - Original response headers
|
|
166
|
+
* @returns Headers with proper content-type
|
|
167
|
+
*/
|
|
168
|
+
export function ensureContentType(originalHeaders) {
|
|
169
|
+
const headers = new Headers(originalHeaders);
|
|
170
|
+
// Ensure we have a content-type
|
|
171
|
+
if (!headers.has("Content-Type")) {
|
|
172
|
+
headers.set("Content-Type", "application/json");
|
|
173
|
+
}
|
|
174
|
+
return headers;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=response-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-handler.js","sourceRoot":"","sources":["../../../lib/request/response-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the Qwen Auth Plugin
|
|
3
|
+
*/
|
|
4
|
+
import type { Auth } from "@opencode-ai/sdk";
|
|
5
|
+
export type { Auth };
|
|
6
|
+
/**
|
|
7
|
+
* Plugin configuration from ~/.opencode/qwen-auth-config.json
|
|
8
|
+
*/
|
|
9
|
+
export interface PluginConfig {
|
|
10
|
+
/**
|
|
11
|
+
* Enable debug logging
|
|
12
|
+
* @default false
|
|
13
|
+
*/
|
|
14
|
+
debug?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* User configuration structure from opencode.json
|
|
18
|
+
*/
|
|
19
|
+
export interface UserConfig {
|
|
20
|
+
global: ConfigOptions;
|
|
21
|
+
models: {
|
|
22
|
+
[modelName: string]: {
|
|
23
|
+
options?: ConfigOptions;
|
|
24
|
+
variants?: Record<string, (ConfigOptions & {
|
|
25
|
+
disabled?: boolean;
|
|
26
|
+
}) | undefined>;
|
|
27
|
+
[key: string]: unknown;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Configuration options for model settings
|
|
33
|
+
*/
|
|
34
|
+
export interface ConfigOptions {
|
|
35
|
+
max_tokens?: number;
|
|
36
|
+
temperature?: number;
|
|
37
|
+
top_p?: number;
|
|
38
|
+
[key: string]: unknown;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* OAuth server information
|
|
42
|
+
*/
|
|
43
|
+
export interface OAuthServerInfo {
|
|
44
|
+
port: number;
|
|
45
|
+
ready: boolean;
|
|
46
|
+
close: () => void;
|
|
47
|
+
waitForCode: (state: string) => Promise<{
|
|
48
|
+
code: string;
|
|
49
|
+
} | null>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* PKCE challenge and verifier
|
|
53
|
+
*/
|
|
54
|
+
export interface PKCEPair {
|
|
55
|
+
challenge: string;
|
|
56
|
+
verifier: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Authorization flow result
|
|
60
|
+
*/
|
|
61
|
+
export interface AuthorizationFlow {
|
|
62
|
+
pkce: PKCEPair;
|
|
63
|
+
state: string;
|
|
64
|
+
url: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Token exchange success result
|
|
68
|
+
*/
|
|
69
|
+
export interface TokenSuccess {
|
|
70
|
+
type: "success";
|
|
71
|
+
access: string;
|
|
72
|
+
refresh: string;
|
|
73
|
+
expires: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Token exchange failure result
|
|
77
|
+
*/
|
|
78
|
+
export interface TokenFailure {
|
|
79
|
+
type: "failed";
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Token exchange result
|
|
83
|
+
*/
|
|
84
|
+
export type TokenResult = TokenSuccess | TokenFailure;
|
|
85
|
+
/**
|
|
86
|
+
* Parsed authorization input
|
|
87
|
+
*/
|
|
88
|
+
export interface ParsedAuthInput {
|
|
89
|
+
code?: string;
|
|
90
|
+
state?: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* JWT payload with Qwen account info
|
|
94
|
+
*/
|
|
95
|
+
export interface JWTPayload {
|
|
96
|
+
sub?: string;
|
|
97
|
+
email?: string;
|
|
98
|
+
[key: string]: unknown;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Message input item for chat completions
|
|
102
|
+
*/
|
|
103
|
+
export interface InputItem {
|
|
104
|
+
id?: string;
|
|
105
|
+
type?: string;
|
|
106
|
+
role: string;
|
|
107
|
+
content: string | Array<{
|
|
108
|
+
type: string;
|
|
109
|
+
text?: string;
|
|
110
|
+
image_url?: {
|
|
111
|
+
url: string;
|
|
112
|
+
};
|
|
113
|
+
}>;
|
|
114
|
+
name?: string;
|
|
115
|
+
[key: string]: unknown;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Request body structure for chat completions
|
|
119
|
+
*/
|
|
120
|
+
export interface RequestBody {
|
|
121
|
+
model: string;
|
|
122
|
+
messages?: InputItem[];
|
|
123
|
+
store?: boolean;
|
|
124
|
+
stream?: boolean;
|
|
125
|
+
max_tokens?: number;
|
|
126
|
+
max_completion_tokens?: number;
|
|
127
|
+
temperature?: number;
|
|
128
|
+
top_p?: number;
|
|
129
|
+
stop?: string | string[];
|
|
130
|
+
tools?: unknown[];
|
|
131
|
+
tool_choice?: string | {
|
|
132
|
+
type: string;
|
|
133
|
+
function?: {
|
|
134
|
+
name: string;
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
[key: string]: unknown;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* SSE event data structure
|
|
141
|
+
*/
|
|
142
|
+
export interface SSEEventData {
|
|
143
|
+
type: string;
|
|
144
|
+
response?: unknown;
|
|
145
|
+
delta?: unknown;
|
|
146
|
+
[key: string]: unknown;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Qwen model definition
|
|
150
|
+
*/
|
|
151
|
+
export interface QwenModel {
|
|
152
|
+
id: string;
|
|
153
|
+
name: string;
|
|
154
|
+
description: string;
|
|
155
|
+
maxTokens?: number;
|
|
156
|
+
supportsVision?: boolean;
|
|
157
|
+
supportsCode?: boolean;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iamtoricool/opencool-qwen-auth",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2-alpha",
|
|
4
4
|
"description": "Qwen AI OAuth Authentication Plugin for opencode - Access Qwen models via chat.qwen.ai subscription",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|