## ARENA BATTLE — RİSK, SİTE KİMLİĞİ VE MARKA AYARLARI

Bu rehber, oyuncu kimliği ve bağlantı verilerinin nasıl gösterildiğini, risk kurallarını ve siteye özel bildirimleri açıklar. Risk sinyalleri inceleme içindir; tek başına bir ihlal veya hile kanıtı değildir.

## 1. Oyuncunun sitedeki kimliği
`/provider/v1/player` ve `/provider/v1/launch` sunucu API’lerine `externalId` ile birlikte isteğe bağlı `siteUsername` gönderilir. `externalId`, sitenizdeki değişmez üye ID’sidir; `siteUsername` mevcut kullanıcı adı veya hesap etiketidir. Yalnız üye ID’si kullanıyorsanız kullanıcı adı alanını göndermeyin.

Yeni kayıtta `siteUsername` yoksa `name` eski entegrasyonlar için yedektir. Mevcut kayıtta alan atlanırsa önceki değer korunur; açıkça gönderilirse güncellenir. Otomatik `publicId` (ör. cio1545), aynı site + `externalId` için değişmez. Kimliği kendi sunucunuzdaki doğrulanmış oturumdan alın; tarayıcıdan gelen isim, site ID’si veya üye ID’siyle hesap seçmeyin.

Ana yönetici oyuncu ekranında `publicId`, kaynak site kullanıcı adı, `externalId` ve bağlantı/cihaz geçmişini görür. Site paneli yalnız kendi oyuncularını gösterir. Bu özel alanlar ortak odaların halka açık oyuncu yanıtlarına veya tarayıcıya gönderilen açılış biletlerine eklenmez.

## 2. Bağlantı ve cihaz verisi
Varsayılan IP, sunucunun gördüğü soket bağlantısıdır. `TRUSTED_PROXY_IPS` içinde açıkça tanımlanan bir vekilden gelen tek ve geçerli `X-Real-IP` değeri istek bazında kullanılır. Liste dışı kaynakların başlıklarına güvenilmez; `X-Forwarded-For` ve `Forwarded` zincirleri yorumlanmaz. Güvenilen vekil başlığı kendi bağlantı kaynağından yeniden yazmalı, backend portu dışarıya kapalı olmalıdır. Yapılandırılmamış proxy IP’sini gerçek oyuncu IP’si olarak yorumlamayın. Ayrıntılar ACCESS-SECURITY.txt içindedir.

Kaydedilen sınırlı alanlar: tarayıcı sürümü, işletim sistemi, cihaz türü, User-Agent, dil, saat dilimi, ekran ölçüleri, piksel oranı ve dokunmatik kapasitesi. Cihaz kodu, ilk taraf rastgele tarayıcı kimliğinin kurulum anahtarıyla HMAC özetidir. Aynı kurulumdaki sitelerde karşılaştırılabilir; depolama silinince değişebilir ve aynı cihaz farklı profillerde farklı görünebilir.

Bu veriler değiştirilebilir risk sinyalleridir; donanım kimliği veya kötüye kullanım kanıtı değildir. Canvas/ses parmak izi, seri numarası veya konum izleme yapılmaz. Yeni cihaz kayıtları 90 gün tutulur. Operatör, topladığı alanları ve saklama süresini kendi gizlilik bildiriminde açıklamalıdır.

```http Oyuncu bağlantı verisi
POST /play/:slug/api/telemetry
```

İstemci bu çağrıyı başlangıçta ve oda değişiminde gönderir. Tam oyuncu oturumu ve izinli Origin gerekir. Salt okunur izleyici bileti veya başka sitenin oyuncu oturumu kayıt oluşturamaz.

## 3. Risk kuralları
Yönetici panelinde Risk ve uyarılar bölümünden düzenlenir:

- `sameIp`, `sameDevice`: aynı odada eşleşen bağlantı veya tarayıcı kodu.
- `repeatedOpponents`, `historyWindowHours`: belirtilen zaman penceresinde aynı rakiplerle tekrarlı savaşlar.
- `highMultiplier`: bonus kazancı / buy-in eşiği.
- `highPayoutMinor`: tek bonus kazancı eşiği; API’de kuruş, panelde TL. Sıfır kapatır.
- `winRateEnabled`, `winRateMinimumBattles`, `winRatePercent`, `winRateMinReturnBps`: yeterli örneklemde hem galibiyet oranı hem toplam ödül / katılım eşiği aşılınca uyarı. 15.000 bps = %150 getiri.
- `rapidJoinCount`, `rapidWindowMinutes`: gerçek rezervasyon zamanlarına göre kısa sürede oda katılımı.
- `activeRoomLimit`: aynı anda aktif savaş sayısı; sıfır kapatır.
- `apiErrorRate`, `apiErrorMinimum`: asgari örneklemle API hata oranı.
- `waitingMinutes`, `cancelWaiting`: başlamamış odalar için bekleme uyarısı ve isteğe bağlı iptal/iade.

Otomatik bekleyen oda iptali varsayılan olarak kapalıdır; bu kural başlamış savaşı iptal edemez. Risk sinyalleri bakiye değiştirmez, kazancı geri almaz veya oyuncuyu otomatik engellemez.

Tarama yaklaşık 10 saniyede bir çalışır. Aynı kanıt tekrar bildirim üretmez; incelendi işareti sonraki taramada sıfırlanmaz. Kural ve kanıt anlık görüntüsü saklanır. Her kapsamda en fazla 5.000 oda taranır; sınır aşılırsa `coverage.truncated` ve panelde kısmi tarama uyarısı görünür. Bu durumda geçmiş zaman penceresini daraltın.

