diff options
| author | Fuwn <[email protected]> | 2025-09-24 18:14:30 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-09-24 18:14:30 -0700 |
| commit | 2d987046d094cf5eb784c8d79d678bd3efa5eaf9 (patch) | |
| tree | dd37d395961d9a68e3e1293a89fb46992aab88d1 /packages/interactions/discord/verification.ts | |
| parent | style: Lint (diff) | |
| download | umabotdiscord-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.ts | 24 |
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 }; +}; |