API

Cloud API

Kendi barındırdığınız bir Alaf Server örneğini Alaf Server Cloud'a ve onu destekleyen bulut kontrol düzlemi uç noktalarına (handoff, edge proxy, pages, subgraph transfer, GitHub App proxy) bağlayın.

Cloud API, kendi barındırdığınız bir Alaf Server örneğini Alaf Server Cloud'a (yönetilen kontrol düzlemi) bağlar, böylece bulut çalışma zamanlarına deploy edebilir, yönetilen domain'leri ve sayfaları kullanabilir ve merkezi GitHub App'i ödünç alabilir. İki ayrı yarıya sahiptir ve hangisinin monte edileceği işlem moduna bağlıdır:

  • Kendi barındırılan set (cloud-local) — connect/disconnect, status ve workspaces/drift listelemesi. Yalnızca örnek bulut modunda değilken monte edilir. Kendi kutunuzda çağırdığınız şey budur.
  • Bulut kontrol düzlemi seti (cloud-saas) — handoff/OAuth, namespace token minting, edge-proxy/pages/analytics proxy'leri, subgraph transfer ve GitHub App proxy'si. Yalnızca bulut modunda (CLOUD_MODE) monte edilir. Kendi barındırdığınız örneğiniz, depolanan bulut oturumu üzerinden bunları makineden makineye çağırır; bunları nadiren elle çağırırsınız.

Her iki yarı da /api/cloud temel yolunu paylaşır, ancak herhangi bir işlemde yalnızca biri bulunur.

Temel yol ve kimlik doğrulama

Tüm yollar, örneğin https://your-host/api/cloud/status gibi, örneğinize göre /api altında yer alır. Kendi barındırılan uç noktalar, bir bearer header olarak kişisel bir erişim token'ı alır (Authorization: Bearer <token>, alaf server token create komutundan); dashboard oturum çerezinizi kullanır. Bulut kontrol düzlemi uç noktaları, connect sırasında oluşturulan bulut oturum bearer'ı ile (veya genel handoff rotaları için URL'deki imzalı tek kullanımlık bir token ile) kimlik doğrulaması yapar — kendi barındırılan bir PAT ile değil. API genel bakışına ve kimlik doğrulama modeline bakın.

Kendi barındırılan uç noktalar

Yalnızca kendi barındırılan bir örnekte bulunur (CLOUD_MODE modunda değil). Bulut bağlantısı kuruluşa aittir: kuruluş sahibine aittir, bu nedenle her üye aynı kararı görür. Disconnect ve connect-finalize işlemleri yalnızca cloud:admin izni değil, owner rolünü gerektirir.

Metot ve yolİzinNe işe yarar
GET /api/cloud/statuscloud:readBu örnek için Alaf Server Cloud bağlantı durumu.
GET /api/cloud/workspacescloud:readKuruluşun Alaf Server Cloud (Mtntasci) workspaces'lerini, drift (yetim bulut/yerel) ile birlikte listeler.
POST /api/cloud/connect-finalizecloud:admin + ownerConnect popup'ını tamamlar: PKCE kodunu takas eder ve bulut bearer'ını depolar.
POST /api/cloud/disconnectcloud:admin + ownerKuruluşun depolanan bulut oturumunu temizler ve üye GitHub izinlerini budar.

Bağlantı durumunu kontrol et

GET /api/cloud/status
curl https://your-host/api/cloud/status \
  -H "Authorization: Bearer $ALAFSERVER_TOKEN"
# CLI, aynı bağlantı durumunu status çıktısında gösterir:
alaf server status

Bağlantı kurma işlemi, dashboard'dan (Ayarlar → Cloud) başlatılan bir tarayıcı akışıdır: bir popup, Alaf Server Cloud'a karşı PKCE handshake'ini çalıştırır, ardından sonucu aşağıdaki connect-finalize adresine gönderir. Özel bir alaf server cloud connect CLI komutu yoktur.

Bir bağlantıyı sonlandır

Dashboard popup'ı PKCE doğrulayıcısını localStorage'dan okur ve kuruluşun bulut bearer'ını depolamak için döndürülen kodu buraya gönderir.

POST /api/cloud/connect-finalize

Prop

Type

Yalnızca sahip

connect-finalize ve disconnect kuruluşun bulut bearer'ını devraldığı için, cloud:admin etiketine ek olarak requireRole("owner") ile korunurlar. cloud:admin iznine sahip bir sahip olmayan kullanıcı yine de 403 alır.

