Adapter contract
Translator note: machine-translated baseline. Needs human review by a native UK speaker. EN source is canonical.
Інтерфейс PlatformAdapter — це seam між casinocrm.io і вашою casino платформою. Кожна casino платформа має свій власний bonus engine, KYC flow і webhook scheme; ми не намагаємось бути API кожної платформи — ми надаємо стабільний контракт, який платформи реалізують один раз.
Для повної специфікації див. Adapter integration. Ця сторінка — концептуальний огляд.
Інтерфейс
interface PlatformAdapter {
readonly slug: string; // 'acme-prod', 'zero', ...
readonly displayName: string;
readonly capabilities: AdapterCapabilities; // декларує, що підтримує
bonus?: BonusOps; // grantBonus, cancelBonus, getBonusStatus
kyc?: KYCOps; // initiateKYC, queryKYCStatus, updateKYCStatus
rg?: ResponsibleGamingOps; // setSelfExclusion, setLimit, тощо
wallet?: WalletOps; // getBalance, snapshot streams
}
Кожен ops bag — опційний. Adapter, який не підтримує KYC, просто залишає kyc undefined — registry не маршрутизує жодних KYC ops до нього.
Capabilities
Кожен adapter декларує статичні capabilities:
interface AdapterCapabilities {
verticals: readonly Vertical[]; // casino, sportsbook, ...
bonus: { issue, cancel, query_status } // booleans
kyc: { initiate, query, update, webhooks }
rg_features: readonly RGFeature[];
wallet: { balance_pull, balance_push }
signature_scheme: "hmac_sha256" | "hmac_sha512" | "rsa";
}
Effective capabilities = tenant.config ∩ adapter.capabilities. Якщо tenant хоче deposit_limit_daily, але adapter не підтримує, feature падає до CRM-only enforcement (capability_mock pattern) — limit трекається в CRM, але платформі не повідомляється.
Bidirectional flow
Кожна domain (bonus / KYC / RG) дотримується того самого pattern:
CRM → Adapter (outbound):
- Sync HTTP виклик з bonus engine / admin action.
- Повертає
platform_*_id, який ми persist для correlation.
Adapter → CRM (inbound):
- Webhook hits
POST /v1/adapters/:slug/webhooks/{bonus,kyc}-events. - HMAC-SHA256 над
<timestamp>.<body>(Stripe-сумісне). - Idempotency dedupe через
webhook_events_processed (adapter_slug, event_id). - State sync: lifecycle події оновлюють domain state під RLS context.
Adapter Zero — reference
Adapter Zero — це in-process synthetic adapter, який ми shipимо для testing + demos. Він декларує maximum capabilities (кожен vertical, кожен KYC flow, кожен RG feature), тож тести вправляють весь surface. Real-platform adapters декларують вужчі capabilities — те, що платформа реально підтримує.
Adapter Zero грає обидва боки: коли CRM викликає adapter.bonus.grantBonus(), AdapterZero ставить synthetic webhook назад через receiver через fastify.inject(). Ті самі code paths, що real HTTP roundtrip — HMAC verification, idempotency, state sync — без мережі.
Додавання нового adapter
Три кроки:
- Створіть
services/adapters/<your-platform>/з мапінгом канонічних подій (події вашої платформи → канонічні події casinocrm.io). - Реалізуйте інтерфейс
PlatformAdapterвapps/api/src/lib/bonus-adapter-<your-platform>.ts(або своїй власній службі). - Зареєструйте adapter по slug в
bonus-adapter-registry.ts+ додайте HMAC secret resolver вbonus-webhooks.ts.
Це все. Повний adapter — це ~200-400 рядків TypeScript.