opencode-qwen-oauth 2.3.1 → 2.4.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/README.md +52 -60
- package/dist/api-key-exchange.js +1 -1
- package/dist/api-key-exchange.js.map +1 -1
- package/dist/browser.js +1 -1
- package/dist/browser.js.map +1 -1
- package/dist/index.d.ts +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -443
- package/dist/index.js.map +1 -1
- package/dist/middleware/auth.middleware.d.ts +10 -0
- package/dist/middleware/auth.middleware.d.ts.map +1 -0
- package/dist/middleware/auth.middleware.js +102 -0
- package/dist/middleware/auth.middleware.js.map +1 -0
- package/dist/middleware/rate-limit.middleware.d.ts +10 -0
- package/dist/middleware/rate-limit.middleware.d.ts.map +1 -0
- package/dist/middleware/rate-limit.middleware.js +22 -0
- package/dist/middleware/rate-limit.middleware.js.map +1 -0
- package/dist/middleware/retry.middleware.d.ts +11 -0
- package/dist/middleware/retry.middleware.d.ts.map +1 -0
- package/dist/middleware/retry.middleware.js +43 -0
- package/dist/middleware/retry.middleware.js.map +1 -0
- package/dist/repositories/credential.repository.d.ts +13 -0
- package/dist/repositories/credential.repository.d.ts.map +1 -0
- package/dist/repositories/credential.repository.js +65 -0
- package/dist/repositories/credential.repository.js.map +1 -0
- package/dist/services/token.service.d.ts +20 -0
- package/dist/services/token.service.d.ts.map +1 -0
- package/dist/services/token.service.js +106 -0
- package/dist/services/token.service.js.map +1 -0
- package/dist/strategies/oauth.strategy.d.ts +9 -0
- package/dist/strategies/oauth.strategy.d.ts.map +1 -0
- package/dist/strategies/oauth.strategy.js +249 -0
- package/dist/strategies/oauth.strategy.js.map +1 -0
- package/dist/types.d.ts +38 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +32 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/mutex.d.ts +16 -0
- package/dist/utils/mutex.d.ts.map +1 -0
- package/dist/utils/mutex.js +54 -0
- package/dist/utils/mutex.js.map +1 -0
- package/dist/utils/pkce.d.ts +8 -0
- package/dist/utils/pkce.d.ts.map +1 -0
- package/dist/utils/pkce.js +17 -0
- package/dist/utils/pkce.js.map +1 -0
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -17,13 +17,12 @@ Qwen OAuth authentication plugin for [OpenCode](https://opencode.ai) - authentic
|
|
|
17
17
|
- 🔄 **Automatic Token Refresh** - Tokens are refreshed before expiry
|
|
18
18
|
- 💾 **Persistent Credentials** - Tokens saved to `~/.qwen/oauth_creds.json` for persistence across sessions
|
|
19
19
|
- 🌐 **Auto Browser Open** - Automatically opens browser for authentication
|
|
20
|
-
- 📝 **File Logging** - All OAuth activity logged to `~/.config/opencode/logs/qwen-oauth.log`
|
|
21
20
|
- 🚀 **Easy Install** - One-command installation with CLI tool
|
|
22
21
|
- 🎯 **Custom Headers** - Automatically adds Qwen-specific headers (X-DashScope-*) to API requests
|
|
23
22
|
- ⚙️ **Optimized Parameters** - Pre-configured temperature and topP settings for Qwen models
|
|
24
23
|
- 🌍 **Environment Variables** - Exposes Qwen credentials to shell environments
|
|
25
|
-
- 📊 **Event Monitoring** - Tracks authentication and session events for debugging
|
|
26
24
|
- ⏱️ **Request Throttling** - Built-in rate limiting to avoid 429 errors
|
|
25
|
+
- 🏗️ **Clean Architecture** - Layered design (services, repositories, middleware) for maintainability
|
|
27
26
|
|
|
28
27
|
## Quick Start
|
|
29
28
|
|
|
@@ -73,23 +72,13 @@ Select **"Qwen Code (qwen.ai OAuth)"** and follow the device flow instructions.
|
|
|
73
72
|
|
|
74
73
|
### Debug Mode
|
|
75
74
|
|
|
76
|
-
Enable verbose logging
|
|
75
|
+
Enable verbose logging:
|
|
77
76
|
|
|
78
77
|
```bash
|
|
79
78
|
QWEN_OAUTH_DEBUG=true opencode
|
|
80
79
|
```
|
|
81
80
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
All OAuth activity is logged to:
|
|
85
|
-
```
|
|
86
|
-
~/.config/opencode/logs/qwen-oauth.log
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
View logs in real-time:
|
|
90
|
-
```bash
|
|
91
|
-
tail -f ~/.config/opencode/logs/qwen-oauth.log
|
|
92
|
-
```
|
|
81
|
+
Logs are output to OpenCode's logging system and can be viewed in the OpenCode interface.
|
|
93
82
|
|
|
94
83
|
### Manual Configuration
|
|
95
84
|
|
|
@@ -141,29 +130,13 @@ npx opencode-qwen-oauth --help
|
|
|
141
130
|
|
|
142
131
|
## Diagnostics
|
|
143
132
|
|
|
144
|
-
|
|
133
|
+
Verify Qwen OAuth endpoints are accessible:
|
|
145
134
|
|
|
146
135
|
```bash
|
|
147
|
-
|
|
136
|
+
curl -I https://chat.qwen.ai/api/v1/oauth2/device/code
|
|
148
137
|
```
|
|
149
138
|
|
|
150
|
-
This
|
|
151
|
-
- ✓ OAuth base URL accessibility
|
|
152
|
-
- ✓ Device code endpoint functionality
|
|
153
|
-
- ✓ API endpoint availability
|
|
154
|
-
|
|
155
|
-
Example output:
|
|
156
|
-
```
|
|
157
|
-
[Base URL] https://chat.qwen.ai
|
|
158
|
-
Status: ✓ 200
|
|
159
|
-
|
|
160
|
-
[Device Code] https://chat.qwen.ai/api/v1/oauth2/device/code
|
|
161
|
-
Status: ✓ 200
|
|
162
|
-
|
|
163
|
-
[API Endpoints] Testing /chat/completions...
|
|
164
|
-
⚠ https://portal.qwen.ai/v1
|
|
165
|
-
Status: 401 (endpoint exists, requires auth)
|
|
166
|
-
```
|
|
139
|
+
This should return `200 OK` if endpoints are available.
|
|
167
140
|
|
|
168
141
|
## Troubleshooting
|
|
169
142
|
|
|
@@ -210,9 +183,8 @@ Credentials are saved to `~/.qwen/oauth_creds.json` (compatible with qwen-code C
|
|
|
210
183
|
This allows sharing authentication between OpenCode plugin and qwen-code CLI.
|
|
211
184
|
|
|
212
185
|
### Check logs
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
```
|
|
186
|
+
|
|
187
|
+
OpenCode logs can be viewed through the OpenCode interface or by checking the OpenCode log directory.
|
|
216
188
|
|
|
217
189
|
## How It Works
|
|
218
190
|
|
|
@@ -254,7 +226,7 @@ Run `npm run diagnose` to verify endpoint availability at any time.
|
|
|
254
226
|
|
|
255
227
|
```bash
|
|
256
228
|
# Clone and install
|
|
257
|
-
git clone https://github.com/
|
|
229
|
+
git clone https://github.com/dreygur/opencode-qwen-oauth.git
|
|
258
230
|
cd opencode-qwen-oauth
|
|
259
231
|
npm install
|
|
260
232
|
|
|
@@ -264,26 +236,42 @@ npm run build
|
|
|
264
236
|
# Watch mode
|
|
265
237
|
npm run dev
|
|
266
238
|
|
|
239
|
+
# Run tests
|
|
240
|
+
npm test
|
|
241
|
+
|
|
267
242
|
# Test locally
|
|
268
243
|
npm link
|
|
269
244
|
cd /path/to/project
|
|
270
|
-
opencode-qwen-oauth install
|
|
245
|
+
npx opencode-qwen-oauth install
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Testing
|
|
249
|
+
|
|
250
|
+
All tests use Node.js native test runner with tsx:
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
npm test
|
|
271
254
|
```
|
|
272
255
|
|
|
256
|
+
29 tests covering:
|
|
257
|
+
- PKCE key pair generation
|
|
258
|
+
- Input validation (URLs, tokens, codes)
|
|
259
|
+
- Data sanitization
|
|
260
|
+
|
|
273
261
|
## Plugin Architecture
|
|
274
262
|
|
|
275
|
-
This plugin implements multiple OpenCode plugin hooks:
|
|
263
|
+
This plugin implements multiple OpenCode plugin hooks using a clean, layered architecture:
|
|
276
264
|
|
|
277
265
|
### Hooks Implemented
|
|
278
266
|
|
|
279
267
|
#### `auth` Hook
|
|
280
|
-
Provides OAuth device flow authentication with automatic browser opening and token polling.
|
|
268
|
+
Provides OAuth device flow authentication with automatic browser opening and token polling. Uses `TokenService` for token management and `CredentialRepository` for persistence.
|
|
281
269
|
|
|
282
270
|
#### `config` Hook
|
|
283
271
|
Dynamically registers the Qwen provider and available models with OpenCode.
|
|
284
272
|
|
|
285
273
|
#### `event` Hook
|
|
286
|
-
Monitors session events
|
|
274
|
+
Monitors session events for debugging.
|
|
287
275
|
|
|
288
276
|
#### `chat.headers` Hook
|
|
289
277
|
Injects custom headers for Qwen API requests:
|
|
@@ -302,29 +290,33 @@ Exposes environment variables to shell commands:
|
|
|
302
290
|
- `QWEN_API_BASE_URL` - Qwen API endpoint
|
|
303
291
|
- `QWEN_PROVIDER` - Provider identifier
|
|
304
292
|
|
|
305
|
-
##
|
|
293
|
+
## Architecture
|
|
294
|
+
|
|
295
|
+
This plugin uses a **layered architecture** for maintainability:
|
|
306
296
|
|
|
307
297
|
```
|
|
308
|
-
|
|
309
|
-
├──
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
│
|
|
313
|
-
|
|
314
|
-
│
|
|
315
|
-
|
|
316
|
-
│
|
|
317
|
-
|
|
318
|
-
│
|
|
319
|
-
├──
|
|
320
|
-
│ └──
|
|
321
|
-
├──
|
|
322
|
-
├──
|
|
323
|
-
├──
|
|
324
|
-
|
|
325
|
-
└──
|
|
298
|
+
src/
|
|
299
|
+
├── index.ts # Plugin entry point (190 lines)
|
|
300
|
+
├── types.ts # Shared type definitions
|
|
301
|
+
├── strategies/
|
|
302
|
+
│ └── oauth.strategy.ts # OAuth Device Flow (RFC 8628)
|
|
303
|
+
├── services/
|
|
304
|
+
│ └── token.service.ts # Token management & caching
|
|
305
|
+
├── repositories/
|
|
306
|
+
│ └── credential.repository.ts # File-based credential storage
|
|
307
|
+
├── middleware/
|
|
308
|
+
│ ├── auth.middleware.ts # Auth fetch interceptor
|
|
309
|
+
│ ├── rate-limit.middleware.ts # Request throttling
|
|
310
|
+
│ └── retry.middleware.ts # Retry with exponential backoff
|
|
311
|
+
├── utils/
|
|
312
|
+
│ ├── logger.ts # Structured logging
|
|
313
|
+
│ ├── mutex.ts # Concurrency control
|
|
314
|
+
│ └── pkce.ts # PKCE key generation
|
|
315
|
+
└── [config, validation, etc.]
|
|
326
316
|
```
|
|
327
317
|
|
|
318
|
+
**Total:** ~1,670 lines (refactored from 2,810 lines, -41%)
|
|
319
|
+
|
|
328
320
|
**Note:** `.opencode/` directory is for local testing only and is not included in the npm package.
|
|
329
321
|
|
|
330
322
|
## License
|
package/dist/api-key-exchange.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* API Key Exchange for Qwen
|
|
3
3
|
* Attempts to exchange OAuth token for API key
|
|
4
4
|
*/
|
|
5
|
-
import { debugLog, warnLog, infoLog } from "./logger.js";
|
|
5
|
+
import { debugLog, warnLog, infoLog } from "./utils/logger.js";
|
|
6
6
|
import { QWEN_OAUTH_BASE_URL } from "./constants.js";
|
|
7
7
|
/**
|
|
8
8
|
* Potential endpoints for API key retrieval
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-exchange.js","sourceRoot":"","sources":["../src/api-key-exchange.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"api-key-exchange.js","sourceRoot":"","sources":["../src/api-key-exchange.ts"],"names":[],"mappings":"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"}
|
package/dist/browser.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Browser utilities for opening URLs
|
|
3
3
|
*/
|
|
4
4
|
import { spawn } from "node:child_process";
|
|
5
|
-
import { Debouncer } from "./mutex.js";
|
|
5
|
+
import { Debouncer } from "./utils/mutex.js";
|
|
6
6
|
// Debouncer to prevent multiple rapid browser opens
|
|
7
7
|
const browserDebouncer = new Debouncer();
|
|
8
8
|
/**
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,oDAAoD;AACpD,MAAM,gBAAgB,GAAG,IAAI,SAAS,EAAE,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,QAAQ,CACpD,KAAK,EAAE,GAAW,EAAiB,EAAE;IACnC,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC,EACD,IAAI,CACL,CAAC;AAEF;;GAEG;AACH,SAAS,mBAAmB,CAAC,GAAW;IACtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAElC,IAAI,OAAe,CAAC;QACpB,IAAI,IAAc,CAAC;QAEnB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,QAAQ;YACR,OAAO,GAAG,MAAM,CAAC;YACjB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChC,UAAU;YACV,OAAO,GAAG,UAAU,CAAC;YACrB,IAAI,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,qCAAqC;YACrC,OAAO,GAAG,UAAU,CAAC;YACrB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAEb,uDAAuD;YACvD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;gBACjC,KAAK,EAAE,QAAQ;gBACf,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1B,6CAA6C;gBAC7C,MAAM,QAAQ,GAAG;oBACf,eAAe;oBACf,SAAS;oBACT,UAAU;oBACV,eAAe;oBACf,gBAAgB;iBACjB,CAAC;gBAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,IAAI,CAAC;wBACH,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE;4BACzC,KAAK,EAAE,QAAQ;4BACf,QAAQ,EAAE,IAAI;yBACf,CAAC,CAAC;wBACH,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;wBACvB,OAAO,CAAC,gBAAgB;oBAC1B,CAAC;oBAAC,MAAM,CAAC;wBACP,mBAAmB;wBACnB,SAAS;oBACX,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iDAAiD;IACnD,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Qwen OAuth Plugin for OpenCode
|
|
3
|
-
*
|
|
4
|
-
* With proactive token refresh via custom fetch loader
|
|
5
|
-
*
|
|
6
|
-
* @packageDocumentation
|
|
3
|
+
* Clean architecture with separated concerns
|
|
7
4
|
*/
|
|
8
5
|
import type { Plugin } from "@opencode-ai/plugin";
|
|
9
6
|
export declare const QwenOAuthPlugin: Plugin;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAC;AAa/D,eAAO,MAAM,eAAe,EAAE,MAyK7B,CAAC;AAEF,eAAe,eAAe,CAAC"}
|