Integrations
Every credential-backed integration is configured at runtime, through
the standalone Super Admin console (apps/superadmin, not linked from
anywhere else — bookmark its URL) → 🧩 Integrations. No redeploy needed to
go from "not set up" to live once a real account exists.
Secret fields (API keys, webhook secrets, tokens) are AES-GCM encrypted
with a SECRET_STORE_KEY Worker secret before they're written to KV — a
raw KV read never hands over plaintext credentials. Non-secret fields
(merchant ID, which branch a channel posts to, commission %) are stored
plain. Every save defaults to sandbox: true.
| Slot | Needs | Status |
|---|---|---|
bakong | Bakong merchant account | Built and verified (webhook path uses the BAKONG_WEBHOOK_SECRET env secret, not this slot directly — see the main README for why) |
aba_payway | ABA PayWay merchant account | Built and verified live with test credentials (SHA-512 field-concatenation signing, distinct from Bakong's bearer-token flow) |
grabfood | GrabFood partner API access | Built and verified live — HMAC webhook, SKU mapping, dedup, KDS push |
nham24 | Nham24 API access | Same pattern as GrabFood |
sms | An SMS gateway account | Sender abstraction built (ConsoleSms/HttpSms), no customer-facing OTP flow calls it yet |
ga4 | A GA4 property | Built and verified live — gtag.js injected into the customer app when a measurement ID is set |
meta_pixel | A Meta Pixel ID | Same pattern as GA4 |
sentry | A Sentry account | Built (Store API POST from the Worker's global error handler), not live-verified — no real Sentry account in this environment |
A purchased custom domain (branded URLs instead of *.pages.dev/
*.workers.dev) is Cloudflare DNS configuration only — no code, no SA
console slot needed.