Ir al contenido

Escribe un plugin

Un plugin enseña a Yonto a leer un tipo de sitio o de servidor. Los plugins propios de Yonto para Jellyfin, Plex y Emby están escritos igual que el que vas a escribir tú.

Un plugin es un solo archivo JavaScript. Su manifiesto, que dice quién es y adónde puede acceder, es un comentario al principio de ese archivo. El resto del archivo exporta unas pocas funciones: listar las categorías, listar los títulos de una, describir un título y buscar. Yonto las llama y muestra lo que devuelven.

/* yonto-plugin
{ "kind": "content-source", "id": "video-blog", "name": "Video blog", "version": "1.0.0",
"contractVersion": 21, "provides": "source-type", "allowedHosts": [],
"configSchema": [{ "id": "feedUrl", "label": "Feed URL", "type": "url", "required": true }] }
*/
export default {
async getCategories() { /* … */ },
async getMediaList(categoryId, { page }) { /* … */ },
async getMediaDetail(id) { /* … */ },
async search(query) { /* … */ },
};
  • Node.js 20 o posterior y git, para la herramienta de línea de comandos, yonto-plugin. Revisa, ejecuta y diagnostica un plugin en tu equipo, sin televisión, emulador ni Android SDK.
  • Un editor de texto.
  • Un sitio o servidor que leer, y el derecho a leerlo.

La herramienta está en kangzj/yonto-plugins, en GitHub, junto con el contrato de los plugins y los plugins de Yonto para Jellyfin, Plex, Emby, MacCMS y XPTV, todo con licencia MIT. Instálala desde allí:

Ventana de terminal
git clone https://github.com/kangzj/yonto-plugins.git
cd yonto-plugins
npm ci --prefix tools/plugin-cli
npm install -g ./tools/plugin-cli

Después ejecútala como yonto-plugin <command>. La mayoría de los comandos reciben el directorio del plugin y usan por defecto el directorio en el que estás. Los plugins de Yonto de ese repositorio son ejemplos completos, y la mayoría trae grabaciones, así que yonto-plugin doctor plugins/jellyfin --replay ejecuta uno sin servidor.

Ventana de terminal
yonto-plugin init my-site

Esto crea my-site/ con un plugin que ya pasa lint y doctor, para que veas todo el ciclo antes de cambiar nada. Elige otro punto de partida con --template y ponle nombre al plugin con --name.

Plantilla Qué es
blank La predeterminada. Las cuatro funciones obligatorias respondiendo con un título inventado, sin red.
video-blog El plugin que se construye en el tutorial: el feed RSS de un blog, con un feed grabado que doctor --replay ejecuta sin conexión.

El id tiene de 2 a 32 letras minúsculas, dígitos y guiones, y init se niega a usar un directorio que ya existe.

Un plugin no se ejecuta en Node.js ni en un navegador. Se ejecuta en QuickJS, un pequeño motor de JavaScript, el mismo que lleva Yonto en una televisión y yonto-plugin en tu equipo. Por eso un plugin que pasa las pruebas en tu equipo es un plugin que funciona en una televisión.

No existen URL, URLSearchParams, TextDecoder, Buffer, console, setTimeout ni Intl. Todo lo que sale del plugin pasa por un único global, yonto: yonto.fetch para las peticiones, yonto.log para los registros, yonto.store para una pequeña caché y unos cuantos analizadores. La referencia de plugins lo enumera todo.

  1. Lleva tu blog de video a la tele crea un plugin completo a partir de un feed RSS, de principio a fin, y es la forma más rápida de ver todas las piezas.
  2. Referencia de plugins es el manifiesto, los métodos, el global yonto, los errores y los límites.
  3. Pruebas y depuración trata de lint, run, doctor y las grabaciones.
  4. Publicación y seguridad trata de compartir un plugin, crear un repositorio y lo que se le pregunta a quien instala el tuyo.