blob: e4679db78d3859e54ca7020453359ac32d30faa8 (
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 };
};
|