mirror of
https://github.com/eliasstepanik/core.git
synced 2026-01-11 17:28:28 +00:00
48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import { type ActionFunctionArgs } from "@remix-run/server-runtime";
|
|
import { requireUserId, requireWorkpace } from "~/services/session.server";
|
|
|
|
import { redirect, json } from "@remix-run/node";
|
|
import { prisma } from "~/db.server";
|
|
|
|
export async function action({ request }: ActionFunctionArgs) {
|
|
const userId = await requireUserId(request);
|
|
const workspace = await requireWorkpace(request);
|
|
|
|
if (request.method === "POST") {
|
|
const formData = await request.formData();
|
|
const url = formData.get("url") as string;
|
|
const secret = formData.get("secret") as string;
|
|
|
|
if (!url) {
|
|
return json({ error: "Missing required fields" }, { status: 400 });
|
|
}
|
|
|
|
try {
|
|
// Validate URL format
|
|
new URL(url);
|
|
} catch (error) {
|
|
return json({ error: "Invalid URL format" }, { status: 400 });
|
|
}
|
|
|
|
try {
|
|
await prisma.webhookConfiguration.create({
|
|
data: {
|
|
url,
|
|
secret: secret || null,
|
|
eventTypes: ["activity.created"], // Default to activity events
|
|
workspaceId: workspace.id,
|
|
userId,
|
|
isActive: true,
|
|
},
|
|
});
|
|
|
|
return redirect("/settings/webhooks");
|
|
} catch (error) {
|
|
console.error("Error creating webhook:", error);
|
|
return json({ error: "Failed to create webhook" }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
return json({ error: "Method not allowed" }, { status: 405 });
|
|
}
|