inngest 3.48.2-pr-1209.2 → 3.49.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # inngest
2
2
 
3
+ ## 3.49.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1234](https://github.com/inngest/inngest-js/pull/1234) [`c85e2f29`](https://github.com/inngest/inngest-js/commit/c85e2f297a782e78fe4b681793464e5b60045c23) Thanks [@amh4r](https://github.com/amh4r)! - Fix not treating Next Request.body as a ReadableStream
8
+
3
9
  ## 3.49.0
4
10
 
5
11
  ### Minor Changes
package/h3.cjs CHANGED
@@ -1,5 +1,4 @@
1
1
  const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
2
- const require_strings = require('./helpers/strings.cjs');
3
2
  const require_env = require('./helpers/env.cjs');
4
3
  const require_InngestCommHandler = require('./components/InngestCommHandler.cjs');
5
4
  let h3 = require("h3");
@@ -38,50 +37,6 @@ let h3 = require("h3");
38
37
  * dashboards and during testing.
39
38
  */
40
39
  const frameworkName = "h3";
41
- const commHandler = (options, syncOptions) => {
42
- return new require_InngestCommHandler.InngestCommHandler({
43
- frameworkName,
44
- ...options,
45
- syncOptions,
46
- handler: (event) => {
47
- return {
48
- body: () => (0, h3.readBody)(event),
49
- textBody: async () => {
50
- const method = event.method;
51
- return method === "POST" || method === "PUT" || method === "PATCH" || method === "DELETE" ? await (0, h3.readRawBody)(event, "utf-8") ?? "" : "";
52
- },
53
- headers: (key) => (0, h3.getHeader)(event, key),
54
- method: () => event.method,
55
- url: () => {
56
- let scheme = "https";
57
- if ((require_env.processEnv("NODE_ENV") ?? "dev").startsWith("dev")) scheme = "http";
58
- return new URL(String(event.path), `${scheme}://${String((0, h3.getHeader)(event, "host"))}`);
59
- },
60
- queryString: (key) => {
61
- const param = (0, h3.getQuery)(event)[key];
62
- if (param) return String(param);
63
- },
64
- transformResponse: (actionRes) => {
65
- const { res } = event.node;
66
- res.statusCode = actionRes.status;
67
- (0, h3.setHeaders)(event, actionRes.headers);
68
- return (0, h3.send)(event, actionRes.body);
69
- },
70
- experimentalTransformSyncResponse: async (data) => {
71
- const headers = Object.entries((0, h3.getResponseHeaders)(event) ?? {}).reduce((acc, [key, value]) => {
72
- acc[key] = Array.isArray(value) ? value.join(",") : `${value}`;
73
- return acc;
74
- }, {});
75
- return {
76
- body: typeof data === "string" ? data : require_strings.stringify(data),
77
- headers,
78
- status: (0, h3.getResponseStatus)(event) ?? 200
79
- };
80
- }
81
- };
82
- }
83
- });
84
- };
85
40
  /**
86
41
  * In h3, serve and register any declared functions with Inngest, making
87
42
  * them available to be triggered by events.
@@ -111,45 +66,35 @@ const commHandler = (options, syncOptions) => {
111
66
  * @public
112
67
  */
113
68
  const serve = (options) => {
114
- return commHandler(options).createHandler();
115
- };
116
- /**
117
- * In h3, create a function that can define an event handler with Inngest steps
118
- * enabled, allowing you to use steps seamlessly within that API.
119
- *
120
- * @example
121
- * ```ts
122
- * import { Inngest, step } from "inngest";
123
- * import { createExperimentalEndpointWrapper } from "inngest/h3";
124
- *
125
- * const inngestEventHandler = createExperimentalEndpointWrapper({
126
- * client: new Inngest({ id: "h3-sync-example" }),
127
- * });
128
- *
129
- *
130
- * export default inngestEventHandler(async (event) => {
131
- * const foo = await step.run("example/step", async () => {
132
- * return "Hello from step!";
133
- * });
134
- *
135
- * return `
136
- * <meta charset="utf-8">
137
- * <h1>This endpoint worked!</h1>
138
- * <p>The step's result was: ${foo}</p>
139
- * `;
140
- * });
141
- * ```
142
- */
143
- const createExperimentalEndpointWrapper = (options) => {
144
- const inngestWrapper = commHandler(options, options).createSyncHandler();
145
- const h3Handler = (userlandHandler) => {
146
- return (0, h3.defineEventHandler)(inngestWrapper(userlandHandler));
147
- };
148
- return h3Handler;
69
+ return new require_InngestCommHandler.InngestCommHandler({
70
+ frameworkName,
71
+ ...options,
72
+ handler: (event) => {
73
+ return {
74
+ body: () => (0, h3.readBody)(event),
75
+ headers: (key) => (0, h3.getHeader)(event, key),
76
+ method: () => event.method,
77
+ url: () => {
78
+ let scheme = "https";
79
+ if ((require_env.processEnv("NODE_ENV") ?? "dev").startsWith("dev")) scheme = "http";
80
+ return new URL(String(event.path), `${scheme}://${String((0, h3.getHeader)(event, "host"))}`);
81
+ },
82
+ queryString: (key) => {
83
+ const param = (0, h3.getQuery)(event)[key];
84
+ if (param) return String(param);
85
+ },
86
+ transformResponse: (actionRes) => {
87
+ const { res } = event.node;
88
+ res.statusCode = actionRes.status;
89
+ (0, h3.setHeaders)(event, actionRes.headers);
90
+ return (0, h3.send)(event, actionRes.body);
91
+ }
92
+ };
93
+ }
94
+ }).createHandler();
149
95
  };
150
96
 
151
97
  //#endregion
152
- exports.createExperimentalEndpointWrapper = createExperimentalEndpointWrapper;
153
98
  exports.frameworkName = frameworkName;
154
99
  exports.serve = serve;
155
100
  //# sourceMappingURL=h3.cjs.map
package/h3.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"h3.cjs","names":["frameworkName: SupportedFrameworkName","InngestCommHandler","processEnv","stringify","h3Handler: typeof inngestWrapper"],"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 defineEventHandler,\n type EventHandlerRequest,\n type EventHandlerResponse,\n getHeader,\n getQuery,\n getResponseHeaders,\n getResponseStatus,\n type H3Event,\n readBody,\n readRawBody,\n send,\n setHeaders,\n} from \"h3\";\nimport type { Inngest } from \"./components/Inngest.ts\";\nimport {\n InngestCommHandler,\n type ServeHandlerOptions,\n type SyncHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport { processEnv } from \"./helpers/env.ts\";\nimport { stringify } from \"./helpers/strings.ts\";\nimport type { RegisterOptions, 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\nconst commHandler = (\n options: RegisterOptions & { client: Inngest.Like },\n syncOptions?: SyncHandlerOptions,\n) => {\n const handler = new InngestCommHandler({\n frameworkName,\n ...options,\n syncOptions,\n handler: (event: H3Event<EventHandlerRequest>) => {\n return {\n body: () => readBody(event),\n textBody: async () => {\n const method = event.method;\n const body =\n method === \"POST\" ||\n method === \"PUT\" ||\n method === \"PATCH\" ||\n method === \"DELETE\"\n ? ((await readRawBody(event, \"utf-8\")) ?? \"\")\n : \"\";\n\n return body;\n },\n headers: (key) => getHeader(event, key),\n method: () => event.method,\n url: () => {\n let scheme = \"https\";\n if ((processEnv(\"NODE_ENV\") ?? \"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): EventHandlerResponse => {\n const { res } = event.node;\n res.statusCode = actionRes.status;\n setHeaders(event, actionRes.headers);\n return send(event, actionRes.body);\n },\n experimentalTransformSyncResponse: async (data) => {\n const headers = Object.entries(\n getResponseHeaders(event) ?? {},\n ).reduce(\n (acc, [key, value]) => {\n acc[key] = Array.isArray(value) ? value.join(\",\") : `${value}`;\n\n return acc;\n },\n {} as Record<string, string>,\n );\n\n return {\n body: typeof data === \"string\" ? data : stringify(data),\n headers,\n status: getResponseStatus(event) ?? 200,\n };\n },\n };\n },\n });\n\n return handler;\n};\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 return commHandler(options).createHandler();\n};\n\n/**\n * In h3, create a function that can define an event handler with Inngest steps\n * enabled, allowing you to use steps seamlessly within that API.\n *\n * @example\n * ```ts\n * import { Inngest, step } from \"inngest\";\n * import { createExperimentalEndpointWrapper } from \"inngest/h3\";\n *\n * const inngestEventHandler = createExperimentalEndpointWrapper({\n * client: new Inngest({ id: \"h3-sync-example\" }),\n * });\n *\n *\n * export default inngestEventHandler(async (event) => {\n * const foo = await step.run(\"example/step\", async () => {\n * return \"Hello from step!\";\n * });\n *\n * return `\n * <meta charset=\"utf-8\">\n * <h1>This endpoint worked!</h1>\n * <p>The step's result was: ${foo}</p>\n * `;\n * });\n * ```\n */\nexport const createExperimentalEndpointWrapper = (\n options: SyncHandlerOptions,\n) => {\n const inngestWrapper = commHandler(options, options).createSyncHandler();\n\n const h3Handler: typeof inngestWrapper = (userlandHandler) => {\n return defineEventHandler(inngestWrapper(userlandHandler));\n };\n\n return h3Handler;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,MAAaA,gBAAwC;AAErD,MAAM,eACJ,SACA,gBACG;AAqEH,QApEgB,IAAIC,8CAAmB;EACrC;EACA,GAAG;EACH;EACA,UAAU,UAAwC;AAChD,UAAO;IACL,6BAAqB,MAAM;IAC3B,UAAU,YAAY;KACpB,MAAM,SAAS,MAAM;AASrB,YAPE,WAAW,UACX,WAAW,SACX,WAAW,WACX,WAAW,WACL,0BAAkB,OAAO,QAAQ,IAAK,KACxC;;IAIR,UAAU,0BAAkB,OAAO,IAAI;IACvC,cAAc,MAAM;IACpB,WAAW;KACT,IAAI,SAAS;AACb,UAAKC,uBAAW,WAAW,IAAI,OAAO,WAAW,MAAM,CACrD,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,cAAoC;KACtD,MAAM,EAAE,QAAQ,MAAM;AACtB,SAAI,aAAa,UAAU;AAC3B,wBAAW,OAAO,UAAU,QAAQ;AACpC,yBAAY,OAAO,UAAU,KAAK;;IAEpC,mCAAmC,OAAO,SAAS;KACjD,MAAM,UAAU,OAAO,mCACF,MAAM,IAAI,EAAE,CAChC,CAAC,QACC,KAAK,CAAC,KAAK,WAAW;AACrB,UAAI,OAAO,MAAM,QAAQ,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,GAAG;AAEvD,aAAO;QAET,EAAE,CACH;AAED,YAAO;MACL,MAAM,OAAO,SAAS,WAAW,OAAOC,0BAAU,KAAK;MACvD;MACA,kCAA0B,MAAM,IAAI;MACrC;;IAEJ;;EAEJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCJ,MAAa,SACX,YAC6D;AAC7D,QAAO,YAAY,QAAQ,CAAC,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8B7C,MAAa,qCACX,YACG;CACH,MAAM,iBAAiB,YAAY,SAAS,QAAQ,CAAC,mBAAmB;CAExE,MAAMC,aAAoC,oBAAoB;AAC5D,oCAA0B,eAAe,gBAAgB,CAAC;;AAG5D,QAAO"}
1
+ {"version":3,"file":"h3.cjs","names":["frameworkName: SupportedFrameworkName","InngestCommHandler","processEnv"],"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 { 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(\"NODE_ENV\") ?? \"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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,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,uBAAW,WAAW,IAAI,OAAO,WAAW,MAAM,CACrD,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"}
package/h3.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { SupportedFrameworkName } from "./types.cjs";
2
- import { ServeHandlerOptions, SyncHandlerOptions } from "./components/InngestCommHandler.cjs";
2
+ import { ServeHandlerOptions } from "./components/InngestCommHandler.cjs";
3
3
  import { EventHandlerRequest, H3Event } from "h3";
4
4
 
5
5
  //#region src/h3.d.ts
@@ -38,34 +38,6 @@ declare const frameworkName: SupportedFrameworkName;
38
38
  * @public
39
39
  */
40
40
  declare const serve: (options: ServeHandlerOptions) => ((event: H3Event<EventHandlerRequest>) => Promise<void>);
41
- /**
42
- * In h3, create a function that can define an event handler with Inngest steps
43
- * enabled, allowing you to use steps seamlessly within that API.
44
- *
45
- * @example
46
- * ```ts
47
- * import { Inngest, step } from "inngest";
48
- * import { createExperimentalEndpointWrapper } from "inngest/h3";
49
- *
50
- * const inngestEventHandler = createExperimentalEndpointWrapper({
51
- * client: new Inngest({ id: "h3-sync-example" }),
52
- * });
53
- *
54
- *
55
- * export default inngestEventHandler(async (event) => {
56
- * const foo = await step.run("example/step", async () => {
57
- * return "Hello from step!";
58
- * });
59
- *
60
- * return `
61
- * <meta charset="utf-8">
62
- * <h1>This endpoint worked!</h1>
63
- * <p>The step's result was: ${foo}</p>
64
- * `;
65
- * });
66
- * ```
67
- */
68
- declare const createExperimentalEndpointWrapper: (options: SyncHandlerOptions) => (handler: (event: H3Event<EventHandlerRequest>) => Promise<any>) => (event: H3Event<EventHandlerRequest>) => Promise<any>;
69
41
  //#endregion
