{"version":3,"file":"h3.cjs","names":["frameworkName: SupportedFrameworkName","InngestCommHandler","processEnv","envKeys"],"sources":["../src/h3.ts"],"sourcesContent":["/**\n * An adapter for H3 to serve and register any declared functions with Inngest,\n * making them available to be triggered by events.\n *\n * @example\n * ```ts\n * import { createApp, eventHandler, toNodeListener } from \"h3\";\n * import { serve } from \"inngest/h3\";\n * import { createServer } from \"node:http\";\n * import { inngest } from \"./inngest/client\";\n * import fnA from \"./inngest/fnA\";\n *\n * const app = createApp();\n * app.use(\n *   \"/api/inngest\",\n *   eventHandler(\n *     serve({\n *       client: inngest,\n *       functions: [fnA],\n *     })\n *   )\n * );\n *\n * createServer(toNodeListener(app)).listen(process.env.PORT || 3000);\n * ```\n *\n * @module\n */\n\nimport {\n  type EventHandlerRequest,\n  getHeader,\n  getQuery,\n  type H3Event,\n  readBody,\n  send,\n  setHeaders,\n} from \"h3\";\nimport {\n  InngestCommHandler,\n  type ServeHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport { envKeys } from \"./helpers/consts.ts\";\nimport { processEnv } from \"./helpers/env.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 = \"h3\";\n\n/**\n * In h3, serve and register any declared functions with Inngest, making\n * them available to be triggered by events.\n *\n * @example\n * ```ts\n * import { createApp, eventHandler, toNodeListener } from \"h3\";\n * import { serve } from \"inngest/h3\";\n * import { createServer } from \"node:http\";\n * import { inngest } from \"./inngest/client\";\n * import fnA from \"./inngest/fnA\";\n *\n * const app = createApp();\n * app.use(\n *   \"/api/inngest\",\n *   eventHandler(\n *     serve({\n *       client: inngest,\n *       functions: [fnA],\n *     })\n *   )\n * );\n *\n * createServer(toNodeListener(app)).listen(process.env.PORT || 3000);\n * ```\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (\n  options: ServeHandlerOptions,\n): ((event: H3Event<EventHandlerRequest>) => Promise<void>) => {\n  const handler = new InngestCommHandler({\n    frameworkName,\n    ...options,\n    handler: (event: H3Event<EventHandlerRequest>) => {\n      return {\n        body: () => readBody(event),\n        headers: (key) => getHeader(event, key),\n        method: () => event.method,\n        url: () => {\n          let scheme = \"https\";\n          if ((processEnv(envKeys.NodeEnv) ?? \"dev\").startsWith(\"dev\")) {\n            scheme = \"http\";\n          }\n\n          return new URL(\n            String(event.path),\n            `${scheme}://${String(getHeader(event, \"host\"))}`,\n          );\n        },\n        queryString: (key) => {\n          const param = getQuery(event)[key];\n          if (param) {\n            return String(param);\n          }\n\n          return;\n        },\n        transformResponse: (actionRes) => {\n          const { res } = event.node;\n          res.statusCode = actionRes.status;\n          setHeaders(event, actionRes.headers);\n          return send(event, actionRes.body);\n        },\n      };\n    },\n  });\n\n  return handler.createHandler();\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,MAAaA,gBAAwC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BrD,MAAa,SACX,YAC6D;AAsC7D,QArCgB,IAAIC,8CAAmB;EACrC;EACA,GAAG;EACH,UAAU,UAAwC;AAChD,UAAO;IACL,6BAAqB,MAAM;IAC3B,UAAU,0BAAkB,OAAO,IAAI;IACvC,cAAc,MAAM;IACpB,WAAW;KACT,IAAI,SAAS;AACb,UAAKC,uBAAWC,uBAAQ,QAAQ,IAAI,OAAO,WAAW,MAAM,CAC1D,UAAS;AAGX,YAAO,IAAI,IACT,OAAO,MAAM,KAAK,EAClB,GAAG,OAAO,KAAK,yBAAiB,OAAO,OAAO,CAAC,GAChD;;IAEH,cAAc,QAAQ;KACpB,MAAM,yBAAiB,MAAM,CAAC;AAC9B,SAAI,MACF,QAAO,OAAO,MAAM;;IAKxB,oBAAoB,cAAc;KAChC,MAAM,EAAE,QAAQ,MAAM;AACtB,SAAI,aAAa,UAAU;AAC3B,wBAAW,OAAO,UAAU,QAAQ;AACpC,yBAAY,OAAO,UAAU,KAAK;;IAErC;;EAEJ,CAAC,CAEa,eAAe"}