Saltar al contenido

Licencias y precios ​

La firma del paquete solo garantiza que no se ha manipulado y de quién viene. La licencia decide quién puede usarlo.

priceMonthly en plugin.json es el precio de lista en EUR al mes sin IVA, junto con description, category e icon para el escaparate. Son orientativos: no se cobra nada; no hay contratación ni facturación conectadas, y el panel lo dice.

Licencia ​

  • Token: <payload base64url>.<firma>, firmado con Ed25519 con la clave de licencias de Hury Studio (PLUGIN_LICENSE_PUBLIC_KEY) o con la de paquetes de Hury (PLUGIN_PUBLIC_KEY). Contenido: { v, installId | "*", plugins: [claves] | "*", exp, iat, jti? }.
  • Atada al installId de la instalación (Ajustes → Módulos → Licencias lo muestra) o * (licencia interna de la casa). Un paquete se licencia con las claves que reúne.
  • Exigirla: con PLUGINS_LICENSE=required (por defecto off), un plugin con priceMonthly > 0 no se instala sin licencia válida para esta instalación (402 PLUGIN_UNLICENSED) y, al arrancar, no se carga si no la tiene o ha caducado. Los gratuitos no la necesitan.
  • Añadirla: Ajustes → Módulos → Licencias, o node dist/plugin-license.mjs <fichero>.
  • Revocación: la licencia puede llevar un jti y revocarse desde Hury Studio. Con PLUGINS_REVOCATION_URL (https) la API consulta una lista firmada al arrancar y cada 10 minutos. Nunca se revoca por no poder consultar.

Qué significa para un plugin propio ​

Las licencias las emiten las claves de Hury, no la clave de confianza de un desarrollador. Por tanto:

  • Un plugin propio firmado con una clave de confianza debe publicarse con priceMonthly en 0 (o sin el campo) si la instalación usa PLUGINS_LICENSE=required; de lo contrario no se instalaría sin una licencia que tú no puedes emitir.
  • Un plugin firmado con una clave de confianza no cuenta como oficial y no puede usar el catálogo privado de Hury.
  • La licencia protege el uso comercial (instalar, cargar, descargar); no oculta el código: el del servidor va dentro del .zip y el del panel llega al navegador.

Bloqueo de módulos ​

La API, no la interfaz, bloquea un módulo (lib/moduleBlocks.ts): se ve apagado para todo el sistema aunque su interruptor esté encendido, y no se puede encender. Motivos:

MotivoCuándo
not_installedLa clave es de un plugin y no está instalado. Siempre, con o sin PLUGINS_LICENSE.
unlicensedSolo con PLUGINS_LICENSE=required y sin licencia válida que cubra la clave.

PUT /settings/features y POST /modules/:key/enable responden 422 MODULE_BLOCKED si se intenta encender uno bloqueado. Apagar siempre se permite.

Contrato con el host: apiVersion 2. Sitio estático: no recoge datos ni usa servicios de terceros.