70
- export { createExperimentalEndpointWrapper, frameworkName, serve };
42
+ export { frameworkName, serve };
71
43
  //# sourceMappingURL=h3.d.cts.map
package/h3.d.cts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"h3.d.cts","names":[],"sources":["../src/h3.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cAyDa,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA0Gf,iBACF,iCACC,QAAQ,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+BhC,6CACF,yCAAkB,QAAA,yBAAA,yBAAA,QAAA,yBAAA"}
1
+ {"version":3,"file":"h3.d.cts","names":[],"sources":["../src/h3.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cAiDa,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+Bf,iBACF,iCACC,QAAQ,yBAAyB"}
package/h3.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { SupportedFrameworkName } from "./types.js";
2
- import { ServeHandlerOptions, SyncHandlerOptions } from "./components/InngestCommHandler.js";
2
+ import { ServeHandlerOptions } from "./components/InngestCommHandler.js";
3
3
  import { EventHandlerRequest, H3Event } from "h3";
4
4
 
5
5
  //#region src/h3.d.ts
@@ -38,34 +38,6 @@ declare const frameworkName: SupportedFrameworkName;
38
38
  * @public
39
39
  */
40
40
  declare const serve: (options: ServeHandlerOptions) => ((event: H3Event<EventHandlerRequest>) => Promise<void>);
41
- /**
42
- * In h3, create a function that can define an event handler with Inngest steps
43
- * enabled, allowing you to use steps seamlessly within that API.
44
- *
45
- * @example
46
- * ```ts
47
- * import { Inngest, step } from "inngest";
48
- * import { createExperimentalEndpointWrapper } from "inngest/h3";
49
- *
50
- * const inngestEventHandler = createExperimentalEndpointWrapper({
51
- * client: new Inngest({ id: "h3-sync-example" }),
52
- * });
53
- *
54
- *
55
- * export default inngestEventHandler(async (event) => {
56
- * const foo = await step.run("example/step", async () => {
57
- * return "Hello from step!";
58
- * });
59
- *
60
- * return `
61
- * <meta charset="utf-8">
62
- * <h1>This endpoint worked!</h1>
63
- * <p>The step's result was: ${foo}</p>
64
- * `;
65
- * });
66
- * ```
67
- */
68
- declare const createExperimentalEndpointWrapper: (options: SyncHandlerOptions) => (handler: (event: H3Event<EventHandlerRequest>) => Promise<any>) => (event: H3Event<EventHandlerRequest>) => Promise<any>;
69
41
  //#endregion
70
- export { createExperimentalEndpointWrapper, frameworkName, serve };
42
+ export { frameworkName, serve };
71
43
  //# sourceMappingURL=h3.d.ts.map
package/h3.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"h3.d.ts","names":[],"sources":["../src/h3.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cAyDa,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA0Gf,iBACF,iCACC,QAAQ,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+BhC,6CACF,yCAAkB,QAAA,yBAAA,yBAAA,QAAA,yBAAA"}
1
+ {"version":3,"file":"h3.d.ts","names":[],"sources":["../src/h3.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cAiDa,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+Bf,iBACF,iCACC,QAAQ,yBAAyB"}
package/h3.js CHANGED
@@ -1,7 +1,6 @@
1
- import { stringify } from "./helpers/strings.js";
2
1
  import { processEnv } from "./helpers/env.js";
3
2
  import { InngestCommHandler } from "./components/InngestCommHandler.js";
4
- import { defineEventHandler, getHeader, getQuery, getResponseHeaders, getResponseStatus, readBody, readRawBody, send, setHeaders } from "h3";
3
+ import { getHeader, getQuery, readBody, send, setHeaders } from "h3";
5
4
 
6
5
  //#region src/h3.ts
7
6
  /**
@@ -37,50 +36,6 @@ import { defineEventHandler, getHeader, getQuery, getResponseHeaders, getRespons
37
36
  * dashboards and during testing.
38
37
  */
39
38
  const frameworkName = "h3";
40
- const commHandler = (options, syncOptions) => {
41
- return new InngestCommHandler({
42
- frameworkName,
43
- ...options,
44
- syncOptions,
45
- handler: (event) => {
46
- return {
47
- body: () => readBody(event),
48
- textBody: async () => {
49
- const method = event.method;
50
- return method === "POST" || method === "PUT" || method === "PATCH" || method === "DELETE" ? await readRawBody(event, "utf-8") ?? "" : "";
51
- },
52
- headers: (key) => getHeader(event, key),
53
- method: () => event.method,
54
- url: () => {
55
- let scheme = "https";
56
- if ((processEnv("NODE_ENV") ?? "dev").startsWith("dev")) scheme = "http";
57
- return new URL(String(event.path), `${scheme}://${String(getHeader(event, "host"))}`);
58
- },
59
- queryString: (key) => {
60
- const param = getQuery(event)[key];
61
- if (param) return String(param);
62
- },
63
- transformResponse: (actionRes) => {
64
- const { res } = event.node;
65
- res.statusCode = actionRes.status;
66
- setHeaders(event, actionRes.headers);
67
- return send(event, actionRes.body);
68
- },
69
- experimentalTransformSyncResponse: async (data) => {
70
- const headers = Object.entries(getResponseHeaders(event) ?? {}).reduce((acc, [key, value]) => {
71
- acc[key] = Array.isArray(value) ? value.join(",") : `${value}`;
72
- return acc;
73
- }, {});
74
- return {
75
- body: typeof data === "string" ? data : stringify(data),
76
- headers,
77
- status: getResponseStatus(event) ?? 200
78
- };
79
- }
80
- };
81
- }
82
- });
83
- };
84
39
  /**
85
40
  * In h3, serve and register any declared functions with Inngest, making
86
41
  * them available to be triggered by events.
@@ -110,43 +65,34 @@ const commHandler = (options, syncOptions) => {
110
65
  * @public
111
66
  */
112
67
  const serve = (options) => {
113
- return commHandler(options).createHandler();
114
- };
115
- /**
116
- * In h3, create a function that can define an event handler with Inngest steps
117
- * enabled, allowing you to use steps seamlessly within that API.
118
- *
119
- * @example
120
- * ```ts
121
- * import { Inngest, step } from "inngest";
122
- * import { createExperimentalEndpointWrapper } from "inngest/h3";
123
- *
124
- * const inngestEventHandler = createExperimentalEndpointWrapper({
125
- * client: new Inngest({ id: "h3-sync-example" }),
126
- * });
127
- *
128
- *
129
- * export default inngestEventHandler(async (event) => {
130
- * const foo = await step.run("example/step", async () => {
131
- * return "Hello from step!";
132
- * });
133
- *
134
- * return `
135
- * <meta charset="utf-8">
136
- * <h1>This endpoint worked!</h1>
137
- * <p>The step's result was: ${foo}</p>
138
- * `;
139
- * });
140
- * ```
141
- */
142
- const createExperimentalEndpointWrapper = (options) => {
143
- const inngestWrapper = commHandler(options, options).createSyncHandler();
144
- const h3Handler = (userlandHandler) => {
145
- return defineEventHandler(inngestWrapper(userlandHandler));
146
- };
147
- return h3Handler;
68
+ return new InngestCommHandler({
69
+ frameworkName,
70
+ ...options,
71
+ handler: (event) => {
72
+ return {
73
+ body: () => readBody(event),
74
+ headers: (key) => getHeader(event, key),
75
+ method: () => event.method,
76
+ url: () => {
77
+ let scheme = "https";
78
+ if ((processEnv("NODE_ENV") ?? "dev").startsWith("dev")) scheme = "http";
79
+ return new URL(String(event.path), `${scheme}://${String(getHeader(event, "host"))}`);
80
+ },
81
+ queryString: (key) => {
82
+ const param = getQuery(event)[key];
83
+ if (param) return String(param);
84
+ },
85
+ transformResponse: (actionRes) => {
86
+ const { res } = event.node;
87
+ res.statusCode = actionRes.status;
88
+ setHeaders(event, actionRes.headers);
89
+ return send(event, actionRes.body);
90
+ }
91
+ };
92
+ }
93
+ }).createHandler();
148
94
  };
149
95
 
150
96
  //#endregion
151
- export { createExperimentalEndpointWrapper, frameworkName, serve };
97
+ export { frameworkName, serve };
152
98
  //# sourceMappingURL=h3.js.map
package/h3.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"h3.js","names":["frameworkName: SupportedFrameworkName","h3Handler: typeof inngestWrapper"],"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 defineEventHandler,\n type EventHandlerRequest,\n type EventHandlerResponse,\n getHeader,\n getQuery,\n getResponseHeaders,\n getResponseStatus,\n type H3Event,\n readBody,\n readRawBody,\n send,\n setHeaders,\n} from \"h3\";\nimport type { Inngest } from \"./components/Inngest.ts\";\nimport {\n InngestCommHandler,\n type ServeHandlerOptions,\n type SyncHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport { processEnv } from \"./helpers/env.ts\";\nimport { stringify } from \"./helpers/strings.ts\";\nimport type { RegisterOptions, 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\nconst commHandler = (\n options: RegisterOptions & { client: Inngest.Like },\n syncOptions?: SyncHandlerOptions,\n) => {\n const handler = new InngestCommHandler({\n frameworkName,\n ...options,\n syncOptions,\n handler: (event: H3Event<EventHandlerRequest>) => {\n return {\n body: () => readBody(event),\n textBody: async () => {\n const method = event.method;\n const body =\n method === \"POST\" ||\n method === \"PUT\" ||\n method === \"PATCH\" ||\n method === \"DELETE\"\n ? ((await readRawBody(event, \"utf-8\")) ?? \"\")\n : \"\";\n\n return body;\n },\n headers: (key) => getHeader(event, key),\n method: () => event.method,\n url: () => {\n let scheme = \"https\";\n if ((processEnv(\"NODE_ENV\") ?? \"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): EventHandlerResponse => {\n const { res } = event.node;\n res.statusCode = actionRes.status;\n setHeaders(event, actionRes.headers);\n return send(event, actionRes.body);\n },\n experimentalTransformSyncResponse: async (data) => {\n const headers = Object.entries(\n getResponseHeaders(event) ?? {},\n ).reduce(\n (acc, [key, value]) => {\n acc[key] = Array.isArray(value) ? value.join(\",\") : `${value}`;\n\n return acc;\n },\n {} as Record<string, string>,\n );\n\n return {\n body: typeof data === \"string\" ? data : stringify(data),\n headers,\n status: getResponseStatus(event) ?? 200,\n };\n },\n };\n },\n });\n\n return handler;\n};\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 return commHandler(options).createHandler();\n};\n\n/**\n * In h3, create a function that can define an event handler with Inngest steps\n * enabled, allowing you to use steps seamlessly within that API.\n *\n * @example\n * ```ts\n * import { Inngest, step } from \"inngest\";\n * import { createExperimentalEndpointWrapper } from \"inngest/h3\";\n *\n * const inngestEventHandler = createExperimentalEndpointWrapper({\n * client: new Inngest({ id: \"h3-sync-example\" }),\n * });\n *\n *\n * export default inngestEventHandler(async (event) => {\n * const foo = await step.run(\"example/step\", async () => {\n * return \"Hello from step!\";\n * });\n *\n * return `\n * <meta charset=\"utf-8\">\n * <h1>This endpoint worked!</h1>\n * <p>The step's result was: ${foo}</p>\n * `;\n * });\n * ```\n */\nexport const createExperimentalEndpointWrapper = (\n options: SyncHandlerOptions,\n) => {\n const inngestWrapper = commHandler(options, options).createSyncHandler();\n\n const h3Handler: typeof inngestWrapper = (userlandHandler) => {\n return defineEventHandler(inngestWrapper(userlandHandler));\n };\n\n return h3Handler;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,MAAaA,gBAAwC;AAErD,MAAM,eACJ,SACA,gBACG;AAqEH,QApEgB,IAAI,mBAAmB;EACrC;EACA,GAAG;EACH;EACA,UAAU,UAAwC;AAChD,UAAO;IACL,YAAY,SAAS,MAAM;IAC3B,UAAU,YAAY;KACpB,MAAM,SAAS,MAAM;AASrB,YAPE,WAAW,UACX,WAAW,SACX,WAAW,WACX,WAAW,WACL,MAAM,YAAY,OAAO,QAAQ,IAAK,KACxC;;IAIR,UAAU,QAAQ,UAAU,OAAO,IAAI;IACvC,cAAc,MAAM;IACpB,WAAW;KACT,IAAI,SAAS;AACb,UAAK,WAAW,WAAW,IAAI,OAAO,WAAW,MAAM,CACrD,UAAS;AAGX,YAAO,IAAI,IACT,OAAO,MAAM,KAAK,EAClB,GAAG,OAAO,KAAK,OAAO,UAAU,OAAO,OAAO,CAAC,GAChD;;IAEH,cAAc,QAAQ;KACpB,MAAM,QAAQ,SAAS,MAAM,CAAC;AAC9B,SAAI,MACF,QAAO,OAAO,MAAM;;IAKxB,oBAAoB,cAAoC;KACtD,MAAM,EAAE,QAAQ,MAAM;AACtB,SAAI,aAAa,UAAU;AAC3B,gBAAW,OAAO,UAAU,QAAQ;AACpC,YAAO,KAAK,OAAO,UAAU,KAAK;;IAEpC,mCAAmC,OAAO,SAAS;KACjD,MAAM,UAAU,OAAO,QACrB,mBAAmB,MAAM,IAAI,EAAE,CAChC,CAAC,QACC,KAAK,CAAC,KAAK,WAAW;AACrB,UAAI,OAAO,MAAM,QAAQ,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,GAAG;AAEvD,aAAO;QAET,EAAE,CACH;AAED,YAAO;MACL,MAAM,OAAO,SAAS,WAAW,OAAO,UAAU,KAAK;MACvD;MACA,QAAQ,kBAAkB,MAAM,IAAI;MACrC;;IAEJ;;EAEJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCJ,MAAa,SACX,YAC6D;AAC7D,QAAO,YAAY,QAAQ,CAAC,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8B7C,MAAa,qCACX,YACG;CACH,MAAM,iBAAiB,YAAY,SAAS,QAAQ,CAAC,mBAAmB;CAExE,MAAMC,aAAoC,oBAAoB;AAC5D,SAAO,mBAAmB,eAAe,gBAAgB,CAAC;;AAG5D,QAAO"}
1
+ {"version":3,"file":"h3.js","names":["frameworkName: SupportedFrameworkName"],"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 { 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(\"NODE_ENV\") ?? \"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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,MAAaA,gBAAwC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BrD,MAAa,SACX,YAC6D;AAsC7D,QArCgB,IAAI,mBAAmB;EACrC;EACA,GAAG;EACH,UAAU,UAAwC;AAChD,UAAO;IACL,YAAY,SAAS,MAAM;IAC3B,UAAU,QAAQ,UAAU,OAAO,IAAI;IACvC,cAAc,MAAM;IACpB,WAAW;KACT,IAAI,SAAS;AACb,UAAK,WAAW,WAAW,IAAI,OAAO,WAAW,MAAM,CACrD,UAAS;AAGX,YAAO,IAAI,IACT,OAAO,MAAM,KAAK,EAClB,GAAG,OAAO,KAAK,OAAO,UAAU,OAAO,OAAO,CAAC,GAChD;;IAEH,cAAc,QAAQ;KACpB,MAAM,QAAQ,SAAS,MAAM,CAAC;AAC9B,SAAI,MACF,QAAO,OAAO,MAAM;;IAKxB,oBAAoB,cAAc;KAChC,MAAM,EAAE,QAAQ,MAAM;AACtB,SAAI,aAAa,UAAU;AAC3B,gBAAW,OAAO,UAAU,QAAQ;AACpC,YAAO,KAAK,OAAO,UAAU,KAAK;;IAErC;;EAEJ,CAAC,CAEa,eAAe"}
package/next.cjs CHANGED
@@ -70,7 +70,11 @@ const serve = (options) => {
70
70
  return Array.isArray(header) ? header[0] : header;
71
71
  };
72
72
  return {
73
- body: () => typeof req.json === "function" ? req.json() : req.body,
73
+ body: async () => {
74
+ if (typeof req.json === "function") return await req.json();
75
+ if (req.body instanceof ReadableStream) return await streamToJSON(req.body);
76
+ return req.body;
77
+ },
74
78
  headers: getHeader,
75
79
  method: () => {
76
80
  return reqMethod || req.method || "";
@@ -177,6 +181,16 @@ const serve = (options) => {
177
181
  PUT: { value: baseFn.bind(null, "PUT") }
178
182
  });
179
183
  };
184
+ async function streamToJSON(stream) {
185
+ const chunks = [];
186
+ const reader = stream.getReader();
187
+ while (true) {
188
+ const { done, value } = await reader.read();
189
+ if (done) break;
190
+ chunks.push(value);
191
+ }
192
+ return JSON.parse(Buffer.concat(chunks).toString("utf8"));
193
+ }
180
194
 
181
195
  //#endregion
182
196
  exports.frameworkName = frameworkName;
package/next.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"next.cjs","names":["frameworkName: SupportedFrameworkName","InngestCommHandler","absoluteUrl: URL | undefined","host","scheme: \"http\" | \"https\"","getResponse"],"sources":["../src/next.ts"],"sourcesContent":["/**\n * An adapter for Next.js to serve and register any declared functions with\n * Inngest, making them available to be triggered by events.\n *\n * Supports Next.js 12+, both serverless and edge.\n *\n * @example Next.js <=12 or the pages router can export the handler directly\n * ```ts\n * export default serve({ client: inngest, functions: [fn1, fn2] });\n * ```\n *\n * @example Next.js >=13 with the `app` dir must export individual methods\n * ```ts\n * export const { GET, POST, PUT } = serve({\n * client: inngest,\n * functions: [fn1, fn2],\n * });\n * ```\n *\n * @module\n */\n\nimport type { NextApiRequest, NextApiResponse } from \"next\";\nimport type { NextRequest } from \"next/server\";\nimport {\n InngestCommHandler,\n type ServeHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport { getResponse } from \"./helpers/env.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 = \"nextjs\";\n\n/**\n * The shape of a request handler, supporting Next.js 12+.\n *\n * We are intentionally abstract with the arguments here, as Next.js's type\n * checking when building varies wildly between major versions; specifying\n * different types (even optional types) here can cause issues with the build.\n *\n * This change was initially made for Next.js 15, which specifies the second\n * argument as `RouteContext`, whereas Next.js 13 and 14 omit it and Next.js 12\n * provides a `NextApiResponse`, which is varies based on the execution\n * environment used (edge vs serverless).\n */\nexport type RequestHandler = (\n expectedReq: NextRequest,\n res: unknown,\n) => Promise<Response>;\n\nconst isRecord = (val: unknown): val is Record<string, unknown> => {\n return typeof val === \"object\" && val !== null;\n};\n\nconst isFunction = (val: unknown): val is (...args: unknown[]) => unknown => {\n return typeof val === \"function\";\n};\n\nconst isNext12ApiResponse = (val: unknown): val is NextApiResponse => {\n return (\n isRecord(val) &&\n isFunction(val.setHeader) &&\n isFunction(val.status) &&\n isFunction(val.send)\n );\n};\n\n/**\n * In Next.js, serve and register any declared functions with Inngest, making\n * them available to be triggered by events.\n *\n * Supports Next.js 12+, both serverless and edge.\n *\n * @example Next.js <=12 or the pages router can export the handler directly\n * ```ts\n * export default serve({ client: inngest, functions: [fn1, fn2] });\n * ```\n *\n * @example Next.js >=13 with the `app` dir must export individual methods\n * ```ts\n * export const { GET, POST, PUT } = serve({\n * client: inngest,\n * functions: [fn1, fn2],\n * });\n * ```\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (\n options: ServeHandlerOptions,\n): RequestHandler & {\n GET: RequestHandler;\n POST: RequestHandler;\n PUT: RequestHandler;\n} => {\n const handler = new InngestCommHandler({\n frameworkName,\n ...options,\n handler: (\n reqMethod: \"GET\" | \"POST\" | \"PUT\" | undefined,\n ...args: Parameters<RequestHandler>\n ) => {\n const [expectedReq, res] = args;\n const req = expectedReq as Either<NextApiRequest, NextRequest>;\n\n const getHeader = (key: string): string | null | undefined => {\n const header =\n typeof req.headers.get === \"function\"\n ? req.headers.get(key)\n : req.headers[key];\n\n return Array.isArray(header) ? header[0] : header;\n };\n\n return {\n body: () => (typeof req.json === \"function\" ? req.json() : req.body),\n headers: getHeader,\n method: () => {\n /**\n * `req.method`, though types say otherwise, is not available in Next.js\n * 13 {@link https://beta.nextjs.org/docs/routing/route-handlers Route Handlers}.\n *\n * Therefore, we must try to set the method ourselves where we know it.\n */\n const method = reqMethod || req.method || \"\";\n return method;\n },\n isProduction: () => {\n /**\n * Vercel Edge Functions do not allow dynamic access to environment\n * variables, so we'll manage production checks directly here.\n *\n * We try/catch to avoid situations where Next.js is being used in\n * environments where `process.env` is not accessible or polyfilled.\n */\n try {\n const isProd = process.env.NODE_ENV === \"production\";\n return isProd;\n } catch (_err) {\n // no-op\n }\n\n return;\n },\n queryString: (key, url) => {\n const qs = req.query?.[key] || url.searchParams.get(key);\n return Array.isArray(qs) ? qs[0] : qs;\n },\n\n url: () => {\n let absoluteUrl: URL | undefined;\n try {\n absoluteUrl = new URL(req.url as string);\n } catch {\n // no-op\n }\n\n if (absoluteUrl) {\n /**\n * `req.url` here should may be the full URL, including query string.\n * There are some caveats, however, where Next.js will obfuscate\n * the host. For example, in the case of `host.docker.internal`,\n * Next.js will instead set the host here to `localhost`.\n *\n * To avoid this, we'll try to parse the URL from `req.url`, but\n * also use the `host` header if it's available.\n */\n const host = options.serveHost || getHeader(\"host\");\n if (host) {\n const hostWithProtocol = new URL(\n host.includes(\"://\")\n ? host\n : `${absoluteUrl.protocol}//${host}`,\n );\n\n absoluteUrl.protocol = hostWithProtocol.protocol;\n absoluteUrl.host = hostWithProtocol.host;\n absoluteUrl.port = hostWithProtocol.port;\n absoluteUrl.username = hostWithProtocol.username;\n absoluteUrl.password = hostWithProtocol.password;\n }\n\n return absoluteUrl;\n }\n\n let scheme: \"http\" | \"https\" = \"https\";\n const host = options.serveHost || getHeader(\"host\") || \"\";\n\n try {\n if (process.env.NODE_ENV === \"development\") {\n scheme = \"http\";\n }\n } catch (_err) {\n // no-op\n }\n\n const url = new URL(req.url as string, `${scheme}://${host}`);\n\n return url;\n },\n transformResponse: ({ body, headers, status }): Response => {\n /**\n * Carefully attempt to set headers and data on the response object\n * for Next.js 12 support.\n *\n * This also assumes that we're not using Next.js 15, where the `res`\n * object is repopulated as a `RouteContext` object. We expect these\n * methods to NOT be defined in Next.js 15.\n *\n * We could likely use `instanceof ServerResponse` to better check the\n * type of this, though Next.js 12 had issues with this due to not\n * instantiating the response correctly.\n */\n if (isNext12ApiResponse(res)) {\n for (const [key, value] of Object.entries(headers)) {\n res.setHeader(key, value);\n }\n\n res.status(status);\n res.send(body);\n\n /**\n * If we're here, we're in a serverless endpoint (not edge), so\n * we've correctly sent the response and can return `undefined`.\n *\n * Next.js 13 edge requires that the return value is typed as\n * `Response`, so we still enforce that as we cannot dynamically\n * adjust typing based on the environment.\n */\n return undefined as unknown as Response;\n }\n\n /**\n * If we're here, we're in an edge environment and need to return a\n * `Response` object.\n *\n * We also don't know if the current environment has a native\n * `Response` object, so we'll grab that first.\n */\n const Res = getResponse();\n return new Res(body, { status, headers });\n },\n transformStreamingResponse: ({ body, headers, status }) => {\n return new Response(body, { status, headers });\n },\n };\n },\n });\n\n /**\n * Next.js 13 uses\n * {@link https://beta.nextjs.org/docs/routing/route-handlers Route Handlers}\n * to declare API routes instead of a generic catch-all method that was\n * available using the `pages/api` directory.\n *\n * This means that users must now export a function for each method supported\n * by the endpoint. For us, this means requiring a user explicitly exports\n * `GET`, `POST`, and `PUT` functions.\n *\n * Because of this, we'll add circular references to those property names of\n * the returned handler, meaning we can write some succinct code to export\n * them. Thanks, @goodoldneon.\n *\n * @example\n * ```ts\n * export const { GET, POST, PUT } = serve(...);\n * ```\n *\n * See {@link https://beta.nextjs.org/docs/routing/route-handlers}\n */\n const baseFn = handler.createHandler();\n\n const fn = baseFn.bind(null, undefined);\n\n /**\n * Ensure we have a non-variadic length to avoid issues with forced type\n * checking.\n */\n Object.defineProperty(fn, \"length\", { value: 1 });\n\n type Fn = typeof fn;\n\n const handlerFn = Object.defineProperties(fn, {\n GET: { value: baseFn.bind(null, \"GET\") },\n POST: { value: baseFn.bind(null, \"POST\") },\n PUT: { value: baseFn.bind(null, \"PUT\") },\n }) as Fn & {\n GET: Fn;\n POST: Fn;\n PUT: Fn;\n };\n\n return handlerFn;\n};\n"],"mappings":";;;;;;;;AAoCA,MAAaA,gBAAwC;AAmBrD,MAAM,YAAY,QAAiD;AACjE,QAAO,OAAO,QAAQ,YAAY,QAAQ;;AAG5C,MAAM,cAAc,QAAyD;AAC3E,QAAO,OAAO,QAAQ;;AAGxB,MAAM,uBAAuB,QAAyC;AACpE,QACE,SAAS,IAAI,IACb,WAAW,IAAI,UAAU,IACzB,WAAW,IAAI,OAAO,IACtB,WAAW,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;AA0BxB,MAAa,SACX,YAKG;;;;;;;;;;;;;;;;;;;;;;CAgLH,MAAM,SA/KU,IAAIC,8CAAmB;EACrC;EACA,GAAG;EACH,UACE,WACA,GAAG,SACA;GACH,MAAM,CAAC,aAAa,OAAO;GAC3B,MAAM,MAAM;GAEZ,MAAM,aAAa,QAA2C;IAC5D,MAAM,SACJ,OAAO,IAAI,QAAQ,QAAQ,aACvB,IAAI,QAAQ,IAAI,IAAI,GACpB,IAAI,QAAQ;AAElB,WAAO,MAAM,QAAQ,OAAO,GAAG,OAAO,KAAK;;AAG7C,UAAO;IACL,YAAa,OAAO,IAAI,SAAS,aAAa,IAAI,MAAM,GAAG,IAAI;IAC/D,SAAS;IACT,cAAc;AAQZ,YADe,aAAa,IAAI,UAAU;;IAG5C,oBAAoB;;;;;;;;AAQlB,SAAI;AAEF,aADe,QAAQ,IAAI,aAAa;cAEjC,MAAM;;IAMjB,cAAc,KAAK,QAAQ;KACzB,MAAM,KAAK,IAAI,QAAQ,QAAQ,IAAI,aAAa,IAAI,IAAI;AACxD,YAAO,MAAM,QAAQ,GAAG,GAAG,GAAG,KAAK;;IAGrC,WAAW;KACT,IAAIC;AACJ,SAAI;AACF,oBAAc,IAAI,IAAI,IAAI,IAAc;aAClC;AAIR,SAAI,aAAa;;;;;;;;;;MAUf,MAAMC,SAAO,QAAQ,aAAa,UAAU,OAAO;AACnD,UAAIA,QAAM;OACR,MAAM,mBAAmB,IAAI,IAC3BA,OAAK,SAAS,MAAM,GAChBA,SACA,GAAG,YAAY,SAAS,IAAIA,SACjC;AAED,mBAAY,WAAW,iBAAiB;AACxC,mBAAY,OAAO,iBAAiB;AACpC,mBAAY,OAAO,iBAAiB;AACpC,mBAAY,WAAW,iBAAiB;AACxC,mBAAY,WAAW,iBAAiB;;AAG1C,aAAO;;KAGT,IAAIC,SAA2B;KAC/B,MAAM,OAAO,QAAQ,aAAa,UAAU,OAAO,IAAI;AAEvD,SAAI;AACF,UAAI,QAAQ,IAAI,aAAa,cAC3B,UAAS;cAEJ,MAAM;AAMf,YAFY,IAAI,IAAI,IAAI,KAAe,GAAG,OAAO,KAAK,OAAO;;IAI/D,oBAAoB,EAAE,MAAM,SAAS,aAAuB;;;;;;;;;;;;;AAa1D,SAAI,oBAAoB,IAAI,EAAE;AAC5B,WAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,CAChD,KAAI,UAAU,KAAK,MAAM;AAG3B,UAAI,OAAO,OAAO;AAClB,UAAI,KAAK,KAAK;;;;;;;;;AAUd;;AAWF,YAAO,KADKC,yBAAa,EACV,MAAM;MAAE;MAAQ;MAAS,CAAC;;IAE3C,6BAA6B,EAAE,MAAM,SAAS,aAAa;AACzD,YAAO,IAAI,SAAS,MAAM;MAAE;MAAQ;MAAS,CAAC;;IAEjD;;EAEJ,CAAC,CAuBqB,eAAe;CAEtC,MAAM,KAAK,OAAO,KAAK,MAAM,OAAU;;;;;AAMvC,QAAO,eAAe,IAAI,UAAU,EAAE,OAAO,GAAG,CAAC;AAcjD,QAVkB,OAAO,iBAAiB,IAAI;EAC5C,KAAK,EAAE,OAAO,OAAO,KAAK,MAAM,MAAM,EAAE;EACxC,MAAM,EAAE,OAAO,OAAO,KAAK,MAAM,OAAO,EAAE;EAC1C,KAAK,EAAE,OAAO,OAAO,KAAK,MAAM,MAAM,EAAE;EACzC,CAAC"}
1
+ {"version":3,"file":"next.cjs","names":["frameworkName: SupportedFrameworkName","InngestCommHandler","absoluteUrl: URL | undefined","host","scheme: \"http\" | \"https\"","getResponse"],"sources":["../src/next.ts"],"sourcesContent":["/**\n * An adapter for Next.js to serve and register any declared functions with\n * Inngest, making them available to be triggered by events.\n *\n * Supports Next.js 12+, both serverless and edge.\n *\n * @example Next.js <=12 or the pages router can export the handler directly\n * ```ts\n * export default serve({ client: inngest, functions: [fn1, fn2] });\n * ```\n *\n * @example Next.js >=13 with the `app` dir must export individual methods\n * ```ts\n * export const { GET, POST, PUT } = serve({\n * client: inngest,\n * functions: [fn1, fn2],\n * });\n * ```\n *\n * @module\n */\n\nimport type { NextApiRequest, NextApiResponse } from \"next\";\nimport type { NextRequest } from \"next/server\";\nimport {\n InngestCommHandler,\n type ServeHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport { getResponse } from \"./helpers/env.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 = \"nextjs\";\n\n/**\n * The shape of a request handler, supporting Next.js 12+.\n *\n * We are intentionally abstract with the arguments here, as Next.js's type\n * checking when building varies wildly between major versions; specifying\n * different types (even optional types) here can cause issues with the build.\n *\n * This change was initially made for Next.js 15, which specifies the second\n * argument as `RouteContext`, whereas Next.js 13 and 14 omit it and Next.js 12\n * provides a `NextApiResponse`, which is varies based on the execution\n * environment used (edge vs serverless).\n */\nexport type RequestHandler = (\n expectedReq: NextRequest,\n res: unknown,\n) => Promise<Response>;\n\nconst isRecord = (val: unknown): val is Record<string, unknown> => {\n return typeof val === \"object\" && val !== null;\n};\n\nconst isFunction = (val: unknown): val is (...args: unknown[]) => unknown => {\n return typeof val === \"function\";\n};\n\nconst isNext12ApiResponse = (val: unknown): val is NextApiResponse => {\n return (\n isRecord(val) &&\n isFunction(val.setHeader) &&\n isFunction(val.status) &&\n isFunction(val.send)\n );\n};\n\n/**\n * In Next.js, serve and register any declared functions with Inngest, making\n * them available to be triggered by events.\n *\n * Supports Next.js 12+, both serverless and edge.\n *\n * @example Next.js <=12 or the pages router can export the handler directly\n * ```ts\n * export default serve({ client: inngest, functions: [fn1, fn2] });\n * ```\n *\n * @example Next.js >=13 with the `app` dir must export individual methods\n * ```ts\n * export const { GET, POST, PUT } = serve({\n * client: inngest,\n * functions: [fn1, fn2],\n * });\n * ```\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (\n options: ServeHandlerOptions,\n): RequestHandler & {\n GET: RequestHandler;\n POST: RequestHandler;\n PUT: RequestHandler;\n} => {\n const handler = new InngestCommHandler({\n frameworkName,\n ...options,\n handler: (\n reqMethod: \"GET\" | \"POST\" | \"PUT\" | undefined,\n ...args: Parameters<RequestHandler>\n ) => {\n const [expectedReq, res] = args;\n const req = expectedReq as Either<NextApiRequest, NextRequest>;\n\n const getHeader = (key: string): string | null | undefined => {\n const header =\n typeof req.headers.get === \"function\"\n ? req.headers.get(key)\n : req.headers[key];\n\n return Array.isArray(header) ? header[0] : header;\n };\n\n return {\n body: async () => {\n if (typeof req.json === \"function\") {\n return await req.json();\n }\n\n if (req.body instanceof ReadableStream) {\n return await streamToJSON(req.body);\n }\n\n return req.body;\n },\n headers: getHeader,\n method: () => {\n /**\n * `req.method`, though types say otherwise, is not available in Next.js\n * 13 {@link https://beta.nextjs.org/docs/routing/route-handlers Route Handlers}.\n *\n * Therefore, we must try to set the method ourselves where we know it.\n */\n const method = reqMethod || req.method || \"\";\n return method;\n },\n isProduction: () => {\n /**\n * Vercel Edge Functions do not allow dynamic access to environment\n * variables, so we'll manage production checks directly here.\n *\n * We try/catch to avoid situations where Next.js is being used in\n * environments where `process.env` is not accessible or polyfilled.\n */\n try {\n const isProd = process.env.NODE_ENV === \"production\";\n return isProd;\n } catch (_err) {\n // no-op\n }\n\n return;\n },\n queryString: (key, url) => {\n const qs = req.query?.[key] || url.searchParams.get(key);\n return Array.isArray(qs) ? qs[0] : qs;\n },\n\n url: () => {\n let absoluteUrl: URL | undefined;\n try {\n absoluteUrl = new URL(req.url as string);\n } catch {\n // no-op\n }\n\n if (absoluteUrl) {\n /**\n * `req.url` here should may be the full URL, including query string.\n * There are some caveats, however, where Next.js will obfuscate\n * the host. For example, in the case of `host.docker.internal`,\n * Next.js will instead set the host here to `localhost`.\n *\n * To avoid this, we'll try to parse the URL from `req.url`, but\n * also use the `host` header if it's available.\n */\n const host = options.serveHost || getHeader(\"host\");\n if (host) {\n const hostWithProtocol = new URL(\n host.includes(\"://\")\n ? host\n : `${absoluteUrl.protocol}//${host}`,\n );\n\n absoluteUrl.protocol = hostWithProtocol.protocol;\n absoluteUrl.host = hostWithProtocol.host;\n absoluteUrl.port = hostWithProtocol.port;\n absoluteUrl.username = hostWithProtocol.username;\n absoluteUrl.password = hostWithProtocol.password;\n }\n\n return absoluteUrl;\n }\n\n let scheme: \"http\" | \"https\" = \"https\";\n const host = options.serveHost || getHeader(\"host\") || \"\";\n\n try {\n if (process.env.NODE_ENV === \"development\") {\n scheme = \"http\";\n }\n } catch (_err) {\n // no-op\n }\n\n const url = new URL(req.url as string, `${scheme}://${host}`);\n\n return url;\n },\n transformResponse: ({ body, headers, status }): Response => {\n /**\n * Carefully attempt to set headers and data on the response object\n * for Next.js 12 support.\n *\n * This also assumes that we're not using Next.js 15, where the `res`\n * object is repopulated as a `RouteContext` object. We expect these\n * methods to NOT be defined in Next.js 15.\n *\n * We could likely use `instanceof ServerResponse` to better check the\n * type of this, though Next.js 12 had issues with this due to not\n * instantiating the response correctly.\n */\n if (isNext12ApiResponse(res)) {\n for (const [key, value] of Object.entries(headers)) {\n res.setHeader(key, value);\n }\n\n res.status(status);\n res.send(body);\n\n /**\n * If we're here, we're in a serverless endpoint (not edge), so\n * we've correctly sent the response and can return `undefined`.\n *\n * Next.js 13 edge requires that the return value is typed as\n * `Response`, so we still enforce that as we cannot dynamically\n * adjust typing based on the environment.\n */\n return undefined as unknown as Response;\n }\n\n /**\n * If we're here, we're in an edge environment and need to return a\n * `Response` object.\n *\n * We also don't know if the current environment has a native\n * `Response` object, so we'll grab that first.\n */\n const Res = getResponse();\n return new Res(body, { status, headers });\n },\n transformStreamingResponse: ({ body, headers, status }) => {\n return new Response(body, { status, headers });\n },\n };\n },\n });\n\n /**\n * Next.js 13 uses\n * {@link https://beta.nextjs.org/docs/routing/route-handlers Route Handlers}\n * to declare API routes instead of a generic catch-all method that was\n * available using the `pages/api` directory.\n *\n * This means that users must now export a function for each method supported\n * by the endpoint. For us, this means requiring a user explicitly exports\n * `GET`, `POST`, and `PUT` functions.\n *\n * Because of this, we'll add circular references to those property names of\n * the returned handler, meaning we can write some succinct code to export\n * them. Thanks, @goodoldneon.\n *\n * @example\n * ```ts\n * export const { GET, POST, PUT } = serve(...);\n * ```\n *\n * See {@link https://beta.nextjs.org/docs/routing/route-handlers}\n */\n const baseFn = handler.createHandler();\n\n const fn = baseFn.bind(null, undefined);\n\n /**\n * Ensure we have a non-variadic length to avoid issues with forced type\n * checking.\n */\n Object.defineProperty(fn, \"length\", { value: 1 });\n\n type Fn = typeof fn;\n\n const handlerFn = Object.defineProperties(fn, {\n GET: { value: baseFn.bind(null, \"GET\") },\n POST: { value: baseFn.bind(null, \"POST\") },\n PUT: { value: baseFn.bind(null, \"PUT\") },\n }) as Fn & {\n GET: Fn;\n POST: Fn;\n PUT: Fn;\n };\n\n return handlerFn;\n};\n\nasync function streamToJSON(stream: ReadableStream): Promise<unknown> {\n const chunks = [];\n const reader = stream.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n chunks.push(value);\n }\n return JSON.parse(Buffer.concat(chunks).toString(\"utf8\"));\n}\n"],"mappings":";;;;;;;;AAoCA,MAAaA,gBAAwC;AAmBrD,MAAM,YAAY,QAAiD;AACjE,QAAO,OAAO,QAAQ,YAAY,QAAQ;;AAG5C,MAAM,cAAc,QAAyD;AAC3E,QAAO,OAAO,QAAQ;;AAGxB,MAAM,uBAAuB,QAAyC;AACpE,QACE,SAAS,IAAI,IACb,WAAW,IAAI,UAAU,IACzB,WAAW,IAAI,OAAO,IACtB,WAAW,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;AA0BxB,MAAa,SACX,YAKG;;;;;;;;;;;;;;;;;;;;;;CA0LH,MAAM,SAzLU,IAAIC,8CAAmB;EACrC;EACA,GAAG;EACH,UACE,WACA,GAAG,SACA;GACH,MAAM,CAAC,aAAa,OAAO;GAC3B,MAAM,MAAM;GAEZ,MAAM,aAAa,QAA2C;IAC5D,MAAM,SACJ,OAAO,IAAI,QAAQ,QAAQ,aACvB,IAAI,QAAQ,IAAI,IAAI,GACpB,IAAI,QAAQ;AAElB,WAAO,MAAM,QAAQ,OAAO,GAAG,OAAO,KAAK;;AAG7C,UAAO;IACL,MAAM,YAAY;AAChB,SAAI,OAAO,IAAI,SAAS,WACtB,QAAO,MAAM,IAAI,MAAM;AAGzB,SAAI,IAAI,gBAAgB,eACtB,QAAO,MAAM,aAAa,IAAI,KAAK;AAGrC,YAAO,IAAI;;IAEb,SAAS;IACT,cAAc;AAQZ,YADe,aAAa,IAAI,UAAU;;IAG5C,oBAAoB;;;;;;;;AAQlB,SAAI;AAEF,aADe,QAAQ,IAAI,aAAa;cAEjC,MAAM;;IAMjB,cAAc,KAAK,QAAQ;KACzB,MAAM,KAAK,IAAI,QAAQ,QAAQ,IAAI,aAAa,IAAI,IAAI;AACxD,YAAO,MAAM,QAAQ,GAAG,GAAG,GAAG,KAAK;;IAGrC,WAAW;KACT,IAAIC;AACJ,SAAI;AACF,oBAAc,IAAI,IAAI,IAAI,IAAc;aAClC;AAIR,SAAI,aAAa;;;;;;;;;;MAUf,MAAMC,SAAO,QAAQ,aAAa,UAAU,OAAO;AACnD,UAAIA,QAAM;OACR,MAAM,mBAAmB,IAAI,IAC3BA,OAAK,SAAS,MAAM,GAChBA,SACA,GAAG,YAAY,SAAS,IAAIA,SACjC;AAED,mBAAY,WAAW,iBAAiB;AACxC,mBAAY,OAAO,iBAAiB;AACpC,mBAAY,OAAO,iBAAiB;AACpC,mBAAY,WAAW,iBAAiB;AACxC,mBAAY,WAAW,iBAAiB;;AAG1C,aAAO;;KAGT,IAAIC,SAA2B;KAC/B,MAAM,OAAO,QAAQ,aAAa,UAAU,OAAO,IAAI;AAEvD,SAAI;AACF,UAAI,QAAQ,IAAI,aAAa,cAC3B,UAAS;cAEJ,MAAM;AAMf,YAFY,IAAI,IAAI,IAAI,KAAe,GAAG,OAAO,KAAK,OAAO;;IAI/D,oBAAoB,EAAE,MAAM,SAAS,aAAuB;;;;;;;;;;;;;AAa1D,SAAI,oBAAoB,IAAI,EAAE;AAC5B,WAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,CAChD,KAAI,UAAU,KAAK,MAAM;AAG3B,UAAI,OAAO,OAAO;AAClB,UAAI,KAAK,KAAK;;;;;;;;;AAUd;;AAWF,YAAO,KADKC,yBAAa,EACV,MAAM;MAAE;MAAQ;MAAS,CAAC;;IAE3C,6BAA6B,EAAE,MAAM,SAAS,aAAa;AACzD,YAAO,IAAI,SAAS,MAAM;MAAE;MAAQ;MAAS,CAAC;;IAEjD;;EAEJ,CAAC,CAuBqB,eAAe;CAEtC,MAAM,KAAK,OAAO,KAAK,MAAM,OAAU;;;;;AAMvC,QAAO,eAAe,IAAI,UAAU,EAAE,OAAO,GAAG,CAAC;AAcjD,QAVkB,OAAO,iBAAiB,IAAI;EAC5C,KAAK,EAAE,OAAO,OAAO,KAAK,MAAM,MAAM,EAAE;EACxC,MAAM,EAAE,OAAO,OAAO,KAAK,MAAM,OAAO,EAAE;EAC1C,KAAK,EAAE,OAAO,OAAO,KAAK,MAAM,MAAM,EAAE;EACzC,CAAC;;AASJ,eAAe,aAAa,QAA0C;CACpE,MAAM,SAAS,EAAE;CACjB,MAAM,SAAS,OAAO,WAAW;AACjC,QAAO,MAAM;EACX,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,MAAM;AAC3C,MAAI,KACF;AAEF,SAAO,KAAK,MAAM;;AAEpB,QAAO,KAAK,MAAM,OAAO,OAAO,OAAO,CAAC,SAAS,OAAO,CAAC"}
package/next.js CHANGED
@@ -70,7 +70,11 @@ const serve = (options) => {
70
70
  return Array.isArray(header) ? header[0] : header;
71
71
  };
