inngest
Version:
Official SDK for Inngest.com. Inngest is the reliability layer for modern applications. Inngest combines durable execution, events, and queues into a zero-infra platform with built-in observability.
1 lines • 5.76 kB
Source Map (JSON)
{"version":3,"file":"cloudflare.cjs","names":["frameworkName: SupportedFrameworkName","InngestCommHandler"],"sources":["../src/cloudflare.ts"],"sourcesContent":["/**\n * An adapter for Cloudflare Workers (and Workers on Pages) to serve and\n * register any declared functions with Inngest, making them available to be\n * triggered by events.\n *\n * @example\n * ```ts\n * import { serve } from \"inngest/cloudflare\";\n * import { inngest } from \"../../inngest/client\";\n * import fnA from \"../../inngest/fnA\"; // Your own function\n *\n * export const onRequest = serve({\n * client: inngest,\n * functions: [fnA],\n * });\n * ```\n *\n * @example Cloudflare Workers\n * ```ts\n * import { serve } from \"inngest/cloudflare\";\n * import { inngest } from \"../../inngest/client\";\n * import fnA from \"../../inngest/fnA\"; // Your own function\n *\n * export default {\n * fetch: serve({\n * client: inngest,\n * functions: [fnA],\n * }),\n * };\n * ```\n *\n * @module\n */\n\nimport {\n InngestCommHandler,\n type ServeHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport type { Either } from \"./helpers/types.ts\";\nimport type { SupportedFrameworkName } from \"./types.ts\";\n\n/**\n * The name of the framework, used to identify the framework in Inngest\n * dashboards and during testing.\n */\nexport const frameworkName: SupportedFrameworkName = \"cloudflare-pages\";\n\n/**\n * Expected arguments for a Cloudflare Pages Function.\n */\nexport type PagesHandlerArgs = [\n { request: Request; env: Record<string, string | undefined> },\n];\n\n/**\n * Expected arguments for a Cloudflare Worker.\n */\nexport type WorkersHandlerArgs = [Request, Record<string, string | undefined>];\n\n/**\n * Support both Cloudflare Pages Functions and Cloudflare Workers by lightly\n * asserting the shape of the input arguments at runtime.\n */\nconst deriveHandlerArgs = (\n args: Either<PagesHandlerArgs, WorkersHandlerArgs>,\n): { req: Request; env: Record<string, string | undefined> } => {\n if (!Array.isArray(args) || args.length < 1) {\n throw new Error(\"No arguments passed to serve handler\");\n }\n\n if (typeof args[0] === \"object\" && \"request\" in args[0] && \"env\" in args[0]) {\n return {\n req: args[0].request,\n env: args[0].env,\n };\n }\n\n if (args.length > 1 && typeof args[1] === \"object\") {\n return {\n req: args[0],\n env: args[1],\n };\n }\n\n throw new Error(\n \"Could not derive handler arguments from input; are you sure you're using serve() correctly?\",\n );\n};\n\n/**\n * In Cloudflare, serve and register any declared functions with Inngest, making\n * them available to be triggered by events.\n *\n * @example Cloudflare Pages\n * ```ts\n * import { serve } from \"inngest/cloudflare\";\n * import { inngest } from \"../../inngest/client\";\n * import fnA from \"../../inngest/fnA\"; // Your own function\n *\n * export const onRequest = serve({\n * client: inngest,\n * functions: [fnA],\n * });\n * ```\n *\n * @example Cloudflare Workers\n * ```ts\n * import { serve } from \"inngest/cloudflare\";\n * import { inngest } from \"../../inngest/client\";\n * import fnA from \"../../inngest/fnA\"; // Your own function\n *\n * export default {\n * fetch: serve({\n * client: inngest,\n * functions: [fnA],\n * }),\n * };\n * ```\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (\n options: ServeHandlerOptions,\n): ((\n ...args: Either<PagesHandlerArgs, WorkersHandlerArgs>\n) => Promise<Response>) => {\n const handler = new InngestCommHandler({\n frameworkName,\n ...options,\n handler: (...args: Either<PagesHandlerArgs, WorkersHandlerArgs>) => {\n const { req, env } = deriveHandlerArgs(args);\n\n return {\n body: () => req.text(),\n headers: (key) => req.headers.get(key),\n method: () => req.method,\n env: () => env,\n url: () => new URL(req.url, `https://${req.headers.get(\"host\") || \"\"}`),\n transformResponse: ({ body, status, headers }) => {\n return new Response(body, {\n status,\n headers,\n });\n },\n transformStreamingResponse: ({ body, status, headers }) => {\n return new Response(body, {\n status,\n headers,\n });\n },\n };\n },\n });\n\n /**\n * Assign a non-variadic length to the handler to ensure early runtime guards\n * aren't triggered when assessing whether exported functions are valid within\n * the framework.\n */\n const requestHandler = Object.defineProperties(handler.createHandler(), {\n length: { value: 2 },\n });\n\n return requestHandler;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,MAAaA,gBAAwC;;;;;AAkBrD,MAAM,qBACJ,SAC8D;AAC9D,KAAI,CAAC,MAAM,QAAQ,KAAK,IAAI,KAAK,SAAS,EACxC,OAAM,IAAI,MAAM,uCAAuC;AAGzD,KAAI,OAAO,KAAK,OAAO,YAAY,aAAa,KAAK,MAAM,SAAS,KAAK,GACvE,QAAO;EACL,KAAK,KAAK,GAAG;EACb,KAAK,KAAK,GAAG;EACd;AAGH,KAAI,KAAK,SAAS,KAAK,OAAO,KAAK,OAAO,SACxC,QAAO;EACL,KAAK,KAAK;EACV,KAAK,KAAK;EACX;AAGH,OAAM,IAAI,MACR,8FACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCH,MAAa,SACX,YAGyB;CACzB,MAAM,UAAU,IAAIC,8CAAmB;EACrC;EACA,GAAG;EACH,UAAU,GAAG,SAAuD;GAClE,MAAM,EAAE,KAAK,QAAQ,kBAAkB,KAAK;AAE5C,UAAO;IACL,YAAY,IAAI,MAAM;IACtB,UAAU,QAAQ,IAAI,QAAQ,IAAI,IAAI;IACtC,cAAc,IAAI;IAClB,WAAW;IACX,WAAW,IAAI,IAAI,IAAI,KAAK,WAAW,IAAI,QAAQ,IAAI,OAAO,IAAI,KAAK;IACvE,oBAAoB,EAAE,MAAM,QAAQ,cAAc;AAChD,YAAO,IAAI,SAAS,MAAM;MACxB;MACA;MACD,CAAC;;IAEJ,6BAA6B,EAAE,MAAM,QAAQ,cAAc;AACzD,YAAO,IAAI,SAAS,MAAM;MACxB;MACA;MACD,CAAC;;IAEL;;EAEJ,CAAC;AAWF,QAJuB,OAAO,iBAAiB,QAAQ,eAAe,EAAE,EACtE,QAAQ,EAAE,OAAO,GAAG,EACrB,CAAC"}