61 lines
1.6 KiB
TypeScript
61 lines
1.6 KiB
TypeScript
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<string, string>;
|
|
payload?: unknown;
|
|
provider?: string;
|
|
channel?: string;
|
|
attempts?: number;
|
|
};
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const auth = await getAuthContext(event);
|
|
const body = await readBody<EnqueueBody>(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: "omni-outbound",
|
|
jobId: job.id,
|
|
omniMessageId,
|
|
};
|
|
});
|