72
72
  return {
73
- body: () => typeof req.json === "function" ? req.json() : req.body,
73
+ body: async () => {
74
+ if (typeof req.json === "function") return await req.json();
75
+ if (req.body instanceof ReadableStream) return await streamToJSON(req.body);
76
+ return req.body;
77
+ },
74
78
  headers: getHeader,
75
79
  method: () => {
76
80
  return reqMethod || req.method || "";
@@ -177,6 +181,16 @@ const serve = (options) => {
177
181
  PUT: { value: baseFn.bind(null, "PUT") }
178
182
  });
179
183
  };
184
+ async function streamToJSON(stream) {
185
+ const chunks = [];
186
+ const reader = stream.getReader();
187
+ while (true) {
188
+ const { done, value } = await reader.read();
189
+ if (done) break;
190
+ chunks.push(value);
191
+ }
192
+ return JSON.parse(Buffer.concat(chunks).toString("utf8"));
193
+ }
180
194
 
181
195
  //#endregion
182
196
  export { frameworkName, serve };
package/next.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"next.js","names":["frameworkName: SupportedFrameworkName","absoluteUrl: URL | undefined","host","scheme: \"http\" | \"https\""],"sources":["../src/next.ts"],"sourcesContent":["/**\n * An adapter for Next.js to serve and register any declared functions with\n * Inngest, making them available to be triggered by events.\n *\n * Supports Next.js 12+, both serverless and edge.\n *\n * @example Next.js <=12 or the pages router can export the handler directly\n * ```ts\n * export default serve({ client: inngest, functions: [fn1, fn2] });\n * ```\n *\n * @example Next.js >=13 with the `app` dir must export individual methods\n * ```ts\n * export const { GET, POST, PUT } = serve({\n * client: inngest,\n * functions: [fn1, fn2],\n * });\n * ```\n *\n * @module\n */\n\nimport type { NextApiRequest, NextApiResponse } from \"next\";\nimport type { NextRequest } from \"next/server\";\nimport {\n InngestCommHandler,\n type ServeHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport { getResponse } from \"./helpers/env.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 = \"nextjs\";\n\n/**\n * The shape of a request handler, supporting Next.js 12+.\n *\n * We are intentionally abstract with the arguments here, as Next.js's type\n * checking when building varies wildly between major versions; specifying\n * different types (even optional types) here can cause issues with the build.\n *\n * This change was initially made for Next.js 15, which specifies the second\n * argument as `RouteContext`, whereas Next.js 13 and 14 omit it and Next.js 12\n * provides a `NextApiResponse`, which is varies based on the execution\n * environment used (edge vs serverless).\n */\nexport type RequestHandler = (\n expectedReq: NextRequest,\n res: unknown,\n) => Promise<Response>;\n\nconst isRecord = (val: unknown): val is Record<string, unknown> => {\n return typeof val === \"object\" && val !== null;\n};\n\nconst isFunction = (val: unknown): val is (...args: unknown[]) => unknown => {\n return typeof val === \"function\";\n};\n\nconst isNext12ApiResponse = (val: unknown): val is NextApiResponse => {\n return (\n isRecord(val) &&\n isFunction(val.setHeader) &&\n isFunction(val.status) &&\n isFunction(val.send)\n );\n};\n\n/**\n * In Next.js, serve and register any declared functions with Inngest, making\n * them available to be triggered by events.\n *\n * Supports Next.js 12+, both serverless and edge.\n *\n * @example Next.js <=12 or the pages router can export the handler directly\n * ```ts\n * export default serve({ client: inngest, functions: [fn1, fn2] });\n * ```\n *\n * @example Next.js >=13 with the `app` dir must export individual methods\n * ```ts\n * export const { GET, POST, PUT } = serve({\n * client: inngest,\n * functions: [fn1, fn2],\n * });\n * ```\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (\n options: ServeHandlerOptions,\n): RequestHandler & {\n GET: RequestHandler;\n POST: RequestHandler;\n PUT: RequestHandler;\n} => {\n const handler = new InngestCommHandler({\n frameworkName,\n ...options,\n handler: (\n reqMethod: \"GET\" | \"POST\" | \"PUT\" | undefined,\n ...args: Parameters<RequestHandler>\n ) => {\n const [expectedReq, res] = args;\n const req = expectedReq as Either<NextApiRequest, NextRequest>;\n\n const getHeader = (key: string): string | null | undefined => {\n const header =\n typeof req.headers.get === \"function\"\n ? req.headers.get(key)\n : req.headers[key];\n\n return Array.isArray(header) ? header[0] : header;\n };\n\n return {\n body: () => (typeof req.json === \"function\" ? req.json() : req.body),\n headers: getHeader,\n method: () => {\n /**\n * `req.method`, though types say otherwise, is not available in Next.js\n * 13 {@link https://beta.nextjs.org/docs/routing/route-handlers Route Handlers}.\n *\n * Therefore, we must try to set the method ourselves where we know it.\n */\n const method = reqMethod || req.method || \"\";\n return method;\n },\n isProduction: () => {\n /**\n * Vercel Edge Functions do not allow dynamic access to environment\n * variables, so we'll manage production checks directly here.\n *\n * We try/catch to avoid situations where Next.js is being used in\n * environments where `process.env` is not accessible or polyfilled.\n */\n try {\n const isProd = process.env.NODE_ENV === \"production\";\n return isProd;\n } catch (_err) {\n // no-op\n }\n\n return;\n },\n queryString: (key, url) => {\n const qs = req.query?.[key] || url.searchParams.get(key);\n return Array.isArray(qs) ? qs[0] : qs;\n },\n\n url: () => {\n let absoluteUrl: URL | undefined;\n try {\n absoluteUrl = new URL(req.url as string);\n } catch {\n // no-op\n }\n\n if (absoluteUrl) {\n /**\n * `req.url` here should may be the full URL, including query string.\n * There are some caveats, however, where Next.js will obfuscate\n * the host. For example, in the case of `host.docker.internal`,\n * Next.js will instead set the host here to `localhost`.\n *\n * To avoid this, we'll try to parse the URL from `req.url`, but\n * also use the `host` header if it's available.\n */\n const host = options.serveHost || getHeader(\"host\");\n if (host) {\n const hostWithProtocol = new URL(\n host.includes(\"://\")\n ? host\n : `${absoluteUrl.protocol}//${host}`,\n );\n\n absoluteUrl.protocol = hostWithProtocol.protocol;\n absoluteUrl.host = hostWithProtocol.host;\n absoluteUrl.port = hostWithProtocol.port;\n absoluteUrl.username = hostWithProtocol.username;\n absoluteUrl.password = hostWithProtocol.password;\n }\n\n return absoluteUrl;\n }\n\n let scheme: \"http\" | \"https\" = \"https\";\n const host = options.serveHost || getHeader(\"host\") || \"\";\n\n try {\n if (process.env.NODE_ENV === \"development\") {\n scheme = \"http\";\n }\n } catch (_err) {\n // no-op\n }\n\n const url = new URL(req.url as string, `${scheme}://${host}`);\n\n return url;\n },\n transformResponse: ({ body, headers, status }): Response => {\n /**\n * Carefully attempt to set headers and data on the response object\n * for Next.js 12 support.\n *\n * This also assumes that we're not using Next.js 15, where the `res`\n * object is repopulated as a `RouteContext` object. We expect these\n * methods to NOT be defined in Next.js 15.\n *\n * We could likely use `instanceof ServerResponse` to better check the\n * type of this, though Next.js 12 had issues with this due to not\n * instantiating the response correctly.\n */\n if (isNext12ApiResponse(res)) {\n for (const [key, value] of Object.entries(headers)) {\n res.setHeader(key, value);\n }\n\n res.status(status);\n res.send(body);\n\n /**\n * If we're here, we're in a serverless endpoint (not edge), so\n * we've correctly sent the response and can return `undefined`.\n *\n * Next.js 13 edge requires that the return value is typed as\n * `Response`, so we still enforce that as we cannot dynamically\n * adjust typing based on the environment.\n */\n return undefined as unknown as Response;\n }\n\n /**\n * If we're here, we're in an edge environment and need to return a\n * `Response` object.\n *\n * We also don't know if the current environment has a native\n * `Response` object, so we'll grab that first.\n */\n const Res = getResponse();\n return new Res(body, { status, headers });\n },\n transformStreamingResponse: ({ body, headers, status }) => {\n return new Response(body, { status, headers });\n },\n };\n },\n });\n\n /**\n * Next.js 13 uses\n * {@link https://beta.nextjs.org/docs/routing/route-handlers Route Handlers}\n * to declare API routes instead of a generic catch-all method that was\n * available using the `pages/api` directory.\n *\n * This means that users must now export a function for each method supported\n * by the endpoint. For us, this means requiring a user explicitly exports\n * `GET`, `POST`, and `PUT` functions.\n *\n * Because of this, we'll add circular references to those property names of\n * the returned handler, meaning we can write some succinct code to export\n * them. Thanks, @goodoldneon.\n *\n * @example\n * ```ts\n * export const { GET, POST, PUT } = serve(...);\n * ```\n *\n * See {@link https://beta.nextjs.org/docs/routing/route-handlers}\n */\n const baseFn = handler.createHandler();\n\n const fn = baseFn.bind(null, undefined);\n\n /**\n * Ensure we have a non-variadic length to avoid issues with forced type\n * checking.\n */\n Object.defineProperty(fn, \"length\", { value: 1 });\n\n type Fn = typeof fn;\n\n const handlerFn = Object.defineProperties(fn, {\n GET: { value: baseFn.bind(null, \"GET\") },\n POST: { value: baseFn.bind(null, \"POST\") },\n PUT: { value: baseFn.bind(null, \"PUT\") },\n }) as Fn & {\n GET: Fn;\n POST: Fn;\n PUT: Fn;\n };\n\n return handlerFn;\n};\n"],"mappings":";;;;;;;;AAoCA,MAAaA,gBAAwC;AAmBrD,MAAM,YAAY,QAAiD;AACjE,QAAO,OAAO,QAAQ,YAAY,QAAQ;;AAG5C,MAAM,cAAc,QAAyD;AAC3E,QAAO,OAAO,QAAQ;;AAGxB,MAAM,uBAAuB,QAAyC;AACpE,QACE,SAAS,IAAI,IACb,WAAW,IAAI,UAAU,IACzB,WAAW,IAAI,OAAO,IACtB,WAAW,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;AA0BxB,MAAa,SACX,YAKG;;;;;;;;;;;;;;;;;;;;;;CAgLH,MAAM,SA/KU,IAAI,mBAAmB;EACrC;EACA,GAAG;EACH,UACE,WACA,GAAG,SACA;GACH,MAAM,CAAC,aAAa,OAAO;GAC3B,MAAM,MAAM;GAEZ,MAAM,aAAa,QAA2C;IAC5D,MAAM,SACJ,OAAO,IAAI,QAAQ,QAAQ,aACvB,IAAI,QAAQ,IAAI,IAAI,GACpB,IAAI,QAAQ;AAElB,WAAO,MAAM,QAAQ,OAAO,GAAG,OAAO,KAAK;;AAG7C,UAAO;IACL,YAAa,OAAO,IAAI,SAAS,aAAa,IAAI,MAAM,GAAG,IAAI;IAC/D,SAAS;IACT,cAAc;AAQZ,YADe,aAAa,IAAI,UAAU;;IAG5C,oBAAoB;;;;;;;;AAQlB,SAAI;AAEF,aADe,QAAQ,IAAI,aAAa;cAEjC,MAAM;;IAMjB,cAAc,KAAK,QAAQ;KACzB,MAAM,KAAK,IAAI,QAAQ,QAAQ,IAAI,aAAa,IAAI,IAAI;AACxD,YAAO,MAAM,QAAQ,GAAG,GAAG,GAAG,KAAK;;IAGrC,WAAW;KACT,IAAIC;AACJ,SAAI;AACF,oBAAc,IAAI,IAAI,IAAI,IAAc;aAClC;AAIR,SAAI,aAAa;;;;;;;;;;MAUf,MAAMC,SAAO,QAAQ,aAAa,UAAU,OAAO;AACnD,UAAIA,QAAM;OACR,MAAM,mBAAmB,IAAI,IAC3BA,OAAK,SAAS,MAAM,GAChBA,SACA,GAAG,YAAY,SAAS,IAAIA,SACjC;AAED,mBAAY,WAAW,iBAAiB;AACxC,mBAAY,OAAO,iBAAiB;AACpC,mBAAY,OAAO,iBAAiB;AACpC,mBAAY,WAAW,iBAAiB;AACxC,mBAAY,WAAW,iBAAiB;;AAG1C,aAAO;;KAGT,IAAIC,SAA2B;KAC/B,MAAM,OAAO,QAAQ,aAAa,UAAU,OAAO,IAAI;AAEvD,SAAI;AACF,UAAI,QAAQ,IAAI,aAAa,cAC3B,UAAS;cAEJ,MAAM;AAMf,YAFY,IAAI,IAAI,IAAI,KAAe,GAAG,OAAO,KAAK,OAAO;;IAI/D,oBAAoB,EAAE,MAAM,SAAS,aAAuB;;;;;;;;;;;;;AAa1D,SAAI,oBAAoB,IAAI,EAAE;AAC5B,WAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,CAChD,KAAI,UAAU,KAAK,MAAM;AAG3B,UAAI,OAAO,OAAO;AAClB,UAAI,KAAK,KAAK;;;;;;;;;AAUd;;AAWF,YAAO,KADK,aAAa,EACV,MAAM;MAAE;MAAQ;MAAS,CAAC;;IAE3C,6BAA6B,EAAE,MAAM,SAAS,aAAa;AACzD,YAAO,IAAI,SAAS,MAAM;MAAE;MAAQ;MAAS,CAAC;;IAEjD;;EAEJ,CAAC,CAuBqB,eAAe;CAEtC,MAAM,KAAK,OAAO,KAAK,MAAM,OAAU;;;;;AAMvC,QAAO,eAAe,IAAI,UAAU,EAAE,OAAO,GAAG,CAAC;AAcjD,QAVkB,OAAO,iBAAiB,IAAI;EAC5C,KAAK,EAAE,OAAO,OAAO,KAAK,MAAM,MAAM,EAAE;EACxC,MAAM,EAAE,OAAO,OAAO,KAAK,MAAM,OAAO,EAAE;EAC1C,KAAK,EAAE,OAAO,OAAO,KAAK,MAAM,MAAM,EAAE;EACzC,CAAC"}
1
+ {"version":3,"file":"next.js","names":["frameworkName: SupportedFrameworkName","absoluteUrl: URL | undefined","host","scheme: \"http\" | \"https\""],"sources":["../src/next.ts"],"sourcesContent":["/**\n * An adapter for Next.js to serve and register any declared functions with\n * Inngest, making them available to be triggered by events.\n *\n * Supports Next.js 12+, both serverless and edge.\n *\n * @example Next.js <=12 or the pages router can export the handler directly\n * ```ts\n * export default serve({ client: inngest, functions: [fn1, fn2] });\n * ```\n *\n * @example Next.js >=13 with the `app` dir must export individual methods\n * ```ts\n * export const { GET, POST, PUT } = serve({\n * client: inngest,\n * functions: [fn1, fn2],\n * });\n * ```\n *\n * @module\n */\n\nimport type { NextApiRequest, NextApiResponse } from \"next\";\nimport type { NextRequest } from \"next/server\";\nimport {\n InngestCommHandler,\n type ServeHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport { getResponse } from \"./helpers/env.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 = \"nextjs\";\n\n/**\n * The shape of a request handler, supporting Next.js 12+.\n *\n * We are intentionally abstract with the arguments here, as Next.js's type\n * checking when building varies wildly between major versions; specifying\n * different types (even optional types) here can cause issues with the build.\n *\n * This change was initially made for Next.js 15, which specifies the second\n * argument as `RouteContext`, whereas Next.js 13 and 14 omit it and Next.js 12\n * provides a `NextApiResponse`, which is varies based on the execution\n * environment used (edge vs serverless).\n */\nexport type RequestHandler = (\n expectedReq: NextRequest,\n res: unknown,\n) => Promise<Response>;\n\nconst isRecord = (val: unknown): val is Record<string, unknown> => {\n return typeof val === \"object\" && val !== null;\n};\n\nconst isFunction = (val: unknown): val is (...args: unknown[]) => unknown => {\n return typeof val === \"function\";\n};\n\nconst isNext12ApiResponse = (val: unknown): val is NextApiResponse => {\n return (\n isRecord(val) &&\n isFunction(val.setHeader) &&\n isFunction(val.status) &&\n isFunction(val.send)\n );\n};\n\n/**\n * In Next.js, serve and register any declared functions with Inngest, making\n * them available to be triggered by events.\n *\n * Supports Next.js 12+, both serverless and edge.\n *\n * @example Next.js <=12 or the pages router can export the handler directly\n * ```ts\n * export default serve({ client: inngest, functions: [fn1, fn2] });\n * ```\n *\n * @example Next.js >=13 with the `app` dir must export individual methods\n * ```ts\n * export const { GET, POST, PUT } = serve({\n * client: inngest,\n * functions: [fn1, fn2],\n * });\n * ```\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (\n options: ServeHandlerOptions,\n): RequestHandler & {\n GET: RequestHandler;\n POST: RequestHandler;\n PUT: RequestHandler;\n} => {\n const handler = new InngestCommHandler({\n frameworkName,\n ...options,\n handler: (\n reqMethod: \"GET\" | \"POST\" | \"PUT\" | undefined,\n ...args: Parameters<RequestHandler>\n ) => {\n const [expectedReq, res] = args;\n const req = expectedReq as Either<NextApiRequest, NextRequest>;\n\n const getHeader = (key: string): string | null | undefined => {\n const header =\n typeof req.headers.get === \"function\"\n ? req.headers.get(key)\n : req.headers[key];\n\n return Array.isArray(header) ? header[0] : header;\n };\n\n return {\n body: async () => {\n if (typeof req.json === \"function\") {\n return await req.json();\n }\n\n if (req.body instanceof ReadableStream) {\n return await streamToJSON(req.body);\n }\n\n return req.body;\n },\n headers: getHeader,\n method: () => {\n /**\n * `req.method`, though types say otherwise, is not available in Next.js\n * 13 {@link https://beta.nextjs.org/docs/routing/route-handlers Route Handlers}.\n *\n * Therefore, we must try to set the method ourselves where we know it.\n */\n const method = reqMethod || req.method || \"\";\n return method;\n },\n isProduction: () => {\n /**\n * Vercel Edge Functions do not allow dynamic access to environment\n * variables, so we'll manage production checks directly here.\n *\n * We try/catch to avoid situations where Next.js is being used in\n * environments where `process.env` is not accessible or polyfilled.\n */\n try {\n const isProd = process.env.NODE_ENV === \"production\";\n return isProd;\n } catch (_err) {\n // no-op\n }\n\n return;\n },\n queryString: (key, url) => {\n const qs = req.query?.[key] || url.searchParams.get(key);\n return Array.isArray(qs) ? qs[0] : qs;\n },\n\n url: () => {\n let absoluteUrl: URL | undefined;\n try {\n absoluteUrl = new URL(req.url as string);\n } catch {\n // no-op\n }\n\n if (absoluteUrl) {\n /**\n * `req.url` here should may be the full URL, including query string.\n * There are some caveats, however, where Next.js will obfuscate\n * the host. For example, in the case of `host.docker.internal`,\n * Next.js will instead set the host here to `localhost`.\n *\n * To avoid this, we'll try to parse the URL from `req.url`, but\n * also use the `host` header if it's available.\n */\n const host = options.serveHost || getHeader(\"host\");\n if (host) {\n const hostWithProtocol = new URL(\n host.includes(\"://\")\n ? host\n : `${absoluteUrl.protocol}//${host}`,\n );\n\n absoluteUrl.protocol = hostWithProtocol.protocol;\n absoluteUrl.host = hostWithProtocol.host;\n absoluteUrl.port = hostWithProtocol.port;\n absoluteUrl.username = hostWithProtocol.username;\n absoluteUrl.password = hostWithProtocol.password;\n }\n\n return absoluteUrl;\n }\n\n let scheme: \"http\" | \"https\" = \"https\";\n const host = options.serveHost || getHeader(\"host\") || \"\";\n\n try {\n if (process.env.NODE_ENV === \"development\") {\n scheme = \"http\";\n }\n } catch (_err) {\n // no-op\n }\n\n const url = new URL(req.url as string, `${scheme}://${host}`);\n\n return url;\n },\n transformResponse: ({ body, headers, status }): Response => {\n /**\n * Carefully attempt to set headers and data on the response object\n * for Next.js 12 support.\n *\n * This also assumes that we're not using Next.js 15, where the `res`\n * object is repopulated as a `RouteContext` object. We expect these\n * methods to NOT be defined in Next.js 15.\n *\n * We could likely use `instanceof ServerResponse` to better check the\n * type of this, though Next.js 12 had issues with this due to not\n * instantiating the response correctly.\n */\n if (isNext12ApiResponse(res)) {\n for (const [key, value] of Object.entries(headers)) {\n res.setHeader(key, value);\n }\n\n res.status(status);\n res.send(body);\n\n /**\n * If we're here, we're in a serverless endpoint (not edge), so\n * we've correctly sent the response and can return `undefined`.\n *\n * Next.js 13 edge requires that the return value is typed as\n * `Response`, so we still enforce that as we cannot dynamically\n * adjust typing based on the environment.\n */\n return undefined as unknown as Response;\n }\n\n /**\n * If we're here, we're in an edge environment and need to return a\n * `Response` object.\n *\n * We also don't know if the current environment has a native\n * `Response` object, so we'll grab that first.\n */\n const Res = getResponse();\n return new Res(body, { status, headers });\n },\n transformStreamingResponse: ({ body, headers, status }) => {\n return new Response(body, { status, headers });\n },\n };\n },\n });\n\n /**\n * Next.js 13 uses\n * {@link https://beta.nextjs.org/docs/routing/route-handlers Route Handlers}\n * to declare API routes instead of a generic catch-all method that was\n * available using the `pages/api` directory.\n *\n * This means that users must now export a function for each method supported\n * by the endpoint. For us, this means requiring a user explicitly exports\n * `GET`, `POST`, and `PUT` functions.\n *\n * Because of this, we'll add circular references to those property names of\n * the returned handler, meaning we can write some succinct code to export\n * them. Thanks, @goodoldneon.\n *\n * @example\n * ```ts\n * export const { GET, POST, PUT } = serve(...);\n * ```\n *\n * See {@link https://beta.nextjs.org/docs/routing/route-handlers}\n */\n const baseFn = handler.createHandler();\n\n const fn = baseFn.bind(null, undefined);\n\n /**\n * Ensure we have a non-variadic length to avoid issues with forced type\n * checking.\n */\n Object.defineProperty(fn, \"length\", { value: 1 });\n\n type Fn = typeof fn;\n\n const handlerFn = Object.defineProperties(fn, {\n GET: { value: baseFn.bind(null, \"GET\") },\n POST: { value: baseFn.bind(null, \"POST\") },\n PUT: { value: baseFn.bind(null, \"PUT\") },\n }) as Fn & {\n GET: Fn;\n POST: Fn;\n PUT: Fn;\n };\n\n return handlerFn;\n};\n\nasync function streamToJSON(stream: ReadableStream): Promise<unknown> {\n const chunks = [];\n const reader = stream.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n chunks.push(value);\n }\n return JSON.parse(Buffer.concat(chunks).toString(\"utf8\"));\n}\n"],"mappings":";;;;;;;;AAoCA,MAAaA,gBAAwC;AAmBrD,MAAM,YAAY,QAAiD;AACjE,QAAO,OAAO,QAAQ,YAAY,QAAQ;;AAG5C,MAAM,cAAc,QAAyD;AAC3E,QAAO,OAAO,QAAQ;;AAGxB,MAAM,uBAAuB,QAAyC;AACpE,QACE,SAAS,IAAI,IACb,WAAW,IAAI,UAAU,IACzB,WAAW,IAAI,OAAO,IACtB,WAAW,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;AA0BxB,MAAa,SACX,YAKG;;;;;;;;;;;;;;;;;;;;;;CA0LH,MAAM,SAzLU,IAAI,mBAAmB;EACrC;EACA,GAAG;EACH,UACE,WACA,GAAG,SACA;GACH,MAAM,CAAC,aAAa,OAAO;GAC3B,MAAM,MAAM;GAEZ,MAAM,aAAa,QAA2C;IAC5D,MAAM,SACJ,OAAO,IAAI,QAAQ,QAAQ,aACvB,IAAI,QAAQ,IAAI,IAAI,GACpB,IAAI,QAAQ;AAElB,WAAO,MAAM,QAAQ,OAAO,GAAG,OAAO,KAAK;;AAG7C,UAAO;IACL,MAAM,YAAY;AAChB,SAAI,OAAO,IAAI,SAAS,WACtB,QAAO,MAAM,IAAI,MAAM;AAGzB,SAAI,IAAI,gBAAgB,eACtB,QAAO,MAAM,aAAa,IAAI,KAAK;AAGrC,YAAO,IAAI;;IAEb,SAAS;IACT,cAAc;AAQZ,YADe,aAAa,IAAI,UAAU;;IAG5C,oBAAoB;;;;;;;;AAQlB,SAAI;AAEF,aADe,QAAQ,IAAI,aAAa;cAEjC,MAAM;;IAMjB,cAAc,KAAK,QAAQ;KACzB,MAAM,KAAK,IAAI,QAAQ,QAAQ,IAAI,aAAa,IAAI,IAAI;AACxD,YAAO,MAAM,QAAQ,GAAG,GAAG,GAAG,KAAK;;IAGrC,WAAW;KACT,IAAIC;AACJ,SAAI;AACF,oBAAc,IAAI,IAAI,IAAI,IAAc;aAClC;AAIR,SAAI,aAAa;;;;;;;;;;MAUf,MAAMC,SAAO,QAAQ,aAAa,UAAU,OAAO;AACnD,UAAIA,QAAM;OACR,MAAM,mBAAmB,IAAI,IAC3BA,OAAK,SAAS,MAAM,GAChBA,SACA,GAAG,YAAY,SAAS,IAAIA,SACjC;AAED,mBAAY,WAAW,iBAAiB;AACxC,mBAAY,OAAO,iBAAiB;AACpC,mBAAY,OAAO,iBAAiB;AACpC,mBAAY,WAAW,iBAAiB;AACxC,mBAAY,WAAW,iBAAiB;;AAG1C,aAAO;;KAGT,IAAIC,SAA2B;KAC/B,MAAM,OAAO,QAAQ,aAAa,UAAU,OAAO,IAAI;AAEvD,SAAI;AACF,UAAI,QAAQ,IAAI,aAAa,cAC3B,UAAS;cAEJ,MAAM;AAMf,YAFY,IAAI,IAAI,IAAI,KAAe,GAAG,OAAO,KAAK,OAAO;;IAI/D,oBAAoB,EAAE,MAAM,SAAS,aAAuB;;;;;;;;;;;;;AAa1D,SAAI,oBAAoB,IAAI,EAAE;AAC5B,WAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,CAChD,KAAI,UAAU,KAAK,MAAM;AAG3B,UAAI,OAAO,OAAO;AAClB,UAAI,KAAK,KAAK;;;;;;;;;AAUd;;AAWF,YAAO,KADK,aAAa,EACV,MAAM;MAAE;MAAQ;MAAS,CAAC;;IAE3C,6BAA6B,EAAE,MAAM,SAAS,aAAa;AACzD,YAAO,IAAI,SAAS,MAAM;MAAE;MAAQ;MAAS,CAAC;;IAEjD;;EAEJ,CAAC,CAuBqB,eAAe;CAEtC,MAAM,KAAK,OAAO,KAAK,MAAM,OAAU;;;;;AAMvC,QAAO,eAAe,IAAI,UAAU,EAAE,OAAO,GAAG,CAAC;AAcjD,QAVkB,OAAO,iBAAiB,IAAI;EAC5C,KAAK,EAAE,OAAO,OAAO,KAAK,MAAM,MAAM,EAAE;EACxC,MAAM,EAAE,OAAO,OAAO,KAAK,MAAM,OAAO,EAAE;EAC1C,KAAK,EAAE,OAAO,OAAO,KAAK,MAAM,MAAM,EAAE;EACzC,CAAC;;AASJ,eAAe,aAAa,QAA0C;CACpE,MAAM,SAAS,EAAE;CACjB,MAAM,SAAS,OAAO,WAAW;AACjC,QAAO,MAAM;EACX,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,MAAM;AAC3C,MAAI,KACF;AAEF,SAAO,KAAK,MAAM;;AAEpB,QAAO,KAAK,MAAM,OAAO,OAAO,OAAO,CAAC,SAAS,OAAO,CAAC"}
package/nitro.cjs CHANGED
@@ -18,42 +18,8 @@ const serve = (options) => {
18
18
  frameworkName
19
19
  });
