UNPKG

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 3.6 kB
{"version":3,"file":"koa.cjs","names":["frameworkName: SupportedFrameworkName","InngestCommHandler"],"sources":["../src/koa.ts"],"sourcesContent":["/**\n * An adapter for Koa to serve and register any declared functions with Inngest,\n * making them available to be triggered by events.\n *\n * @example\n * ```ts\n * const handler = serve({\n * client: inngest,\n * functions\n * });\n *\n * app.use((ctx) => {\n * if (ctx.request.path === \"/api/inngest\") {\n * return handler(ctx);\n * }\n * });\n * ```\n *\n * @module\n */\n\nimport type Koa from \"koa\";\nimport {\n InngestCommHandler,\n type ServeHandlerOptions,\n} from \"./components/InngestCommHandler.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 = \"koa\";\n\n/**\n * Using Koa, serve and register any declared functions with Inngest,\n * making them available to be triggered by events.\n *\n * @example\n * ```ts\n * const handler = serve({\n * client: inngest,\n * functions\n * });\n *\n * app.use((ctx) => {\n * if (ctx.request.path === \"/api/inngest\") {\n * return handler(ctx);\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 ctx: Koa.ParameterizedContext<Koa.DefaultState, Koa.DefaultContext, unknown>,\n) => Promise<void>) => {\n const handler = new InngestCommHandler({\n frameworkName,\n ...options,\n handler: (\n ctx: Koa.ParameterizedContext<\n Koa.DefaultState,\n Koa.DefaultContext,\n unknown\n >,\n ) => {\n return {\n method: () => ctx.method,\n body: () =>\n (ctx.request as unknown as { body: Record<string, unknown> }).body,\n headers: (key) => {\n const header = ctx.headers[key];\n\n if (Array.isArray(header)) {\n return header[0];\n }\n\n return header;\n },\n queryString: (key) => {\n const qs = ctx.query[key];\n\n if (Array.isArray(qs)) {\n return qs[0];\n }\n\n return qs;\n },\n url: () => {\n const hostname = ctx.host;\n const protocol = hostname?.includes(\"://\")\n ? \"\"\n : `${ctx.protocol}://`;\n const url = new URL(ctx.originalUrl, `${protocol}${hostname || \"\"}`);\n\n return url;\n },\n transformResponse: ({ body, headers, status }) => {\n for (const [name, value] of Object.entries(headers)) {\n ctx.set(name, value);\n }\n\n ctx.status = status;\n ctx.body = body;\n },\n };\n },\n });\n\n return handler.createHandler();\n};\n"],"mappings":";;;;;;;AAgCA,MAAaA,gBAAwC;;;;;;;;;;;;;;;;;;;;;AAuBrD,MAAa,SACX,YAGqB;AAsDrB,QArDgB,IAAIC,8CAAmB;EACrC;EACA,GAAG;EACH,UACE,QAKG;AACH,UAAO;IACL,cAAc,IAAI;IAClB,YACG,IAAI,QAAyD;IAChE,UAAU,QAAQ;KAChB,MAAM,SAAS,IAAI,QAAQ;AAE3B,SAAI,MAAM,QAAQ,OAAO,CACvB,QAAO,OAAO;AAGhB,YAAO;;IAET,cAAc,QAAQ;KACpB,MAAM,KAAK,IAAI,MAAM;AAErB,SAAI,MAAM,QAAQ,GAAG,CACnB,QAAO,GAAG;AAGZ,YAAO;;IAET,WAAW;KACT,MAAM,WAAW,IAAI;KACrB,MAAM,WAAW,UAAU,SAAS,MAAM,GACtC,KACA,GAAG,IAAI,SAAS;AAGpB,YAFY,IAAI,IAAI,IAAI,aAAa,GAAG,WAAW,YAAY,KAAK;;IAItE,oBAAoB,EAAE,MAAM,SAAS,aAAa;AAChD,UAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,QAAQ,CACjD,KAAI,IAAI,MAAM,MAAM;AAGtB,SAAI,SAAS;AACb,SAAI,OAAO;;IAEd;;EAEJ,CAAC,CAEa,eAAe"}