@iamtoricool/opencool-qwen-auth 0.0.3-alpha → 0.0.4-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/index.d.ts.map +1 -1
- package/dist/index.js +39 -56
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAC;AAoC/D;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAC;AAoC/D;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,EAAE,MAwO5B,CAAC;AAEF,eAAe,cAAc,CAAC;AAG9B,YAAY,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,10 +6,8 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @license MIT
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { decodeJWT, exchangeAuthorizationCode, parseAuthorizationInput, extractBrowserSession, isBrowserSessionAvailable, } from "./lib/auth/auth.js";
|
|
10
10
|
import { REDIRECT_URI } from "./lib/constants.js";
|
|
11
|
-
import { openBrowserUrl } from "./lib/auth/browser.js";
|
|
12
|
-
import { startLocalOAuthServer } from "./lib/auth/server.js";
|
|
13
11
|
import { loadPluginConfig, parseUserConfig, initLogger } from "./lib/config.js";
|
|
14
12
|
import { AUTH_LABELS, QWEN_BASE_URL, DUMMY_API_KEY, LOG_STAGES, PLUGIN_NAME, PROVIDER_ID, } from "./lib/constants.js";
|
|
15
13
|
import { logRequest, logDebug } from "./lib/logger.js";
|
|
@@ -141,57 +139,7 @@ export const QwenAuthPlugin = async ({ client }) => {
|
|
|
141
139
|
},
|
|
142
140
|
methods: [
|
|
143
141
|
{
|
|
144
|
-
label:
|
|
145
|
-
type: "oauth",
|
|
146
|
-
/**
|
|
147
|
-
* OAuth authorization flow
|
|
148
|
-
*
|
|
149
|
-
* Steps:
|
|
150
|
-
* 1. Generate PKCE challenge and state for security
|
|
151
|
-
* 2. Start local OAuth callback server on port 1455
|
|
152
|
-
* 3. Open browser to Qwen authorization page
|
|
153
|
-
* 4. Wait for user to complete login
|
|
154
|
-
* 5. Exchange authorization code for tokens
|
|
155
|
-
*
|
|
156
|
-
* @returns Authorization flow configuration
|
|
157
|
-
*/
|
|
158
|
-
authorize: async () => {
|
|
159
|
-
const { pkce, state, url } = await createAuthorizationFlow();
|
|
160
|
-
const serverInfo = await startLocalOAuthServer({ state });
|
|
161
|
-
// Attempt to open browser automatically
|
|
162
|
-
openBrowserUrl(url);
|
|
163
|
-
if (!serverInfo.ready) {
|
|
164
|
-
serverInfo.close();
|
|
165
|
-
return buildManualOAuthFlow(pkce, url);
|
|
166
|
-
}
|
|
167
|
-
return {
|
|
168
|
-
url,
|
|
169
|
-
method: "auto",
|
|
170
|
-
instructions: AUTH_LABELS.INSTRUCTIONS,
|
|
171
|
-
callback: async () => {
|
|
172
|
-
const result = await serverInfo.waitForCode(state);
|
|
173
|
-
serverInfo.close();
|
|
174
|
-
if (!result) {
|
|
175
|
-
return { type: "failed" };
|
|
176
|
-
}
|
|
177
|
-
const tokens = await exchangeAuthorizationCode(result.code, pkce.verifier, REDIRECT_URI);
|
|
178
|
-
return tokens?.type === "success"
|
|
179
|
-
? tokens
|
|
180
|
-
: { type: "failed" };
|
|
181
|
-
},
|
|
182
|
-
};
|
|
183
|
-
},
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
label: AUTH_LABELS.OAUTH_MANUAL,
|
|
187
|
-
type: "oauth",
|
|
188
|
-
authorize: async () => {
|
|
189
|
-
const { pkce, url } = await createAuthorizationFlow();
|
|
190
|
-
return buildManualOAuthFlow(pkce, url);
|
|
191
|
-
},
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
label: "Use Browser Session (Firefox/Chrome)",
|
|
142
|
+
label: "Extract from Browser Session (Firefox/Chrome)",
|
|
195
143
|
type: "oauth",
|
|
196
144
|
authorize: async () => {
|
|
197
145
|
// Try to extract session from browser
|
|
@@ -214,18 +162,53 @@ export const QwenAuthPlugin = async ({ client }) => {
|
|
|
214
162
|
return {
|
|
215
163
|
url: "https://chat.qwen.ai",
|
|
216
164
|
method: "code",
|
|
217
|
-
instructions: "Browser session extraction requires better-sqlite3
|
|
165
|
+
instructions: "Browser session extraction requires better-sqlite3.\n\nInstall it with:\n cd ~/.config/opencode && npm install better-sqlite3\n\nThen try again, or use API key authentication instead.",
|
|
218
166
|
callback: async () => ({ type: "failed" }),
|
|
219
167
|
};
|
|
220
168
|
}
|
|
221
169
|
return {
|
|
222
170
|
url: "https://chat.qwen.ai",
|
|
223
171
|
method: "code",
|
|
224
|
-
instructions: "No Qwen session found in browser cookies
|
|
172
|
+
instructions: "No Qwen session found in browser cookies.\n\nTo authenticate:\n1. Open Firefox or Chrome\n2. Go to https://chat.qwen.ai\n3. Sign in with your account\n4. Run this auth command again\n\nOr use API key authentication.",
|
|
225
173
|
callback: async () => ({ type: "failed" }),
|
|
226
174
|
};
|
|
227
175
|
},
|
|
228
176
|
},
|
|
177
|
+
{
|
|
178
|
+
label: "Paste JWT Token from Browser",
|
|
179
|
+
type: "oauth",
|
|
180
|
+
authorize: async () => {
|
|
181
|
+
return {
|
|
182
|
+
url: "https://chat.qwen.ai",
|
|
183
|
+
method: "code",
|
|
184
|
+
instructions: "To get your JWT token:\n\n1. Open Firefox/Chrome and go to https://chat.qwen.ai\n2. Sign in to your account\n3. Open DevTools (F12) → Application → Cookies\n4. Find the 'token' cookie for .qwen.ai\n5. Copy the cookie value (it's a JWT token)\n\nPaste the token below:",
|
|
185
|
+
callback: async (input) => {
|
|
186
|
+
const token = input?.trim();
|
|
187
|
+
if (!token) {
|
|
188
|
+
return { type: "failed" };
|
|
189
|
+
}
|
|
190
|
+
// Validate it's a JWT
|
|
191
|
+
const decoded = decodeJWT(token);
|
|
192
|
+
if (!decoded) {
|
|
193
|
+
console.error(`[${PLUGIN_NAME}] Invalid JWT token format`);
|
|
194
|
+
return { type: "failed" };
|
|
195
|
+
}
|
|
196
|
+
// Check expiration
|
|
197
|
+
const exp = typeof decoded.exp === "number" ? decoded.exp : undefined;
|
|
198
|
+
if (exp && exp * 1000 < Date.now()) {
|
|
199
|
+
console.error(`[${PLUGIN_NAME}] Token already expired`);
|
|
200
|
+
return { type: "failed" };
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
type: "success",
|
|
204
|
+
access: token,
|
|
205
|
+
refresh: token,
|
|
206
|
+
expires: exp ? exp * 1000 : Date.now() + 3600000,
|
|
207
|
+
};
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
},
|
|
211
|
+
},
|
|
229
212
|
{
|
|
230
213
|
label: AUTH_LABELS.API_KEY,
|
|
231
214
|
type: "api",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
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.4-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",
|