import { Router } from 'express'; import { AuthManager } from '../auth/index.ts'; import { fetchGraph } from '../utils/index.ts'; import { acquireAppToken } from '../helper/msal.ts'; export default (auth?: AuthManager) => { const router = Router(); router.get('/', async (req, res) => { try { let token: string; try { token = await acquireAppToken(req, auth); } catch (err: any) { return res.status(401).json({ error: 'Failed to acquire access token', message: err?.message ?? String(err) }); } // Accept both camelCase and lowercase query parameter names const start = (req.query.startDateTime ?? req.query.startdatetime ?? req.query.start) as string; const end = (req.query.endDateTime ?? req.query.enddatetime ?? req.query.end) as string; if (!start || !end) { return res.status(400).json({ error: 'Missing required query parameters: startDateTime and endDateTime', }); } console.log(`📅 Fetching calendar view from ${start} to ${end}`); // token is acquired above // Build the endpoint with query parameters // Graph expects `startDateTime` / `endDateTime` casing in the query const endpoint = `/me/calendarview?startDateTime=${encodeURIComponent( start )}&endDateTime=${encodeURIComponent(end)}`; const calendarData = await fetchGraph(endpoint, token); res.json(calendarData); } catch (err: any) { console.error('Calendar view error:', err.message); res.status(500).json({ error: err.message }); } }); return router; };