Manifest van een aangepaste app
Schema-id: custom-app-manifest@1
Machineleesbaar schema: custom-app-manifest.schema.json
De canonieke beschrijving van een aangepaste React-app (sectie 6.3): de Module Federation-remote die de Platformshell in een omgeving laadt voor een zelfgeschreven app. Een manifest wordt op dezelfde manier gevalideerd, of het nu wordt geregistreerd via het Beheercentrum, wordt ingediend met een rechtstreekse API-aanroep, door een AI-assistent is gegenereerd of in een oplossingsimport wordt meegenomen — de regel van één validatiepad (sectie 6.7).
Structuur
| Veld | Type | Verplicht | Opmerkingen |
|---|---|---|---|
logicalName | tekenreeks | ja | Met uitgeversvoorvoegsel, in kleine letters snake_case (bijv. par_sales_dashboard). Gebruikt als stabiele artefact-id van de app — de audience van zijn App Context Token. |
displayName | tekenreeks | ja | Leesbare naam die op de startpagina van de shell wordt getoond. |
description | tekenreeks | null | nee | Korte beschrijving die op de tegel van de app wordt getoond. |
entryFileName | tekenreeks | nee | Het startbestand van de container in het pakket (bijv. remoteEntry.js), overgenomen uit het eigen manifest van het archief. Leeg in Hosted-modus, die geen pakket heeft. |
packageHash | tekenreeks | null | nee | SHA-256 in hexadecimale kleine letters van het archief waaruit deze app is geregistreerd. Null in Hosted-modus. Bij een oplossingsimport wordt het gecontroleerd tegen de bytes die in het pakket zijn meegereisd, zodat wat wordt geserveerd ook is wat is geëxporteerd. |
remoteEntryUrl | tekenreeks | ja | Ofwel een absolute http(s)-URL van de remoteEntry.js van de remote (Hosted-modus — de origin moet op de allowlist van de shell voor de omgeving staan, sectie 6.3), ofwel een verwijzing webresource:<logicalName> (Packaged-modus, sectie 6.15) — de bundel is opgeslagen als webresources en wordt door het platform geserveerd; de shell zet de verwijzing om naar een serveer-URL van het platform en behandelt haar als first-party. |
scope | tekenreeks | ja | De globale scopenaam van de Module Federation-container (uniek per remote), gelijk aan federation({ name }) van de remote. |
module | tekenreeks | ja | Het pad van de beschikbaar gestelde module die de shell laadt (bijv. ./App). Moet met ./ beginnen. |
requestedScopes | tekenreeks[] | ja | Scopes waarvan de app declareert dat hij ze nodig heeft; aangevraagd wanneer zijn App Context Token wordt aangemaakt en doorsneden met die van de gebruiker zelf. Mag leeg zijn. |
declaredEntities | tekenreeks[] | ja | Tabellen waarvan de app declareert dat hij ze gebruikt, voor review en afhankelijkheidsvalidatie. Mag leeg zijn. |
Waar het wordt gevalideerd
- Registratie — de Application Layer valideert het manifest tegen
custom-app-manifest@1en dwingt af datlogicalNamebegint met het voorvoegsel van de eigenaar-uitgever, voordat de app in een omgeving wordt vastgelegd. - Oplossingsimport — elk ingesloten manifest in een oplossingspakket wordt opnieuw gevalideerd tegen hetzelfde schema voordat de app in de doelomgeving wordt geregistreerd, zodat een met de hand bewerkt pakket geen ongeldige remote kan binnensmokkelen.
Beveiligingsopmerkingen
Een aangepaste React-app draait in hetzelfde JavaScript-realm als de shell (Module
Federation, geen iframe — sectie 6.3), dus de vertrouwensgrens wordt elders afgedwongen: de
origin van remoteEntryUrl moet voor de omgeving op de allowlist staan (CSP), de app kan
alleen worden geladen als een oplossing hem in die omgeving heeft uitgerold, en elke
gegevensaanroep die hij via de Runtime SDK doet, wordt aan de serverkant geautoriseerd tegen
de scopes in zijn App Context Token. Een scope declareren in requestedScopes kent die nooit
toe — hij wordt doorsneden met wat de gebruiker al heeft.
Gerelateerd
- Naslag van de Runtime SDK (hoe een aangepaste app
useParswareRuntime()gebruikt). - Oplossingspakket — neemt deze manifesten tussen omgevingen mee in
zijn array
customApps.