feat: log entitlement purchases #3

Merged
naomi merged 9 commits from feat/entitlements into main 2025-07-06 13:48:18 -07:00
7 changed files with 339 additions and 5 deletions
Showing only changes of commit 0d50029e0c - Show all commits

View File

@ -129,40 +129,40 @@ export const instantiateServer = (): void => {
"x-signature-timestamp": string;
}; }>(
"/entitlement",
// eslint-disable-next-line complexity -- Fuck off.
async(request, response) => {
const { type, application_id: applicationId, event } = request.body;
const appInfo = applicationData[applicationId];
const isValid = await validateWebhook(request);
if (!isValid) {
await response.status(401).send({ success: false });
void sendDiscord(
"[NOTIFICATION]: Entitlement Event",
`[ENTITLEMENT]: ${appInfo?.name ?? applicationId}`,
"An invalid webhook signature was received.",
);
void sendMail(
"[NOTIFICATION]: Entitlement Event",
`[ENTITLEMENT]: ${appInfo?.name ?? applicationId}`,
"An invalid webhook signature was received.",
);
return;
}
await response.status(204).send();
const { type } = request.body;
if (type === 0) {
void sendDiscord(
"[NOTIFICATION]: Entitlement Event",
`[ENTITLEMENT]: ${appInfo?.name ?? applicationId}`,
"Received a ping from Discord.",
);
void sendMail(
"[NOTIFICATION]: Entitlement Event",
`[ENTITLEMENT]: ${appInfo?.name ?? applicationId}`,
"Received a ping from Discord.",
);
return;
}
const { application_id: applicationId, event } = request.body;
const {
user_id: userId,
guild_id: guildId,
ends_at: endsAt,
} = event.data;
const appInfo = applicationData[applicationId];
await sendDiscord(
`[ENTITLEMENT]: ${appInfo?.name ?? applicationId}`,
`Entitlement purchased!\n- **User ID**: ${userId}\n- **Guild ID**: ${guildId}\n- **Ends At**: ${endsAt}`,