From 51bfb53a39834b8c33750dc146a208e2ddaace3b Mon Sep 17 00:00:00 2001 From: George Powell Date: Sun, 22 Mar 2026 00:57:01 -0400 Subject: [PATCH] feat: add /api/send-daily-verse endpoint for daily Discord verse posting Protected by CRON_SECRET bearer token. Fetches today's verse in America/New_York timezone and POSTs it to DISCORD_DAILY_WEBHOOK. Co-Authored-By: Claude Sonnet 4.6 --- src/routes/api/send-daily-verse/+server.ts | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/routes/api/send-daily-verse/+server.ts diff --git a/src/routes/api/send-daily-verse/+server.ts b/src/routes/api/send-daily-verse/+server.ts new file mode 100644 index 0000000..db9df03 --- /dev/null +++ b/src/routes/api/send-daily-verse/+server.ts @@ -0,0 +1,36 @@ +import { json } from '@sveltejs/kit'; +import type { RequestHandler } from './$types'; +import { getVerseForDate } from '$lib/server/daily-verse'; +import { CRON_SECRET, DISCORD_DAILY_WEBHOOK } from '$env/dynamic/private'; + +export const POST: RequestHandler = async ({ request }) => { + const authHeader = request.headers.get('Authorization'); + if (!authHeader || authHeader !== `Bearer ${CRON_SECRET}`) { + return json({ error: 'Unauthorized' }, { status: 401 }); + } + + const dateStr = new Date().toLocaleDateString('en-CA', { timeZone: 'America/New_York' }); + + const verse = await getVerseForDate(dateStr); + + const fullDate = new Date(dateStr + 'T00:00:00Z').toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric', + timeZone: 'UTC', + }); + + const message = `Today's BIBDLE Verse (${fullDate}): "${verse.verseText}" — ${verse.reference}`; + + const discordResponse = await fetch(DISCORD_DAILY_WEBHOOK, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ content: message }), + }); + + if (!discordResponse.ok) { + return json({ error: 'Failed to post to Discord' }, { status: 500 }); + } + + return json({ ok: true }); +};