Manifest Referansı

Eklentinin tüm bildirimsel tanımı: istediği scope'lar, abone olduğu event'ler, eklediği UI (sayfa/menü/buton/form), akış-durduran hook'lar ve fiyatlandırma. Sunucu manifest'i normalize eder: yalnız whitelist'teki scope/event/slot ve https origin'ler geçer; geçersiz girdiler sessizce düşer.

Her alanın detayı kendi sayfasında — bu sayfa şemayı tek yerde toplar. Kavramlar: Mimari.

Üst seviye şekil

{
  "requestedScopes": ["orders:read", "events:subscribe", "hooks:packet.close", …],
  "events":  ["packet.created", "packet.closed", …],          // abone olunan event'ler
  "nav":     [{ "slot": "sidebar.main", "pageId": "panel", "icon": "box", "label": { "tr": "…" } }],
  "pages":   [{ "id": "panel", "path": "/embed/panel/", "customUiOrigin": "https://…", "title": { "tr": "…" } }],
  "settingsPageId": "settings",                               // pages[]'ten bir id
  "buttons": [{ "id": "send", "slot": "packet.detail.actions", "label": {…},
                "action": { "type": "hook"|"page"|"form", … }, "confirm": {…} }],
  "forms":   [{ "id": "kurye-form", "submitLabel": {…}, "fields": [{ "key", "type", "label", … }] }],
  "hooks":   [{ "action": "packet.close", "ui": { "kind": "iframe", "pageId": "…" },
                "timeoutMs": 5000, "failMode": "open", "includeData": true }],
  "actionUrl": "https://…/api/action",                        // senkron buton/hook hedefi (https)
  "pricing": { "model": "subscription", "monthly": { "amount": 10000 }, "yearly": { "amount": 100000 } }
}

Not: webhookUrl ve connectUrl manifest'in değil sürümün alanlarıdır (endpoint tanımı). actionUrl manifest içindedir.

Alanlar

AlanTipAçıklama
requestedScopesstring[]İstenen yetkiler (katalog + hook scope'ları). Scope Referansı.
eventsstring[]Abone olunan webhook event'leri (events:subscribe ister). Event Kataloğu.
pagesarray{ id, customUiOrigin(https), path, title? } — iframe Custom UI. Sayfalar.
navarray{ slot, pageId, label?, icon? } — sol menü öğesi (ui:nav). Menü.
settingsPageIdstringpages[]'ten bir id — kur/ayarlar sayfası. Ayarlar.
buttonsarray{ id, slot, label, action:{type:hook|page|form}, confirm? } (ui:button). Butonlar.
formsarray{ id, fields[], submitLabel? } — declarative form (ui:form). Formlar.
hooksarray{ action, ui, timeoutMs, failMode, includeData?, … } — before-action gate. Hook'lar.
actionUrlstring (https)Senkron buton/hook hedefi (yoksa webhookUrl). Tek-apex'e dahil.
pricingobject{ model: free|subscription, monthly?{amount}, yearly?{amount}, trialDays?, revenueSharePercent? } — tutarlar kuruş (integer).

Whitelist'ler (tek-kaynak: catalog)

Bu listeler dışındaki değerler normalize'da düşürülür. Aşağıdakiler doğrudan kod kataloğundan render edilir (drift'siz):

scopesorders:read · orders:write · products:read · products:write · packets:status · payment_methods:read · payment_methods:write · ingredients:read · ingredients:write · customers:read · users:read · events:subscribe · ui:button · ui:form · ui:widget · ui:nav · ui:page
eventstable.closed · packet.created · packet.closed · product.created · product.updated · product.deleted · category.created · category.updated · category.deleted · user.created · user.updated · user.deleted · payment_method.created · payment_method.updated · payment_method.deleted · ingredient.created · ingredient.updated · ingredient.deleted
hook actionstable.close · packet.status.update · packet.close
nav slotsidebar.main
button slotpacket.detail.actions
form field tipleritext · textarea · number · checkbox · select · date
nav ikonlarıreceipt · puzzle · chart · box · users · tag · gear · bell
Normalize sessizdir: whitelist dışı scope/event/slot, https olmayan origin, geçersiz referans (örn. nav pageId mevcut bir page'e işaret etmiyorsa) düşürülür — kaydedince DB'de göründüğünü doğrula. Cross-field kuralları da var (nav varsa ui:nav, sayfa varsa ui:page istenmeli; hook varsa hooks:<action> scope'u gerekir).