| import { flag } from 'flags/next'; | |
| import { getAll } from '@vercel/edge-config'; | |
| export type IMaintenanceNotice = | |
| | { | |
| enabled: true; | |
| startTime: Date; | |
| endTime: Date; | |
| } | |
| | { | |
| enabled: false; | |
| startTime?: undefined; | |
| endTime?: undefined; | |
| }; | |
| export const maintenanceNoticeFlag = flag({ | |
| key: 'maintenance-notice', | |
| async decide() { | |
| try { | |
| if (!process.env.EDGE_CONFIG) { | |
| console.warn('Edge config is not set'); | |
| return { enabled: false } as const; | |
| } | |
| const flags = await getAll([ | |
| 'maintenance-notice_start-time', | |
| 'maintenance-notice_end-time', | |
| 'maintenance-notice_enabled', | |
| ]); | |
| if (!flags['maintenance-notice_enabled']) { | |
| return { enabled: false } as const; | |
| } | |
| const startTime = new Date(flags['maintenance-notice_start-time']); | |
| const endTime = new Date(flags['maintenance-notice_end-time']); | |
| if (isNaN(startTime.getTime()) || isNaN(endTime.getTime())) { | |
| throw new Error( | |
| `Invalid maintenance notice start or end time: ${flags['maintenance-notice_start-time']} or ${flags['maintenance-notice_end-time']}`, | |
| ); | |
| } | |
| return { | |
| enabled: true, | |
| startTime, | |
| endTime, | |
| } as const; | |
| } catch (cause) { | |
| console.error( | |
| new Error('Failed to get maintenance notice flag', { cause }), | |
| ); | |
| return { enabled: false } as const; | |
| } | |
| }, | |
| }); | |