Bulut kontrol düzlemi uç noktaları

Yalnızca bulut modunda (CLOUD_MODE) bulunur — yani bunlar Alaf Server Cloud üzerinde çalışır, kendi barındırdığınız kutunuzda değil. Tüm kiracı kapsamlı işlemler, çağıranın namespace token'ı aracılığıyla Mtntasci'ye iletilir; Mtntasci namespace sınırını yerel olarak uygular, bu nedenle SaaS tarafında bir sahiplik defteri yoktur. public rotaları oturum taşımaz — bunlara tarayıcı yönlendirmeleriyle ulaşılır ve URL'deki imzalı, tek kullanımlık bir token ile kimlik doğrulaması yapılır.

Metot ve yolİzinNe işe yarar
GET /api/cloud/desktop-handoffpublicOAuth → tek kullanımlık kod → masaüstü uygulama callback'ine yönlendirme.
GET /api/cloud/connect-handoffpublicBağlantı parametrelerini doğrular, ardından dashboard onay sayfasına 302 yönlendirmesi yapar.
POST /api/cloud/connect-authorizepublicOnay sayfası tek kullanımlık bir handoff kodu oluşturur (çerez oturumu satır içi kontrol edilir).
POST /api/cloud/exchange-codepublicKullanıcı + oturum için tek kullanımlık bir kodu takas eder (rate-limited).
POST /api/cloud/tokencloud:writeÇağıranın kuruluşu için namespace kapsamlı bir Mtntasci token'ı oluşturur.
GET /api/cloud/accountcloud:readBağlı bulut hesabı (ad, e-posta, avatar).
POST /api/cloud/disconnectcloud:adminMevcut bulut oturumunu sunucu tarafında iptal eder (idempotent).
POST /api/cloud/preflightcloud:writeBulut deploy preflight — slug / custom-domain kullanılabilirliği.
POST /api/cloud/edge-proxycloud:writeYönetilen edge proxy'yi senkronize eder (bir slug'ı bir hedefe bağlar).
POST /api/cloud/analyticscloud:writeÇağıranın namespace'indeki bir hostname için Mtntasci analytics'i proxy eder.
POST /api/cloud/pagescloud:writeBir Cloud Page oluşturur (Mtntasci pages.create proxy eder).
POST /api/cloud/pages/enablecloud:writeBir Cloud Page'i slug ile etkinleştirir.
POST /api/cloud/pages/disablecloud:writeBir Cloud Page'i slug ile devre dışı bırakır.
POST /api/cloud/pages/deletecloud:writeBir Cloud Page'i slug ile siler.
POST /api/cloud/send-invitationcloud:writeSaaS mail altyapısı aracılığıyla bir davet e-postasını iletir.
POST /api/cloud/ingest-subgraphcloud:adminKuruluş veya proje kapsamlı bir subgraph dump'ını alır (rate-limited, 50MB sınırı).
POST /api/cloud/export-subgraphcloud:adminKuruluş veya proje kapsamlı bir subgraph dump'ını dışa aktarır (rate-limited).
POST /api/cloud/teardown-projectcloud:adminBir projenin SaaS üzerindeki satırlarını siler (bring-home / reconcile).
POST /api/cloud/github/oauth-handoffcloud:writeGitHub OAuth'ı başlatır: tek kullanımlık bir köprü URL'si döndürür.
GET /api/cloud/github/oauth-bridgepublicKöprü token'ını tüketir ve tarayıcıyı GitHub OAuth'a yönlendirir.
GET /api/cloud/github/oauth-successpublicDostça "GitHub bağlandı" pencere kapatma sayfası.
POST /api/cloud/github/install-urlcloud:writeTek kullanımlık bir durum token'ı ile App kurulum URL'sini oluşturur.
GET /api/cloud/github/install-callbackpublicGitHub kurulum callback'i — kurulumu başlatan kullanıcıya atfeder.
GET /api/cloud/github/installationscloud:readKuruluş sahibinin GitHub App kurulumlarını listeler.
POST /api/cloud/github/installation-tokencloud:writeKısa ömürlü (~60dk) bir kurulum erişim token'ı oluşturur.
GET /api/cloud/github/user-statuscloud:readÇağıran için bulut tarafından çözümlenmiş GitHub OAuth kimliği (login, avatar).

Bunlar çoğunlukla dahili

