← Integrações GitHub
TypeScript
Webhook do GitHub com Next.js App Router
Leia request.text uma única vez, valide a assinatura e só então faça o parse do JSON.
Exemplo de código
Endpoint de webhook
Exemplos de código, nomes de cabeçalhos, nomes de eventos e assinaturas permanecem literais nos dois idiomas.
import crypto from 'node:crypto';
import { NextRequest, NextResponse } from 'next/server';
export async function POST(request: NextRequest) {
const body = await request.text();
const sent = request.headers.get('x-hub-signature-256') ?? '';
const expected = `sha256=${crypto.createHmac('sha256', process.env.GITHUB_WEBHOOK_SECRET!)
.update(body).digest('hex')}`;
const valid = sent.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(sent), Buffer.from(expected));
if (!valid) return new NextResponse(null, { status: 401 });
await enqueue({ deliveryId: request.headers.get('x-github-delivery'),
event: request.headers.get('x-github-event'), payload: JSON.parse(body) });
return new NextResponse(null, { status: 202 });
}
Passos de configuração
Valide a primeira delivery
Passos de configuração 1
Crie um workspace no DevLog e copie o endpoint e o Secret.
Passos de configuração 2
Configure o mesmo Secret no GitHub e na variável segura da aplicação.
Passos de configuração 3
Envie um ping e confirme assinatura, Delivery ID e payload no inbox.