Erste Schritte: Modul entwickeln
Voraussetzungen
- Node.js 20+
- TypeScript 5.7+
- Zugang zum
prilog-sdkRepository
Neues Modul erstellen
bash
# Modul scaffolden (Typ A = UI-only, B = Backend, C = Integration)
npx @prilog/create-module mein-modul --type=B
cd mein-modulDas generiert:
mein-modul/
├── prilog-module.json ← Manifest (Identität, Berechtigungen, Billing)
├── package.json
├── tsconfig.json
├── src/
│ ├── index.ts ← register() / unregister() / cleanup()
│ ├── types.ts
│ ├── routes/ ← API-Endpunkte (Typ B/C)
│ ├── services/ ← Business-Logik (Typ B/C)
│ └── events/ ← Event-Handler
├── prisma/ ← DB-Migrationen (Typ B/C)
├── tests/
├── README.md
└── .gitignoreSDK installieren
bash
# Aus lokalen Tarballs (Entwicklung)
npm install /pfad/zu/prilog-sdk/dist/prilog-types-1.0.0.tgz
npm install /pfad/zu/prilog-sdk/dist/prilog-sdk-1.0.0.tgz
# Oder aus GitHub Packages (wenn published)
npm install @prilog/sdkManifest anpassen
Bearbeite prilog-module.json:
json
{
"id": "prilog-mein-modul",
"name": "Mein Modul",
"version": "0.1.0",
"type": "B",
"prilogCoreVersion": ">=1.0.0",
"description": "Kurze Beschreibung (max 200 Zeichen).",
"author": { "name": "Dein Name", "email": "mail@example.com" },
"license": "proprietary",
"permissions": ["spaces:read", "events:subscribe"],
"featureFlag": "mein-modul",
"storeCategory": "organization"
}Berechtigungen
Fordere nur Berechtigungen an die du wirklich brauchst. Jede Berechtigung wird dem Tenant-Admin bei der Installation angezeigt und muss genehmigt werden.
Modul implementieren
src/index.ts
typescript
import type { PrilogModuleContext } from '@prilog/sdk';
import { CORE_EVENTS } from '@prilog/sdk';
export async function register(ctx: PrilogModuleContext): Promise<void> {
// Auf Core-Events reagieren
ctx.events.on(CORE_EVENTS.SPACE_CREATED, async (event) => {
if (event.tenantId !== ctx.tenantId) return;
// Modul-Logik hier...
});
// Cache nutzen
await ctx.cache.set('init', 'true', { ttl: 3600 });
}
export async function unregister(ctx: PrilogModuleContext): Promise<void> {
// Aufräumen (Feature-Flags, Cache, etc.)
}
// Optional: Wird nach 30-Tage-Frist aufgerufen
export async function cleanup(tenantId: string): Promise<void> {
// Alle Modul-Daten für diesen Tenant löschen
}Billing (optional)
Füge eine billing-Sektion zum Manifest hinzu:
json
{
"billing": {
"model": "subscription",
"monthlyPrice": 4.90,
"currency": "EUR",
"trialDays": 30
}
}Im Code: ctx.billing.reportActive() einmal pro Monat aufrufen.
Für Pay-per-Use: ctx.billing.reportUsage({ type: "sms", quantity: 1 }) bei jedem Nutzungsereignis.
Validieren
bash
npx prilog-validate .Prüft: Manifest, Dateistruktur, Pflichtdateien, register()/unregister() Exports.
Modul registrieren
Internes Modul (Prilog-Team)
- Code nach
prilog-backend-api/src/modules/mein-modul/legen - In
lifecycle-manager.ts→internalModulesMap erweitern:typescript'prilog-mein-modul': () => import('../../modules/mein-modul/src/index.js'), - Im Frontend:
module-registry.ts→ Lazy-Import +MODULES-Eintrag
Externes Modul (Store)
bash
# Modul einreichen
POST /api/platform/v1/store/developer/submit
{
"manifest": { ... },
"artifactPath": "s3://prilog-store/modules/mein-modul/0.1.0.tgz"
}Nach Approval erscheint das Modul im Store-Katalog.