import { invoke } from "@tauri-apps/api/core"; import { listen, type UnlistenFn } from "@tauri-apps/api/event"; import type { Provider } from "@/types"; import type { AppId } from "./types"; export interface ProviderSortUpdate { id: string; sortIndex: number; } export interface ProviderSwitchEvent { appType: AppId; providerId: string; } export const providersApi = { async getAll(appId: AppId): Promise> { return await invoke("get_providers", { app: appId }); }, async getCurrent(appId: AppId): Promise { return await invoke("get_current_provider", { app: appId }); }, async add(provider: Provider, appId: AppId): Promise { return await invoke("add_provider", { provider, app: appId }); }, async update(provider: Provider, appId: AppId): Promise { return await invoke("update_provider", { provider, app: appId }); }, async delete(id: string, appId: AppId): Promise { return await invoke("delete_provider", { id, app: appId }); }, async switch(id: string, appId: AppId): Promise { return await invoke("switch_provider", { id, app: appId }); }, async importDefault(appId: AppId): Promise { return await invoke("import_default_config", { app: appId }); }, async updateTrayMenu(): Promise { return await invoke("update_tray_menu"); }, async updateSortOrder( updates: ProviderSortUpdate[], appId: AppId, ): Promise { return await invoke("update_providers_sort_order", { updates, app: appId }); }, async onSwitched( handler: (event: ProviderSwitchEvent) => void, ): Promise { return await listen("provider-switched", (event) => { const payload = event.payload as ProviderSwitchEvent; handler(payload); }); }, };