Causa raiz do 'body is empty' relatado pelo usuário ao clicar em redefinir senha do ramal: o cliente sempre mandava Content-Type: application/json mesmo em requisições sem corpo (POST/PATCH de ação, ex.: reset-password, agent-console available/pause/unpause/logout, dialplan publish/rollback, campanha start/pause/stop/drain). O Fastify rejeita isso com 400 'Body cannot be empty when content-type is set to application/json' — nunca detectado antes porque todo teste anterior foi via curl sem fixar esse header, não reproduzindo o comportamento real do fetch() do navegador. Corrigido na única função request() central (apps/frontend/src/lib/api-client.ts): só envia o header quando há de fato um corpo. Bug relacionado encontrado na mesma revisão: DELETE /api/suppression/:id exige removalReason no corpo, mas api.delete() nem aceitava um argumento de corpo — o botão 'Desbloquear' da lista de bloqueio sempre falhava com 403. api.delete() agora aceita body opcional; a tela pede o motivo via prompt antes de remover.
7.0 KiB
7.0 KiB