Integrations status
TwistCue v2 ships with the UI and ledger reality for every integration, but some provider-side calls are stubbed (record-only) until you wire them. This page is the honest map.
Legend
Section titled “Legend”- ✅ Live: real provider calls happen. Money moves, videos transcode, pushes deliver.
- 🟡 Live but degraded: happy path works; edge cases stubbed.
- 🔴 Stubbed: the UI + ledger behave correctly, but the provider-side action is a no-op. Enable per instructions below.
Cloudflare Stream: ✅ Live
Section titled “Cloudflare Stream: ✅ Live”- Direct-upload URLs, TUS resumable protocol.
- HMAC-verified webhook.
- Signed HLS playback URLs at play time.
- Auto thumbnail extraction (3 candidates).
- Config:
CF_STREAM_ACCOUNT_ID,CF_STREAM_API_TOKEN,CF_STREAM_WEBHOOK_SECRET.
Cloudflare Images: 🔴 Stubbed
Section titled “Cloudflare Images: 🔴 Stubbed”- Poster and hero image uploads currently write a placeholder
media_assetrow without hitting CF Images. - Enable: wire
CF_IMAGES_ACCOUNT_ID+CF_IMAGES_API_TOKEN, updateMediaService.uploadImage()to call CF Images (see theTODOinmedia.service.ts).
Payments: receive money
Section titled “Payments: receive money”Apple / Google IAP (via RevenueCat): 🟡 Live but degraded
Section titled “Apple / Google IAP (via RevenueCat): 🟡 Live but degraded”- Store purchases route through RevenueCat → webhook → ledger credits.
- Refunds: record-only. Store-side refunds are triggered from the store, not from us. Our record-mode picks up refund events from RevenueCat webhooks and reverses the ledger.
- Config:
REVENUECAT_WEBHOOK_SECRET,REVENUECAT_PROJECT_ID.
Cards (web) via own MID: 🔴 Stubbed
Section titled “Cards (web) via own MID: 🔴 Stubbed”- Payment intent creation is stubbed. Ledger credits do not fire from card charges in v2.
- Enable: wire the MID’s API. Update
PaymentsService.createCardIntent()and the corresponding webhook handler.
dLocal: 🔴 Stubbed
Section titled “dLocal: 🔴 Stubbed”- Payment creation + webhook: schema in place, provider calls are
console.logstubs. - Enable: wire
DLOCAL_LOGIN,DLOCAL_TRANS_KEY,DLOCAL_SECRET_KEY. See dLocal API docs.
pawaPay: 🔴 Stubbed
Section titled “pawaPay: 🔴 Stubbed”- Same shape as dLocal.
- Enable: wire pawaPay credentials.
VAS / DCB via adbilling.me: 🟡 Live but degraded
Section titled “VAS / DCB via adbilling.me: 🟡 Live but degraded”- MSISDN + PIN funnel active on adbilling.me stack.
- Entitlement grant into TwistCue is via a shared endpoint (
/v1/vas/entitle) called by adbilling.me on successful subscribe. Ledger credit fires. - Cancellations flow via the same channel; carrier-level refunds are typically not supported.
Payments: send money (refunds)
Section titled “Payments: send money (refunds)”Refund execution: 🔴 Stubbed for card / dLocal / pawaPay
Section titled “Refund execution: 🔴 Stubbed for card / dLocal / pawaPay”- Refund pipeline (ledger + audit + approvals) is live.
- Provider-side money-out call is stubbed in v2: refunds execute in record-only mode. Manual reconciliation needed until wired.
- Enable per rail:
- Card MID refund endpoint →
PaymentsService.executeRefund_card() - dLocal refund endpoint →
.executeRefund_dlocal() - pawaPay refund endpoint →
.executeRefund_pawapay()
- Card MID refund endpoint →
- Store IAP refunds are record-only by design: Apple/Google refund from their end.
APNs (iOS): 🔴 Stubbed
Section titled “APNs (iOS): 🔴 Stubbed”- Push composer + estimate + scheduler are live.
- Delivery to APNs is stubbed: sends log to console, don’t hit APNs.
- Enable: upload APNs P8 key, set
APNS_KEY_ID,APNS_TEAM_ID,APNS_KEY_PATH,APNS_BUNDLE_ID. WirePushService.sendApns().
FCM (Android): 🔴 Stubbed
Section titled “FCM (Android): 🔴 Stubbed”- Same story.
- Enable: provide FCM service account JSON. Set
FCM_SERVICE_ACCOUNT_PATH.
Analytics
Section titled “Analytics”PostHog: 🔴 Stubbed for embed
Section titled “PostHog: 🔴 Stubbed for embed”- Mobile app emits events to
analytics_eventtable (our own ingest). - PostHog embedded dashboards for non-money charts are planned; UI currently reads from our own rollup tables.
- Enable: provision PostHog project, set
POSTHOG_PROJECT_KEY, add embed URLs to admin analytics pages that are marked “PostHog embed later”.
Auth (WebAuthn): 🔴 Not implemented
Section titled “Auth (WebAuthn): 🔴 Not implemented”- DB columns exist on
admin_usersfor WebAuthn credentials. - Admin login is password-only in v2.
- Enable: phase 2: add WebAuthn registration + verify handlers.
Summary table
Section titled “Summary table”| Integration | Status | Notes |
|---|---|---|
| Cloudflare Stream | ✅ | Live |
| Cloudflare Images | 🔴 | Poster/hero uploads stubbed |
| Apple/Google IAP (RevenueCat) | 🟡 | Purchases live; refunds record-only |
| Cards (web MID) | 🔴 | Stubbed |
| dLocal | 🔴 | Stubbed |
| pawaPay | 🔴 | Stubbed |
| VAS (adbilling.me) | 🟡 | Live via shared endpoint |
| Refund execution (non-store rails) | 🔴 | Record-only |
| APNs | 🔴 | Stubbed |
| FCM | 🔴 | Stubbed |
| PostHog embed | 🔴 | Native charts only in v2 |
| WebAuthn | 🔴 | Phase 2 |
Roadmap priority (for enabling)
Section titled “Roadmap priority (for enabling)”- APNs + FCM: without push, engagement is crippled.
- Card MID: unlocks web checkout (lowest fees).
- dLocal: unlocks EG (Fawry), ID (OVO/DANA), PH (GCash).
- CF Images: better poster/hero pipeline.
- pawaPay: sub-Saharan Africa expansion.
- PostHog embed: nice-to-have analytics UI.
- WebAuthn: nice-to-have admin security.