Mimariye genel bakış
GuildGate, Discord dashboard sunucusunda güvenlik kararlarını ve yazma işlemlerini ortak bir çekirdekte toplar. Arayüz üretmez, uygulama verisini sahiplenmez ve kullandığın HTTP çatısını zorunlu kılmaz.
Çekirdek
createGuildGate() yapılandırmayı başlangıçta doğrular ve şu yüzeyleri oluşturur:
gate.action()ile korunan işlem tanımıgate.execute()ile istek yürütmegate.sessionsile oturum yönetimigate.cacheile etiket tabanlı önbellekgate.ownerile bakım ve erişim engeli politikalarıgate.revokeSession()vegate.revokeUserSessions()ile oturum iptali
Çekirdek; origin, oturum, CSRF, politika, rate limit, idempotency, kilit, transaction, audit ve realtime kararlarını aynı istek kimliği altında yürütür.
Action katmanı
Bir action şu parçaları tek tanımda birleştirir:
- Girdiyi ayrıştırma
- Kaynağı belirleme
- Kimlik ve CSRF denetimi
- Yetkilendirme
- Rate limit ve idempotency
- Optimistic revision ve dağıtık kilit
- Transaction içinde domain yazımı
- Commit sonrasında cache, realtime ve audit sonuçları
1.1.0 sürümünde yanıt süresi dolduğunda action, alttaki işlem AbortSignal değerini dinlemese bile yapılandırılan sınırda döner. Geç tamamlanan idempotent işlem için reservation ve lease sahipliği sınırlı bir süre korunur.
Store katmanı
GuildGateStores on küçük sözleşmeden oluşur:
| Üye | Sorumluluk |
|---|---|
sessions | Oturum yaşam döngüsü ve kullanıcı başına sınır |
oauthStates | Tek kullanımlık OAuth state tüketimi |
credentials | Şifreli OAuth kimlik bilgileri |
rateLimits | Atomik sayaç ve pencere hesabı |
cache | TTL, stale süre ve tag temizliği |
idempotency | Reservation sahipliği ve replay sonucu |
locks | Lease, yenileme ve fencing token |
audit | Değişmez olay kaydı ve cursor sayfalama |
outbox | Claim lease ile olay teslim kuyruğu |
policies | Bakım, blok ve politika sürümü |
composeStores() farklı backend paketlerini bir araya getirir. Örneğin kalıcı kayıtları PostgreSQL'de, kısa ömürlü sayaç ve lease kayıtlarını Redis'te tutabilirsin.
Transaction katmanı
TransactionAdapter, domain yazımı ile zorunlu audit/outbox kayıtlarının aynı commit sınırında çalışmasını sağlar. PostgreSQL bağdaştırıcısı iç içe işlemlerde savepoint kullanır.
Başarılı COMMIT sonrasında çalışan bir callback hata verirse domain yazımı geri alınmış sayılmaz. Sonuç, TransactionPostCommitError veya action metadata içindeki postCommitIssues üzerinden gözlemlenir; yazma yeniden çalıştırılmaz.
Realtime katmanı
createRealtimeHub() bağlantı yetkisini ve teslim sınırlarını taşıyıcıdan ayırır. WebSocket ve Socket.IO mesajları aynı payload, hız, abonelik, etkinlik ve backpressure kontrollerinden geçer. SSE çıkışı da aynı oturum ve kanal yetkisi modeline bağlanabilir.
Sequence ve replay desteği, istemcinin kopma sonrasında kaldığı yerden devam etmesini sağlar. Çoklu worker ortamında olaylar outbox üzerinden claim edilerek dağıtılır.
HTTP ve Discord bağdaştırıcıları
Paket Fastify, Express ve Hono action handler'ları yayımlar. discord.js bağdaştırıcısı Discord sunucusu ve izin verisini çekirdeğin beklediği dar arayüze çevirir.
Çekirdek route yapısını, veritabanı şemasını veya Discord istemcisinin yaşam döngüsünü yönetmez. Bu kararlar uygulamada kalır.
Bir isteğin ayrıntılı sırası için işlem yaşam döngüsüne bak.