Desarrollo remoto
Puedes desarrollar plugins desde cualquier ordenador y subirlos a un servidor OpenFactu remoto sin SSH.
Requisitos
npm i -g @openfactu/clinpm i @openfactu/plugin-sdk1. Generar API Key
Desde la UI del ERP como admin: Plugins > Desarrollo > Generar API Key
Obtienes:
- Client ID (
ofk_...) — identificador publico - Client Secret (
ofs_...) — clave privada, solo se muestra una vez
Las keys se pueden desactivar o revocar en cualquier momento.
2. Auto-sync al guardar
# Desde la carpeta de tu pluginopenfactu plugin watch \ --server http://192.168.1.100:3000 \ --client-id ofk_abc123... \ --client-secret ofs_xyz789...Cada vez que guardes un archivo, se sube al servidor y se recarga automaticamente. El browser se actualiza sin refrescar.
3. Push manual
openfactu plugin push \ --server http://192.168.1.100:3000 \ --client-id ofk_abc123... \ --client-secret ofs_xyz789...4. Desarrollo local
Si tienes OpenFactu instalado en tu maquina:
# Enlazar tu plugin (symlink)openfactu plugin link ~/mi-plugin
# Arrancar con hot reloadopenfactu plugin dev mi-pluginHot reload
Al guardar un archivo del plugin:
- El watcher detecta el cambio
- Se limpian los hooks anteriores (sin duplicados)
- Se recarga
init()del plugin - Se actualiza el manifest en memoria
- WebSocket notifica al frontend
- Los componentes UI se recargan sin refrescar la pagina
SDK
npm install @openfactu/plugin-sdkProporciona tipos completos para IntelliSense:
import type { PluginContext, HookContext } from '@openfactu/plugin-sdk';
export const init = async ({ hooks, migration, documents }: PluginContext) => { documents.onBeforeCreate('SalesInvoice', async (ctx: HookContext) => { // ctx.tenantId, ctx.db, ctx.data, ctx.user });};Template
Usa el template oficial para empezar:
- Click en “Use this template” en GitHub
- Clona tu repo
npm install- Edita
index.tsymanifest.json openfactu plugin pushoopenfactu plugin watch
API endpoints
| Endpoint | Descripcion |
|---|---|
POST /api/plugins/upload | Sube plugin como ZIP (requiere admin/dev key) |
POST /api/plugins/:id/push | Sync incremental de archivos |
POST /api/plugins/:id/reload | Recarga manual |
GET /api/dev-keys | Lista API keys |
POST /api/dev-keys | Genera nueva key |
DELETE /api/dev-keys/:id | Revoca key |
PATCH /api/dev-keys/:id/toggle | Activa/desactiva key |