Cómo funciona el array plugins
Cada entrada en el array plugins es un objeto plano con dos propiedades: un string namespace que identifica de forma única al plugin y una carga config con sus opciones. Nunca creas este objeto manualmente. Los paquetes de plugins exportan helpers de factory tipados como defineHttp, defineI18n, defineSchedule y defineSignal que producen entradas con la forma correcta y con inferencia completa en TypeScript. El framework resuelve la configuración de cada plugin en runtime emparejando el namespace, por lo que cambiar un plugin nunca afecta a otro.
import { defineConfig } from '@spraxium/core';
import { defineHttp } from '@spraxium/http';
import { defineI18n } from '@spraxium/i18n';
import { defineSchedule } from '@spraxium/schedule';
export default defineConfig({
plugins: [
defineI18n({
defaultLocale: 'en-US',
references: [{ name: 'commands', path: './locales' }],
}),
defineHttp({
enabled: true,
port: 3001,
host: 'localhost',
apiKey: process.env.HTTP_API_KEY ?? 'dev-secret',
sharding: false,
}),
defineSchedule({
timezone: 'America/Sao_Paulo',
defaultLockTtlMs: 60_000,
disableAll: false,
}),
],
});Factories de plugins oficiales
| Factory | Paquete | Finalidad |
|---|---|---|
| defineHttp | @spraxium/http | Puente HTTP con enrutado estilo Express para APIs de bots. |
| defineI18n | @spraxium/i18n | Internacionalización con referencias de locale y cadenas de fallback. |
| defineSchedule | @spraxium/schedule | Programación de tareas basada en cron con soporte de zona horaria y locks. |
| defineSignal | @spraxium/signal | Receptor en el lado del bot para sobres de eventos firmados desde servicios externos. |
| defineComponents | @spraxium/components | Sistema de interacción de componentes para botones, selects y modales. |
Extraer la configuración de plugins en archivos separados
En proyectos con varios plugins, mantener todas las llamadas de factory inline en spraxium.config.ts vuelve el archivo difícil de revisar. El patrón recomendado es extraer la llamada de factory de cada plugin a un archivo dedicado dentro de config/, exportar el resultado como constante con nombre e importarlo en la configuración raíz. Esto mantiene las opciones de cada plugin aisladas y auditables de forma independiente.
import { defineSchedule } from '@spraxium/schedule';
export const schedulePlugin = defineSchedule({
timezone: 'America/Sao_Paulo',
defaultLockTtlMs: 60_000,
disableAll: false,
});Mantén la configuración cerca del import de la factory
Cuando el namespace y la carga están visibles juntos en el mismo archivo, las auditorías y refactors son significativamente más rápidos. Evita repartir opciones de plugins entre módulos utilitarios o archivos de constantes compartidos para otros fines.