## 4. Siteye özel Telegram
Site sahibi operatör panelindeki Risk ve uyarılar bölümünü, ana yönetici ise site detayındaki Site risk bildirimleri bölümünü kullanır.

1. Botu hedef sohbete ekleyin.
2. Bot anahtarını ve sayısal sohbet/grup ID’sini veya @kanal adını girin.
3. Uyarı, kritik veya bilgi seviyelerini seçin; bildirimleri açıp kaydedin.
4. Test gönder ile teslimi kontrol edin. HTTP başarısı tek başına yeterli değildir; Telegram yanıtında `ok=true` gerekir.

Bot anahtarı AES-256-GCM ile şifrelenir; okuma yanıtında veya denetim günlüğünde görünmez. Anahtar alanını boş bırakmak kayıtlı anahtarı korur. `tenant-risk-master.key` dosyasını veritabanıyla birlikte güvenli yedekleyin; istemci paketine koymayın.

Mesajlar site adı/kodu/ID’si, `publicId`, kaynak site kullanıcı adı/üye ID’si, oda, kural ve kanıt özetini içerir. Başka sitenin özel oyuncu bilgileri çıkarılır. Yalnız Telegram’ın sabit API adresine düz metin gönderilir. Resmî Bot API: https://core.telegram.org/bots/api#sendmessage

```http Operatör paneli uçları
GET /operator-api/risk
GET /operator-api/risk/notifications
PATCH /operator-api/risk/notifications
POST /operator-api/risk/notifications/test
POST /operator-api/risk/notifications/retry
```

Panel oturum çerezi gerekir; değişiklikler aynı panel Origin’i ve CSRF doğrulaması ister. Site kapsamı oturumdan gelir; sorgu parametresiyle değiştirilemez.

```text PATCH alanları · gösterim, JSON değildir
{enabled, botToken?, chatId, severities?, types?}
```

`types=[]` bütün türleri seçer. Ana yönetici için eşdeğer uçlar:

```http Sağlayıcı paneli uçları
GET /control/api/tenants/:id/risk-notifications
PATCH /control/api/tenants/:id/risk-notifications
POST /control/api/tenants/:id/risk-notifications/test
POST /control/api/tenants/:id/risk-notifications/retry
```

Ana yönetici okumalarında `sites.read` + `risk.read`, değişikliklerinde `sites.manage` + `risk.manage` gerekir. Kalıcı kuyruk en fazla beş kez dener ve Telegram 429 bekleme süresini gözetir. Geçersiz bot veya engellenen sohbet kalıcı hata sayılır; başarısız kayıtlar panelden yeniden denenebilir.

Hedef, anahtar veya filtre değişince eski bekleyen kayıtlar yeni hedefe taşınmaz. Teslim modeli en az bir kezdir: başarılı yanıt kaybolursa yinelenen mesaj oluşabilir; mesajdaki uyarı ID’si bunu ayırt eder. Test gönderimleri site başına 30 saniye aralıklıdır.

## 5. Site markası
Ana yönetici, site oluşturma/düzenleme ekranındaki Oyuncu arayüzü rengi alanını kullanır. `accentColor` kesin `#RRGGBB` biçimindedir; varsayılan `#FF5B36` değeridir.

Oyuncu tarafındaki butonlar, vurgu/yüzey tonları ve uygun kontrastlı metin rengi güncellenir. Admin paleti, semantik uyarı renkleri ve kişisel oyuncu renkleri değişmez. Iframe ve dosyalı istemci aynı site yeteneklerini kullanır. Dosyalı kurulumda güncel istemci ZIP’ini yeniden dağıtın; site-theme ve player-device dosyaları da pakette bulunmalıdır.

## 6. Hazır site kuralları
Yeni site platform kurallarını devralır. Başlangıç eşikleri: aynı IP ve aynı cihaz incelemesi açık; yüksek çarpan 1.000×, yüksek bonus kazancı 1.000.000 ₺; 24 saatte aynı rakiple 5 oda; en az 10 tamamlanmış savaşta %80 galibiyet ve en az %150 toplam getiri; 5 dakikada 10 katılım; aynı anda 3 aktif oda; en az 20 istekte %20 API hata oranı; 120 dakika bekleyen oda uyarısı. Bunlar garanti veya hile kararı değil, personelin incelemesi için başlangıç eşikleridir.

Operatör Risk ve uyarılar > Kuralları düzenle ile kendi eşiklerini değiştirebilir. Ana admin site filtresinden seçilen sitenin kurallarını da düzenleyebilir. Varsayılanlara dön site değişikliklerini kaldırır. İnceleme kuralları oyuncunun parasını değiştirmez. Operatör otomatik oda iptalini açamaz; bu ayrı platform ayarıdır ve başlamış savaşları iptal edemez.

```http Oturum kapsamlı kurallar
GET /operator-api/risk/rules
PATCH /operator-api/risk/rules
GET /control/api/risk/sites/:tenantId/rules
PATCH /control/api/risk/sites/:tenantId/rules
```

```json Örnek eşik değişikliği
{"rules":{"highMultiplier":1500,"repeatedOpponents":8}}
```

```json Platform varsayılanlarına dön
{"reset":true}
```

Okumak için `risk.read`, düzenlemek için `risk.manage` gerekir. Değişiklikte panel oturumu, doğru Origin ve CSRF zorunludur. Operatörün sitesi oturumdan alınır. Değişiklikler denetim günlüğüne yazılır; sonraki tarama yeni eşiklerle çalışır. Önceden oluşmuş uyarılar silinmez.
