mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-24 12:44:18 +08:00
c4630b5c26
Query coding-plan / agent-plan usage for Volcengine Ark via the control-plane OpenAPI (open.volcengineapi.com), which requires account-level AccessKey signing rather than the inference API key. - Implement Volcengine Signature V4 (an AWS SigV4 variant: fixed canonical header order, "HMAC-SHA256" algorithm without the AWS4 prefix, scope ending in "request", service "ark") in services/coding_plan.rs - Auto-detect the plan by probing GetAFPUsage (Agent Plan, AFP five-hour/weekly/monthly quotas) first, falling back to GetCodingPlanUsage (Coding Plan, session/weekly/monthly percentages); a single credential covers whichever plan the account holds - Parse the real response shape: the window label lives in the `Level` field; guard ResetTimestamp <= 0 (session returns -1) - Store account-level credentials on UsageScript (accessKeyId / secretAccessKey), threaded through both the test command and the TOKEN_PLAN auto-refresh path - Add an independent AK/SK input block with a detailed hint pointing to the Volcengine console -> API Access Keys - Add the `monthly` tier label (frontend TIER_I18N_KEYS + tray TIER_LABEL_GROUPS + subscription service) - Sync zh / en / ja / zh-TW locales and the usage-query docs
264 lines
10 KiB
Markdown
264 lines
10 KiB
Markdown
# 2.5 Usage Query
|
||
|
||
CC Switch's quota / balance display is split into two categories: **Auto Query** (official subscription types, works out of the box) and **Manual Enable** (built-in templates + custom scripts, requires user configuration before showing).
|
||
|
||
| Category | Scope | User Enable Required |
|
||
| ------------------------------ | -------------------------------------------------------------------------- | -------------------- |
|
||
| **Auto Query** | Claude / Codex / Gemini official subscriptions, GitHub Copilot, Codex OAuth reverse proxy | No (enabled by default) |
|
||
| **Manual Enable (built-in templates)** | Token Plan, third-party balance query | Yes (see below) |
|
||
| **Manual Enable (custom script)** | Proxies, private deployments, special APIs not covered by built-in templates | Yes (see below) |
|
||
|
||
## Auto Query (Official Subscription Types)
|
||
|
||
Starting from v3.13.0, the following three categories automatically display the quota at the bottom of the provider card after the provider is enabled — no additional configuration required:
|
||
|
||
| Category | Covered Providers | Displayed Content |
|
||
| ---------------- | ----------------------------------------------------- | ----------------------------------------- |
|
||
| Official subscriptions | Claude / Codex / Gemini official login | Official subscription quota |
|
||
| GitHub Copilot | Copilot provider card | Premium interactions remaining |
|
||
| Codex OAuth | Codex OAuth reverse proxy card (Claude provider) | ChatGPT account Codex quota |
|
||
|
||
These three share the common trait that **their data source is unique and semantically unambiguous** (the usage rate of an official subscription), so CC Switch directly calls the corresponding official or OAuth query endpoint.
|
||
|
||
### Auto Query Interactions
|
||
|
||
- **Card footer display**: Usage percentage + reset countdown, colored by usage (< 70% green / 70–89% orange / ≥ 90% red)
|
||
- **Manual refresh**: Click the refresh icon on the card to re-query
|
||
- **Simplified card**: For these three types, the **Health Check** and **Usage Query Config** buttons are hidden to avoid interfering with the built-in display
|
||
- **Session expired notice**: If a token fails to refresh, the card shows a yellow "Session Expired" warning (Copilot / Codex OAuth)
|
||
|
||
---
|
||
|
||
## Manual Enable (Built-in Templates + Custom Scripts)
|
||
|
||
Besides the three auto-query types above, **all other providers** (including Token Plan, third-party balance queries, and various proxy services) need to have the **Usage Query** switch manually turned on in the provider card before any quota is displayed.
|
||
|
||
### Why do these need manual enabling?
|
||
|
||
One important reason: **the same request URL (same vendor) may expose multiple query modes** — for example, both plan-based quota queries and account-level balance queries. CC Switch cannot automatically infer which one you want, so the built-in query for such providers is **disabled by default**, leaving you to pick the right template.
|
||
|
||
### Built-in Template Coverage
|
||
|
||
v3.13.0 provides **ready-to-use built-in templates** for the following categories — no script writing required:
|
||
|
||
| Category | Covered Providers | Template Type |
|
||
| ------------------ | --------------------------------------------------------- | ------------------------------- |
|
||
| Token Plan | Kimi / Zhipu GLM / MiniMax / Volcengine | Plan quota (with usage progress) |
|
||
| Third-party balance| DeepSeek / StepFun / SiliconFlow / OpenRouter / Novita AI | Official balance query |
|
||
|
||
> **Tip**: Beyond these built-in templates, for uncovered providers you can use the **custom script** approach (see below) to write your own query logic.
|
||
|
||
### Enable Steps
|
||
|
||
1. Hover over the provider card to reveal action buttons
|
||
2. Click the **Usage Query** button (chart icon)
|
||
3. At the top of the configuration panel, toggle on **Enable Usage Query**
|
||
4. Select the right built-in template (e.g., Token Plan, third-party balance) or choose "Custom"
|
||
5. Fill in API Key / Base URL / Access Token as needed (most cases can be left blank, reusing the provider's own credentials)
|
||
6. Click **Test Script** to verify the query returns successfully
|
||
7. Save — next time the provider is activated, the quota will show up at the bottom of the card
|
||
|
||
> ⚠️ **Note**: The auto-refresh interval after enabling is controlled by the "Auto Query Interval" field (set to `0` to disable auto-refresh). Background queries only trigger when the provider is in "Currently Active" state.
|
||
|
||
---
|
||
|
||
## Custom Script Query (Advanced)
|
||
|
||
### Overview
|
||
|
||
When a provider **is not covered by the built-in templates**, you can write a custom JavaScript query script. Suitable for proxy services, private deployments, special API formats, etc.
|
||
|
||
**Use cases**:
|
||
- Check API account remaining balance
|
||
- Monitor plan usage
|
||
- Multi-plan balance summary display
|
||
|
||
## Open Configuration
|
||
|
||
1. Hover over the provider card to reveal action buttons
|
||
2. Click the "Usage Query" button (chart icon)
|
||
3. Opens the usage query configuration panel
|
||
|
||
## Enable Usage Query
|
||
|
||
At the top of the configuration panel, enable the "Enable Usage Query" toggle.
|
||
|
||
## Preset Templates
|
||
|
||
CC Switch provides three preset templates:
|
||
|
||
### Custom Template
|
||
|
||
Fully customizable request and extraction logic, suitable for special API formats.
|
||
|
||
### Generic Template
|
||
|
||
Suitable for most providers with standard API formats:
|
||
|
||
```javascript
|
||
({
|
||
request: {
|
||
url: "{{baseUrl}}/user/balance",
|
||
method: "GET",
|
||
headers: {
|
||
"Authorization": "Bearer {{apiKey}}",
|
||
"User-Agent": "cc-switch/1.0"
|
||
}
|
||
},
|
||
extractor: function(response) {
|
||
return {
|
||
isValid: response.is_active || true,
|
||
remaining: response.balance,
|
||
unit: "USD"
|
||
};
|
||
}
|
||
})
|
||
```
|
||
|
||
**Configuration parameters**:
|
||
| Parameter | Description |
|
||
|-----------|-------------|
|
||
| API Key | Authentication key (optional, uses provider's key if empty) |
|
||
| Base URL | API base URL (optional, uses provider's endpoint if empty) |
|
||
|
||
### New API Template
|
||
|
||
Designed specifically for New API-type proxy services:
|
||
|
||
```javascript
|
||
({
|
||
request: {
|
||
url: "{{baseUrl}}/api/user/self",
|
||
method: "GET",
|
||
headers: {
|
||
"Content-Type": "application/json",
|
||
"Authorization": "Bearer {{accessToken}}",
|
||
"New-Api-User": "{{userId}}"
|
||
},
|
||
},
|
||
extractor: function (response) {
|
||
if (response.success && response.data) {
|
||
return {
|
||
planName: response.data.group || "Default Plan",
|
||
remaining: response.data.quota / 500000,
|
||
used: response.data.used_quota / 500000,
|
||
total: (response.data.quota + response.data.used_quota) / 500000,
|
||
unit: "USD",
|
||
};
|
||
}
|
||
return {
|
||
isValid: false,
|
||
invalidMessage: response.message || "Query failed"
|
||
};
|
||
},
|
||
})
|
||
```
|
||
|
||
**Configuration parameters**:
|
||
| Parameter | Description |
|
||
|-----------|-------------|
|
||
| Base URL | New API service URL |
|
||
| Access Token | Access token |
|
||
| User ID | User ID |
|
||
|
||
## General Configuration
|
||
|
||
### Timeout
|
||
|
||
Request timeout in seconds, default 10 seconds.
|
||
|
||
### Auto Query Interval
|
||
|
||
Interval for automatically refreshing usage data (minutes):
|
||
- Set to `0` to disable auto query
|
||
- Range: 0-1440 minutes (up to 24 hours)
|
||
- Only effective when the provider is in "Currently Active" status
|
||
|
||
## Extractor Return Format
|
||
|
||
The extractor function returns an object containing the following fields. All fields are optional:
|
||
|
||
| Field | Type | Required | Description |
|
||
|-------|------|----------|-------------|
|
||
| `isValid` | boolean | No | Whether the account is valid, defaults to true |
|
||
| `invalidMessage` | string | No | Message when invalid |
|
||
| `remaining` | number | No | Remaining balance |
|
||
| `unit` | string | No | Unit (e.g., USD, CNY, times) |
|
||
| `planName` | string | No | Plan name (supports multi-plan) |
|
||
| `total` | number | No | Total balance |
|
||
| `used` | number | No | Used amount |
|
||
| `extra` | string | No | Additional display text |
|
||
|
||
## Test Script
|
||
|
||
After configuration, click the "Test Script" button to verify:
|
||
|
||
1. Sends a request to the configured URL
|
||
2. Executes the extractor function
|
||
3. Displays the returned result or error message
|
||
|
||
## Display
|
||
|
||
After successful configuration, the provider card displays:
|
||
|
||
- **Single plan**: Directly shows remaining balance
|
||
- **Multi-plan**: Shows plan count, click to expand for details
|
||
|
||
## Variable Placeholders
|
||
|
||
The following placeholders can be used in scripts and are automatically replaced at runtime:
|
||
|
||
| Placeholder | Description |
|
||
|-------------|-------------|
|
||
| `{{apiKey}}` | Configured API Key |
|
||
| `{{baseUrl}}` | Configured Base URL |
|
||
| `{{accessToken}}` | Configured Access Token (New API) |
|
||
| `{{userId}}` | Configured User ID (New API) |
|
||
|
||
## Common Provider Configuration Examples
|
||
|
||
### Troubleshooting
|
||
|
||
### Auto Query Not Displayed (Official Subscription Types)
|
||
|
||
**Check**:
|
||
1. Confirm the provider is an official subscription type — Claude / Codex / Gemini official login, GitHub Copilot, or Codex OAuth reverse proxy
|
||
2. The provider is in "Currently Active" state (inactive providers do not trigger queries)
|
||
3. For OAuth types (Copilot / Codex OAuth), check whether the token is still valid; if the card shows "Session Expired", log in again in the **OAuth Auth Center**
|
||
4. Network access to the official quota endpoint
|
||
|
||
### Manual Enable Still Not Showing Quota
|
||
|
||
**Check**:
|
||
1. Whether the **Enable Usage Query** toggle at the top of the "Usage Query" panel is on
|
||
2. Whether a suitable built-in template (Token Plan / third-party balance / custom) is selected
|
||
3. Click **Test Script** to see the specific error
|
||
4. Required fields such as API Key / Base URL are filled correctly
|
||
5. Network access to the provider's quota endpoint
|
||
6. Background auto-refresh only triggers when the provider is in "Currently Active" state
|
||
|
||
### Query Failed
|
||
|
||
**Check**:
|
||
1. Is the API Key correct
|
||
2. Is the Base URL correct
|
||
3. Is the network accessible
|
||
4. Is the timeout sufficient
|
||
|
||
### Empty Response Data
|
||
|
||
**Check**:
|
||
1. Does the extractor function have a `return` statement
|
||
2. Does the response data structure match the extractor
|
||
3. Use "Test Script" to view the raw response
|
||
|
||
### Format Failed
|
||
|
||
When there is a script syntax error, clicking the "Format" button will indicate the error location.
|
||
|
||
## Notes
|
||
|
||
- Usage queries consume a small amount of API request quota
|
||
- Set a reasonable auto query interval to avoid frequent requests
|
||
- Sensitive information (API Key, Token) is securely stored locally
|