Description
DiscordService.sendWebhook() (src/webhook/discord.service.ts) issues a raw https.request() to the configured DISCORD_WEBHOOK_URL with no timeout configured, mirroring the same gap as WebhookService.send() (see the related issue). Since EscrowController.raiseDispute() and DisputeSagaService.escalate() both await discordService.notifyDisputeNeedsJurors(...) directly in their request path (not fire-and-forget), a hung connection to Discord's webhook endpoint would stall the HTTP response to the client raising the dispute, even though notifyDisputeNeedsJurors() already catches and logs errors rather than propagating them — it just never gets the chance to if the request never settles.
Component
Backend
Difficulty
🟢 Easy
Tasks
Acceptance Criteria
Estimated Time
1-2 hours
Description
DiscordService.sendWebhook()(src/webhook/discord.service.ts) issues a rawhttps.request()to the configuredDISCORD_WEBHOOK_URLwith no timeout configured, mirroring the same gap asWebhookService.send()(see the related issue). SinceEscrowController.raiseDispute()andDisputeSagaService.escalate()bothawaitdiscordService.notifyDisputeNeedsJurors(...)directly in their request path (not fire-and-forget), a hung connection to Discord's webhook endpoint would stall the HTTP response to the client raising the dispute, even thoughnotifyDisputeNeedsJurors()already catches and logs errors rather than propagating them — it just never gets the chance to if the request never settles.Component
Backend
Difficulty
🟢 Easy
Tasks
https.request()call inDiscordService.sendWebhook()notifyDisputeNeedsJurors()resolves (having logged the failure) within the configured timeout rather than hangingAcceptance Criteria
Estimated Time
1-2 hours