SaaS'ınızla arka ucu paylaşan bir Chrome uzantısı nasıl kurulur?
İkinci bir arka uç kurmayarak. MV3 uzantısı HttpOnly cookie'lere güvenemez, bu yüzden workspace API anahtarlarıyla kimlik doğrulanır: uzantı, tam olarak bir workspace'e bağlı kapsamlı bir anahtarla uygulamanın sürümlenmiş REST API'sini (/api/v1) çağırır ve web uygulamasıyla aynı auth modelini, tenant kapsamını ve Postgres veritabanını yeniden kullanır. supastack'in MV3 iskeleti — popup, seçenekler sayfası, arka plan worker'ı, en-az-yetki manifestosu — tam olarak böyle bağlanmıştır.
Tuzak: farkında olmadan ikinci bir arka uç kurmak
Klasik hikâye: SaaS'ınızın sayfa yakalama, içerik kırpma veya web'e not ekleme için bir eşlikçi uzantıya ihtiyacı var. Altı ay sonra iki auth sistemi (web için cookie'ler, uzantı için el yapımı bir şey), uzantının gerçekten çağırabildiği paralel bir API ve aslında tek olması gereken iki veri deposunu hizalayan bir senkronizasyon katmanı sürdürüyorsunuz.
Bunların hiçbiri gerekli değil. Uzantı, mevcut ürününüzün bir istemcisidir — tutabileceği bir kimlik bilgisi ve programatik erişim için tasarlanmış bir API yeterli. Hata, ciddi bir SaaS'ın zaten sahip olduğu workspace API anahtarları ve sürümlenmiş REST yüzeyi yerine yeni bir arka uca uzanmaktır.
Manifest V3'ün gerçekte izin verdikleri
MV3, arka plan sayfalarını kısa ömürlü Service Worker'larla değiştirdi ve uzantıları en-az-yetki modeline itti. Pratikte: kalıcı bellek içi duruma güvenemezsiniz; oturum yeniden kullanımı için cookie kazıyamazsınız (HttpOnly cookie'ler zaten ulaşılamaz); ve her host izni web mağazası incelemesinde bir sorudur.
Temiz cevap, platformun zaten verdiğidir: chrome.storage.local'da kapsamlı bir kimlik bilgisi ve uygulamanızın origin'ine HTTPS çağrıları — kurulum anında isteğe bağlı host izinleriyle, kurulumda değil.
supastack'in MV3 iskeleti: zaten bağlı olanlar
supastack'in apps/extension'ı, tüm deseni uçtan uca gösteren kasıtlı olarak küçük, framework'süz bir Manifest V3 eşlikçisi — 'sayfayı workspace'e kaydet'. Etkin sekmenin başlığını, URL'sini ve seçili metnini, sürümlenmiş REST API POST /api/v1/content-entries üzerinden bir workspace içerik kaydı olarak kaydeder.
Auth, Settings → Developers altında oluşturulan bir workspace API anahtarı (sk_…) kullanır: anahtar tam olarak bir workspace'e bağlıdır, yani bağın kendisi workspace seçimidir — başka yere asla yazamaz. Seçenekler sayfası uygulama URL'sini ve anahtarı chrome.storage.local'da saklar, yalnızca o origin için erişim ister ve GET /api/v1/workspaces/current ile bağlantıyı doğrular.
apps/extension/
manifest.json MV3: service worker, least-privilege permissions
src/
background.js context-menu save + badge feedback
popup.html/.js capture UI — title, URL, selection, note
options.html/.js app URL + workspace API key setup
lib/
api.mjs versioned /api/v1 client (key auth)
capture.mjs active-tab + selection capture
config.mjs chrome.storage.local persistenceVarsayılan olarak en az yetki
İskelet yalnızca işin gerektirdiği minimum izin setini taşır — bu hem mağaza incelemesi hem kullanıcı güveni için önemlidir:
tabsyok,<all_urls>yok, cookies/webRequest/declarativeNetRequest yok — neye ihtiyacı olmadığını dürüstçe beyan eden bir iskelet.
| İzin | Nedeni |
|---|---|
| activeTab | Geçerli sayfanın başlığını/URL'sini yalnızca çağrıldığında okur |
| scripting | Çağrılan sekmedeki seçili metni okur |
| contextMenus | Sağ tık 'kaydet' menü öğesini kaydeder |
| storage | Uygulama URL'sini, API anahtarını ve workspace önbelleğini saklar |
| optional_host_permissions | Uygulama origin'i kurulumda değil ayarlamada istenir — kurulumda sıfır site erişimi |
İskeletten ürününüzün eşlikçisine
Yeniden markalama manifest.json'daki adı değiştirmektir; genişletme ise işin eğlenceli kısmı — ve aynı desenin içinde kalır: yeni yakalama türleri aynı anahtarla yeni /api/v1 uç noktalarını çağırır ve uygulamanın OpenAPI dokümanından üretilen tipli @supastack/api-sdk istek şekillerinin doğruluğunu korur.
Uzantı, diğer her istemci gibi aynı tenant-kapsamlı API üzerinden okuyup yazdığı için, kaydedilen sayfalar web panelinin listelediği aynı Postgres satırlarına düşer — tek veritabanı, tek auth modeli, workspaceId kapsamı tam olarak tek yerde zorlanır. İkinci arka uç yok, senkronizasyon yok, kayma yok. Kademeleri fiyat sayfasında karşılaştırın.
| Kendin-yap ikinci arka uç yaklaşımı | supastack MV3 iskeleti | |
|---|---|---|
| Auth | Cookie'lerin yanında el yapımı token sistemi | Workspace API anahtarları — web ile aynı auth modeli |
| API | Uzantı için icat edilmiş yeni uç noktalar | Sürümlenmiş /api/v1 + OpenAPI tipli SDK |
| Veri | İkinci depo + senkronizasyon mantığı | Aynı Postgres satırları, workspace kapsamlı |
| İzinler | Kolaylık için geniş erişim | En-az-yetki manifestosu, inceleme dostu |
SSS: tek arka uçta SaaS + Chrome uzantısı
Geliştiricilerin uzantı eşlikçisi yayınlamadan önce sorduğu sorular:
- Kullanıcının oturum cookie'si yerine neden API anahtarı?, HttpOnly cookie'ler tasarım gereği uzantı JS'sine görünmezdir ve MV3 Service Worker'ları kısa ömürlüdür —
chrome.storage.local'daki kapsamlı birsk_…anahtarı kalıcıdır, iptal edilebilir ve tek workspace'e bağlıdır; tenant sınırını asla aşamaz. - Uzantı Firefox'ta çalışır mı?, MV3 aynı yüzeyi destekler; kod
browser ?? chromead alanı şimini kullanır ve Chromium öncelikli geliştirilir — Firefox bir porttur, yeniden yazım değil. - Kutudan çıkar çıkmaz mağazaya hazır mı?, Üretim desenlerinin iskeletidir, mağaza gönderisi değil — manifestoyu yeniden adlandırır, kendi yakalama mantığınızı ekler ve listeleme metnini yazarsınız. Zor kısım (auth, API, tenant kapsamı) hazır.
- Hangi kademe uzantıyı içerir?, $299'luk Full Bundle beş yüzeyin tamamını — iki web motoru, Expo, Tauri ve uzantı iskeleti — tek repoda teslim eder.