Kendi arayüzünü Restomenum paneli içinde bir iframe olarak gösterirsin. Sayfayı sen barındırırsın; panel onu güvenli (sandboxed) bir iframe'de yükler. Veri alışverişi yalnız App Bridge (postMessage) üzerinden, kurulumun verdiği scope'larla yapılır.
Restomenum Paneli │ <iframe src="customUiOrigin + path" sandbox> (panel, sayfanı gömer) ▼ Senin iframe sayfan ──App Bridge (postMessage, origin-pinli)──► Panel │ • bridge.getSessionToken() → tenant kimliği (JWT) │ • izinli veri istek/aksiyonları (kurulum scope'una göre) ▼ Senin backend'in ◄── session token doğrula ── (kendi API'n)
Sayfan panelin bir parçası gibi görünür ama izole çalışır: Restomenum oturum çerezine/DOM'una erişemez. Tüm etkileşim App Bridge köprüsünden geçer ve eklentinin scope'larıyla sınırlıdır.
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
| id | string | ✓ | Benzersiz. nav.pageId ve settingsPageId bununla eşleşir. |
| customUiOrigin | string (https) | ✓ | iframe origin'i. Sürümün tek Origin'iyle aynıdır (editör otomatik atar). |
| path | string | – | iframe yolu (varsayılan /). Tam src = origin + path. |
| title | i18n obj | – | Başlık (text-only render). |
"pages": [
{
"id": "dashboard", // benzersiz; nav.pageId / settingsPageId ile eşleşir
"customUiOrigin": "https://app.eklentim.com", // = sürümün Origin'i (tek-apex)
"path": "/embed", // iframe src = customUiOrigin + path
"title": { "tr": "Acme Panosu" }
}
]
// gerekli scope: "ui:page"ui:page scope'unu iste ve bir pages[] öğesi ekle.frame-ancestors ekle — yalnız panel çerçeveleyebilsin (clickjacking koruması, onayda denetlenir).frame-ancestors ile yalnız panel origin'ine izin vermeli ve App Bridge mesajlarını wildcard '*' ile değil panel origin'ine pinli göndermeli + gelen event.origin'i doğrulamalı. Detay: iframe Güvenliği.