From 62d7a6183444c8df04ca9d54838486d846414ce7 Mon Sep 17 00:00:00 2001 From: Dries Augustyns Date: Mon, 1 Dec 2025 16:27:19 +0100 Subject: [PATCH] Automatic SNS verification --- apps/api/src/controllers/Webhooks.ts | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/apps/api/src/controllers/Webhooks.ts b/apps/api/src/controllers/Webhooks.ts index 2aa359b..f2ac0e0 100644 --- a/apps/api/src/controllers/Webhooks.ts +++ b/apps/api/src/controllers/Webhooks.ts @@ -30,6 +30,38 @@ export class Webhooks { const eventType = body.eventType as 'Bounce' | 'Delivery' | 'Open' | 'Complaint' | 'Click'; const messageId = body.mail?.messageId; + // Handle SNS subscription confirmation + if (req.body.Type === 'SubscriptionConfirmation') { + signale.info('SNS Subscription Confirmation received'); + signale.info('Subscribe URL:', req.body.SubscribeURL); + + // Automatically confirm the subscription + try { + const confirmResponse = await fetch(req.body.SubscribeURL); + if (confirmResponse.ok) { + signale.success('SNS subscription confirmed successfully'); + return res.status(200).json({ + success: true, + message: 'Subscription confirmed', + }); + } else { + signale.error('Failed to confirm SNS subscription:', confirmResponse.statusText); + return res.status(200).json({ + success: false, + message: 'Failed to confirm subscription', + subscribeURL: req.body.SubscribeURL, + }); + } + } catch (confirmError) { + signale.error('Error confirming SNS subscription:', confirmError); + return res.status(200).json({ + success: false, + message: 'Error confirming subscription', + subscribeURL: req.body.SubscribeURL, + }); + } + } + if (!messageId) { signale.warn('[WEBHOOK] No messageId found in SNS notification'); return res.status(400).json({success: false, error: 'No messageId found'});