/** Classify authoritative rejection separately from temporary server failures. * @param {number} status HTTP response status. */ export function sessionResponseState(status) { if (status === 401 || status === 403) return 'revoked'; return status >= 200 && status < 300 ? 'valid' : 'unavailable'; } /** Milliseconds before each retry; attempt zero is the immediate first retry. * @param {number} attempt Zero-based retry index. */ export function sessionRetryDelay(attempt) { return [0, 3000, 10000, 15000][attempt] ?? 30000; }