import { ModelProvider, StoreKey, } from "../constant"; import { getClientConfig } from "../config/client"; import { createPersistStore } from "../utils/store"; import { clientUpdate } from "../utils"; import ChatGptIcon from "../icons/chatgpt.png"; import Locale from "../locales"; import { ClientApi } from "../client/api"; const ONE_MINUTE = 60 * 1000; const isApp = !!getClientConfig()?.isApp; function formatVersionDate(t: string) { const d = new Date(+t); const year = d.getUTCFullYear(); const month = d.getUTCMonth() + 1; const day = d.getUTCDate(); return [ year.toString(), month.toString().padStart(2, "0"), day.toString().padStart(2, "0"), ].join(""); } type VersionType = "date" | "tag"; async function getVersion(type: VersionType) { // GitHub API calls removed - return current version return type === "date" ? getClientConfig()?.commitDate : getClientConfig()?.version; } export const useUpdateStore = createPersistStore( { versionType: "tag" as VersionType, lastUpdate: 0, version: "unknown", remoteVersion: "", used: 0, subscription: 0, lastUpdateUsage: 0, }, (set, get) => ({ formatVersion(version: string) { if (get().versionType === "date") { version = formatVersionDate(version); } return version; }, async getLatestVersion(force = false) { const versionType = get().versionType; let version = versionType === "date" ? getClientConfig()?.commitDate : getClientConfig()?.version; set(() => ({ version })); const shouldCheck = Date.now() - get().lastUpdate > 2 * 60 * ONE_MINUTE; if (!force && !shouldCheck) return; set(() => ({ lastUpdate: Date.now(), })); try { const remoteId = await getVersion(versionType); set(() => ({ remoteVersion: remoteId, })); // Tauri notification removed - web only version console.log("[Got Upstream] ", remoteId); } catch (error) { console.error("[Fetch Upstream Commit Id]", error); } }, async updateUsage(force = false) { // only support openai for now const overOneMinute = Date.now() - get().lastUpdateUsage >= ONE_MINUTE; if (!overOneMinute && !force) return; set(() => ({ lastUpdateUsage: Date.now(), })); try { const api = new ClientApi(ModelProvider.GPT); const usage = await api.llm.usage(); if (usage) { set(() => ({ used: usage.used, subscription: usage.total, })); } } catch (e) { console.error((e as Error).message); } }, }), { name: StoreKey.Update, version: 1, }, );