Como o array plugins funciona
Cada entrada no array plugins é um objeto simples com duas propriedades: uma string namespace, que identifica o plugin de forma única, e uma carga config com suas opções. Você nunca cria esse objeto manualmente. Pacotes de plugin exportam helpers de factory tipados, como defineHttp, defineI18n, defineSchedule e defineSignal, que produzem entradas no formato correto com inferência completa de TypeScript. O framework resolve a configuração de cada plugin em runtime fazendo match pelo namespace, então mudar um plugin nunca afeta outro.
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 plugin de primeira parte
| Factory | Package | Finalidade |
|---|---|---|
| defineHttp | @spraxium/http | Bridge HTTP com roteamento no estilo Express para APIs de bot. |
| defineI18n | @spraxium/i18n | Internacionalização com referências de locale e cadeias de fallback. |
| defineSchedule | @spraxium/schedule | Agendamento de tarefas baseado em cron, com suporte a fuso horário e lock. |
| defineSignal | @spraxium/signal | Receptor no lado do bot para envelopes de eventos assinados vindos de serviços externos. |
| defineComponents | @spraxium/components | Sistema de interação por components para buttons, selects e modals. |
Extraindo a config do plugin para arquivos separados
Em projetos com vários plugins, manter todas as factory calls inline em spraxium.config.ts deixa o arquivo difícil de revisar. O padrão recomendado é extrair a factory call de cada plugin para um arquivo dedicado dentro de config/, exportar o resultado como uma constante nomeada e importá-la na config raiz. Isso mantém as opções de cada plugin isoladas e auditáveis de forma independente.
import { defineSchedule } from '@spraxium/schedule';
export const schedulePlugin = defineSchedule({
timezone: 'America/Sao_Paulo',
defaultLockTtlMs: 60_000,
disableAll: false,
});Mantenha a config perto do import da factory
Quando o namespace e a carga estão visíveis juntos no mesmo arquivo, auditorias e refactors ficam significativamente mais rápidos. Evite espalhar opções de plugin por módulos utilitários ou arquivos de constantes compartilhados usados para outras finalidades.