summaryrefslogtreecommitdiff
path: root/packages/interactions/discord/verification.ts
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-09-24 18:14:30 -0700
committerFuwn <[email protected]>2025-09-24 18:14:30 -0700
commit2d987046d094cf5eb784c8d79d678bd3efa5eaf9 (patch)
treedd37d395961d9a68e3e1293a89fb46992aab88d1 /packages/interactions/discord/verification.ts
parentstyle: Lint (diff)
downloadumabotdiscord-2d987046d094cf5eb784c8d79d678bd3efa5eaf9.tar.xz
umabotdiscord-2d987046d094cf5eb784c8d79d678bd3efa5eaf9.zip
refactor: Move interactions client to packages directory
Diffstat (limited to 'packages/interactions/discord/verification.ts')
-rw-r--r--packages/interactions/discord/verification.ts24
1 files changed, 24 insertions, 0 deletions
diff --git a/packages/interactions/discord/verification.ts b/packages/interactions/discord/verification.ts
new file mode 100644
index 0000000..89d26db
--- /dev/null
+++ b/packages/interactions/discord/verification.ts
@@ -0,0 +1,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 };
+};