summaryrefslogtreecommitdiff
path: root/packages/interactions/discord/verification.ts
blob: 89d26db6c0790889a903466e8a9d683ceb13973c (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 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 };
};