'use server' import type { CreateWebhookInput, WebhookResult } from './types' import { requireRole, UserRole } from '@admin/auth/middleware' import db from '@admin/db' import { webhookSubscriptions, webhooks } from '@admin/db/schema' import { toActionError } from '@admin/utils/error/to-action-error' import { generateWebhookSecret } from '@admin/utils/webhook/generate-webhook-secret' import { updateTag } from 'next/cache' import { webhooksCacheTags } from './types' export async function createWebhook(input: CreateWebhookInput): Promise { await requireRole([UserRole.ADMIN]) try { const created = await db.transaction(async (tx) => { const [row] = await tx .insert(webhooks) .values({ name: input.name, url: input.url, secret: generateWebhookSecret(), enabled: input.enabled }) .returning() if (input.events.length > 0) { await tx .insert(webhookSubscriptions) .values(input.events.map((event) => ({ webhookId: row.id, event }))) } return row }) updateTag(webhooksCacheTags.endpoints) updateTag(webhooksCacheTags.subscriptions) return { success: true, webhook: { id: created.id, name: created.name, url: created.url, enabled: created.enabled, createdAt: created.createdAt, updatedAt: created.updatedAt } } } catch (error) { console.error('Error creating webhook:', error) return { success: false, error: toActionError(error, 'Failed to create webhook') } } }