mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 11:29:46 +00:00
39 lines
1.1 KiB
TypeScript
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({});
|
|
};
|