20
20
  };
21
- /**
22
- * In Nitro, create a function that can define an event handler with Inngest
23
- * steps enabled, allowing you to use steps seamlessly within that API.
24
- *
25
- * @example
26
- * ```ts
27
- * import { Inngest, step } from "inngest";
28
- * import { createExperimentalEndpointWrapper } from "inngest/nitro";
29
- *
30
- * const inngestEventHandler = createExperimentalEndpointWrapper({
31
- * client: new Inngest({ id: "nitro-sync-example" }),
32
- * });
33
- *
34
- *
35
- * export default inngestEventHandler(async (event) => {
36
- * const foo = await step.run("example/step", async () => {
37
- * return "Hello from step!";
38
- * });
39
- *
40
- * return `
41
- * <meta charset="utf-8">
42
- * <h1>This endpoint worked!</h1>
43
- * <p>The step's result was: ${foo}</p>
44
- * `;
45
- * });
46
- * ```
47
- */
48
- const createExperimentalEndpointWrapper = (options) => {
49
- return require_h3.createExperimentalEndpointWrapper({
50
- ...options,
51
- frameworkName
52
- });
53
- };
54
21
 
55
22
  //#endregion
56
- exports.createExperimentalEndpointWrapper = createExperimentalEndpointWrapper;
57
23
  exports.frameworkName = frameworkName;
