Files
drop/server/api/v1/client/peer/index.post.ts
2025-05-13 12:28:18 +10:00

27 lines
795 B
TypeScript

import { ClientCapabilities } from "~/prisma/client";
import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
import headscaleManager from "~/server/internal/p2p/headscale";
export default defineClientEventHandler(
async (h3, { fetchClient, fetchUser }) => {
const client = await fetchClient();
if (!client.capabilities.includes(ClientCapabilities.PeerAPI))
throw createError({
statusCode: 403,
statusMessage: "Capability not allowed.",
});
if (!headscaleManager.enabled())
throw createError({
statusCode: 500,
statusMessage: "Peer network not available.",
});
const user = await fetchUser();
const key = await headscaleManager.createPreauthKey(user, client);
return key;
},
);