mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-24 04:22:58 +08:00
785e1b5add
* feat(db): add pricing config fields to proxy_config table - Add default_cost_multiplier field per app type - Add pricing_model_source field (request/response) - Add request_model field to proxy_request_logs table - Implement schema migration v5 * feat(api): add pricing config commands and provider meta fields - Add get/set commands for default cost multiplier - Add get/set commands for pricing model source - Extend ProviderMeta with cost_multiplier and pricing_model_source - Register new commands in Tauri invoke handler * fix(proxy): apply cost multiplier to total cost only - Move multiplier calculation from per-item to total cost - Add resolve_pricing_config for provider-level override - Include request_model and cost_multiplier in usage logs - Return new fields in get_request_logs API * feat(ui): add pricing config UI and usage log enhancements - Add pricing config section to provider advanced settings - Refactor PricingConfigPanel to compact table layout - Display all three apps (Claude/Codex/Gemini) in one view - Add multiplier column and request model display to logs - Add frontend API wrappers for pricing config * feat(i18n): add pricing config translations - Add zh/en/ja translations for pricing defaults config - Add translations for multiplier, requestModel, responseModel - Add provider pricing config translations * fix(pricing): align backfill cost calculation with real-time logic - Fix backfill to deduct cache_read_tokens from input (avoid double billing) - Apply multiplier only to total cost, not to each item - Add multiplier display in request detail panel with i18n support - Use AppError::localized for backend error messages - Fix init_proxy_config_rows to use per-app default values - Fix silent failure in set_default_cost_multiplier/set_pricing_model_source - Add clippy allow annotation for test mutex across await * style: format code with cargo fmt and prettier * fix(tests): correct error type assertions in proxy DAO tests The tests expected AppError::InvalidInput but the DAO functions use AppError::localized() which returns AppError::Localized variant. Updated assertions to match the correct error type with key validation. --------- Co-authored-by: Jason <farion1231@gmail.com>
121 lines
3.4 KiB
TypeScript
121 lines
3.4 KiB
TypeScript
import { invoke } from "@tauri-apps/api/core";
|
|
import type {
|
|
ProxyConfig,
|
|
ProxyStatus,
|
|
ProxyServerInfo,
|
|
ProxyTakeoverStatus,
|
|
GlobalProxyConfig,
|
|
AppProxyConfig,
|
|
} from "@/types/proxy";
|
|
|
|
export const proxyApi = {
|
|
// ========== 代理服务器控制 API ==========
|
|
|
|
// 启动代理服务器
|
|
async startProxyServer(): Promise<ProxyServerInfo> {
|
|
return invoke("start_proxy_server");
|
|
},
|
|
|
|
// 停止代理服务器并恢复配置
|
|
async stopProxyWithRestore(): Promise<void> {
|
|
return invoke("stop_proxy_with_restore");
|
|
},
|
|
|
|
// 获取代理服务器状态
|
|
async getProxyStatus(): Promise<ProxyStatus> {
|
|
return invoke("get_proxy_status");
|
|
},
|
|
|
|
// 检查代理服务器是否正在运行
|
|
async isProxyRunning(): Promise<boolean> {
|
|
return invoke("is_proxy_running");
|
|
},
|
|
|
|
// 检查是否处于接管模式
|
|
async isLiveTakeoverActive(): Promise<boolean> {
|
|
return invoke("is_live_takeover_active");
|
|
},
|
|
|
|
// 代理模式下切换供应商
|
|
async switchProxyProvider(
|
|
appType: string,
|
|
providerId: string,
|
|
): Promise<void> {
|
|
return invoke("switch_proxy_provider", { appType, providerId });
|
|
},
|
|
|
|
// ========== 接管状态 API ==========
|
|
|
|
// 获取各应用接管状态
|
|
async getProxyTakeoverStatus(): Promise<ProxyTakeoverStatus> {
|
|
return invoke("get_proxy_takeover_status");
|
|
},
|
|
|
|
// 为指定应用开启/关闭接管
|
|
async setProxyTakeoverForApp(
|
|
appType: string,
|
|
enabled: boolean,
|
|
): Promise<void> {
|
|
return invoke("set_proxy_takeover_for_app", { appType, enabled });
|
|
},
|
|
|
|
// ========== Legacy 代理配置 API (兼容) ==========
|
|
|
|
// 获取代理配置(旧版 v2 兼容接口)
|
|
async getProxyConfig(): Promise<ProxyConfig> {
|
|
return invoke("get_proxy_config");
|
|
},
|
|
|
|
// 更新代理配置(旧版 v2 兼容接口)
|
|
async updateProxyConfig(config: ProxyConfig): Promise<void> {
|
|
return invoke("update_proxy_config", { config });
|
|
},
|
|
|
|
// ========== v3+ 全局/应用级配置 API ==========
|
|
|
|
// 获取全局代理配置
|
|
async getGlobalProxyConfig(): Promise<GlobalProxyConfig> {
|
|
return invoke("get_global_proxy_config");
|
|
},
|
|
|
|
// 更新全局代理配置
|
|
async updateGlobalProxyConfig(config: GlobalProxyConfig): Promise<void> {
|
|
return invoke("update_global_proxy_config", { config });
|
|
},
|
|
|
|
// 获取指定应用的代理配置
|
|
async getProxyConfigForApp(appType: string): Promise<AppProxyConfig> {
|
|
return invoke("get_proxy_config_for_app", { appType });
|
|
},
|
|
|
|
// 更新指定应用的代理配置
|
|
async updateProxyConfigForApp(config: AppProxyConfig): Promise<void> {
|
|
return invoke("update_proxy_config_for_app", { config });
|
|
},
|
|
|
|
// ========== 计费默认配置 API ==========
|
|
|
|
// 获取默认成本倍率
|
|
async getDefaultCostMultiplier(appType: string): Promise<string> {
|
|
return invoke("get_default_cost_multiplier", { appType });
|
|
},
|
|
|
|
// 设置默认成本倍率
|
|
async setDefaultCostMultiplier(
|
|
appType: string,
|
|
value: string,
|
|
): Promise<void> {
|
|
return invoke("set_default_cost_multiplier", { appType, value });
|
|
},
|
|
|
|
// 获取计费模式来源
|
|
async getPricingModelSource(appType: string): Promise<string> {
|
|
return invoke("get_pricing_model_source", { appType });
|
|
},
|
|
|
|
// 设置计费模式来源
|
|
async setPricingModelSource(appType: string, value: string): Promise<void> {
|
|
return invoke("set_pricing_model_source", { appType, value });
|
|
},
|
|
};
|