{"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"}