Manifest einer benutzerdefinierten App
Schema-ID: custom-app-manifest@1
Maschinenlesbares Schema: custom-app-manifest.schema.json
Die maßgebliche Beschreibung einer benutzerdefinierten React-App (Abschnitt 6.3): das Module-Federation-Remote, das die Plattform-Shell für eine handgeschriebene App in einer Umgebung lädt. Ein Manifest wird identisch validiert, ob es über das Admin Control Center registriert, per direktem API-Aufruf übermittelt, von einem KI-Assistenten generiert oder in einem Lösungsimport mitgeliefert wird – die Regel des einen Validierungspfads (Abschnitt 6.7).
Aufbau
| Feld | Typ | Pflicht | Hinweise |
|---|---|---|---|
logicalName | string | ja | Mit Herausgeberpräfix, Snake-Case in Kleinbuchstaben (z. B. par_sales_dashboard). Dient als stabile Artefakt-ID der App – die Zielgruppe (audience) ihres App Context Tokens. |
displayName | string | ja | Lesbarer Name, der auf der Startseite der Shell angezeigt wird. |
description | string | null | nein | Kurzbeschreibung, die auf der Kachel der App angezeigt wird. |
entryFileName | string | nein | Die Einstiegsdatei des Containers im Paket (z. B. remoteEntry.js), aus dem eigenen Manifest des Archivs übernommen. Leer im Hosted-Modus, der kein Paket hat. |
packageHash | string | null | nein | SHA-256 in Kleinbuchstaben-Hex des Archivs, aus dem diese App registriert wurde. Null im Hosted-Modus. Beim Lösungsimport wird er gegen die Bytes geprüft, die im Paket mitgereist sind, sodass ausgeliefert wird, was exportiert wurde. |
remoteEntryUrl | string | ja | Entweder eine absolute http(s)-URL der remoteEntry.js des Remotes (Hosted-Modus – ihr Ursprung muss auf der Shell-Positivliste der Umgebung stehen, Abschnitt 6.3) oder ein Verweis webresource:<logicalName> (Paketmodus, Abschnitt 6.15) – das Bundle ist als Webressourcen gespeichert und wird von der Plattform ausgeliefert; die Shell löst den Verweis zu einer Auslieferungs-URL der Plattform auf und behandelt ihn als eigenen Inhalt (First-Party). |
scope | string | ja | Der globale Scope-Name des Module-Federation-Containers (eindeutig pro Remote), entsprechend federation({ name }) des Remotes. |
module | string | ja | Der Pfad des bereitgestellten Moduls, das die Shell lädt (z. B. ./App). Muss mit ./ beginnen. |
requestedScopes | string[] | ja | Scopes, die die App als benötigt deklariert; sie werden beim Ausstellen ihres App Context Tokens angefordert und mit den eigenen Berechtigungen des Benutzers geschnitten. Darf leer sein. |
declaredEntities | string[] | ja | Tabellen, auf die die App nach eigener Angabe zugreift – zur Prüfung und zur Validierung von Abhängigkeiten. Darf leer sein. |
Wo es validiert wird
- Registrierung – der Application Layer validiert das Manifest gegen
custom-app-manifest@1und stellt sicher, dasslogicalNamemit dem Präfix des besitzenden Herausgebers beginnt, bevor er die App in einer Umgebung erfasst. - Lösungsimport – jedes in einem Lösungspaket eingebettete Manifest wird gegen dasselbe Schema erneut validiert, bevor die App in der Zielumgebung registriert wird, sodass ein von Hand bearbeitetes Paket kein ungültiges Remote einschleusen kann.
Sicherheitshinweise
Eine benutzerdefinierte React-App läuft im selben JavaScript-Realm wie die Shell (Module
Federation, kein iframe – Abschnitt 6.3), daher wird die Vertrauensgrenze an anderer Stelle
durchgesetzt: Der Ursprung von remoteEntryUrl muss für die Umgebung auf der Positivliste
stehen (CSP), die App ist nur ladbar, wenn eine Lösung sie in diese Umgebung bereitgestellt hat,
und jeder Datenaufruf, den sie über das Runtime SDK tätigt, wird serverseitig gegen die Scopes
ihres App Context Tokens autorisiert. Einen Scope in requestedScopes zu deklarieren, gewährt
ihn niemals – er wird mit dem geschnitten, was der Benutzer bereits besitzt.
Verwandt
- Referenz des Runtime SDK (wie eine benutzerdefinierte App
useParswareRuntime()nutzt). - Lösungspaket – transportiert diese Manifeste in seinem Array
customAppszwischen Umgebungen.