Module lizenzieren & im Store verkaufen

Jedes Nexus-Modul und das ACP/Core selbst ist eine lizenzierbare Einheit in der Modul-Registry von JuByteWeb. Eine Lizenz schaltet eine beliebige Teilmenge davon frei. Dieser Guide zeigt die drei Wege, Module einer Lizenz zuzuordnen.

Begriffe

  • Modul-Registry (nexus_modules): datengetriebene Liste aller lizenzierbaren Einheiten. Jede hat eine module_id, die exakt der Java-@NexusModule.id() entspricht (z. B. bansystem, anticheat-hub), sowie die Spezialeinheit acp (Kind = CORE). Neues Modul hinzufügen = eine Zeile (Seed-Migration oder POST /api/admin/modules) – kein Enum/Code nötig.
  • Produkt (products): der verkaufbare Store-Eintrag (Preis, Medien, Kategorie). Die Brücke zur Registry ist der Produkt-Key.

Weg 1 – Ein Modul als Produkt verkaufen

  1. Store-Admin → Produkte → Neu.
  2. Produkt-Key = die Modul-ID (z. B. bansystem, anticheat-hub, acp). Der Key ist nachträglich nicht änderbar.
  3. Produkttyp Plugin, Status ACTIVE.
  4. Mindestens eine Preisstufe anlegen – ohne sie ist das Produkt nicht kaufbar (TIER_NOT_FOUND).

Beim Kauf entsteht eine Lizenz, deren Entitlement automatisch dieses Modul enthält (der Resolver matcht order.product gegen die module_id).

Weg 2 – Mehrere Module in einem Paket (Bundle)

  1. Neues Produkt anlegen (nicht ein bestehendes Modul-Produkt umwandeln). Der Bundle-Key ist ein freier Name (z. B. premium-pack), keine Modul-ID.
  2. Produkttyp Paket (Bundle)speichern.
  3. Es erscheint die Sektion Bundle-Mitglieder (erst nach dem Speichern, da die Produkt-ID gebraucht wird). Dort die einzelnen Modul-Produkte hinzufügen (z. B. shop, anticheat-hub, …).
  4. Preisstufe fürs Bundle anlegen.

Der Kauf liefert eine Lizenz, die alle enthaltenen Module freischaltet – der Resolver läuft die Bundle-Mitglieder durch und übernimmt deren module_ids. Voraussetzung: jedes Mitglied hat als Key seine Modul-ID.

Weg 3 – Einer Lizenz direkt Module zuweisen

Unabhängig von Produkten, ideal für manuelle Vergabe, Tests, Sonderfälle:

Admin → Lizenzen → Lizenz öffnen → „Module verwalten" → beliebig viele Module ankreuzen → Speichern.

Das sind explizite Grants (license_module_grants) und die Quelle der Wahrheit für das modules[]-Claim. Mit „Entitlement-JWS kopieren" kannst du das fertige signierte Dokument direkt kopieren (z. B. für manuelle Aktivierung per POST /api/v1/license/activate).

Wie das Entitlement zusammengesetzt wird

resolveEntitledModuleIds bildet die Vereinigung aus:

  1. expliziten Grants der Lizenz (Weg 3) – maßgeblich,
  2. dem Produkt-/Bundle-Key, sofern er einer module_id entspricht (Weg 1/2),
  3. dem Legacy-LicenseProduct-Enum – nur bei echten Alt-Lizenzen ohne Produkt-/Order-Bezug (verhindert Fehlzuweisungen bei neuen Produkten).

Es werden nur Module ausgegeben, die in der Registry aktiv sind. Für „alle Module" kann das Dokument ["*"] enthalten.

Ein neues Modul registrieren

Wenn ein Modul noch nicht in der Registry ist:

POST /api/admin/modules
{ "moduleId": "newmodule", "name": "New Module", "kind": "MODULE", "premium": true }

(moduleId: ^[a-z][a-z0-9-]*$, erlaubt Bindestriche wie anticheat-hub.)

Siehe Lizenz-API-Referenz.