import { readBody } from "h3"; import { getAuthContext } from "../../../utils/auth"; import { prisma } from "../../../utils/prisma"; import { enqueueOutboundDelivery } from "../../../queues/outboundDelivery"; type EnqueueBody = { omniMessageId?: string; endpoint?: string; method?: "POST" | "PUT" | "PATCH"; headers?: Record; payload?: unknown; provider?: string; channel?: string; attempts?: number; }; export default defineEventHandler(async (event) => { const auth = await getAuthContext(event); const body = await readBody(event); const omniMessageId = String(body?.omniMessageId ?? "").trim(); const endpoint = String(body?.endpoint ?? "").trim(); if (!omniMessageId) { throw createError({ statusCode: 400, statusMessage: "omniMessageId is required" }); } if (!endpoint) { throw createError({ statusCode: 400, statusMessage: "endpoint is required" }); } const msg = await prisma.omniMessage.findFirst({ where: { id: omniMessageId, teamId: auth.teamId }, select: { id: true }, }); if (!msg) { throw createError({ statusCode: 404, statusMessage: "omni message not found" }); } const attempts = Math.max(1, Math.min(Number(body?.attempts ?? 12), 50)); const job = await enqueueOutboundDelivery( { omniMessageId, endpoint, method: body?.method ?? "POST", headers: body?.headers ?? {}, payload: body?.payload ?? {}, provider: body?.provider ?? undefined, channel: body?.channel ?? undefined, }, { attempts, }, ); return { ok: true, queue: process.env.SENDER_FLOW_QUEUE_NAME || process.env.OUTBOUND_DELIVERY_QUEUE_NAME || "sender.flow", jobId: job.id, omniMessageId, }; });