UNPKG

@upstash/workflow

Version:

Durable, Reliable and Performant Serverless Functions

107 lines (105 loc) 2.94 kB
import { SDK_TELEMETRY, serveBase, serveManyBase } from "./chunk-BON2RKOR.mjs"; // platforms/nextjs.ts var appTelemetry = { sdk: SDK_TELEMETRY, framework: "nextjs", runtime: `node@${process.version}` }; var pagesTelemetry = { sdk: SDK_TELEMETRY, framework: "nextjs-pages", runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}` }; var serve = (routeFunction, options) => { const { handler: serveHandler } = serveBase( routeFunction, appTelemetry, options ); return { POST: async (request) => { return await serveHandler(request); } }; }; var createWorkflow = (...params) => { const [routeFunction, options = {}] = params; return { routeFunction, options, workflowId: void 0 }; }; var serveMany = (workflows, options) => { return { POST: serveManyBase({ workflows, getUrl(params) { return params.url; }, serveMethod: (...params) => serve(...params).POST, options }).handler }; }; var servePagesRouter = (routeFunction, options) => { const { handler: serveHandler } = serveBase(routeFunction, pagesTelemetry, options); const handler = async (request_, res) => { if (request_.method?.toUpperCase() !== "POST") { res.status(405).json("Only POST requests are allowed in worklfows"); return; } else if (!request_.url) { res.status(400).json("url not found in the request"); return; } const protocol = request_.headers["x-forwarded-proto"]; const baseUrl = options?.baseUrl ?? `${protocol}://${request_.headers.host}`; const request = new Request(options?.url ?? `${baseUrl}${request_.url}`, { body: (typeof request_.body === "string" ? request_.body : typeof request_.body === "undefined" ? void 0 : JSON.stringify(request_.body)) ?? "", headers: new Headers(request_.headersDistinct), method: "POST" }); const response = await serveHandler(request); for (const [key, value] of response.headers.entries()) { res.setHeader(key, value); } const responseData = await response.json(); res.status(response.status).json(responseData); }; return { handler }; }; var createWorkflowPagesRouter = (...params) => { const [routeFunction, options = {}] = params; return { routeFunction, options, workflowId: void 0 }; }; var serveManyPagesRouter = (workflows, options) => { return serveManyBase({ workflows, getUrl(request_) { const protocol = request_.headers["x-forwarded-proto"]; const host = request_.headers.host; const baseUrl = `${protocol}://${host}`; return `${baseUrl}${request_.url}`; }, serveMethod: (...params) => servePagesRouter(...params).handler, options }); }; export { createWorkflow, createWorkflowPagesRouter, serve, serveMany, serveManyPagesRouter, servePagesRouter };