ditto/src/controllers/api/push.ts
2024-09-30 19:12:53 -05:00

39 lines
1.1 KiB
TypeScript

import { z } from 'zod';
import { AppController } from '@/app.ts';
import { parseBody } from '@/utils/api.ts';
const pushSubscribeSchema = z.object({
subscription: z.object({
endpoint: z.string(),
keys: z.object({
p256dh: z.string(),
auth: z.string(),
}),
data: z.object({
alerts: z.object({
mention: z.boolean().optional(),
status: z.boolean().optional(),
reblog: z.boolean().optional(),
follow: z.boolean().optional(),
follow_request: z.boolean().optional(),
favourite: z.boolean().optional(),
poll: z.boolean().optional(),
update: z.boolean().optional(),
'admin.sign_up': z.boolean().optional(),
'admin.report': z.boolean().optional(),
}).optional(),
policy: z.enum(['all', 'followed', 'follower', 'none']).optional(),
}),
}),
});
export const pushSubscribeController: AppController = async (c) => {
const data = pushSubscribeSchema.safeParse(await parseBody(c.req.raw));
if (!data.success) {
return c.json({ error: 'Invalid request', schema: data.error }, 400);
}
return c.json({});
};