Some checks are pending
CI - Production Readiness / Verify (push) Waiting to run
4.5 KiB
4.5 KiB
WhatsApp Inbox Platform – Dokumentasi Kode
Dokumen ini menjelaskan arsitektur dan alur utama aplikasi supaya mudah dipahami saat onboarding, debug, atau audit.
1. Gambaran Sistem
Stack yang dipakai:
- Frontend + backend: Next.js 15 (App Router).
- Database: PostgreSQL + Prisma ORM.
- Autentikasi custom: cookie session berbasis payload ter-tanda-tangan.
- Job worker: campaign retry worker berbasis script Node.
- Proses produksi: PM2 + Nginx sebagai reverse proxy.
- Logging dan health check: endpoint internal + script operasi.
2. Struktur Folder Penting
app/
Himpunan route Next.js, termasuk endpoint autentikasi dan halaman admin.
lib/
Modul inti:
- auth/session.
- prisma client.
- util i18n.
- request url utility.
- audit & rate limit.
prisma/
Skema dan migrasi database.
scripts/
Operasional dan maintenance:
- ops scripts.
- job scripts.
public/
Asset statis.
3. Alur Autentikasi
3.1 Login
- POST ke
/auth/login. - Validasi rate limit, credential, dan status user.
- Jika valid, session dibuat dan disimpan di cookie
wa_inbox_session. - Cookie diset dengan:
httpOnly.sameSite: "lax".securesesuai env/protocol.domaindariSESSION_COOKIE_DOMAINbila di-set.maxAgedari nilai session TTL.
- Response diarahkan ke route default sesuai role.
File:
app/auth/login/route.ts
3.2 Middleware Guard
Setiap request (kecuali API) dilewati middleware untuk validasi:
- Mengecek session cookie.
- Redirect ke
/login?next=...jika tidak ada session. - Mengarahkan user ke default path role jika sudah login dan masuk halaman publik tertentu.
- Redirect unauthorized jika role tidak punya akses.
- Menangani locale cookie fallback.
File:
middleware.ts
3.3 Parse Session
Session token dibuat dari payload user lalu ditandatangani dengan HMAC.
Modul inti:
lib/auth.ts
Berisi:
- tipe session.
- validasi role.
- serialisasi/deserialisasi cookie.
- helper konfigurasi session (
getSessionTtlSeconds,getSessionCookieDomain).
4. Konfigurasi Session dan Cookie
4.1 TTL Session
Nilai diambil dari env:
SESSION_TTL_SECONDS(prioritas utama).SESSION_TTL_HOURS(fallback legacy).
Default fallback tetap saat env tidak ada.
4.2 Cookie Hardening
Untuk environment HTTPS/prod:
COOKIE_SECURE=true.SESSION_COOKIE_DOMAIN=web.zappcare.id(jika pakai subdomain).SESSION_COOKIE_DOMAINakan diabaikan untuk localhost/127.0.0.1.
5. Modul dan Script Operasional
5.1 Script Deploy Aman
scripts/ops-safe-restart.sh:
- cek
.env. - install dependency (
npm ci). - build.
- deploy migration Prisma (
npm run db:deploy). - restart/start PM2.
- optional healthcheck.
- save PM2 state.
NPM script:
npm run ops:safe-restart
5.2 Script Verifikasi Session
scripts/ops-session-check.mjs:
- login otomatis via akun health check.
- verifikasi cookie sesi terbit.
- validasi TTL.
- cek akses page protected (
/super-admin) dengan cookie sesi.
NPM script:
npm run ops:session-check
5.3 Dokumentasi Operasional Terkait
ops-runbook.mdproduction-readiness-checklist.md
6. Catatan Debug Umum
Gejala: Kembali ke halaman login setelah klik menu
Penyebab paling umum:
- sesi tidak tersimpan karena cookie
secure/domaintidak cocok. - domain/protocol HTTPS mismatch.
- proses logout tidak sengaja terpicu.
- path/role mismatch pada middleware.
Pengecekan:
- lihat response headers:
X-Auth-SessionX-Auth-Session-Has-CookieX-Auth-Base-Url
- cek cookie di browser devtools (nama
wa_inbox_session, secure/domain/path/maxAge). - cek log aplikasi (
pm2 logs ...+grep AUTH).
Gejala: Loop redirect login (bahasa Inggris / error invalid credential)
Pastikan:
AUTH_SECRETada di env prod.APP_URL/OPS_BASE_URLsesuai domain HTTPS.COOKIE_SECUREsesuai mode.- Nginx tidak strip header
Cookie.
7. Catatan Implementasi Khusus
- Logout flow sudah difokuskan ke request non-prefetch agar tidak terpicu by mistake pada prefetch link.
- Script yang diubah untuk mencegah kegagalan sesi karena navigasi prefetch.
- Penambahan debugging header di middleware/login untuk mempercepat root cause analysis.
8. Dependency Environment Wajib (Ringkas)
DATABASE_URLAUTH_SECRETAPP_URLSESSION_TTL_SECONDSCOOKIE_SECURESESSION_COOKIE_DOMAIN(jika dibutuhkan)WHATSAPP_*,CAMPAIGN_*, dan token internal sesuai fitur aktif.
Lihat juga:
ops-runbook.mdproduction-readiness-checklist.md.env.example