* feat(quota): add Wafer.ai quota provider - New provider: wafer.js fetches from https://pass.wafer.ai/v1/inference/quota - Auth: reads wafer/wafer-ai/wafer_ai keys from auth file - Timeout: AbortSignal.timeout(15_000) with timeoutSignal.aborted detection - Response: parses remaining/limit/overage/usedPercent/window_end/plan_tier - valueLabel: planTier + remaining/limit + overage suffix - Window: 5h (18000s) via resolveWindowLabel - Cross-runtime: added to web registry, UI types, VS Code dispatcher * fix(quota): wafer provider fixes — auth alias, decompression, logo - Add 'wafer.ai' auth alias to match actual auth key format - Use 'Accept-Encoding: identity' header to fix Bun fetch decompression issue with Cloudflare-backed responses - Match copilot valueLabel format: 'planTier · X / Y left' - Add wafer logo alias so Providers and Usage pages resolve to the same wafer.ai logo from models.dev * style(quota): fix indentation of timeoutSignal declaration * fix(quota): derive window duration from API instead of hardcoding Compute windowSeconds from window_end - window_start timestamps, with WAFER_WINDOW_SECONDS (5h) as fallback if timestamps are missing. --------- Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
4.2 KiB
4.2 KiB
Quota Module Documentation
Purpose
This module fetches quota and usage signals for supported providers in the web server runtime.
Entrypoints and structure
packages/web/server/lib/quota/index.js: public entrypoint imported bypackages/web/server/index.js.packages/web/server/lib/quota/routes.js: Express route registration for quota endpoints.packages/web/server/lib/quota/providers/index.js: provider registry, configured-provider list, and provider dispatcher.packages/web/server/lib/quota/providers/interface.js: JSDoc provider contract used as implementation reference.packages/web/server/lib/quota/providers/google/: Google-specific auth, API, and transform modules.packages/web/server/lib/quota/utils/: shared auth, transform, and formatting helpers.
Supported provider IDs (dispatcher)
These provider IDs are currently dispatchable via fetchQuotaForProvider(providerId) in packages/web/server/lib/quota/providers/index.js.
| Provider ID | Display name | Module | Auth aliases/keys |
|---|---|---|---|
claude |
Claude | providers/claude.js |
anthropic, claude |
codex |
Codex | providers/codex.js |
openai, codex, chatgpt |
google |
providers/google/index.js |
google, google.oauth, Antigravity accounts file |
|
github-copilot |
GitHub Copilot | providers/copilot.js |
github-copilot, copilot |
github-copilot-addon |
GitHub Copilot Add-on | providers/copilot.js |
github-copilot, copilot |
kimi-for-coding |
Kimi for Coding | providers/kimi.js |
kimi-for-coding, kimi |
nano-gpt |
NanoGPT | providers/nanogpt.js |
nano-gpt, nanogpt, nano_gpt |
openrouter |
OpenRouter | providers/openrouter.js |
openrouter |
zai-coding-plan |
z.ai | providers/zai.js |
zai-coding-plan, zai, z.ai |
zhipuai-coding-plan |
Zhipu AI Coding Plan | providers/zhipuai-coding-plan.js |
zhipuai-coding-plan, zhipuai, zhipu |
minimax-coding-plan |
MiniMax Coding Plan (minimax.io) | providers/minimax-coding-plan.js |
minimax-coding-plan |
minimax-cn-coding-plan |
MiniMax Coding Plan (minimaxi.com) | providers/minimax-cn-coding-plan.js |
minimax-cn-coding-plan |
ollama-cloud |
Ollama Cloud | providers/ollama-cloud.js |
Cookie file at ~/.config/ollama-quota/cookie (raw session cookie string) |
wafer |
Wafer.ai | providers/wafer.js |
wafer, wafer-ai, wafer_ai, wafer.ai |
Internal-only provider module
providers/openai.jsexists for logic parity/reuse but is intentionally not registered for dispatcher ID routing.
Response contract
All providers should return results via shared helpers to preserve API shape:
- Required fields:
providerId,providerName,ok,configured,usage,fetchedAt - Optional field:
error - Unsupported provider requests should return
ok: false,configured: false,error: Unsupported provider
Add a new provider (quick steps)
- Choose module shape based on complexity:
- Simple providers: create
packages/web/server/lib/quota/providers/<provider>.js. - Complex providers (multi-source auth, multiple API calls, non-trivial transforms): create
packages/web/server/lib/quota/providers/<provider>/with split modules like Google (index.js,auth.js,api.js,transforms.js).
- Simple providers: create
- Export
providerId,providerName,aliases,isConfigured, andfetchQuota. - Use shared helpers from
packages/web/server/lib/quota/utils/index.js(buildResult,toUsageWindow, auth/conversion helpers) to keep payload shape consistent. - Register the provider in
packages/web/server/lib/quota/providers/index.js. - If needed for direct use, export a named fetcher from
packages/web/server/lib/quota/providers/index.jsandpackages/web/server/lib/quota/index.js. - Update this file with the new provider ID, module path, and alias/auth details.
- Validate with
bun run type-check,bun run lint, andbun run build.
Notes for contributors
- Keep provider IDs stable; clients use them directly.
- Avoid adding alias-based dispatch in
fetchQuotaForProvider; dispatch currently expects exact provider IDs. - Keep Google behavior changes isolated and review
providers/google/*together.