server/api/api/v1/push/subscription/index.get.ts

53 lines
1.7 KiB
TypeScript
Raw Normal View History

import { apiRoute, auth } from "@/api";
import { createRoute } from "@hono/zod-openapi";
import { PushSubscription } from "@versia/kit/db";
import { ApiError } from "~/classes/errors/api-error";
import { WebPushSubscription as WebPushSubscriptionSchema } from "~/classes/schemas/pushsubscription";
import { RolePermissions } from "~/drizzle/schema";
export default apiRoute((app) =>
app.openapi(
createRoute({
method: "get",
path: "/api/v1/push/subscription",
summary: "Get current subscription",
description:
"View the PushSubscription currently associated with this access token.",
externalDocs: {
url: "https://docs.joinmastodon.org/methods/push/#get",
},
middleware: [
auth({
auth: true,
permissions: [RolePermissions.UsePushNotifications],
scopes: ["push"],
}),
] as const,
responses: {
200: {
description: "WebPushSubscription",
content: {
"application/json": {
schema: WebPushSubscriptionSchema,
},
},
},
},
}),
async (context) => {
const { token } = context.get("auth");
const ps = await PushSubscription.fromToken(token);
if (!ps) {
throw new ApiError(
404,
"No push subscription associated with this access token",
);
}
return context.json(ps.toApi(), 200);
},
),
);