Elegant TypeScript SDK for Qwen AI API with OAuth/PKCE authentication
npm install qwen.jsSimple and powerful wrapper for Qwen AI API with OAuth/PKCE authentication. Built with Bun/TypeScript, zero external dependencies.
Features:
- OAuth/PKCE device flow authentication
- Automatic token refresh
- Streaming responses
- Simple ask() method for quick prompts
``bash`
bun add qwen.js
`typescript
import { createQwen } from "qwen.js"
const qwen = createQwen()
await qwen.authenticate()
const answer = await qwen.ask("What is quantum computing?")
console.log(answer)
`
`typescript
import { createQwen } from "qwen.js"
const qwen = createQwen({
accessToken: "your-access-token",
refreshToken: "your-refresh-token",
})
const response = await qwen.ask("Hello!")
`
`typescript
import { createQwen } from "qwen.js"
const qwen = createQwen()
const { url, userCode } = await qwen.login()
console.log(Open: ${url})Code: ${userCode}
console.log()
await qwen.waitForAuth()
const answer = await qwen.ask("Hello!")
`
`typescript
import { createQwen } from "qwen.js"
const qwen = createQwen({ accessToken: "..." })
for await (const chunk of qwen.chatStream("Tell me a story")) {
process.stdout.write(chunk)
}
`
`typescript
import { createQwen } from "qwen.js"
const qwen = createQwen({ accessToken: "..." })
const response = await qwen.chat([
{ role: "system", content: "You are a helpful assistant" },
{ role: "user", content: "What is 2+2?" },
])
console.log(response.choices[0].message.content)
`
`typescript
import { createQwen } from "qwen.js"
const qwen = createQwen()
await qwen.authenticate()
const tokens = qwen.getTokens()
await Bun.write("tokens.json", JSON.stringify(tokens))
const saved = await Bun.file("tokens.json").json()
const qwen2 = createQwen({
accessToken: saved.accessToken,
refreshToken: saved.refreshToken,
})
`
| Option | Type | Description |
|--------|------|-------------|
| accessToken | string | Pre-existing access token |refreshToken
| | string | Pre-existing refresh token |model
| | string | Default model (default: coder-model) |
| Method | Description |
|--------|-------------|
| authenticate() | Full OAuth flow with console prompts |login()
| | Get device code and auth URL |waitForAuth()
| | Poll for token after user authenticates |setTokens(accessToken, refreshToken?)
| | Set tokens manually |getTokens()
| | Get current auth state |ask(prompt, options?)
| | Simple prompt, returns string |chat(messages, options?)
| | Full chat, returns ChatResponse |chatStream(messages, options?)
| | Streaming chat, yields chunks |setModel(model)` | Change default model |
|
MIT
---
Telegram: zarazaex · zarazaex.xyz