58
24
  exports.serve = serve;
59
25
  //# sourceMappingURL=nitro.cjs.map
package/nitro.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nitro.cjs","names":["frameworkName: SupportedFrameworkName","serveH3","createExperimentalEndpointWrapperH3"],"sources":["../src/nitro.ts"],"sourcesContent":["/**\n * An adapter for Nitro to serve and register any declared functions with\n * Inngest, making them available to be triggered by events.\n *\n * @module\n */\n\nimport type {\n InternalServeHandlerOptions,\n ServeHandlerOptions,\n SyncHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport {\n createExperimentalEndpointWrapper as createExperimentalEndpointWrapperH3,\n serve as serveH3,\n} from \"./h3.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 = \"nitro\";\n\n/**\n * In Nitro, serve and register any declared functions with Inngest, making them\n * available to be triggered by events.\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (\n options: ServeHandlerOptions,\n): ReturnType<typeof serveH3> => {\n const optsOverrides: InternalServeHandlerOptions = {\n ...options,\n frameworkName,\n };\n\n return serveH3(optsOverrides);\n};\n\n/**\n * In Nitro, create a function that can define an event handler with Inngest\n * steps enabled, allowing you to use steps seamlessly within that API.\n *\n * @example\n * ```ts\n * import { Inngest, step } from \"inngest\";\n * import { createExperimentalEndpointWrapper } from \"inngest/nitro\";\n *\n * const inngestEventHandler = createExperimentalEndpointWrapper({\n * client: new Inngest({ id: \"nitro-sync-example\" }),\n * });\n *\n *\n * export default inngestEventHandler(async (event) => {\n * const foo = await step.run(\"example/step\", async () => {\n * return \"Hello from step!\";\n * });\n *\n * return `\n * <meta charset=\"utf-8\">\n * <h1>This endpoint worked!</h1>\n * <p>The step's result was: ${foo}</p>\n * `;\n * });\n * ```\n */\nexport const createExperimentalEndpointWrapper = (\n options: SyncHandlerOptions,\n) => {\n const optsOverrides = {\n ...options,\n frameworkName,\n };\n\n return createExperimentalEndpointWrapperH3(optsOverrides);\n};\n"],"mappings":";;;;;;;AAsBA,MAAaA,gBAAwC;;;;;;;AASrD,MAAa,SACX,YAC+B;AAM/B,QAAOC,iBAL4C;EACjD,GAAG;EACH;EACD,CAE4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8B/B,MAAa,qCACX,YACG;AAMH,QAAOC,6CALe;EACpB,GAAG;EACH;EACD,CAEwD"}
1
+ {"version":3,"file":"nitro.cjs","names":["frameworkName: SupportedFrameworkName","serveH3"],"sources":["../src/nitro.ts"],"sourcesContent":["/**\n * An adapter for Nitro to serve and register any declared functions with\n * Inngest, making them available to be triggered by events.\n *\n * @module\n */\n\nimport type {\n InternalServeHandlerOptions,\n ServeHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport { serve as serveH3 } from \"./h3.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 = \"nitro\";\n\n/**\n * In Nitro, serve and register any declared functions with Inngest, making them\n * available to be triggered by events.\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (\n options: ServeHandlerOptions,\n): ReturnType<typeof serveH3> => {\n const optsOverrides: InternalServeHandlerOptions = {\n ...options,\n frameworkName,\n };\n\n return serveH3(optsOverrides);\n};\n"],"mappings":";;;;;;;AAkBA,MAAaA,gBAAwC;;;;;;;AASrD,MAAa,SACX,YAC+B;AAM/B,QAAOC,iBAL4C;EACjD,GAAG;EACH;EACD,CAE4B"}
package/nitro.d.cts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { SupportedFrameworkName } from "./types.cjs";
2
- import { ServeHandlerOptions, SyncHandlerOptions } from "./components/InngestCommHandler.cjs";
2
+ import { ServeHandlerOptions } from "./components/InngestCommHandler.cjs";
3
3
  import { serve as serve$1 } from "./h3.cjs";
