comfyui-deploy/web/src/server/editWorkflowOnMachine.tsx

55 lines
1.5 KiB
TypeScript

"use server";
import { getMachineById } from "@/server/curdMachine";
import { auth } from "@clerk/nextjs";
import jwt from "jsonwebtoken";
import { getOrgOrUserDisplayName } from "@/server/getOrgOrUserDisplayName";
import { withServerPromise } from "@/server/withServerPromise";
import "server-only";
import { getUrlServerSide } from "./getUrlServerSide";
export const editWorkflowOnMachine = withServerPromise(
async (machine_id: string, workflow_version_id?: string) => {
const { userId, orgId } = auth();
const domain = getUrlServerSide();
if (!userId) {
throw new Error("No user id");
}
const machine = await getMachineById(machine_id);
const expireTime = "1w";
const token = jwt.sign(
{ user_id: userId, org_id: orgId },
process.env.JWT_SECRET!,
{
expiresIn: expireTime,
},
);
const userName = await getOrgOrUserDisplayName(orgId, userId);
let endpoint = machine.endpoint;
if (machine.type === "comfy-deploy-serverless") {
endpoint = machine.endpoint.replace("comfyui-api", "comfyui-app");
}
const params = {
workflow_version_id: workflow_version_id,
auth_token: token,
org_display: userName,
origin: domain,
};
const queryString = Object.entries(params)
.filter(([key, value]) => value !== undefined)
.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value as string)}`)
.join('&');
return `${endpoint}?${queryString}`;
},
);