import { verifyKey } from "discord-interactions"; import type { Environment, DiscordInteraction } from "./interfaces.ts"; export const verifyDiscordRequest = async ( 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 }; };