4
- import * as h30 from "h3";
5
4
 
6
5
  //#region src/nitro.d.ts
7
6
 
@@ -17,34 +16,6 @@ declare const frameworkName: SupportedFrameworkName;
17
16
  * @public
18
17
  */
19
18
  declare const serve: (options: ServeHandlerOptions) => ReturnType<typeof serve$1>;
20
- /**
21
- * In Nitro, create a function that can define an event handler with Inngest
22
- * steps enabled, allowing you to use steps seamlessly within that API.
23
- *
24
- * @example
25
- * ```ts
26
- * import { Inngest, step } from "inngest";
27
- * import { createExperimentalEndpointWrapper } from "inngest/nitro";
28
- *
29
- * const inngestEventHandler = createExperimentalEndpointWrapper({
30
- * client: new Inngest({ id: "nitro-sync-example" }),
31
- * });
32
- *
33
- *
34
- * export default inngestEventHandler(async (event) => {
35
- * const foo = await step.run("example/step", async () => {
36
- * return "Hello from step!";
37
- * });
38
- *
39
- * return `
40
- * <meta charset="utf-8">
41
- * <h1>This endpoint worked!</h1>
42
- * <p>The step's result was: ${foo}</p>
43
- * `;
44
- * });
45
- * ```
46
- */
47
- declare const createExperimentalEndpointWrapper: (options: SyncHandlerOptions) => (handler: (event: h30.H3Event<h30.EventHandlerRequest>) => Promise<any>) => (event: h30.H3Event<h30.EventHandlerRequest>) => Promise<any>;
48
19
  //#endregion
