summaryrefslogtreecommitdiff
path: root/src/discord/verification.ts
blob: c60c70e533377461cab831cbda3a779ec9b31738 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 };
}