Açık Defter
Notlar

Notlar

Bir şeyi çözdüğümde ya da bir şeye takıldığımda buraya yazıyorum. Çoğu kısa; amaç altı ay sonra kendime hatırlatmak.

9 not
01

Webhook'a önce cevap ver, işi sonra yap

Meta'nın webhook'u yanıt bekliyor. Claude'a sorup beklersen aynı olay tekrar tekrar geliyor.

Ayrıntı
  • İlk sürümde önce cevabı üretip sonra 200 dönüyordum. Meta zaman aşımına düşünce aynı yorumu tekrar gönderiyor, bot da aynı şeye iki kez cevap veriyordu.
  • Doğrusu: imzayı doğrula, hemen 200 dön, işi ondan sonra yap. Ayrı bir kuyruk kurmak gerekmedi — işi await etmemek yetti.
02

HMAC imzasını ham gövde üzerinden doğrula

Ayrıştırılmış JSON'u tekrar metne çevirip imzalarsan imza hiçbir zaman tutmaz.

Ayrıntı
  • Express'in json() ara katmanı gövdeyi ayrıştırıyor. JSON.stringify ile geri ürettiğim metin, Meta'nın imzaladığı baytların aynısı değil — boşluk ve anahtar sırası değişebiliyor.
  • Çözüm, ham gövdeyi ayrıştırma sırasında ayrıca saklamak ve karşılaştırmayı timingSafeEqual ile yapmak; normal eşitlik karşılaştırması imzayı harf harf sızdırabiliyor.
03

İzin listesi istemcide durmaz

Kimin girebileceğini tarayıcıdaki bir dizide tutuyordum. Kaynağa bakan herkes listeyi görüyor.

Ayrıntı
  • Listeyi Firestore kurallarının içine taşıdım. Artık kararı sunucu veriyor, istemci sadece sonucu görüyor.
  • Kuralları yazarken fark ettim: kural veri modelinden sonra yazılmıyor. Önce 'kim neyi okuyabilir' sorusunu cevaplayıp modeli ona göre kurmak gerekiyor.
04

Bir MCP sunucusu başka bir sunucunun istemcisi olabiliyor

botflow-mcp'ye dışarıdaki bir sunucunun araçlarını devraldırdım.

Ayrıntı
  • MCP'de sunucu ve istemci ayrı roller, ama aynı süreç ikisini birden üstlenebiliyor.
  • Böylece dışarıdan gelen araçlar kendi araçlarımın yanına diziliyor; modelin tarafından bakınca tek bir sunucu görünüyor.
05

Uzun işi arka plana al, hız sınırına saygı duy

Bir duyuruyu tek istekte göndermeye çalışmak hem zaman aşımı hem 429 demek.

Ayrıntı
  • Gönderimi, kaldığı yerden devam edebilen bir arka plan işine çevirdim; nereye kadar gittiği veritabanında duruyor, süreç yeniden başlasa da baştan almıyor.
  • Telegram'ın saniyelik sınırına takılmamak için mesajların arasına bekleme koydum. Yavaş, ama bitiyor.
06

App Check: anahtarın görünmesi sorun değil

Firebase yapılandırması istemcide açıkta duruyor — ve durması normal.

Ayrıntı
  • Web API anahtarı bir parola değil, projeyi adresleyen bir kimlik. Asıl koruma güvenlik kurallarından geliyor.
  • App Check bunun üstüne 'bu çağrı gerçekten benim sitemden mi geliyor' sorusunu ekliyor. Kuralların yerine geçmiyor, onlarla birlikte çalışıyor.
07

Service worker'da neyi önbelleğe alacağına önceden karar ver

Her şeyi önbellekten verirsen güncelleme kullanıcıya hiç ulaşmıyor.

Ayrıntı
  • HTML'i önce ağdan denemek, CSS/JS/font'u önbellekten vermek dengeyi kurdu: içerik taze kalıyor, sayfa yine de anında açılıyor.
  • Önbelleğe bir sürüm adı verip eskisini activate sırasında silmek gerekiyor. Yoksa kullanıcının tarayıcısında iki sürüm birden birikiyor.
08

Dil değişince yön de değişiyor

Farsça'ya geçince sayfa dağılıyordu. Sebep, her yere left ve right yazmamdı.

Ayrıntı
  • margin-left yerine margin-inline-start, left yerine inset-inline-start yazınca RTL kendiliğinden çalıştı — tek tek düzeltmeye gerek kalmadı.
  • Elle çevrilmesi gereken tek şey yön belirten ikonlar oldu; onlara scaleX(-1) veren tek bir sınıf yetti.
09

İlk yayın

GitHub Pages'e ilk kez bir şey koydum.

Ayrıntı
  • Depoyu Pages'e bağladıktan sonra dosyaları itmek yayınlamak demek oldu; ayrı bir dağıtım adımı yok.
  • Proje sayfası kök adreste değil, depo adının altında duruyor. Bu yüzden bağlantıları göreli yazmak gerekiyor — kökten yazılan yollar burada kırılıyor.