import dayjs from 'dayjs' import { initializeAllStores } from '@/src/stores/store-initializer' const LAST_TRIGGER_KEY = 'lastTrigger' const ALARM_DELAY_MINUTES = 0.5 // const ALARM_DELAY_MINUTES = 3 export class CacheCreator { private state: any constructor(state: any) { this.state = state } async fetch(request: Request): Promise { const url = new URL(request.url) if (request.method === 'POST' && url.pathname === '/schedule') { const now = Date.now() await this.state.storage.put(LAST_TRIGGER_KEY, now) const alarmAt = dayjs(now).add(ALARM_DELAY_MINUTES, 'minute').valueOf() await this.state.storage.setAlarm(alarmAt) return new Response('OK') } if (request.method === 'POST' && url.pathname === '/clear') { await this.state.storage.deleteAll() return new Response('OK') } return new Response('CacheCreator ready', { status: 200 }) } async alarm(): Promise { const lastTrigger = await this.state.storage.get(LAST_TRIGGER_KEY) if (!lastTrigger) { return } const threshold = dayjs().subtract(ALARM_DELAY_MINUTES, 'minute') if (dayjs(lastTrigger).isBefore(threshold)) { await initializeAllStores() } } }