@upstash/workflow
Version:
Durable, Reliable and Performant Serverless Functions
107 lines (105 loc) • 2.94 kB
JavaScript
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
};