Konco adalah platform terpadu untuk mengelola layanan sewa akun iklan Facebook (Facebook Ads Whitelist Service). Sistem ini dirancang untuk agensi dan media buyer dalam mengelola inventaris Business Manager (BM), akun iklan, kampanye, alokasi spend cap, tagihan/invoice, sistem tiket real-time, hingga struktur tim multi-user dengan hak akses granular.
Konco terdiri dari dua repository yang beroperasi sebagai satu produk:
| Repo | Peran | Stack |
|---|---|---|
dazo-whitelist | Web app / SaaS — Member Portal, Admin Portal, billing, invoicing, team, tickets, Livewire UI | Laravel 10 + Livewire 2.x + Bootstrap 4 + CoreUI 5 + Reverb (WebSocket) |
dazo-whitelist-api | Dedicated Meta Marketing API engine — Facebook OAuth token lifecycle, Graph API v20.0, import massal BM/Ad Accounts, mutasi spend cap | Laravel 10 + Passport + facebook/php-business-sdk ^20.0 + Queue |
Arsitektur ekosistem
┌────────────────────────────────────────────────────────────────────────┐
│ DAZO-WHITELIST (Konco Web) │
│ Frontend Web App / SaaS (Port 8000) │
│ │
│ • Member Portal (Ad Manager, Invoices, Team, Tickets, Topup) │
│ • Admin Portal (Stock BM/Ads, Approvals, Users, System Configs) │
│ • Multi-Guard Auth (admin / web) + Google 2FA │
│ • Livewire 2.x + CoreUI/Bootstrap + Laravel Reverb (WebSockets) │
│ • Payment Gateway (MonitPay) + Billing & Invoicing (dompdf/Excel) │
└───────────────────────────────────┬────────────────────────────────────┘
│
REST API via GuzzleHTTP
(RSA 2048-bit Signature + Passport Bearer Token)
│
┌───────────────────────────────────▼────────────────────────────────────┐
│ DAZO-WHITELIST-API (Port 8081) │
│ Dedicated Meta Marketing API Engine │
│ │
│ • Facebook OAuth Token Lifecycle & Refresh Automation │
│ • Facebook Graph / Marketing API SDK (v20.0) Integration │
│ • BM & Ad Account Chunked Importer (Background Queue Jobs) │
│ • Meta Graph Mutations (Budget, Status ACTIVE/PAUSED) │
│ • Spend Cap Topup / Deduct / Withdraw / Transfer Balance │
│ • Batch Insights Fetching & Partnership Verification │
└───────────────────────────────────┬────────────────────────────────────┘
│
Meta Graph API (v20.0)
│
▼
🌐 FACEBOOK / META SERVERSHubungan antar repo:
- Separation of Concerns —
dazo-whitelistberfokus pada UX, business logic, billing, role management, invoicing;dazo-whitelist-apiberfokus pada koneksi intensif ke Facebook Graph API, manajemen access token jangka panjang, sinkronisasi stok akun massal, dan mutasi budget/status kampanye. - Koneksi terstandar —
dazo-whitelistmemanggil endpoint API via wrapper classApp\Src\MyApidanApp\Src\FacebookApi. Autentikasi memadukan Passport OAuth2 Bearer Token dengan tanda tangan digital RSA SHA-256 (x-client-key,x-timestamp,x-signature). Sistem auto-refresh token 401 transparan — bila token kedaluwarsa, client otomatis minta token baru dan mengulang request. - Verifikasi signature di controller, bukan middleware — RSA diverifikasi di dalam
ApplicationController::token&check. Middlewaremyapihanya memvalidasi kecocokan headerpublic-keydenganpublic_keyuser terautentikasi.
Stack teknologi
dazo-whitelist (Web App)
| Lapisan | Teknologi |
|---|---|
| Backend | Laravel 10.x (PHP ^8.1) |
| Frontend engine | Livewire 2.10, Alpine.js, Blade |
| UI kit | CoreUI 5.x, Bootstrap 4.x, Sass, Vite |
| Realtime | Laravel Reverb, Laravel Echo, Pusher JS |
| RBAC | Spatie Laravel Permission 5.9 |
| Payment | MonitPay integration, Duitku SDK (route nonaktif) |
| Export | barryvdh/laravel-dompdf, maatwebsite/excel |
| Facebook SDK lokal | facebook/graph-sdk ^5.1 (wrapper; Graph v20.0 dilayer oleh API engine) |
| Database | PostgreSQL (default) / MySQL |
| Live support | Crisp Chat SDK |
| 2FA | pragmarx/google2fa-laravel |
dazo-whitelist-api (Backend Engine)
| Lapisan | Teknologi |
|---|---|
| Backend | Laravel 10.x (PHP ^8.1) |
| Meta SDK | facebook/php-business-sdk ^20.0 |
| API auth | Laravel Passport 12.3 + RSA Key Validation |
| API docs | Dedoc Scramble (dedoc/scramble ^0.11) |
| Background jobs | Laravel Queue Worker, Database Queue |
| HTTP client | GuzzleHTTP ^7.2 |
| Database | MySQL / MariaDB |
Modul bisnis
| Modul | Cakupan |
|---|---|
| Ads Manager | Hierarki Campaigns → Ad Sets → Ads, kontrol status ACTIVE/PAUSED, adjust budget, insight performa |
| Stock BM & Ad Accounts | Import massal dari Facebook Graph API, monitoring limit kredit, timezone, currency, status kesehatan |
| Order & Subscription | Siklus langganan sewa akun — reminder H-7/H-3/H-1, grace period 4 hari, auto-deactivation |
| Spend Cap & Balance | Top up spend cap via payment gateway, transfer balance antar-akun, withdraw/refund |
| Admin Request Approval | Workflow persetujuan: akun baru, topup, transfer, withdraw, refund, rename, share pixel |
| Billing & Invoice | Riwayat transaksi, download invoice PDF |
| Team & Permission | Multi-user workspace, roles & permissions granular per tim |
| Ticketing & Live Chat | Tiket bantuan + live chat real-time via Reverb + Crisp widget |
| Coupon & Discount | Voucher potongan harga dengan kuota, masa berlaku, target member |
| Schedule & Monitor | Cron harian/mingguan: reminder expiry, sync kampanye, monitor Meta, sync MonitPay |
Konsep inti
| Konsep | Ringkasan |
|---|---|
| UUID Primary Key | Seluruh tabel utama memakai UUIDv4 via trait App\Traits\UUID — mencegah ID enumeration attack |
| Multi-Guard Auth | Guard admin (admin portal) + guard web (member portal), keduanya wajib 2FA |
| RSA Handshake | dazo-whitelist sign payload dengan private key → dazo-whitelist-api verify dengan public key di tabel applications → terbitkan Passport token |
| Siklus Langganan | EXPIRED_BEFORE=7 (reminder), EXPIRED_AFTER=4 (grace); command cron:ads-expired tiap menit |
| Token Refresh Loop | MyApi::request tangkap 401 → panggil get_token() (sign + tukar) → simpan di tabel configs → retry request original |
| Service Layer | Business logic di app/Services/ (OrderService, PaymentService, AdminRequestService, TeamService, PermissionService, MonitpayService); controllers tetap thin |
Yang TIDAK boleh diubah tanpa koordinasi
| Area | Lokasi |
|---|---|
| Payload RSA signature | App\Src\MyApi::get_token (client) ↔ ApplicationController::token (server) — `implode(’ |
| Header handshake | x-client-key, x-timestamp, x-signature, Authorization: Bearer |
| Passport token storage | Tabel configs (kolom api_token) di dazo-whitelist |
| Public key client | storage/rsa_keys/public_key.pem (client) ↔ kolom public_key di tabel applications (server) |
| Meta Graph version | FACEBOOK_GRAPH_VERSION=v20.0 (di API engine) |
Langkah berikutnya
- Baru mulai? Baca Setup Environment — dua file
.envdan RSA keys wajib disiapkan. - Sudah punya env? Lanjut ke Local Development — urutan starting kedua service.
- Akan deploy? Wajib baca Deployment — branch produksi adalah
production, self-hosted runner. - Engineer baru direkomendasikan baca Auth & Security sebelum menyentuh komunikasi antar-service.
- Butuh detail endpoint API engine? Lihat API Reference.