01Tizim xaritasi#
Mac ilovasi qurilma bilan USB orqali ishlaydi. Nginx HTTPS trafikni API, Admin va public saytga yo‘naltiradi. API PostgreSQL va private R2 bilan ishlaydi; firmware fayli ruxsat berilgan qisqa muddatli URL orqali Desktop’ga yuklanadi.
API alohida mikroservislar to‘plami emas: autentifikatsiya, qurilmalar, pairing, release va biznes modullari bitta NestJS deploy tarkibida. Hozirgi topologiyada Redis, xabarlar brokeri yoki Kubernetes talab qilinmaydi.
02Komponentlar mas’uliyati#
| Qatlam | Vazifa | Chegara |
|---|---|---|
| macOS | Vazifalar, fokus, odatlar va qaydlar; USB transport; firmware tekshiruvi. | SwiftUI / AppKit. Mahalliy ma’lumot va Keychain. |
| ESP32-S3 | Display, touch, animatsiya, identity proof va OTA flash yozish. | Flash yozish qarori qurilmada qoladi. |
| Cloud API | Pairing, inventory, ownership, firmware siyosati, heartbeat va audit. | DTO validatsiya, autentifikatsiya va rol nazorati. |
| Admin | Operatsion boshqaruv, release lifecycle, mijoz va buyurtmalar. | API orqali ishlaydi; DB credential olmaydi. |
| PostgreSQL | Qurilma va cloud operatsiyalarining asosiy ma’lumotlar bazasi. | Prisma sxemasi, constraint va tranzaksiyalar. |
| R2 | Tekshirilgan immutable firmware va release artefaktlari. | Private bucket; vaqtinchalik signed download. |
03Mahalliy ish va ma’lumotlar#
Vazifa, odat va qaydlar native ilovaning mahalliy persistence qatlamida saqlanadi. Hozirgi cloud API’da bu shaxsiy kontent uchun umumiy sinxronlash kontrakti yo‘q. Uni ko‘p qurilmali cloud-sync mavjud deb talqin qilish to‘g‘ri emas.
- Internet: pairing, cloud holat tekshiruvi va yangi firmware yuklash uchun kerak.
- USB: Desktop–qurilma buyruqlari, identity proof va normal OTA transporti.
- Keychain: Mac installation private key va pairing credential uchun ajratilgan.
- Mahalliy persistence encryption yoki to‘liq disk encryption kafolati emas; bu host siyosatiga bog‘liq.
04Ishonch chegaralari va pairing#
Server 5 daqiqalik challenge beradi. Qurilma nonce, serial va installation ID bo‘yicha HMAC proof yaratadi. API bir martalik claim code va proof’ni tekshiradi, so‘ng pairing credential beradi.
| Material | Himoya |
|---|---|
| Device secret | Qurilma identity namespace’da; serverda AES-256-GCM bilan shifrlangan. Normal runtime protokoli uni eksport qilmaydi. |
| Claim code | Bazaga pepper bilan HMAC hash yoziladi; pairing’dan keyin ishlatilgan deb belgilanadi. |
| Admin sessiyasi | Tasodifiy token, serverda hash; Secure / HttpOnly / SameSite Strict cookie. |
| Firmware signing key | Offline/lokal qoladi. Server, sayt va R2 private signing key olmaydi. |
05Asosiy ma’lumotlar modeli#
Customer qurilmaga ownership yozuvi orqali bog‘lanadi. Bitta qurilmada bir nechta Mac installation bo‘lishi mumkin. FirmwareInstallation qurilma va release juftligiga tegishli bo‘lib, natijani saqlaydi.
Unique constraint’lar serial, device–installation va device–release juftliklaridagi dublikatlarni cheklaydi. Release kaliti version + build + hardware + channel’dan iborat. Heartbeat so‘nggi holatni Device’da yangilaydi, tarixiy yozuvlarni esa 15 daqiqalik intervalda saqlaydi.
06Masshtablash va tekshiruv chegarasi#
Joriy production tekshiruvida bitta host, Nginx va Docker Compose servislar kuzatildi. Bu kichik operatsion footprint beradi, lekin ko‘p zonali high availability yoki autoscaling kafolati emas.
- Keyingi masshtab bosqichi: API replikalari, shared rate-limit holati, managed/replicated DB va restore sinovlari.
- Mustaqil pentest, compliance sertifikati, SLA yoki DR mashqi o‘tkazilgan deb tasdiqlanmagan.
- Dependency xavfsizlik tekshiruvida kuzatilgan topilmalar patch va qayta test orqali yopilishi kerak.