import {
onCobrancaCreated,
onWebhookEvent,
onCobrancaCancelled,
type LifecycleHook,
type WebhookHook
} from 'pagamentos'
export interface PluginNotificacoesOptions {
webhookUrl: string
canal: 'slack' | 'discord' | 'teams'
}
export function pluginNotificacoes(
options: PluginNotificacoesOptions
): (LifecycleHook | WebhookHook)[] {
return [
// Notifica quando uma cobrança é criada
onCobrancaCreated(async (evt) => {
await enviarNotificacao(options, {
texto: `Nova cobrança criada: R$ ${(evt.input.valor / 100).toFixed(2)}`,
cor: 'azul'
})
}),
// Notifica quando o pagamento é confirmado
onWebhookEvent('pagamento.realizado', async (event) => {
await enviarNotificacao(options, {
texto: `Pagamento confirmado: R$ ${(event.data.cobranca.valor / 100).toFixed(2)}`,
cor: 'verde'
})
}),
// Notifica quando a cobrança é cancelada
onCobrancaCancelled(async (evt) => {
await enviarNotificacao(options, {
texto: `Cobrança cancelada: ${evt.output.id}`,
cor: 'vermelho'
})
})
]
}
async function enviarNotificacao(
options: PluginNotificacoesOptions,
payload: { texto: string; cor: string }
) {
// Implementação específica para cada canal
await fetch(options.webhookUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text: payload.texto })
})
}