Plugin
Il progetto dell'host dei plugin di Frontdoor, i contratti di manifest e modulo e i pacchetti accettati. Oggi disattivato.
In questa pagina
La piattaforma dei plugin è bloccata nelle versioni attuali: le route dei plugin rispondono
404e il server tiene disattivata l'impostazione dei plugin. Questa pagina ne descrive il progetto.
Frontdoor può caricare plugin in fase di esecuzione tramite un host leggero. I plugin girano nell'origine della pagina, quindi va attivato solo codice revisionato e approvato da un owner.
Input del loader
Imposta una o più di queste variabili prima della build o del deploy:
| Variabile | Valore |
|---|---|
VITE_FRONTDOOR_PLUGIN_MANIFESTS |
URL dei manifest, come elenco separato da virgole o da a capo |
VITE_FRONTDOOR_PLUGIN_MODULES |
URL dei moduli, come elenco separato da virgole o da a capo |
VITE_FRONTDOOR_ENABLE_SAMPLE_PLUGIN |
Flag booleano che carica l'esempio integrato dei ticket |
Contratto del manifest
{
"id": "ticket-plugin",
"name": "Ticket Plugin",
"version": "1.0.0",
"description": "Adds a ticket creation action, route and surface",
"entry": "https://cdn.example.com/ticket-plugin/index.js",
"permissions": ["actions.write", "routes.write"],
"roles": ["owner", "admin"],
"backend": {
"enabled": true,
"url": "https://plugins.example.com/frontdoor-webhook",
"eventSubscriptions": ["auth.login", "app.access"]
}
}
Contratto del modulo
Un modulo esporta una funzione register(api). L'SDK offre anche gli helper definePlugin() e definePluginManifest() per metadati canonici e definizioni dei plugin.
import { definePlugin, definePluginManifest } from '../pluginHost/sdk.js';
export const manifest = definePluginManifest({
id: 'ticket-plugin',
name: 'Ticket Plugin',
version: '1.0.0',
});
export function register(api) {
api.registerAction({
id: 'create-ticket',
label: 'Create Ticket',
surface: 'layout.accountMenu',
order: 20,
onClick: () => api.notify({ type: 'success', message: 'Ticket flow opened' }),
});
}
export default definePlugin({
manifest,
register,
});
API di runtime
L'host dei plugin espone:
getCurrentUser()getBranding()getLanguage()getUiStrings()navigate()notify()openExternalUrl()registerAction()registerSurface()registerRoute()registerNavigationItem()
Superfici
Superfici integrate in cui un plugin può aggiungere contenuti:
layout.nav.desktoplayout.nav.mobilelayout.accountMenuhome.hero.afterhome.controls.afterhome.catalog.afteradmin.header.actionsadmin.page.topadmin.page.bottomcustomization.page.topcustomization.page.bottom
Registro sul server
Frontdoor può salvare i metadati dei plugin in SQLite ed esporli tramite /api/plugins. Il loader di runtime legge /api/plugins/runtime e carica ogni plugin attivo che ha una entry di frontend. La pagina di amministrazione mostra il registro sul server separato dall'istantanea di runtime in memoria.
Installare e approvare
Dalla pagina di amministrazione puoi installare un plugin compilando i campi del manifest, incollando il sorgente di un modulo, caricando un singolo pacchetto JSON o indicando un URL entry esterno. Le nuove installazioni restano in attesa finché un owner non le approva.
La stessa pagina può esportare la bozza corrente come pacchetto JSON e aprire una procedura guidata di convalida prima dell'installazione o dell'approvazione. La procedura mostra il livello di rischio del pacchetto, i permessi che richiede, l'esposizione del suo webhook di backend e il pacchetto grezzo.
Eventi di backend
Un plugin può ricevere eventi di backend dichiarando backend.url e backend.eventSubscriptions. Gli eventi vengono inviati solo ai plugin attivi e approvati.
Formati dei pacchetti
Pacchetto JSON
Un singolo file JSON con un oggetto manifest e una stringa moduleSource facoltativa. Il sorgente del modulo deve essere autonomo ed esportare direttamente register(api).
{
"manifest": {
"id": "ticket-plugin",
"name": "Ticket Plugin",
"version": "1.0.0",
"permissions": ["actions.write", "routes.write", "surfaces.write"],
"roles": ["owner", "admin"]
},
"moduleSource": "export function register(api) { api.registerRoute({ id: 'ticket-plugin.route', path: '/plugins/ticket-center', label: 'Ticket Center' }); } export default { register };"
}
Pacchetto ZIP
Un archivio ZIP con questa struttura, adatto ai plugin di terze parti distribuiti come pacchetto unico:
my-plugin-1.0.0/
manifest.json
module.mjs
La pagina di amministrazione può importare ed esportare i plugin in questo formato.
Log di audit
Le approvazioni e le revoche dei plugin vengono registrate nel log di audit con tipo di destinazione plugin, così gli owner possono verificare chi ha approvato o rifiutato un pacchetto. La vista dedicata è in /admin/plugins/audit.