server/api/api/v1/push/subscription/index.get.ts
Jesse Wierzbinski 58342e86e1
refactor(api): ♻️ Move from @hono/zod-openapi to hono-openapi
hono-openapi is easier to work with and generates better OpenAPI definitions
2025-03-29 03:30:06 +01:00

51 lines
1.7 KiB
TypeScript

import { apiRoute, auth } from "@/api";
import { WebPushSubscription as WebPushSubscriptionSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { PushSubscription } from "@versia/kit/db";
import { describeRoute } from "hono-openapi";
import { resolver } from "hono-openapi/zod";
import { ApiError } from "~/classes/errors/api-error";
export default apiRoute((app) =>
app.get(
"/api/v1/push/subscription",
describeRoute({
summary: "Get current subscription",
description:
"View the PushSubscription currently associated with this access token.",
externalDocs: {
url: "https://docs.joinmastodon.org/methods/push/#get",
},
tags: ["Push Notifications"],
responses: {
200: {
description: "WebPushSubscription",
content: {
"application/json": {
schema: resolver(WebPushSubscriptionSchema),
},
},
},
401: ApiError.missingAuthentication().schema,
422: ApiError.validationFailed().schema,
},
}),
auth({
auth: true,
permissions: [RolePermission.UsePushNotifications],
scopes: ["push"],
}),
async (context) => {
const { token } = context.get("auth");
const ps = await PushSubscription.fromToken(token);
if (!ps) {
throw ApiError.pushSubscriptionNotFound();
}
return context.json(ps.toApi(), 200);
},
),
);