export const asObject = (value) => (value && typeof value === 'object' ? value : null); export const asNonEmptyString = (value) => { if (typeof value !== 'string') return null; const trimmed = value.trim(); return trimmed ? trimmed : null; }; export const toNumber = (value) => { if (typeof value === 'number' && Number.isFinite(value)) { return value; } if (typeof value === 'string') { const parsed = Number(value); return Number.isFinite(parsed) ? parsed : null; } return null; }; export const toTimestamp = (value) => { if (!value) return null; if (typeof value === 'number') { return value < 1_000_000_000_000 ? value * 1000 : value; } if (typeof value === 'string') { const parsed = Date.parse(value); return Number.isNaN(parsed) ? null : parsed; } return null; }; export const normalizeTimestamp = (value) => { if (typeof value !== 'number') return null; return value < 1_000_000_000_000 ? value * 1000 : value; }; export const resolveWindowSeconds = (limit) => { const ZAI_TOKEN_WINDOW_SECONDS = { 3: 3600 }; if (!limit || !limit.number) return null; const unitSeconds = ZAI_TOKEN_WINDOW_SECONDS[limit.unit]; if (!unitSeconds) return null; return unitSeconds * limit.number; }; export const resolveWindowLabel = (windowSeconds) => { if (!windowSeconds) return 'tokens'; if (windowSeconds % 86400 === 0) { const days = windowSeconds / 86400; return days === 7 ? 'weekly' : `${days}d`; } if (windowSeconds % 3600 === 0) { return `${windowSeconds / 3600}h`; } return `${windowSeconds}s`; };