M365 source: Outlook + Teams + OneDrive через Graph API
## Что это
Microsoft 365 integration через единый OAuth flow (Azure AD) с scopes `Mail.Read`, `Calendars.Read`, `Files.ReadWrite`, `ChatMessage.Read`. Один OAuth — три source-адаптера: Outlook (mail+calendar), OneDrive (files), Teams (chats+channels). Webhook subscription через Graph subscriptions с auto-renewal каждые 3 дня (TTL 4230 мин max).
Graph throttling honor: при HTTP 429 экспоненциальный backoff с jitter, max 60s. Batch API для bulk reads (до 20 requests/batch). All requests labeled `User-Agent: ROX.ONE/v1`.
Компоненты: `@rox-one/shared/sources/M365`, общая Graph-client библиотека. Token refresh через `@rox-one/shared/auth`.
## Зачем
Для enterprise-customers M365 — стандартный stack. Полный охват Outlook+Teams+OneDrive через один OAuth снижает onboarding-friction до одного клика и закрывает 80% контекста knowledge worker'а в большой организации.
## Источники вдохновения
- [wasp-lang/open-saas](https://github.com/wasp-lang/open-saas) — multi-provider OAuth (Google, Slack, MS)
- [anomalyco/openauth](https://github.com/anomalyco/openauth) — OAuth2/OIDC provider с token-refresh patterns
- [InsForge/InsForge](https://github.com/InsForge/InsForge) — all-in-one backend с multi-tenant auth
## 🔗 Linear
- [PZD-438](https://linear.app/kuhjie/issue/PZD-438) — backing ticket