/** * Quota cache that survives route switches. */ import { create } from 'zustand'; import type { AntigravityQuotaState, ClaudeQuotaState, CodexQuotaState, GeminiCliQuotaState } from '@/types'; type QuotaUpdater = T | ((prev: T) => T); interface QuotaStoreState { antigravityQuota: Record; codexQuota: Record; geminiCliQuota: Record; claudeQuota: Record; setAntigravityQuota: (updater: QuotaUpdater>) => void; setCodexQuota: (updater: QuotaUpdater>) => void; setGeminiCliQuota: (updater: QuotaUpdater>) => void; setClaudeQuota: (updater: QuotaUpdater>) => void; clearQuotaCache: () => void; } const resolveUpdater = (updater: QuotaUpdater, prev: T): T => { if (typeof updater === 'function') { return (updater as (value: T) => T)(prev); } return updater; }; export const useQuotaStore = create((set) => ({ antigravityQuota: {}, codexQuota: {}, geminiCliQuota: {}, claudeQuota: {}, setAntigravityQuota: (updater) => set((state) => ({ antigravityQuota: resolveUpdater(updater, state.antigravityQuota) })), setCodexQuota: (updater) => set((state) => ({ codexQuota: resolveUpdater(updater, state.codexQuota) })), setGeminiCliQuota: (updater) => set((state) => ({ geminiCliQuota: resolveUpdater(updater, state.geminiCliQuota) })), setClaudeQuota: (updater) => set((state) => ({ claudeQuota: resolveUpdater(updater, state.claudeQuota) })), clearQuotaCache: () => set({ antigravityQuota: {}, codexQuota: {}, geminiCliQuota: {}, claudeQuota: {} }) }));