- OnlineMeetings API + Application Access Policy match users by OID;
UPN routing returns 404. Resolve UPN -> OID before all Graph calls.
- Transcript content endpoint rejects default Accept '*/*';
add ?$format=text/vtt + Accept header + responseType('text').
- aiInsights moved to /copilot/users/{oid}/onlineMeetings/{mid}/aiInsights (Beta).
List call returns metadata only; fetch detail per insight for
meetingNotes/actionItems/mentions.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Extract buildAuthenticatedClient() helper to eliminate duplicate MSAL token
acquisition logic in getCalendarEvents and getEventById. Add eventId validation
and error wrapping with cause chain in getEventById.
New tests verify eventId type and empty-string checks.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>