49
- export { createExperimentalEndpointWrapper, frameworkName, serve };
20
+ export { frameworkName, serve };
50
21
  //# sourceMappingURL=nitro.d.cts.map
package/nitro.d.cts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nitro.d.cts","names":[],"sources":["../src/nitro.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;AAqEa,cA/CA,aA+CA,EA/Ce,sBAwD3B;;;;;;;AAR4B,cAvChB,KAuCgB,EAAA,CAAA,OAAA,EAtClB,mBAsCkB,EAAA,GArC1B,UAqC0B,CAAA,OArCR,OAqCQ,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;cADhB,6CACF,yCAAkB,GAAA,CAAA,QAAA,GAAA,CAAA,mBAAA,MAAA,yBAAA,GAAA,CAAA,QAAA,GAAA,CAAA,mBAAA,MAAA"}
1
+ {"version":3,"file":"nitro.d.cts","names":[],"sources":["../src/nitro.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cAkBa,eAAe;;;;;;;cASf,iBACF,wBACR,kBAAkB"}
package/nitro.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { SupportedFrameworkName } from "./types.js";
2
- import { ServeHandlerOptions, SyncHandlerOptions } from "./components/InngestCommHandler.js";
2
+ import { ServeHandlerOptions } from "./components/InngestCommHandler.js";
3
3
  import { serve as serve$1 } from "./h3.js";
4
- import * as h30 from "h3";
5
4
 
6
5
  //#region src/nitro.d.ts
7
6
 
@@ -17,34 +16,6 @@ declare const frameworkName: SupportedFrameworkName;
17
16
  * @public
18
17
  */
19
18
  declare const serve: (options: ServeHandlerOptions) => ReturnType<typeof serve$1>;
20
- /**
21
- * In Nitro, create a function that can define an event handler with Inngest
22
- * steps enabled, allowing you to use steps seamlessly within that API.
23
- *
24
- * @example
25
- * ```ts
26
- * import { Inngest, step } from "inngest";
27
- * import { createExperimentalEndpointWrapper } from "inngest/nitro";
28
- *
29
- * const inngestEventHandler = createExperimentalEndpointWrapper({
30
- * client: new Inngest({ id: "nitro-sync-example" }),
31
- * });
32
- *
33
- *
34
- * export default inngestEventHandler(async (event) => {
35
- * const foo = await step.run("example/step", async () => {
36
- * return "Hello from step!";
37
- * });
38
- *
39
- * return `
40
- * <meta charset="utf-8">
41
- * <h1>This endpoint worked!</h1>
42
- * <p>The step's result was: ${foo}</p>
43
- * `;
44
- * });
45
- * ```
46
- */
47
- declare const createExperimentalEndpointWrapper: (options: SyncHandlerOptions) => (handler: (event: h30.H3Event<h30.EventHandlerRequest>) => Promise<any>) => (event: h30.H3Event<h30.EventHandlerRequest>) => Promise<any>;
48
19
  //#endregion
49
- export { createExperimentalEndpointWrapper, frameworkName, serve };
20
+ export { frameworkName, serve };
50
21
  //# sourceMappingURL=nitro.d.ts.map
package/nitro.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nitro.d.ts","names":[],"sources":["../src/nitro.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;AAqEa,cA/CA,aA+CA,EA/Ce,sBAwD3B;;;;;;;AAR4B,cAvChB,KAuCgB,EAAA,CAAA,OAAA,EAtClB,mBAsCkB,EAAA,GArC1B,UAqC0B,CAAA,OArCR,OAqCQ,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;cADhB,6CACF,yCAAkB,GAAA,CAAA,QAAA,GAAA,CAAA,mBAAA,MAAA,yBAAA,GAAA,CAAA,QAAA,GAAA,CAAA,mBAAA,MAAA"}
1
+ {"version":3,"file":"nitro.d.ts","names":[],"sources":["../src/nitro.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cAkBa,eAAe;;;;;;;cASf,iBACF,wBACR,kBAAkB"}
package/nitro.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createExperimentalEndpointWrapper as createExperimentalEndpointWrapper$1, serve as serve$1 } from "./h3.js";
1
+ import { serve as serve$1 } from "./h3.js";
2
2
 
3
3
  //#region src/nitro.ts
4
4
  /**
@@ -18,40 +18,7 @@ const serve = (options) => {
18
18
  frameworkName
19
19
  });
20
20
  };
21
- /**
22
- * In Nitro, create a function that can define an event handler with Inngest
23
- * steps enabled, allowing you to use steps seamlessly within that API.
24
- *
25
- * @example
26
- * ```ts
27
- * import { Inngest, step } from "inngest";
28
- * import { createExperimentalEndpointWrapper } from "inngest/nitro";
29
- *
30
- * const inngestEventHandler = createExperimentalEndpointWrapper({
31
- * client: new Inngest({ id: "nitro-sync-example" }),
32
- * });
33
- *
34
- *
35
- * export default inngestEventHandler(async (event) => {
36
- * const foo = await step.run("example/step", async () => {
37
- * return "Hello from step!";
38
- * });
39
- *
40
- * return `
41
- * <meta charset="utf-8">
42
- * <h1>This endpoint worked!</h1>
43
- * <p>The step's result was: ${foo}</p>
44
- * `;
45
- * });
46
- * ```
47
- */
48
- const createExperimentalEndpointWrapper = (options) => {
49
- return createExperimentalEndpointWrapper$1({
50
- ...options,
51
- frameworkName
52
- });
53
- };
54
21
 
55
22
  //#endregion
56
- export { createExperimentalEndpointWrapper, frameworkName, serve };
23
+ export { frameworkName, serve };
57
24
  //# sourceMappingURL=nitro.js.map
package/nitro.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nitro.js","names":["frameworkName: SupportedFrameworkName","serveH3","createExperimentalEndpointWrapperH3"],"sources":["../src/nitro.ts"],"sourcesContent":["/**\n * An adapter for Nitro to serve and register any declared functions with\n * Inngest, making them available to be triggered by events.\n *\n * @module\n */\n\nimport type {\n InternalServeHandlerOptions,\n ServeHandlerOptions,\n SyncHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport {\n createExperimentalEndpointWrapper as createExperimentalEndpointWrapperH3,\n serve as serveH3,\n} from \"./h3.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 = \"nitro\";\n\n/**\n * In Nitro, serve and register any declared functions with Inngest, making them\n * available to be triggered by events.\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (\n options: ServeHandlerOptions,\n): ReturnType<typeof serveH3> => {\n const optsOverrides: InternalServeHandlerOptions = {\n ...options,\n frameworkName,\n };\n\n return serveH3(optsOverrides);\n};\n\n/**\n * In Nitro, create a function that can define an event handler with Inngest\n * steps enabled, allowing you to use steps seamlessly within that API.\n *\n * @example\n * ```ts\n * import { Inngest, step } from \"inngest\";\n * import { createExperimentalEndpointWrapper } from \"inngest/nitro\";\n *\n * const inngestEventHandler = createExperimentalEndpointWrapper({\n * client: new Inngest({ id: \"nitro-sync-example\" }),\n * });\n *\n *\n * export default inngestEventHandler(async (event) => {\n * const foo = await step.run(\"example/step\", async () => {\n * return \"Hello from step!\";\n * });\n *\n * return `\n * <meta charset=\"utf-8\">\n * <h1>This endpoint worked!</h1>\n * <p>The step's result was: ${foo}</p>\n * `;\n * });\n * ```\n */\nexport const createExperimentalEndpointWrapper = (\n options: SyncHandlerOptions,\n) => {\n const optsOverrides = {\n ...options,\n frameworkName,\n };\n\n return createExperimentalEndpointWrapperH3(optsOverrides);\n};\n"],"mappings":";;;;;;;AAsBA,MAAaA,gBAAwC;;;;;;;AASrD,MAAa,SACX,YAC+B;AAM/B,QAAOC,QAL4C;EACjD,GAAG;EACH;EACD,CAE4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8B/B,MAAa,qCACX,YACG;AAMH,QAAOC,oCALe;EACpB,GAAG;EACH;EACD,CAEwD"}
1
+ {"version":3,"file":"nitro.js","names":["frameworkName: SupportedFrameworkName","serveH3"],"sources":["../src/nitro.ts"],"sourcesContent":["/**\n * An adapter for Nitro to serve and register any declared functions with\n * Inngest, making them available to be triggered by events.\n *\n * @module\n */\n\nimport type {\n InternalServeHandlerOptions,\n ServeHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport { serve as serveH3 } from \"./h3.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 = \"nitro\";\n\n/**\n * In Nitro, serve and register any declared functions with Inngest, making them\n * available to be triggered by events.\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (\n options: ServeHandlerOptions,\n): ReturnType<typeof serveH3> => {\n const optsOverrides: InternalServeHandlerOptions = {\n ...options,\n frameworkName,\n };\n\n return serveH3(optsOverrides);\n};\n"],"mappings":";;;;;;;AAkBA,MAAaA,gBAAwC;;;;;;;AASrD,MAAa,SACX,YAC+B;AAM/B,QAAOC,QAL4C;EACjD,GAAG;EACH;EACD,CAE4B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inngest",
3
- "version": "3.48.2-pr-1209.2",
3
+ "version": "3.49.1",
4
4
  "description": "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.",
5
5
  "main": "./index.cjs",
6
6
  "module": "./index.js",
package/types.d.cts CHANGED
@@ -1234,12 +1234,12 @@ declare const functionConfigSchema: z.ZodObject<{
1234
1234
  timeout: z.ZodOptional<z.ZodEffects<z.ZodString, "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`, string>>;
1235
1235
  }, "strict", z.ZodTypeAny, {
1236
1236
  period: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`;
1237
- key?: string | undefined;
1238
1237
  timeout?: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s` | undefined;
1238
+ key?: string | undefined;
1239
1239
  }, {
1240
1240
  period: string;
1241
- key?: string | undefined;
1242
1241
  timeout?: string | undefined;
1242
+ key?: string | undefined;
1243
1243
  }>>;
1244
1244
  timeouts: z.ZodOptional<z.ZodObject<{
1245
1245
  start: z.ZodOptional<z.ZodEffects<z.ZodString, "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`, string>>;
@@ -1340,8 +1340,8 @@ declare const functionConfigSchema: z.ZodObject<{
1340
1340
  } | undefined;
1341
1341
  debounce?: {
1342
1342
  period: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`;
1343
- key?: string | undefined;
1344
1343
  timeout?: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s` | undefined;
1344
+ key?: string | undefined;
1345
1345
  } | undefined;
1346
1346
  timeouts?: {
1347
1347
  finish?: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s` | undefined;
@@ -1400,8 +1400,8 @@ declare const functionConfigSchema: z.ZodObject<{
1400
1400
  } | undefined;
1401
1401
  debounce?: {
1402
1402
  period: string;
1403
- key?: string | undefined;
1404
1403
  timeout?: string | undefined;
1404
+ key?: string | undefined;
1405
1405
  } | undefined;
1406
1406
  timeouts?: {
1407
1407
  finish?: string | undefined;
package/types.d.ts CHANGED
@@ -1234,12 +1234,12 @@ declare const functionConfigSchema: z.ZodObject<{
1234
1234
  timeout: z.ZodOptional<z.ZodEffects<z.ZodString, "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`, string>>;
1235
1235
  }, "strict", z.ZodTypeAny, {
1236
1236
  period: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`;
1237
- key?: string | undefined;
1238
1237
  timeout?: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s` | undefined;
1238
+ key?: string | undefined;
1239
1239
  }, {
1240
1240
  period: string;
1241
- key?: string | undefined;
1242
1241
  timeout?: string | undefined;
1242
+ key?: string | undefined;
1243
1243
  }>>;
1244
1244
  timeouts: z.ZodOptional<z.ZodObject<{
1245
1245
  start: z.ZodOptional<z.ZodEffects<z.ZodString, "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`, string>>;
@@ -1340,8 +1340,8 @@ declare const functionConfigSchema: z.ZodObject<{
1340
1340
  } | undefined;
1341
1341
  debounce?: {
1342
1342
  period: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`;
1343
- key?: string | undefined;
1344
1343
  timeout?: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s` | undefined;
1344
+ key?: string | undefined;
1345
1345
  } | undefined;
1346
1346
  timeouts?: {
1347
1347
  finish?: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s` | undefined;
@@ -1400,8 +1400,8 @@ declare const functionConfigSchema: z.ZodObject<{
1400
1400
  } | undefined;
1401
1401
  debounce?: {
1402
1402
  period: string;
1403
- key?: string | undefined;
1404
1403
  timeout?: string | undefined;
1404
+ key?: string | undefined;
1405
1405
  } | undefined;
1406
1406
  timeouts?: {
1407
1407
  finish?: string | undefined;
package/version.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  //#region src/version.ts
3
- const version = "3.48.2-pr-1209.2";
3
+ const version = "3.49.1";
4
4
 
5
5
  //#endregion
6
6
  exports.version = version;
package/version.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"version.cjs","names":[],"sources":["../src/version.ts"],"sourcesContent":["// Generated by genversion.\nexport const version = \"3.48.2-pr-1209.2\";\n"],"mappings":";;AACA,MAAa,UAAU"}
1
+ {"version":3,"file":"version.cjs","names":[],"sources":["../src/version.ts"],"sourcesContent":["// Generated by genversion.\nexport const version = \"3.49.1\";\n"],"mappings":";;AACA,MAAa,UAAU"}
package/version.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region src/version.d.ts
2
- declare const version = "3.48.2-pr-1209.2";
2
+ declare const version = "3.49.1";
3
3
  //#endregion
4
4
  export { version };
5
5
  //# sourceMappingURL=version.d.cts.map
package/version.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region src/version.d.ts
2
- declare const version = "3.48.2-pr-1209.2";
2
+ declare const version = "3.49.1";
3
3
  //#endregion
4
4
  export { version };
5
5
  //# sourceMappingURL=version.d.ts.map
package/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region src/version.ts
2
- const version = "3.48.2-pr-1209.2";
2
+ const version = "3.49.1";
3
3
 
4
4
  //#endregion
5
5
  export { version };
package/version.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","names":[],"sources":["../src/version.ts"],"sourcesContent":["// Generated by genversion.\nexport const version = \"3.48.2-pr-1209.2\";\n"],"mappings":";AACA,MAAa,UAAU"}
1
+ {"version":3,"file":"version.js","names":[],"sources":["../src/version.ts"],"sourcesContent":["// Generated by genversion.\nexport const version = \"3.49.1\";\n"],"mappings":";AACA,MAAa,UAAU"}