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.
Files changed (50) hide show
  1. package/README.md +52 -60
  2. package/dist/api-key-exchange.js +1 -1
  3. package/dist/api-key-exchange.js.map +1 -1
  4. package/dist/browser.js +1 -1
  5. package/dist/browser.js.map +1 -1
  6. package/dist/index.d.ts +1 -4
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +50 -443
  9. package/dist/index.js.map +1 -1
  10. package/dist/middleware/auth.middleware.d.ts +10 -0
  11. package/dist/middleware/auth.middleware.d.ts.map +1 -0
  12. package/dist/middleware/auth.middleware.js +102 -0
  13. package/dist/middleware/auth.middleware.js.map +1 -0
  14. package/dist/middleware/rate-limit.middleware.d.ts +10 -0
  15. package/dist/middleware/rate-limit.middleware.d.ts.map +1 -0
  16. package/dist/middleware/rate-limit.middleware.js +22 -0
  17. package/dist/middleware/rate-limit.middleware.js.map +1 -0
  18. package/dist/middleware/retry.middleware.d.ts +11 -0
  19. package/dist/middleware/retry.middleware.d.ts.map +1 -0
  20. package/dist/middleware/retry.middleware.js +43 -0
  21. package/dist/middleware/retry.middleware.js.map +1 -0
  22. package/dist/repositories/credential.repository.d.ts +13 -0
  23. package/dist/repositories/credential.repository.d.ts.map +1 -0
  24. package/dist/repositories/credential.repository.js +65 -0
  25. package/dist/repositories/credential.repository.js.map +1 -0
  26. package/dist/services/token.service.d.ts +20 -0
  27. package/dist/services/token.service.d.ts.map +1 -0
  28. package/dist/services/token.service.js +106 -0
  29. package/dist/services/token.service.js.map +1 -0
  30. package/dist/strategies/oauth.strategy.d.ts +9 -0
  31. package/dist/strategies/oauth.strategy.d.ts.map +1 -0
  32. package/dist/strategies/oauth.strategy.js +249 -0
  33. package/dist/strategies/oauth.strategy.js.map +1 -0
  34. package/dist/types.d.ts +38 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +5 -0
  37. package/dist/types.js.map +1 -0
  38. package/dist/utils/logger.d.ts +24 -0
  39. package/dist/utils/logger.d.ts.map +1 -0
  40. package/dist/utils/logger.js +32 -0
  41. package/dist/utils/logger.js.map +1 -0
  42. package/dist/utils/mutex.d.ts +16 -0
  43. package/dist/utils/mutex.d.ts.map +1 -0
  44. package/dist/utils/mutex.js +54 -0
  45. package/dist/utils/mutex.js.map +1 -0
  46. package/dist/utils/pkce.d.ts +8 -0
  47. package/dist/utils/pkce.d.ts.map +1 -0
  48. package/dist/utils/pkce.js +17 -0
  49. package/dist/utils/pkce.js.map +1 -0
  50. 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 to console:
75
+ Enable verbose logging:
77
76
 
78
77
  ```bash
79
78
  QWEN_OAUTH_DEBUG=true opencode
80
79
  ```
81
80
 
82
- ### Log Files
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
- Test if the Qwen OAuth endpoints are accessible:
133
+ Verify Qwen OAuth endpoints are accessible:
145
134
 
146
135
  ```bash
147
- npm run diagnose
136
+ curl -I https://chat.qwen.ai/api/v1/oauth2/device/code
148
137
  ```
149
138
 
150
- This will check:
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
- ```bash
214
- cat ~/.config/opencode/logs/qwen-oauth.log
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/yourusername/opencode-qwen-oauth.git
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 (creation, errors) for debugging and logging.
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
- ## Project Structure
293
+ ## Architecture
294
+
295
+ This plugin uses a **layered architecture** for maintainability:
306
296
 
307
297
  ```
308
- opencode-qwen-oauth/
309
- ├── src/ # TypeScript source files
310
- ├── index.ts # Main plugin with hooks
311
- ├── oauth.ts # OAuth device flow logic
312
- ├── credentials.ts # Credential storage (~/.qwen/)
313
- ├── pkce.ts # PKCE implementation
314
- ├── browser.ts # Browser opening utility
315
- ├── logger.ts # Logging utilities
316
- ├── request-queue.ts # Rate limiting
317
- ├── diagnostic.ts # Diagnostics CLI
318
- └── constants.ts # API constants
319
- ├── bin/ # CLI scripts
320
- │ └── install.js # Installer script
321
- ├── dist/ # Compiled JavaScript (generated)
322
- ├── package.json # Package manifest
323
- ├── tsconfig.json # TypeScript config
324
- ├── LICENSE # MIT license
325
- └── README.md # This file
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
@@ -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":"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"}
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
  /**
@@ -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,YAAY,CAAC;AAEvC,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"}
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
- * Provides OAuth device flow authentication for Qwen.ai
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;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAC;AA8B/D,eAAO,MAAM,eAAe,EAAE,MAsmB7B,CAAC;AAEF,eAAe,eAAe,CAAC"}
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"}