qwen.js
v0.1.0
Published
Elegant TypeScript SDK for Qwen AI API with OAuth/PKCE authentication
Maintainers
Readme
qwen.js
Elegant TypeScript SDK for Qwen AI API with OAuth/PKCE authentication.
Installation
# bun
bun add qwen.js
# npm
npm install qwen.js
# pnpm
pnpm add qwen.jsQuick Start
import { createQwen } from "qwen.js"
const qwen = createQwen()
// Authenticate (opens browser for OAuth)
await qwen.authenticate()
// Simple chat
const answer = await qwen.ask("What is quantum computing?")
console.log(answer)Usage
With Existing Tokens
import { createQwen } from "qwen.js"
const qwen = createQwen({
accessToken: "your-access-token",
refreshToken: "your-refresh-token",
})
const response = await qwen.ask("Hello!")Manual Authentication Flow
import { createQwen } from "qwen.js"
const qwen = createQwen()
// Get auth URL
const { url, userCode } = await qwen.login()
console.log(`Open: ${url}`)
console.log(`Code: ${userCode}`)
// Wait for user to authenticate
await qwen.waitForAuth()
// Now you can chat
const answer = await qwen.ask("Hello!")Streaming Responses
import { createQwen } from "qwen.js"
const qwen = createQwen({ accessToken: "..." })
for await (const chunk of qwen.chatStream("Tell me a story")) {
process.stdout.write(chunk)
}Full Chat with Message History
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?" },
{ role: "assistant", content: "4" },
{ role: "user", content: "And 3+3?" },
])
console.log(response.choices[0].message.content)Save and Restore Tokens
import { createQwen } from "qwen.js"
const qwen = createQwen()
await qwen.authenticate()
// Save tokens for later
const tokens = qwen.getTokens()
await Bun.write("tokens.json", JSON.stringify(tokens))
// Later: restore tokens
const saved = await Bun.file("tokens.json").json()
const qwen2 = createQwen({
accessToken: saved.accessToken,
refreshToken: saved.refreshToken,
})API Reference
createQwen(options?)
Creates a new Qwen client.
Options:
accessToken- Pre-existing access tokenrefreshToken- Pre-existing refresh tokenmodel- Default model (default:qwen-plus)
QwenClient
Methods
authenticate()- Full OAuth flow with console promptslogin()- Get device code and auth URLwaitForAuth()- Poll for token after user authenticatessetTokens(accessToken, refreshToken?)- Set tokens manuallygetTokens()- Get current auth stateask(prompt, options?)- Simple prompt, returns stringchat(messages, options?)- Full chat, returns ChatResponsechatStream(messages, options?)- Streaming chat, yields chunks
License
MIT
