/** * Rybbit'e sunucudan olay gönderimi (POST /api/track). Yalnızca sunucu * tarafından çağrılır (lib/odeme.ts) — anahtar NEXT_PUBLIC_ değil. * * Neden sunucu tarafı: ödeme dönüşümü tarayıcıdan gönderilirse reklam * engelleyiciler ve iyzico dönüşünde kapatılan sekmeler yüzünden kaybolur. * Buradan giden kayıt gerçek geliri taşır ve her zaman düşer. * * Env yoksa (dev, self-host anahtarı tanımsız) hiçbir istek yapılmaz. */ const HOST = process.env.RYBBIT_HOST; const SITE_ID = process.env.RYBBIT_SITE_ID; const API_KEY = process.env.RYBBIT_API_KEY; export type SunucuOlayAdi = "odeme_tamamlandi"; export async function sunucuOlayi( ad: SunucuOlayAdi, { kullaniciId, pathname = "/", ozellikler, }: { kullaniciId?: string; pathname?: string; ozellikler?: Record; } = {}, ): Promise { if (!HOST || !SITE_ID || !API_KEY) return; try { await fetch(`${HOST}/api/track`, { method: "POST", headers: { Authorization: `Bearer ${API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ site_id: SITE_ID, type: "custom_event", event_name: ad, pathname, ...(kullaniciId ? { user_id: kullaniciId } : {}), ...(ozellikler ? { properties: JSON.stringify(ozellikler) } : {}), }), // Analitik ödeme akışını asla geciktirmesin/bloklamasın signal: AbortSignal.timeout(3000), }); } catch { // Yut: analitik hatası ödeme sonucunu etkilemez } }