import { ref, computed } from "vue"; export interface RateLimitInfo { sessionRemaining: number | null; ipRemaining: number | null; } export function useAgentRateLimit() { const sessionRemaining = ref(null); const ipRemaining = ref(null); const isBlocked = computed( () => sessionRemaining.value !== null && sessionRemaining.value === 0, ); const isIpBlocked = computed( () => ipRemaining.value !== null && ipRemaining.value === 0, ); const isLimited = computed(() => isBlocked.value || isIpBlocked.value); function updateFromHeaders(headers: Headers) { const sr = headers.get("X-RateLimit-Session-Remaining"); const ir = headers.get("X-RateLimit-Ip-Remaining"); if (sr !== null) sessionRemaining.value = Number(sr); if (ir !== null) ipRemaining.value = Number(ir); } function reset() { sessionRemaining.value = null; ipRemaining.value = null; } return { sessionRemaining, ipRemaining, isBlocked, isIpBlocked, isLimited, updateFromHeaders, reset, }; }