Sezioni

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 404 e 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.desktop
  • layout.nav.mobile
  • layout.accountMenu
  • home.hero.after
  • home.controls.after
  • home.catalog.after
  • admin.header.actions
  • admin.page.top
  • admin.page.bottom
  • customization.page.top
  • customization.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.