import { verifyKey } from 'discord-interactions'; import type { Environment, DiscordInteraction } from './interfaces.ts'; export async function verifyDiscordRequest( request: Request, environment: Environment, ): Promise<{ isValid: boolean; interaction?: DiscordInteraction }> { const signature = request.headers.get('x-signature-ed25519'); const timestamp = request.headers.get('x-signature-timestamp'); const body = await request.text(); const isValidRequest = signature && timestamp && (await verifyKey( body, signature, timestamp, environment.DISCORD_PUBLIC_KEY, )); if (!isValidRequest) return { isValid: false }; return { interaction: JSON.parse(body) as DiscordInteraction, isValid: true }; }