Email Infratuzilmasi
OutlookID
O'z serverida joylashtiriladigan email xizmati — bitta ilova Microsoft Graph orqali ko'plab foydalanuvchilarning Outlook pochtalarini o'qiydi, yuboradi va tartiblaydi, har bir yangi xat uchun imzolangan webhook yuboradi. Fastify, Drizzle ORM, PostgreSQL va pg-boss navbati bilan qurilgan.
Umumiy ma'lumot
Ilovani ko'plab foydalanuvchilarning Outlook pochtasiga ulash har foydalanuvchi uchun OAuth boshqarishni, tokenlarni aylantirishni, Microsoft Graph obunalarini yangilashni va har bir yangi emailni voqea sifatida ishonchli yetkazishni anglatadi. OutlookID barcha bu sanitarik ishlarni boshqaradi, shuning uchun mahsulot jamoasi buni qilmaydi — ular bir marta ulanadi va undan keyin har bir yangi xabarda imzolangan webhook oladi.
Men nima qildim
To'liq tizimni noldan loyihalashtirdim va yaratdim — OAuth oqimlari, token shifrlash, Microsoft Graph obuna hayot tsikli, webhook yetkazish quvuri, ma'lumotlar bazasi sxemasi va Docker joylash.
Testcontainers yordamida haqiqiy vaqtinchalik Postgres nusxalariga qarshi integratsiya testlarini va barcha kriptografik va token mantiqi uchun birlik testlarini yozdim.
README, OpenAPI spetsifikatsiyasi va joylash qo'llanmasini yozdim — shuning uchun boshqa jamoa manba kodni o'qimay uni olib, ishga tushira oladi.
Arxitektura
Pastki ilova foydalanuvchi uchun OAuth oqimini boshlash uchun yagona endpointni chaqiradi. OutlookID qayta yo'naltirish boshqaradi, autentifikatsiya kodini almashinadi, tokenlarni shifrlaydi va o'sha pochtada Microsoft Graph obunasini darhol o'rnatadi. Undan keyin Graph o'zgarish bildirishnomalarini OutlookID ga suradi, u ularni tekshiradi va yetkazish ishini navbatga qo'yadi. Ish tizimi dead-letter navbatiga o'tishdan oldin 6 urinishgacha eksponensial backoff bilan qayta urinadi.
Ichki tuzilishi
OAuth tokenlari har bir token uchun tasodifiy boshlang'ich vektor bilan AES-256-GCM yordamida dam olishda shifrlanadi — shuning uchun hatto kimdir ma'lumotlar bazasini tortib olsa ham, ishlaydigan hisoblar o'rniga shifrlangan matn oladi.
Bir vaqtdagi token yangilash birlashtiriladi: agar ikkita so'rov tokeni muddati o'tgan paytda bir xil pochtaga duch kelsa, ular poyga o'rniga bitta yangilash aylanmasini baham ko'radi. Bu ko'p ijarali tizimlarda paydo bo'ladigan disk raskach qilish qiyin qo'sh yangilash xatosini oldini oladi.
Chiquvchi webhooklar Stripe-uslubi HMAC sarlavhasi bilan imzolanadi — pastki ilova har bir yetkazish haqiqiy va o'zgartirilmaganligini tasdiqlashi mumkin, va dead-letter boshqaruvi bilan eksponensial backoff hech bir voqea doimiy ravishda yo'qolmasligini ta'minlaydi.
Microsoft'ning MSAL kutubxonasi standart natijasida refresh tokenlarni oshkor qilmaydi — shuning uchun hisob IDsi bo'yicha sirni ajratib olish uchun uning ichki token keshini deserializatsiya qilishim kerak edi. Zarur vaqtinchalik yechim, yaxshi testlangan va hujjatlashtirilgan.
Men nimani o'rgandim
Infratuzilma kutubxonalari (MSAL kabi) faqat chekka holatlarda o'zini namoyon qiladigan hujjatlashtirilmagan xatti-harakatlarga ega — manba kodini o'qish token keshlash bilan nima sodir bo'layotganini tushunishning yagona yo'li edi.
Dead-letter navbati va qayta urinish admin endpointlarini boshdanoq qurish — ularni haqiqiy muvaffaqiyatsizlikdan keyin qo'shish o'rniga — to'g'ri qaror edi. Sizga kerak bo'lishidan oldin kuzatuvchanlik kerak.
Texnologiyalar
Backend
- Node.js 20+
- TypeScript 5
- Fastify 4
- Zod
- Pino
Ma'lumotlar va Navbat
- PostgreSQL 14+
- Drizzle ORM
- drizzle-kit
- pg-boss 9
Integratsiyalar
- @azure/msal-node 2
- @microsoft/microsoft-graph-client 3
- Google OAuth2
- Gmail API
- Node.js crypto
Infratuzilma va Testlash
- Docker
- Caddy
- Vitest
- Testcontainers
- nock
- pnpm