Kendi barındırdığınız örneğiniz, bulut istemcisi aracılığıyla kontrol düzlemi uç noktalarını sizin için çağırır — bunları elle bağlamazsınız ve bunlara birebir eşleşen bir alaf server CLI komutu yoktur. Aşağıdaki istek şekilleri, entegratörlerin trafiği anlamlandırabilmesi için belgelenmiştir.

Handoff ve kod değişimi

Connect ve masaüstü login akışları yerel örneğe asla bir tarayıcı çerezi vermez. Bunun yerine, kısa ömürlü, PKCE'ye bağlı bir handoff kodu oluşturulur (connect-authorize), ardından özel bir oturumla (exchange-code) değiştirilir.

POST /api/cloud/connect-authorize

Prop

Type

POST /api/cloud/exchange-code

Prop

Type

Genel GET handoff rotaları bir body yerine sorgu parametreleri alır — desktop-handoff ve connect-handoff redirect, state ve code_challenge bekler; github/install-callback installation_id, setup_action ve state bekler; github/oauth-bridge token bekler.

Deploy proxy'leri (preflight, edge proxy, analytics)

POST /api/cloud/preflight

Prop

Type

POST /api/cloud/edge-proxy

Prop

Type

POST /api/cloud/analytics

Prop

Type

Sayfalar

pages yönetilen bir statik sayfa oluşturur; etkinleştirme/devre dışı bırakma/silme eylemlerinin her biri yalnızca bir slug alır.

POST /api/cloud/pages

Prop

Type

POST /api/cloud/pages/disable   (also /enable, /delete)

Prop

Type

Davetiye iletimi

Kendi barındırılan bir operatör invitationMailSource = "cloud" olarak ayarladığında kullanılır — SaaS e-postayı kendi altyapısından gönderir. Hizmet içinde kuruluş başına saatte 20 ile sınırlıdır.

POST /api/cloud/send-invitation

Prop

Type

Subgraph transfer ve kaldırma

Ingest/export çifti, bir kuruluşun veya tek bir projenin satırlarını kendi barındırılan bir örnek ile SaaS arasında taşır (ekip modu geçişi ve proje transferi). Örnek kapsamlı dump'lar reddedilir.

POST /api/cloud/ingest-subgraph

Prop

Type

POST /api/cloud/export-subgraph

Prop

Type

POST /api/cloud/teardown-project

Prop

Type

GitHub App proxy'si

Cloud, GitHub App özel anahtarını tutar; kendi barındırılan örnekler asla tutmaz. Yerel, (userId, request)'i devreder ve çözümlenmiş verileri geri alır — asla bir JWT imzalamaz veya App kimlik bilgilerini görmez.

POST /api/cloud/github/installation-token

Prop

Type

installationId asla body'den kabul edilmez

installation-token kurulumu çağıranın kuruluşundan çözer, istemci tarafından sağlanan bir id'den değil — bir id geçmek hiçbir etki yaratmaz. Bu, bir çağıranın sahip olmadığı bir kurulum için token oluşturmasını engeller.

Görebileceğiniz hatalar

403 — sahip gerekli (kendi barındırılan connect/disconnect)

connect-finalize ve disconnect kuruluş owner rolünü gerektirir. Yalnızca cloud:admin iznine sahip bir üye reddedilir.

409 — slug zaten alınmış (edge proxy / pages)

İstenen slug, paylaşılan bulut bölgesindeki başka bir kiracıya aittir. Mtntasci 409 döndürür ve Alaf Server bunu iletir. Farklı bir slug seçin.

412 — dump format uyuşmazlığı (ingest)

ingest-subgraph, formatVersion'ı SaaS ile eşleşmeyen dump'ları reddeder (code: INGEST_FORMAT_MISMATCH). Yerel örneğinizi güncelleyin ve yeniden dump yapın.

413 — dump çok büyük (ingest)

ingest-subgraph, kimlik doğrulama çalışmadan önce istek body'sini 50MB ile sınırlar (code: PAYLOAD_TOO_LARGE).

401 — geçersiz veya süresi dolmuş kod / oturum

Handoff kodları tek kullanımlık ve zaman sınırlıdır; exchange-code tüketildiğinde veya süresi dolduğunda 401 döndürür. Kontrol düzlemi cloud:* uç noktaları, bulut oturum bearer'ı eksik veya iptal edildiğinde 401 döndürür — dashboard'dan yeniden bağlanın.

On this page