> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# Web Auth ve API'yi Paylaşan Chrome Uzantılı (MV3) Bir SaaS Nasıl Kurulur

Çoğu ekip tarayıcı uzantısı için ikinci bir arka uç kurar. Manifest V3 eşlikçinizi mevcut SaaS'ınıza workspace API anahtarlarıyla nasıl bağlayacağınız — çifte auth olmadan, ikinci veritabanı olmadan.

_Yayınlandı 2026-11-07._
_2026-11-07 tarihinde güncellendi._

> **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 persistence
```


## Varsayı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:

- `tabs` yok, `<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](https://supastack.dev/#pricing) 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ı bir `sk_…` 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 ?? chrome` ad 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.
