Plugin-System
Produkte können über das Plugin-Interface erweiterte Funktionalität bieten. Plugins sind npm-Pakete im @processcube-Scope mit dem Suffix .cuby.
Namenskonvention
- Scope:
@processcube - Suffix:
.cuby - Beispiel:
@processcube/example.cuby
Produkt-Typen
| Typ | Beschreibung | Verhalten |
|---|---|---|
bpmn | BPMN-Prozesse | Wird zur ProcessCube® Engine deployed |
flow | Node-RED Flows | Wird zu ProcessCube® LowCode installiert |
npx | Ausführbare Programme | Wird als Prozess gestartet und überwacht |
Die Typ-Erkennung erfolgt über das cuby-Feld in der package.json des Pakets:
{
"name": "@processcube/example.cuby",
"cuby": {
"type": "npx",
"plugin": "index.js"
}
}Ohne explizite Definition wird der Typ automatisch erkannt:
.bpmn-Dateien →bpmn*flow*.json-Dateien →flowbin-Feld in package.json →npx
Plugin-Interface
{
// Route-Registrierung (Main-Thread)
init(router, cuby, context) {},
// Lifecycle-Methoden (Worker-Prozess)
deploy(productDir, config, onProgress, cuby, context) {},
start(productDir, cuby, context) {},
stop(cuby, context) {},
undeploy(productDir, cuby, context) {},
// Konfiguration
getConfig() {}
}init()wird auf dem Main-Thread ausgeführt und registriert HTTP-Routesdeploy(),start(),stop(),undeploy()laufen in separaten Node.js-Child-ProzessengetConfig()gibt die aktuelle Konfiguration zurück
Plugin-Routes
Plugins können eigene API-Endpunkte registrieren:
init(router, cuby, context) {
router.get('/status', (req) => {
return Response.json({ status: 'ok' });
});
router.post('/action', (req) => {
// ...
});
}Die Routes sind erreichbar unter: /api/plugins/{instanceId}/{route}
Cuby-Kontext
Plugins erhalten einen cuby-Kontext mit folgenden Methoden:
| Methode | Beschreibung |
|---|---|
registerProcessCube(opts) | ProcessCube® Engine/LowCode-Instanz registrieren |
getProcessCubes() | Alle registrierten Instanzen abrufen |
reservePort(desiredPort) | Port für das Plugin reservieren |
releasePort(port) | Port freigeben |
setProcessCubeConfig(pcId, config) | Konfiguration für eine ProcessCube®-Instanz setzen |
getProcessCubeConfig(pcId) | Konfiguration einer ProcessCube®-Instanz lesen |
removeProcessCubeConfig(pcId) | Konfiguration entfernen |
Konfigurations-Komponente
Plugins können eine React-Komponente für den Konfigurationsdialog bereitstellen:
- Datei:
config-component.jsim Paketverzeichnis - Wird als JSX im Browser transpiliert und gerendert
- Erhält die aktuelle Konfiguration und Callbacks zum Speichern/Abbrechen
Der Dialog erscheint automatisch nach der Installation, wenn Konfiguration nötig ist.
Detail-Komponente
Plugins können eine React-Komponente für die Detail-Ansicht bereitstellen:
- Datei:
detail-component.jsim Paketverzeichnis - Wird auf der Produkt-Detail-Seite eingebettet
Worker-Architektur
Lifecycle-Methoden laufen in separaten Node.js-Child-Prozessen (nicht im Bun-Hauptprozess):
- Grund: Die kompilierte Bun-Binary löst transitive Dependencies bei dynamischem
import()nicht korrekt auf - Kommunikation: JSON-Lines-Protokoll über stdin/stdout
- RPC: Cuby-Methoden-Aufrufe werden vom Worker über das Protokoll an den Main-Thread weitergeleitet
- Logs: Jede Lifecycle-Methode schreibt eine eigene Log-Datei (
deploy.log,start.log, etc.)
ProcessCube®-Integration
Plugins können sich mit ProcessCube® Engine- und LowCode-Instanzen verbinden:
- Plugin ruft
cuby.registerProcessCube()mit Engine-URL, LowCode-URL(s) und optionalen Auth-Daten auf - Cuby wartet auf Health-Check der Instanz (bis zu 30 Versuche, je 2 Sekunden)
- Bei Authority-Konfiguration wird ein OAuth2-Token abgerufen
- Socket.IO-Verbindung zum LowCode-Endpoint
/cubywird hergestellt - Konfigurationsaustausch über
cuby:get,cuby:keys,cuby:updateEvents