from __future__ import annotations import logging from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.triggers.interval import IntervalTrigger from src.infrastructure.vault import JwtKeyStore logger = logging.getLogger(__name__) def start_jwt_keys_scheduler(store: JwtKeyStore, *, refresh_seconds: int = 3600) -> AsyncIOScheduler: scheduler = AsyncIOScheduler() scheduler.add_job( store.refresh, trigger=IntervalTrigger(seconds=refresh_seconds), id="jwt_keys_refresh", replace_existing=True, max_instances=1, coalesce=True, misfire_grace_time=60, ) scheduler.start() logger.info("JWT keys scheduler started (interval=%s seconds)", refresh_seconds) return scheduler