Studio-Integration
Cuby kann als eingebettete Komponente im ProcessCube® Studio (oder anderen Host-Anwendungen)
betrieben werden. Dafür bietet es einen eigenen /apps-Namespace ohne Header und Footer
sowie eine PostMessage-basierte Authentifizierung.
/apps-Namespace
Alle Seiten sind unter dem /apps-Prefix als Standalone-Layout verfügbar — ohne Header
und Footer, optimiert für die iframe-Einbettung:
| Route | Seite |
|---|---|
/apps | Meine Apps (installierte Produkte) |
/apps/product/:id | Produkt-Detail |
/apps/marketplace | Marketplace |
/apps/setup/products/:id/config | Plugin-Konfiguration |
Zwei Layout-Modi
PostMessage-Auth-Flow
Die Authentifizierung zwischen Studio und eingebettetem Cuby-iframe erfolgt über
window.postMessage:
Der Auth-Hook im Frontend (usePostMessageAuth.js) empfängt den Token automatisch
und tauscht ihn gegen ein Session Cookie.
Ansicht steuern
Das Studio kann die Ansicht des eingebetteten Cuby über PostMessage-Events steuern:
| Message | Wirkung |
|---|---|
"fullsize" | Vollbild-Modus (maximale Fläche) |
"normal" | Standard-Ansicht |
Theme-Steuerung
Das Theme kann per URL-Parameter erzwungen werden, um es an das Host-System anzupassen:
http://localhost:3847/apps?theme=dark
http://localhost:3847/apps?theme=lightOhne Parameter wird die Betriebssystem-Einstellung verwendet.
React-Shims
Plugin-Komponenten (config-component.js, detail-component.js) nutzen React-Shims,
um die gleiche React-Instanz wie die Host-Anwendung zu verwenden. Das verhindert
Konflikte durch mehrere React-Versionen:
| Endpunkt | Modul |
|---|---|
/api/shim/react.js | React (alle Hooks und APIs) |
/api/shim/react-jsx-runtime.js | JSX Runtime (jsx, jsxs, Fragment) |
/api/shim/react-dom.js | ReactDOM (createPortal, createRoot, etc.) |
Plugin-Komponenten importieren React über diese Shims statt über eigene node_modules.
Embedding-Beispiel
<!-- Im Studio oder einer anderen Host-Anwendung -->
<iframe
id="cuby-frame"
src="http://localhost:3847/apps"
style="width: 100%; height: 100%; border: none;"
></iframe>
<script>
const frame = document.getElementById('cuby-frame');
// 1. Auth-Token holen
const res = await fetch('http://localhost:3847/api/auth/token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ apiKey: 'DEIN_API_KEY' })
});
const { token } = await res.json();
// 2. Token an iframe senden
frame.contentWindow.postMessage(
{ type: 'cuby:auth', token },
'http://localhost:3847'
);
</script>Regeln für neue Seiten
Beim Hinzufügen neuer Seiten im Frontend:
- Jede Seite, die von
/appsaus erreichbar ist, braucht eine Route unter/apps/... - Keine hardcoded Zurück-Pfade — Komponenten erhalten
backPathundbasePathals Props - Navigation-Pfade immer mit
basePathprefixen returnToinlocation.statefür Seiten, die von verschiedenen Stellen aufgerufen werden
Weiterführend
- Authentifizierung — Alle Auth-Methoden im Detail
- Dashboard — Die Web-Oberfläche