inngest 4.1.2 → 4.2.0

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.
Files changed (93) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/api/api.cjs +30 -1
  3. package/api/api.cjs.map +1 -1
  4. package/api/api.d.cts +19 -0
  5. package/api/api.d.cts.map +1 -1
  6. package/api/api.d.ts +19 -0
  7. package/api/api.d.ts.map +1 -1
  8. package/api/api.js +30 -1
  9. package/api/api.js.map +1 -1
  10. package/components/InngestCommHandler.cjs +9 -1
  11. package/components/InngestCommHandler.cjs.map +1 -1
  12. package/components/InngestCommHandler.d.cts.map +1 -1
  13. package/components/InngestCommHandler.d.ts.map +1 -1
  14. package/components/InngestCommHandler.js +9 -1
  15. package/components/InngestCommHandler.js.map +1 -1
  16. package/components/StreamTools.cjs +241 -0
  17. package/components/StreamTools.cjs.map +1 -0
  18. package/components/StreamTools.d.cts +161 -0
  19. package/components/StreamTools.d.cts.map +1 -0
  20. package/components/StreamTools.d.ts +161 -0
  21. package/components/StreamTools.d.ts.map +1 -0
  22. package/components/StreamTools.js +240 -0
  23. package/components/StreamTools.js.map +1 -0
  24. package/components/createWebApiCommHandler.cjs +46 -0
  25. package/components/createWebApiCommHandler.cjs.map +1 -0
  26. package/components/createWebApiCommHandler.js +46 -0
  27. package/components/createWebApiCommHandler.js.map +1 -0
  28. package/components/execution/InngestExecution.cjs.map +1 -1
  29. package/components/execution/InngestExecution.d.cts +6 -0
  30. package/components/execution/InngestExecution.d.cts.map +1 -1
  31. package/components/execution/InngestExecution.d.ts +6 -0
  32. package/components/execution/InngestExecution.d.ts.map +1 -1
  33. package/components/execution/InngestExecution.js.map +1 -1
  34. package/components/execution/als.cjs.map +1 -1
  35. package/components/execution/als.d.cts +9 -1
  36. package/components/execution/als.d.cts.map +1 -1
  37. package/components/execution/als.d.ts +9 -1
  38. package/components/execution/als.d.ts.map +1 -1
  39. package/components/execution/als.js.map +1 -1
  40. package/components/execution/engine.cjs +334 -26
  41. package/components/execution/engine.cjs.map +1 -1
  42. package/components/execution/engine.d.cts +1 -0
  43. package/components/execution/engine.d.cts.map +1 -1
  44. package/components/execution/engine.d.ts +1 -0
  45. package/components/execution/engine.d.ts.map +1 -1
  46. package/components/execution/engine.js +334 -26
  47. package/components/execution/engine.js.map +1 -1
  48. package/components/execution/streaming.cjs +208 -0
  49. package/components/execution/streaming.cjs.map +1 -0
  50. package/components/execution/streaming.d.cts +12 -0
  51. package/components/execution/streaming.d.cts.map +1 -0
  52. package/components/execution/streaming.d.ts +12 -0
  53. package/components/execution/streaming.d.ts.map +1 -0
  54. package/components/execution/streaming.js +198 -0
  55. package/components/execution/streaming.js.map +1 -0
  56. package/edge.cjs +19 -32
  57. package/edge.cjs.map +1 -1
  58. package/edge.d.cts +1 -1
  59. package/edge.d.cts.map +1 -1
  60. package/edge.d.ts +1 -1
  61. package/edge.d.ts.map +1 -1
  62. package/edge.js +19 -32
  63. package/edge.js.map +1 -1
  64. package/experimental/durable-endpoints/client.cjs +114 -0
  65. package/experimental/durable-endpoints/client.cjs.map +1 -0
  66. package/experimental/durable-endpoints/client.d.cts +49 -0
  67. package/experimental/durable-endpoints/client.d.cts.map +1 -0
  68. package/experimental/durable-endpoints/client.d.ts +49 -0
  69. package/experimental/durable-endpoints/client.d.ts.map +1 -0
  70. package/experimental/durable-endpoints/client.js +114 -0
  71. package/experimental/durable-endpoints/client.js.map +1 -0
  72. package/experimental/durable-endpoints/index.cjs +3 -0
  73. package/experimental/durable-endpoints/index.d.cts +2 -0
  74. package/experimental/durable-endpoints/index.d.ts +2 -0
  75. package/experimental/durable-endpoints/index.js +3 -0
  76. package/helpers/promises.cjs.map +1 -1
  77. package/helpers/promises.js.map +1 -1
  78. package/node.cjs +97 -0
  79. package/node.cjs.map +1 -1
  80. package/node.d.cts +34 -2
  81. package/node.d.cts.map +1 -1
  82. package/node.d.ts +34 -2
  83. package/node.d.ts.map +1 -1
  84. package/node.js +95 -2
  85. package/node.js.map +1 -1
  86. package/package.json +17 -1
  87. package/react.d.cts.map +1 -1
  88. package/version.cjs +1 -1
  89. package/version.cjs.map +1 -1
  90. package/version.d.cts +1 -1
  91. package/version.d.ts +1 -1
  92. package/version.js +1 -1
  93. package/version.js.map +1 -1
@@ -0,0 +1,208 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_types = require('../../helpers/types.cjs');
3
+ const require_utils = require('../middleware/utils.cjs');
4
+ let zod_v3 = require("zod/v3");
5
+
6
+ //#region src/components/execution/streaming.ts
7
+ const sseMetadataSchema = zod_v3.z.object({
8
+ type: zod_v3.z.literal("inngest.metadata"),
9
+ runId: zod_v3.z.string()
10
+ });
11
+ const sseStreamSchema = zod_v3.z.object({
12
+ type: zod_v3.z.literal("inngest.stream"),
13
+ data: zod_v3.z.unknown(),
14
+ hashedStepId: zod_v3.z.string().optional()
15
+ });
16
+ const sseCommitSchema = zod_v3.z.object({
17
+ type: zod_v3.z.literal("inngest.commit"),
18
+ hashedStepId: zod_v3.z.string().nullable()
19
+ });
20
+ const sseRollbackSchema = zod_v3.z.object({
21
+ type: zod_v3.z.literal("inngest.rollback"),
22
+ hashedStepId: zod_v3.z.string().nullable()
23
+ });
24
+ const sseResultSchema = zod_v3.z.object({
25
+ type: zod_v3.z.literal("inngest.response"),
26
+ status: zod_v3.z.union([zod_v3.z.literal("succeeded"), zod_v3.z.literal("failed")]),
27
+ response: zod_v3.z.object({
28
+ body: zod_v3.z.string(),
29
+ headers: zod_v3.z.record(zod_v3.z.string()),
30
+ statusCode: zod_v3.z.number()
31
+ })
32
+ });
33
+ const sseRedirectSchema = zod_v3.z.object({
34
+ type: zod_v3.z.literal("inngest.redirect_info"),
35
+ runId: zod_v3.z.string(),
36
+ url: zod_v3.z.string()
37
+ });
38
+ /**
39
+ * Builds a single SSE event with the given event name and JSON-serialized data.
40
+ *
41
+ * `undefined` is normalized to `null` so that the `data:` field is always valid
42
+ * JSON (since `JSON.stringify(undefined)` returns the JS primitive `undefined`,
43
+ * not the string `"null"`).
44
+ */
45
+ function buildSseEvent(event, data) {
46
+ return `event: ${event}\ndata: ${JSON.stringify(data ?? null)}\n\n`;
47
+ }
48
+ /**
49
+ * Builds an SSE metadata event string for a streaming response.
50
+ *
51
+ * The event follows the Server-Sent Events format and provides run context
52
+ * (run ID) to consumers of the stream.
53
+ */
54
+ function buildSseMetadataEvent(runId) {
55
+ return buildSseEvent("inngest.metadata", { runId });
56
+ }
57
+ /**
58
+ * Builds an SSE stream event string for user-pushed data.
59
+ *
60
+ * Used by `stream.push()` and `stream.pipe()` to send arbitrary data to
61
+ * clients as part of a streaming response.
62
+ */
63
+ function buildSseStreamEvent(data, hashedStepId) {
64
+ const payload = { data };
65
+ if (hashedStepId) payload.hashedStepId = hashedStepId;
66
+ return buildSseEvent("inngest.stream", payload);
67
+ }
68
+ /**
69
+ * Builds an `inngest.response` SSE event with status `succeeded`.
70
+ */
71
+ function buildSseSucceededEvent(response) {
72
+ return buildSseEvent("inngest.response", {
73
+ status: "succeeded",
74
+ response
75
+ });
76
+ }
77
+ /**
78
+ * Builds an `inngest.response` SSE event with status `failed`.
79
+ */
80
+ function buildSseFailedEvent(error) {
81
+ return buildSseEvent("inngest.response", {
82
+ status: "failed",
83
+ response: {
84
+ body: JSON.stringify(error),
85
+ statusCode: 500,
86
+ headers: { "content-type": "application/json" }
87
+ }
88
+ });
89
+ }
90
+ /**
91
+ * Builds an SSE redirect event telling the client that execution has switched
92
+ * to async mode and it should reconnect elsewhere to get remaining output.
93
+ *
94
+ * The `url` already contains the realtime JWT as a query parameter, so no
95
+ * separate token field is needed.
96
+ */
97
+ function buildSseRedirectEvent(data) {
98
+ return buildSseEvent("inngest.redirect_info", data);
99
+ }
100
+ /**
101
+ * Returns a new `ReadableStream` that emits `prefix` first, then pipes
102
+ * through all chunks from the original `stream`.
103
+ */
104
+ function prependToStream(prefix, stream) {
105
+ return new ReadableStream({ async start(controller) {
106
+ controller.enqueue(prefix);
107
+ const reader = stream.getReader();
108
+ try {
109
+ while (true) {
110
+ const { done, value } = await reader.read();
111
+ if (done) break;
112
+ controller.enqueue(value);
113
+ }
114
+ controller.close();
115
+ } catch (err) {
116
+ controller.error(err);
117
+ } finally {
118
+ reader.releaseLock();
119
+ }
120
+ } });
121
+ }
122
+ /**
123
+ * Builds an `inngest.commit` SSE event indicating a step's data is committed.
124
+ */
125
+ function buildSseCommitEvent(hashedStepId) {
126
+ return buildSseEvent("inngest.commit", { hashedStepId });
127
+ }
128
+ /**
129
+ * Builds an `inngest.rollback` SSE event indicating a step's data should be
130
+ * rolled back (e.g. step errored and will retry, or disconnect mid-step).
131
+ */
132
+ function buildSseRollbackEvent(hashedStepId) {
133
+ return buildSseEvent("inngest.rollback", { hashedStepId });
134
+ }
135
+ /**
136
+ * Parses a `ReadableStream<Uint8Array>` as an SSE byte stream, yielding
137
+ * `RawSseEvent` objects for each complete event.
138
+ */
139
+ async function* iterSse(body) {
140
+ const reader = body.getReader();
141
+ const decoder = new TextDecoder();
142
+ let buffer = "";
143
+ try {
144
+ while (true) {
145
+ const { done, value } = await reader.read();
146
+ if (done) break;
147
+ buffer += decoder.decode(value, { stream: true });
148
+ const parts = buffer.split("\n\n");
149
+ buffer = parts.pop() ?? "";
150
+ for (const part of parts) {
151
+ if (!part.trim()) continue;
152
+ let event = "message";
153
+ const dataLines = [];
154
+ for (const line of part.split("\n")) if (line.startsWith("event: ")) event = line.slice(7);
155
+ else if (line.startsWith("data: ")) dataLines.push(line.slice(6));
156
+ const data = dataLines.join("\n");
157
+ yield {
158
+ event,
159
+ data
160
+ };
161
+ }
162
+ }
163
+ } finally {
164
+ reader.releaseLock();
165
+ }
166
+ }
167
+ const sseSchemasByEvent = {
168
+ "inngest.metadata": sseMetadataSchema,
169
+ "inngest.stream": sseStreamSchema,
170
+ "inngest.response": sseResultSchema,
171
+ "inngest.commit": sseCommitSchema,
172
+ "inngest.rollback": sseRollbackSchema,
173
+ "inngest.redirect_info": sseRedirectSchema
174
+ };
175
+ /**
176
+ * Converts a `RawSseEvent` into a typed `SseEvent`, or returns `undefined`
177
+ * if the event type is unrecognised or fails validation.
178
+ */
179
+ function parseSseEvent(raw) {
180
+ const schema = sseSchemasByEvent[raw.event];
181
+ if (!schema) return;
182
+ let parsed;
183
+ try {
184
+ parsed = JSON.parse(raw.data);
185
+ } catch {
186
+ throw new require_utils.UnreachableError("SSE data is not a valid JSON string");
187
+ }
188
+ if (!require_types.isRecord(parsed)) return;
189
+ const result = schema.safeParse({
190
+ ...parsed,
191
+ type: raw.event
192
+ });
193
+ if (!result.success) throw new Error("Unknown SSE event", { cause: result.error });
194
+ return result.data;
195
+ }
196
+
197
+ //#endregion
198
+ exports.buildSseCommitEvent = buildSseCommitEvent;
199
+ exports.buildSseFailedEvent = buildSseFailedEvent;
200
+ exports.buildSseMetadataEvent = buildSseMetadataEvent;
201
+ exports.buildSseRedirectEvent = buildSseRedirectEvent;
202
+ exports.buildSseRollbackEvent = buildSseRollbackEvent;
203
+ exports.buildSseStreamEvent = buildSseStreamEvent;
204
+ exports.buildSseSucceededEvent = buildSseSucceededEvent;
205
+ exports.iterSse = iterSse;
206
+ exports.parseSseEvent = parseSseEvent;
207
+ exports.prependToStream = prependToStream;
208
+ //# sourceMappingURL=streaming.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.cjs","names":["z","payload: Record<string, unknown>","dataLines: string[]","sseSchemasByEvent: Record<string, z.ZodType<SseEvent>>","parsed: unknown","UnreachableError","isRecord"],"sources":["../../../src/components/execution/streaming.ts"],"sourcesContent":["// No Node.js imports — this file is shared between server and client code.\n\nimport { z } from \"zod/v3\";\nimport { isRecord } from \"../../helpers/types.ts\";\nimport { UnreachableError } from \"../middleware/utils.ts\";\n\n// ---------------------------------------------------------------------------\n// Schemas — single source of truth for both runtime validation and types\n// ---------------------------------------------------------------------------\n\nconst sseMetadataSchema = z.object({\n type: z.literal(\"inngest.metadata\"),\n runId: z.string(),\n});\n\nconst sseStreamSchema = z.object({\n type: z.literal(\"inngest.stream\"),\n data: z.unknown(),\n hashedStepId: z.string().optional(),\n});\n\nconst sseCommitSchema = z.object({\n type: z.literal(\"inngest.commit\"),\n hashedStepId: z.string().nullable(),\n});\n\nconst sseRollbackSchema = z.object({\n type: z.literal(\"inngest.rollback\"),\n hashedStepId: z.string().nullable(),\n});\n\nconst sseResultSchema = z.object({\n type: z.literal(\"inngest.response\"),\n status: z.union([z.literal(\"succeeded\"), z.literal(\"failed\")]),\n response: z.object({\n body: z.string(),\n headers: z.record(z.string()),\n statusCode: z.number(),\n }),\n});\n\nconst sseRedirectSchema = z.object({\n type: z.literal(\"inngest.redirect_info\"),\n runId: z.string(),\n url: z.string(),\n});\n\n// ---------------------------------------------------------------------------\n// Types derived from schemas\n// ---------------------------------------------------------------------------\n\nexport type SseMetadataEvent = z.infer<typeof sseMetadataSchema>;\nexport type SseStreamEvent = z.infer<typeof sseStreamSchema>;\nexport type SseResultEvent = z.infer<typeof sseResultSchema>;\n\nexport type SseCommitEvent = z.infer<typeof sseCommitSchema>;\nexport type SseRollbackEvent = z.infer<typeof sseRollbackSchema>;\n\nexport type SseRedirectEvent = z.infer<typeof sseRedirectSchema>;\n\nexport type SseEvent =\n | SseMetadataEvent\n | SseStreamEvent\n | SseResultEvent\n | SseCommitEvent\n | SseRollbackEvent\n | SseRedirectEvent;\n\nexport interface RawSseEvent {\n event: string;\n data: string;\n}\n\n// ---------------------------------------------------------------------------\n// SSE event builders\n// ---------------------------------------------------------------------------\n\n/**\n * Builds a single SSE event with the given event name and JSON-serialized data.\n *\n * `undefined` is normalized to `null` so that the `data:` field is always valid\n * JSON (since `JSON.stringify(undefined)` returns the JS primitive `undefined`,\n * not the string `\"null\"`).\n */\nfunction buildSseEvent(event: string, data: unknown): string {\n return `event: ${event}\\ndata: ${JSON.stringify(data ?? null)}\\n\\n`;\n}\n\n/**\n * Builds an SSE metadata event string for a streaming response.\n *\n * The event follows the Server-Sent Events format and provides run context\n * (run ID) to consumers of the stream.\n */\nexport function buildSseMetadataEvent(runId: string): string {\n return buildSseEvent(\"inngest.metadata\", { runId });\n}\n\n/**\n * Builds an SSE stream event string for user-pushed data.\n *\n * Used by `stream.push()` and `stream.pipe()` to send arbitrary data to\n * clients as part of a streaming response.\n */\nexport function buildSseStreamEvent(\n data: unknown,\n hashedStepId?: string,\n): string {\n const payload: Record<string, unknown> = { data };\n if (hashedStepId) payload.hashedStepId = hashedStepId;\n return buildSseEvent(\"inngest.stream\", payload);\n}\n\nexport interface SseResponse {\n body: string;\n statusCode: number;\n headers: Record<string, string>;\n}\n\n/**\n * Builds an `inngest.response` SSE event with status `succeeded`.\n */\nexport function buildSseSucceededEvent(response: SseResponse): string {\n return buildSseEvent(\"inngest.response\", {\n status: \"succeeded\",\n response,\n });\n}\n\n/**\n * Builds an `inngest.response` SSE event with status `failed`.\n */\nexport function buildSseFailedEvent(error: string): string {\n return buildSseEvent(\"inngest.response\", {\n status: \"failed\",\n response: {\n body: JSON.stringify(error),\n statusCode: 500,\n headers: { \"content-type\": \"application/json\" },\n },\n });\n}\n\n/**\n * Builds an SSE redirect event telling the client that execution has switched\n * to async mode and it should reconnect elsewhere to get remaining output.\n *\n * The `url` already contains the realtime JWT as a query parameter, so no\n * separate token field is needed.\n */\nexport function buildSseRedirectEvent(data: {\n runId: string;\n url: string;\n}): string {\n return buildSseEvent(\"inngest.redirect_info\", data);\n}\n\n/**\n * Returns a new `ReadableStream` that emits `prefix` first, then pipes\n * through all chunks from the original `stream`.\n */\nexport function prependToStream(\n prefix: Uint8Array,\n stream: ReadableStream<Uint8Array>,\n): ReadableStream<Uint8Array> {\n return new ReadableStream({\n async start(controller) {\n controller.enqueue(prefix);\n\n const reader = stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n controller.enqueue(value);\n }\n controller.close();\n } catch (err) {\n controller.error(err);\n } finally {\n reader.releaseLock();\n }\n },\n });\n}\n\n// ---------------------------------------------------------------------------\n// Commit / Rollback event builders\n// ---------------------------------------------------------------------------\n\n/**\n * Builds an `inngest.commit` SSE event indicating a step's data is committed.\n */\nexport function buildSseCommitEvent(hashedStepId: string | null): string {\n return buildSseEvent(\"inngest.commit\", { hashedStepId });\n}\n\n/**\n * Builds an `inngest.rollback` SSE event indicating a step's data should be\n * rolled back (e.g. step errored and will retry, or disconnect mid-step).\n */\nexport function buildSseRollbackEvent(hashedStepId: string | null): string {\n return buildSseEvent(\"inngest.rollback\", { hashedStepId });\n}\n\n// ---------------------------------------------------------------------------\n// SSE line parser (async generator)\n// ---------------------------------------------------------------------------\n\n/**\n * Parses a `ReadableStream<Uint8Array>` as an SSE byte stream, yielding\n * `RawSseEvent` objects for each complete event.\n */\nexport async function* iterSse(\n body: ReadableStream<Uint8Array>,\n): AsyncGenerator<RawSseEvent> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n // SSE events are delimited by a blank line (double newline) per the\n // Server-Sent Events spec.\n const parts = buffer.split(\"\\n\\n\");\n buffer = parts.pop() ?? \"\";\n\n for (const part of parts) {\n if (!part.trim()) continue;\n\n let event = \"message\";\n const dataLines: string[] = [];\n\n for (const line of part.split(\"\\n\")) {\n if (line.startsWith(\"event: \")) {\n event = line.slice(7);\n } else if (line.startsWith(\"data: \")) {\n dataLines.push(line.slice(6));\n }\n }\n\n const data = dataLines.join(\"\\n\");\n\n yield { event, data };\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Raw SSE event -> typed SseEvent\n// ---------------------------------------------------------------------------\n\nconst sseSchemasByEvent: Record<string, z.ZodType<SseEvent>> = {\n \"inngest.metadata\": sseMetadataSchema,\n \"inngest.stream\": sseStreamSchema,\n \"inngest.response\": sseResultSchema,\n \"inngest.commit\": sseCommitSchema,\n \"inngest.rollback\": sseRollbackSchema,\n \"inngest.redirect_info\": sseRedirectSchema,\n};\n\n/**\n * Converts a `RawSseEvent` into a typed `SseEvent`, or returns `undefined`\n * if the event type is unrecognised or fails validation.\n */\nexport function parseSseEvent(raw: RawSseEvent): SseEvent | undefined {\n const schema = sseSchemasByEvent[raw.event];\n if (!schema) {\n return undefined;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw.data);\n } catch {\n throw new UnreachableError(\"SSE data is not a valid JSON string\");\n }\n if (!isRecord(parsed)) {\n return undefined;\n }\n\n const result = schema.safeParse({ ...parsed, type: raw.event });\n if (!result.success) {\n throw new Error(\"Unknown SSE event\", { cause: result.error });\n }\n\n return result.data;\n}\n"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { z } from "zod/v3";
2
+
3
+ //#region src/components/execution/streaming.d.ts
4
+
5
+ interface SseResponse {
6
+ body: string;
7
+ statusCode: number;
8
+ headers: Record<string, string>;
9
+ }
10
+ //#endregion
11
+ export { SseResponse };
12
+ //# sourceMappingURL=streaming.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.d.cts","names":[],"sources":["../../../src/components/execution/streaming.ts"],"sourcesContent":[],"mappings":";;;;UAiHiB,WAAA;;;WAGN"}
@@ -0,0 +1,12 @@
1
+ import { z } from "zod/v3";
2
+
3
+ //#region src/components/execution/streaming.d.ts
4
+
5
+ interface SseResponse {
6
+ body: string;
7
+ statusCode: number;
8
+ headers: Record<string, string>;
9
+ }
10
+ //#endregion
11
+ export { SseResponse };
12
+ //# sourceMappingURL=streaming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.d.ts","names":[],"sources":["../../../src/components/execution/streaming.ts"],"sourcesContent":[],"mappings":";;;;UAiHiB,WAAA;;;WAGN"}
@@ -0,0 +1,198 @@
1
+ import { isRecord } from "../../helpers/types.js";
2
+ import { UnreachableError } from "../middleware/utils.js";
3
+ import { z } from "zod/v3";
4
+
5
+ //#region src/components/execution/streaming.ts
6
+ const sseMetadataSchema = z.object({
7
+ type: z.literal("inngest.metadata"),
8
+ runId: z.string()
9
+ });
10
+ const sseStreamSchema = z.object({
11
+ type: z.literal("inngest.stream"),
12
+ data: z.unknown(),
13
+ hashedStepId: z.string().optional()
14
+ });
15
+ const sseCommitSchema = z.object({
16
+ type: z.literal("inngest.commit"),
17
+ hashedStepId: z.string().nullable()
18
+ });
19
+ const sseRollbackSchema = z.object({
20
+ type: z.literal("inngest.rollback"),
21
+ hashedStepId: z.string().nullable()
22
+ });
23
+ const sseResultSchema = z.object({
24
+ type: z.literal("inngest.response"),
25
+ status: z.union([z.literal("succeeded"), z.literal("failed")]),
26
+ response: z.object({
27
+ body: z.string(),
28
+ headers: z.record(z.string()),
29
+ statusCode: z.number()
30
+ })
31
+ });
32
+ const sseRedirectSchema = z.object({
33
+ type: z.literal("inngest.redirect_info"),
34
+ runId: z.string(),
35
+ url: z.string()
36
+ });
37
+ /**
38
+ * Builds a single SSE event with the given event name and JSON-serialized data.
39
+ *
40
+ * `undefined` is normalized to `null` so that the `data:` field is always valid
41
+ * JSON (since `JSON.stringify(undefined)` returns the JS primitive `undefined`,
42
+ * not the string `"null"`).
43
+ */
44
+ function buildSseEvent(event, data) {
45
+ return `event: ${event}\ndata: ${JSON.stringify(data ?? null)}\n\n`;
46
+ }
47
+ /**
48
+ * Builds an SSE metadata event string for a streaming response.
49
+ *
50
+ * The event follows the Server-Sent Events format and provides run context
51
+ * (run ID) to consumers of the stream.
52
+ */
53
+ function buildSseMetadataEvent(runId) {
54
+ return buildSseEvent("inngest.metadata", { runId });
55
+ }
56
+ /**
57
+ * Builds an SSE stream event string for user-pushed data.
58
+ *
59
+ * Used by `stream.push()` and `stream.pipe()` to send arbitrary data to
60
+ * clients as part of a streaming response.
61
+ */
62
+ function buildSseStreamEvent(data, hashedStepId) {
63
+ const payload = { data };
64
+ if (hashedStepId) payload.hashedStepId = hashedStepId;
65
+ return buildSseEvent("inngest.stream", payload);
66
+ }
67
+ /**
68
+ * Builds an `inngest.response` SSE event with status `succeeded`.
69
+ */
70
+ function buildSseSucceededEvent(response) {
71
+ return buildSseEvent("inngest.response", {
72
+ status: "succeeded",
73
+ response
74
+ });
75
+ }
76
+ /**
77
+ * Builds an `inngest.response` SSE event with status `failed`.
78
+ */
79
+ function buildSseFailedEvent(error) {
80
+ return buildSseEvent("inngest.response", {
81
+ status: "failed",
82
+ response: {
83
+ body: JSON.stringify(error),
84
+ statusCode: 500,
85
+ headers: { "content-type": "application/json" }
86
+ }
87
+ });
88
+ }
89
+ /**
90
+ * Builds an SSE redirect event telling the client that execution has switched
91
+ * to async mode and it should reconnect elsewhere to get remaining output.
92
+ *
93
+ * The `url` already contains the realtime JWT as a query parameter, so no
94
+ * separate token field is needed.
95
+ */
96
+ function buildSseRedirectEvent(data) {
97
+ return buildSseEvent("inngest.redirect_info", data);
98
+ }
99
+ /**
100
+ * Returns a new `ReadableStream` that emits `prefix` first, then pipes
101
+ * through all chunks from the original `stream`.
102
+ */
103
+ function prependToStream(prefix, stream) {
104
+ return new ReadableStream({ async start(controller) {
105
+ controller.enqueue(prefix);
106
+ const reader = stream.getReader();
107
+ try {
108
+ while (true) {
109
+ const { done, value } = await reader.read();
110
+ if (done) break;
111
+ controller.enqueue(value);
112
+ }
113
+ controller.close();
114
+ } catch (err) {
115
+ controller.error(err);
116
+ } finally {
117
+ reader.releaseLock();
118
+ }
119
+ } });
120
+ }
121
+ /**
122
+ * Builds an `inngest.commit` SSE event indicating a step's data is committed.
123
+ */
124
+ function buildSseCommitEvent(hashedStepId) {
125
+ return buildSseEvent("inngest.commit", { hashedStepId });
126
+ }
127
+ /**
128
+ * Builds an `inngest.rollback` SSE event indicating a step's data should be
129
+ * rolled back (e.g. step errored and will retry, or disconnect mid-step).
130
+ */
131
+ function buildSseRollbackEvent(hashedStepId) {
132
+ return buildSseEvent("inngest.rollback", { hashedStepId });
133
+ }
134
+ /**
135
+ * Parses a `ReadableStream<Uint8Array>` as an SSE byte stream, yielding
136
+ * `RawSseEvent` objects for each complete event.
137
+ */
138
+ async function* iterSse(body) {
139
+ const reader = body.getReader();
140
+ const decoder = new TextDecoder();
141
+ let buffer = "";
142
+ try {
143
+ while (true) {
144
+ const { done, value } = await reader.read();
145
+ if (done) break;
146
+ buffer += decoder.decode(value, { stream: true });
147
+ const parts = buffer.split("\n\n");
148
+ buffer = parts.pop() ?? "";
149
+ for (const part of parts) {
150
+ if (!part.trim()) continue;
151
+ let event = "message";
152
+ const dataLines = [];
153
+ for (const line of part.split("\n")) if (line.startsWith("event: ")) event = line.slice(7);
154
+ else if (line.startsWith("data: ")) dataLines.push(line.slice(6));
155
+ const data = dataLines.join("\n");
156
+ yield {
157
+ event,
158
+ data
159
+ };
160
+ }
161
+ }
162
+ } finally {
163
+ reader.releaseLock();
164
+ }
165
+ }
166
+ const sseSchemasByEvent = {
167
+ "inngest.metadata": sseMetadataSchema,
168
+ "inngest.stream": sseStreamSchema,
169
+ "inngest.response": sseResultSchema,
170
+ "inngest.commit": sseCommitSchema,
171
+ "inngest.rollback": sseRollbackSchema,
172
+ "inngest.redirect_info": sseRedirectSchema
173
+ };
174
+ /**
175
+ * Converts a `RawSseEvent` into a typed `SseEvent`, or returns `undefined`
176
+ * if the event type is unrecognised or fails validation.
177
+ */
178
+ function parseSseEvent(raw) {
179
+ const schema = sseSchemasByEvent[raw.event];
180
+ if (!schema) return;
181
+ let parsed;
182
+ try {
183
+ parsed = JSON.parse(raw.data);
184
+ } catch {
185
+ throw new UnreachableError("SSE data is not a valid JSON string");
186
+ }
187
+ if (!isRecord(parsed)) return;
188
+ const result = schema.safeParse({
189
+ ...parsed,
190
+ type: raw.event
191
+ });
192
+ if (!result.success) throw new Error("Unknown SSE event", { cause: result.error });
193
+ return result.data;
194
+ }
195
+
196
+ //#endregion
197
+ export { buildSseCommitEvent, buildSseFailedEvent, buildSseMetadataEvent, buildSseRedirectEvent, buildSseRollbackEvent, buildSseStreamEvent, buildSseSucceededEvent, iterSse, parseSseEvent, prependToStream };
198
+ //# sourceMappingURL=streaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.js","names":["payload: Record<string, unknown>","dataLines: string[]","sseSchemasByEvent: Record<string, z.ZodType<SseEvent>>","parsed: unknown"],"sources":["../../../src/components/execution/streaming.ts"],"sourcesContent":["// No Node.js imports — this file is shared between server and client code.\n\nimport { z } from \"zod/v3\";\nimport { isRecord } from \"../../helpers/types.ts\";\nimport { UnreachableError } from \"../middleware/utils.ts\";\n\n// ---------------------------------------------------------------------------\n// Schemas — single source of truth for both runtime validation and types\n// ---------------------------------------------------------------------------\n\nconst sseMetadataSchema = z.object({\n type: z.literal(\"inngest.metadata\"),\n runId: z.string(),\n});\n\nconst sseStreamSchema = z.object({\n type: z.literal(\"inngest.stream\"),\n data: z.unknown(),\n hashedStepId: z.string().optional(),\n});\n\nconst sseCommitSchema = z.object({\n type: z.literal(\"inngest.commit\"),\n hashedStepId: z.string().nullable(),\n});\n\nconst sseRollbackSchema = z.object({\n type: z.literal(\"inngest.rollback\"),\n hashedStepId: z.string().nullable(),\n});\n\nconst sseResultSchema = z.object({\n type: z.literal(\"inngest.response\"),\n status: z.union([z.literal(\"succeeded\"), z.literal(\"failed\")]),\n response: z.object({\n body: z.string(),\n headers: z.record(z.string()),\n statusCode: z.number(),\n }),\n});\n\nconst sseRedirectSchema = z.object({\n type: z.literal(\"inngest.redirect_info\"),\n runId: z.string(),\n url: z.string(),\n});\n\n// ---------------------------------------------------------------------------\n// Types derived from schemas\n// ---------------------------------------------------------------------------\n\nexport type SseMetadataEvent = z.infer<typeof sseMetadataSchema>;\nexport type SseStreamEvent = z.infer<typeof sseStreamSchema>;\nexport type SseResultEvent = z.infer<typeof sseResultSchema>;\n\nexport type SseCommitEvent = z.infer<typeof sseCommitSchema>;\nexport type SseRollbackEvent = z.infer<typeof sseRollbackSchema>;\n\nexport type SseRedirectEvent = z.infer<typeof sseRedirectSchema>;\n\nexport type SseEvent =\n | SseMetadataEvent\n | SseStreamEvent\n | SseResultEvent\n | SseCommitEvent\n | SseRollbackEvent\n | SseRedirectEvent;\n\nexport interface RawSseEvent {\n event: string;\n data: string;\n}\n\n// ---------------------------------------------------------------------------\n// SSE event builders\n// ---------------------------------------------------------------------------\n\n/**\n * Builds a single SSE event with the given event name and JSON-serialized data.\n *\n * `undefined` is normalized to `null` so that the `data:` field is always valid\n * JSON (since `JSON.stringify(undefined)` returns the JS primitive `undefined`,\n * not the string `\"null\"`).\n */\nfunction buildSseEvent(event: string, data: unknown): string {\n return `event: ${event}\\ndata: ${JSON.stringify(data ?? null)}\\n\\n`;\n}\n\n/**\n * Builds an SSE metadata event string for a streaming response.\n *\n * The event follows the Server-Sent Events format and provides run context\n * (run ID) to consumers of the stream.\n */\nexport function buildSseMetadataEvent(runId: string): string {\n return buildSseEvent(\"inngest.metadata\", { runId });\n}\n\n/**\n * Builds an SSE stream event string for user-pushed data.\n *\n * Used by `stream.push()` and `stream.pipe()` to send arbitrary data to\n * clients as part of a streaming response.\n */\nexport function buildSseStreamEvent(\n data: unknown,\n hashedStepId?: string,\n): string {\n const payload: Record<string, unknown> = { data };\n if (hashedStepId) payload.hashedStepId = hashedStepId;\n return buildSseEvent(\"inngest.stream\", payload);\n}\n\nexport interface SseResponse {\n body: string;\n statusCode: number;\n headers: Record<string, string>;\n}\n\n/**\n * Builds an `inngest.response` SSE event with status `succeeded`.\n */\nexport function buildSseSucceededEvent(response: SseResponse): string {\n return buildSseEvent(\"inngest.response\", {\n status: \"succeeded\",\n response,\n });\n}\n\n/**\n * Builds an `inngest.response` SSE event with status `failed`.\n */\nexport function buildSseFailedEvent(error: string): string {\n return buildSseEvent(\"inngest.response\", {\n status: \"failed\",\n response: {\n body: JSON.stringify(error),\n statusCode: 500,\n headers: { \"content-type\": \"application/json\" },\n },\n });\n}\n\n/**\n * Builds an SSE redirect event telling the client that execution has switched\n * to async mode and it should reconnect elsewhere to get remaining output.\n *\n * The `url` already contains the realtime JWT as a query parameter, so no\n * separate token field is needed.\n */\nexport function buildSseRedirectEvent(data: {\n runId: string;\n url: string;\n}): string {\n return buildSseEvent(\"inngest.redirect_info\", data);\n}\n\n/**\n * Returns a new `ReadableStream` that emits `prefix` first, then pipes\n * through all chunks from the original `stream`.\n */\nexport function prependToStream(\n prefix: Uint8Array,\n stream: ReadableStream<Uint8Array>,\n): ReadableStream<Uint8Array> {\n return new ReadableStream({\n async start(controller) {\n controller.enqueue(prefix);\n\n const reader = stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n controller.enqueue(value);\n }\n controller.close();\n } catch (err) {\n controller.error(err);\n } finally {\n reader.releaseLock();\n }\n },\n });\n}\n\n// ---------------------------------------------------------------------------\n// Commit / Rollback event builders\n// ---------------------------------------------------------------------------\n\n/**\n * Builds an `inngest.commit` SSE event indicating a step's data is committed.\n */\nexport function buildSseCommitEvent(hashedStepId: string | null): string {\n return buildSseEvent(\"inngest.commit\", { hashedStepId });\n}\n\n/**\n * Builds an `inngest.rollback` SSE event indicating a step's data should be\n * rolled back (e.g. step errored and will retry, or disconnect mid-step).\n */\nexport function buildSseRollbackEvent(hashedStepId: string | null): string {\n return buildSseEvent(\"inngest.rollback\", { hashedStepId });\n}\n\n// ---------------------------------------------------------------------------\n// SSE line parser (async generator)\n// ---------------------------------------------------------------------------\n\n/**\n * Parses a `ReadableStream<Uint8Array>` as an SSE byte stream, yielding\n * `RawSseEvent` objects for each complete event.\n */\nexport async function* iterSse(\n body: ReadableStream<Uint8Array>,\n): AsyncGenerator<RawSseEvent> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n // SSE events are delimited by a blank line (double newline) per the\n // Server-Sent Events spec.\n const parts = buffer.split(\"\\n\\n\");\n buffer = parts.pop() ?? \"\";\n\n for (const part of parts) {\n if (!part.trim()) continue;\n\n let event = \"message\";\n const dataLines: string[] = [];\n\n for (const line of part.split(\"\\n\")) {\n if (line.startsWith(\"event: \")) {\n event = line.slice(7);\n } else if (line.startsWith(\"data: \")) {\n dataLines.push(line.slice(6));\n }\n }\n\n const data = dataLines.join(\"\\n\");\n\n yield { event, data };\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Raw SSE event -> typed SseEvent\n// ---------------------------------------------------------------------------\n\nconst sseSchemasByEvent: Record<string, z.ZodType<SseEvent>> = {\n \"inngest.metadata\": sseMetadataSchema,\n \"inngest.stream\": sseStreamSchema,\n \"inngest.response\": sseResultSchema,\n \"inngest.commit\": sseCommitSchema,\n \"inngest.rollback\": sseRollbackSchema,\n \"inngest.redirect_info\": sseRedirectSchema,\n};\n\n/**\n * Converts a `RawSseEvent` into a typed `SseEvent`, or returns `undefined`\n * if the event type is unrecognised or fails validation.\n */\nexport function parseSseEvent(raw: RawSseEvent): SseEvent | undefined {\n const schema = sseSchemasByEvent[raw.event];\n if (!schema) {\n return undefined;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw.data);\n } catch {\n throw new UnreachableError(\"SSE data is not a valid JSON string\");\n }\n if (!isRecord(parsed)) {\n return undefined;\n }\n\n const result = schema.safeParse({ ...parsed, type: raw.event });\n if (!result.success) {\n throw new Error(\"Unknown SSE event\", { cause: result.error });\n }\n\n return result.data;\n}\n"],"mappings":"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"}
package/edge.cjs CHANGED
@@ -1,45 +1,32 @@
1
- const require_InngestCommHandler = require('./components/InngestCommHandler.cjs');
1
+ const require_createWebApiCommHandler = require('./components/createWebApiCommHandler.cjs');
2
2
  const require_InngestDurableEndpointProxy = require('./components/InngestDurableEndpointProxy.cjs');
3
3
  const require_InngestEndpointAdapter = require('./components/InngestEndpointAdapter.cjs');
4
4
 
5
5
  //#region src/edge.ts
6
6
  /**
7
+ * An adapter for any request that handles standard Web APIs such as `fetch`,
8
+ * `Request,` and `Response` to serve and register any declared functions with
9
+ * Inngest, making them available to be triggered by events.
10
+ *
11
+ * This is reused by many other adapters, but can be used directly.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { serve } from "inngest/edge";
16
+ * import functions from "~/inngest";
17
+ *
18
+ * export const handler = serve({ id: "my-edge-app", functions });
19
+ * ```
20
+ *
21
+ * @module
22
+ */
23
+ /**
7
24
  * The name of the framework, used to identify the framework in Inngest
8
25
  * dashboards and during testing.
9
26
  */
10
27
  const frameworkName = "edge";
11
28
  const commHandler = (options, syncOptions) => {
12
- return new require_InngestCommHandler.InngestCommHandler({
13
- frameworkName,
14
- ...options,
15
- syncOptions,
16
- handler: (req) => {
17
- return {
18
- body: () => req.text(),
19
- headers: (key) => req.headers.get(key),
20
- method: () => req.method,
21
- url: () => new URL(req.url, `https://${req.headers.get("host") || ""}`),
22
- transformResponse: ({ body, status, headers }) => {
23
- return new Response(body, {
24
- status,
25
- headers
26
- });
27
- },
28
- experimentalTransformSyncResponse: async (data) => {
29
- const res = data;
30
- const headers = {};
31
- res.headers.forEach((v, k) => {
32
- headers[k] = v;
33
- });
34
- return {
35
- headers,
36
- status: res.status,
37
- body: await res.clone().text()
38
- };
39
- }
40
- };
41
- }
42
- });
29
+ return require_createWebApiCommHandler.createWebApiCommHandler(frameworkName, options, syncOptions);
43
30
  };
44
31
  /**
45
32
  * In an edge runtime, serve and register any declared functions with Inngest,
package/edge.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"edge.cjs","names":["frameworkName: SupportedFrameworkName","InngestCommHandler","headers: Record<string, string>","handleDurableEndpointProxyRequest","InngestEndpointAdapter"],"sources":["../src/edge.ts"],"sourcesContent":["/**\n * An adapter for any request that handles standard Web APIs such as `fetch`,\n * `Request,` and `Response` to serve and register any declared functions with\n * Inngest, making them available to be triggered by events.\n *\n * This is reused by many other adapters, but can be used directly.\n *\n * @example\n * ```ts\n * import { serve } from \"inngest/edge\";\n * import functions from \"~/inngest\";\n *\n * export const handler = serve({ id: \"my-edge-app\", functions });\n * ```\n *\n * @module\n */\n\nimport type { Inngest } from \"./components/Inngest.ts\";\nimport {\n InngestCommHandler,\n type ServeHandlerOptions,\n type SyncHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport { handleDurableEndpointProxyRequest } from \"./components/InngestDurableEndpointProxy.ts\";\nimport { InngestEndpointAdapter } from \"./components/InngestEndpointAdapter.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 = \"edge\";\n\nexport type EdgeHandler = (req: Request) => Promise<Response>;\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: (req: Request) => {\n return {\n body: () => req.text(),\n headers: (key: string) => req.headers.get(key),\n method: () => req.method,\n url: () => new URL(req.url, `https://${req.headers.get(\"host\") || \"\"}`),\n transformResponse: ({ body, status, headers }) => {\n return new Response(body, { status, headers });\n },\n experimentalTransformSyncResponse: async (data) => {\n const res = data as Response;\n\n const headers: Record<string, string> = {};\n res.headers.forEach((v, k) => {\n headers[k] = v;\n });\n\n return {\n headers: headers,\n status: res.status,\n body: await res.clone().text(),\n };\n },\n };\n },\n });\n\n return handler;\n};\n\n/**\n * In an edge runtime, serve and register any declared functions with Inngest,\n * making them available to be triggered by events.\n *\n * The edge runtime is a generic term for any serverless runtime that supports\n * only standard Web APIs such as `fetch`, `Request`, and `Response`, such as\n * Cloudflare Workers, Vercel Edge Functions, and AWS Lambda@Edge.\n *\n * @example\n * ```ts\n * import { serve } from \"inngest/edge\";\n * import functions from \"~/inngest\";\n *\n * export const handler = serve({ id: \"my-edge-app\", functions });\n * ```\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (options: ServeHandlerOptions): EdgeHandler => {\n return commHandler(options).createHandler();\n};\n\n/**\n * Creates a durable endpoint proxy handler for edge environments.\n *\n * This handler extracts `runId` and `token` from query parameters,\n * fetches the run output from Inngest, decrypts it via middleware\n * (if configured), and returns it with CORS headers.\n */\nconst createDurableEndpointProxyHandler = (\n options: InngestEndpointAdapter.ProxyHandlerOptions,\n): EdgeHandler => {\n return async (req: Request): Promise<Response> => {\n const url = new URL(req.url);\n\n const result = await handleDurableEndpointProxyRequest(\n options.client as Inngest.Any,\n {\n runId: url.searchParams.get(\"runId\"),\n token: url.searchParams.get(\"token\"),\n method: req.method,\n },\n );\n\n return new Response(result.body, {\n status: result.status,\n headers: result.headers,\n });\n };\n};\n\n/**\n * In an edge runtime, create a function that can wrap any endpoint to be able\n * to use steps seamlessly within that API.\n *\n * The edge runtime is a generic term for any serverless runtime that supports\n * only standard Web APIs such as `fetch`, `Request`, and `Response`, such as\n * Cloudflare Workers, Vercel Edge Functions, and AWS Lambda@Edge.\n *\n * @example\n * ```ts\n * import { Inngest, step } from \"inngest\";\n * import { endpointAdapter } from \"inngest/edge\";\n *\n * const inngest = new Inngest({\n * id: \"my-app\",\n * endpointAdapter,\n * });\n *\n * Bun.serve({\n * routes: {\n * \"/\": inngest.endpoint(async (req) => {\n * const foo = await step.run(\"my-step\", () => ({ foo: \"bar\" }));\n *\n * return new Response(`Result: ${JSON.stringify(foo)}`);\n * }),\n * },\n * });\n * ```\n *\n * You can also configure a custom redirect URL and create a proxy endpoint:\n *\n * @example\n * ```ts\n * import { Inngest } from \"inngest\";\n * import { endpointAdapter } from \"inngest/edge\";\n *\n * const inngest = new Inngest({\n * id: \"my-app\",\n * endpointAdapter: endpointAdapter.withOptions({\n * asyncRedirectUrl: \"/api/inngest/poll\",\n * }),\n * });\n *\n * // Your durable endpoint\n * export const GET = inngest.endpoint(async (req) => {\n * const result = await step.run(\"work\", () => \"done\");\n * return new Response(result);\n * });\n *\n * // Proxy endpoint at /api/inngest/poll - handles CORS and decryption\n * export const GET = inngest.endpointProxy();\n * ```\n */\nexport const endpointAdapter = InngestEndpointAdapter.create((options) => {\n return commHandler(options, options).createSyncHandler();\n}, createDurableEndpointProxyHandler);\n"],"mappings":";;;;;;;;;AAgCA,MAAaA,gBAAwC;AAIrD,MAAM,eACJ,SACA,gBACG;AAgCH,QA/BgB,IAAIC,8CAAmB;EACrC;EACA,GAAG;EACH;EACA,UAAU,QAAiB;AACzB,UAAO;IACL,YAAY,IAAI,MAAM;IACtB,UAAU,QAAgB,IAAI,QAAQ,IAAI,IAAI;IAC9C,cAAc,IAAI;IAClB,WAAW,IAAI,IAAI,IAAI,KAAK,WAAW,IAAI,QAAQ,IAAI,OAAO,IAAI,KAAK;IACvE,oBAAoB,EAAE,MAAM,QAAQ,cAAc;AAChD,YAAO,IAAI,SAAS,MAAM;MAAE;MAAQ;MAAS,CAAC;;IAEhD,mCAAmC,OAAO,SAAS;KACjD,MAAM,MAAM;KAEZ,MAAMC,UAAkC,EAAE;AAC1C,SAAI,QAAQ,SAAS,GAAG,MAAM;AAC5B,cAAQ,KAAK;OACb;AAEF,YAAO;MACI;MACT,QAAQ,IAAI;MACZ,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM;MAC/B;;IAEJ;;EAEJ,CAAC;;;;;;;;;;;;;;;;;;;;AAwBJ,MAAa,SAAS,YAA8C;AAClE,QAAO,YAAY,QAAQ,CAAC,eAAe;;;;;;;;;AAU7C,MAAM,qCACJ,YACgB;AAChB,QAAO,OAAO,QAAoC;EAChD,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI;EAE5B,MAAM,SAAS,MAAMC,sEACnB,QAAQ,QACR;GACE,OAAO,IAAI,aAAa,IAAI,QAAQ;GACpC,OAAO,IAAI,aAAa,IAAI,QAAQ;GACpC,QAAQ,IAAI;GACb,CACF;AAED,SAAO,IAAI,SAAS,OAAO,MAAM;GAC/B,QAAQ,OAAO;GACf,SAAS,OAAO;GACjB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDN,MAAa,kBAAkBC,sDAAuB,QAAQ,YAAY;AACxE,QAAO,YAAY,SAAS,QAAQ,CAAC,mBAAmB;GACvD,kCAAkC"}
1
+ {"version":3,"file":"edge.cjs","names":["frameworkName: SupportedFrameworkName","createWebApiCommHandler","handleDurableEndpointProxyRequest","InngestEndpointAdapter"],"sources":["../src/edge.ts"],"sourcesContent":["/**\n * An adapter for any request that handles standard Web APIs such as `fetch`,\n * `Request,` and `Response` to serve and register any declared functions with\n * Inngest, making them available to be triggered by events.\n *\n * This is reused by many other adapters, but can be used directly.\n *\n * @example\n * ```ts\n * import { serve } from \"inngest/edge\";\n * import functions from \"~/inngest\";\n *\n * export const handler = serve({ id: \"my-edge-app\", functions });\n * ```\n *\n * @module\n */\n\nimport { createWebApiCommHandler } from \"./components/createWebApiCommHandler.ts\";\nimport type { Inngest } from \"./components/Inngest.ts\";\nimport type {\n ServeHandlerOptions,\n SyncHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport { handleDurableEndpointProxyRequest } from \"./components/InngestDurableEndpointProxy.ts\";\nimport { InngestEndpointAdapter } from \"./components/InngestEndpointAdapter.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 = \"edge\";\n\nexport type EdgeHandler = (req: Request) => Promise<Response>;\n\nconst commHandler = (\n options: RegisterOptions & { client: Inngest.Like },\n syncOptions?: SyncHandlerOptions,\n) => {\n return createWebApiCommHandler(frameworkName, options, syncOptions);\n};\n\n/**\n * In an edge runtime, serve and register any declared functions with Inngest,\n * making them available to be triggered by events.\n *\n * The edge runtime is a generic term for any serverless runtime that supports\n * only standard Web APIs such as `fetch`, `Request`, and `Response`, such as\n * Cloudflare Workers, Vercel Edge Functions, and AWS Lambda@Edge.\n *\n * @example\n * ```ts\n * import { serve } from \"inngest/edge\";\n * import functions from \"~/inngest\";\n *\n * export const handler = serve({ id: \"my-edge-app\", functions });\n * ```\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (options: ServeHandlerOptions): EdgeHandler => {\n return commHandler(options).createHandler();\n};\n\n/**\n * Creates a durable endpoint proxy handler for edge environments.\n *\n * This handler extracts `runId` and `token` from query parameters,\n * fetches the run output from Inngest, decrypts it via middleware\n * (if configured), and returns it with CORS headers.\n */\nconst createDurableEndpointProxyHandler = (\n options: InngestEndpointAdapter.ProxyHandlerOptions,\n): EdgeHandler => {\n return async (req: Request): Promise<Response> => {\n const url = new URL(req.url);\n\n const result = await handleDurableEndpointProxyRequest(\n options.client as Inngest.Any,\n {\n runId: url.searchParams.get(\"runId\"),\n token: url.searchParams.get(\"token\"),\n method: req.method,\n },\n );\n\n return new Response(result.body, {\n status: result.status,\n headers: result.headers,\n });\n };\n};\n\n/**\n * In an edge runtime, create a function that can wrap any endpoint to be able\n * to use steps seamlessly within that API.\n *\n * The edge runtime is a generic term for any serverless runtime that supports\n * only standard Web APIs such as `fetch`, `Request`, and `Response`, such as\n * Cloudflare Workers, Vercel Edge Functions, and AWS Lambda@Edge.\n *\n * @example\n * ```ts\n * import { Inngest, step } from \"inngest\";\n * import { endpointAdapter } from \"inngest/edge\";\n *\n * const inngest = new Inngest({\n * id: \"my-app\",\n * endpointAdapter,\n * });\n *\n * Bun.serve({\n * routes: {\n * \"/\": inngest.endpoint(async (req) => {\n * const foo = await step.run(\"my-step\", () => ({ foo: \"bar\" }));\n *\n * return new Response(`Result: ${JSON.stringify(foo)}`);\n * }),\n * },\n * });\n * ```\n *\n * You can also configure a custom redirect URL and create a proxy endpoint:\n *\n * @example\n * ```ts\n * import { Inngest } from \"inngest\";\n * import { endpointAdapter } from \"inngest/edge\";\n *\n * const inngest = new Inngest({\n * id: \"my-app\",\n * endpointAdapter: endpointAdapter.withOptions({\n * asyncRedirectUrl: \"/api/inngest/poll\",\n * }),\n * });\n *\n * // Your durable endpoint\n * export const GET = inngest.endpoint(async (req) => {\n * const result = await step.run(\"work\", () => \"done\");\n * return new Response(result);\n * });\n *\n * // Proxy endpoint at /api/inngest/poll - handles CORS and decryption\n * export const GET = inngest.endpointProxy();\n * ```\n */\nexport const endpointAdapter = InngestEndpointAdapter.create((options) => {\n return commHandler(options, options).createSyncHandler();\n}, createDurableEndpointProxyHandler);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,MAAaA,gBAAwC;AAIrD,MAAM,eACJ,SACA,gBACG;AACH,QAAOC,wDAAwB,eAAe,SAAS,YAAY;;;;;;;;;;;;;;;;;;;;AAsBrE,MAAa,SAAS,YAA8C;AAClE,QAAO,YAAY,QAAQ,CAAC,eAAe;;;;;;;;;AAU7C,MAAM,qCACJ,YACgB;AAChB,QAAO,OAAO,QAAoC;EAChD,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI;EAE5B,MAAM,SAAS,MAAMC,sEACnB,QAAQ,QACR;GACE,OAAO,IAAI,aAAa,IAAI,QAAQ;GACpC,OAAO,IAAI,aAAa,IAAI,QAAQ;GACpC,QAAQ,IAAI;GACb,CACF;AAED,SAAO,IAAI,SAAS,OAAO,MAAM;GAC/B,QAAQ,OAAO;GACf,SAAS,OAAO;GACjB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDN,MAAa,kBAAkBC,sDAAuB,QAAQ,YAAY;AACxE,QAAO,YAAY,SAAS,QAAQ,CAAC,mBAAmB;GACvD,kCAAkC"}
package/edge.d.cts CHANGED
@@ -82,7 +82,7 @@ declare const serve: (options: ServeHandlerOptions) => EdgeHandler;
82
82
  * export const GET = inngest.endpointProxy();
83
83
  * ```
84
84
  */
85
- declare const endpointAdapter: ((options: SyncHandlerOptions) => (handler: (req: Request) => Promise<Response>) => (req: Request) => Promise<Response>) & InngestEndpointAdapter.Like & {
85
+ declare const endpointAdapter: ((options: SyncHandlerOptions) => (handler: (...args: any[]) => Promise<any>) => (...args: any[]) => Promise<any>) & InngestEndpointAdapter.Like & {
86
86
  createProxyHandler: (options: InngestEndpointAdapter.ProxyHandlerOptions) => EdgeHandler;
87
87
  };
88
88
  //#endregion
package/edge.d.cts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"edge.d.cts","names":[],"sources":["../src/edge.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;AAmL4B,cAnJf,aAmJe,EAnJA,sBAmJA;AAAA,KAjJhB,WAAA,GAiJgB,CAAA,GAAA,EAjJI,OAiJJ,EAAA,GAjJgB,OAiJhB,CAjJwB,QAiJxB,CAAA;;;;;;;;;;;;;;;;;;;cAtFf,iBAAkB,wBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsFxC,4BAAe,uCAAA,YAAA,QAAA,oBAAA,YAAA,QAAA,aAAA,sBAAA,CAAA;gCA1EjB,sBAAA,CAAuB,wBAC/B"}
1
+ {"version":3,"file":"edge.d.cts","names":[],"sources":["../src/edge.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;AA2EG,cA3CU,aA2CV,EA3CyB,sBA2CzB;AAAW,KAzCF,WAAA,GAyCE,CAAA,GAAA,EAzCkB,OAyClB,EAAA,GAzC8B,OAyC9B,CAzCsC,QAyCtC,CAAA;;;;;;;;;;;;;;;;;;;cAbD,iBAAkB,wBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsFxC,4BAAe,qDAAA,qCAAA,gBAAA,sBAAA,CAAA;gCA1EjB,sBAAA,CAAuB,wBAC/B"}
package/edge.d.ts CHANGED
@@ -82,7 +82,7 @@ declare const serve: (options: ServeHandlerOptions) => EdgeHandler;
82
82
  * export const GET = inngest.endpointProxy();
83
83
  * ```
84
84
  */
85
- declare const endpointAdapter: ((options: SyncHandlerOptions) => (handler: (req: Request) => Promise<Response>) => (req: Request) => Promise<Response>) & InngestEndpointAdapter.Like & {
85
+ declare const endpointAdapter: ((options: SyncHandlerOptions) => (handler: (...args: any[]) => Promise<any>) => (...args: any[]) => Promise<any>) & InngestEndpointAdapter.Like & {
86
86
  createProxyHandler: (options: InngestEndpointAdapter.ProxyHandlerOptions) => EdgeHandler;
87
87
  };
88
88
  //#endregion
package/edge.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"edge.d.ts","names":[],"sources":["../src/edge.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;AAmL4B,cAnJf,aAmJe,EAnJA,sBAmJA;AAAA,KAjJhB,WAAA,GAiJgB,CAAA,GAAA,EAjJI,OAiJJ,EAAA,GAjJgB,OAiJhB,CAjJwB,QAiJxB,CAAA;;;;;;;;;;;;;;;;;;;cAtFf,iBAAkB,wBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsFxC,4BAAe,uCAAA,YAAA,QAAA,oBAAA,YAAA,QAAA,aAAA,sBAAA,CAAA;gCA1EjB,sBAAA,CAAuB,wBAC/B"}
1
+ {"version":3,"file":"edge.d.ts","names":[],"sources":["../src/edge.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;AA2EG,cA3CU,aA2CV,EA3CyB,sBA2CzB;AAAW,KAzCF,WAAA,GAyCE,CAAA,GAAA,EAzCkB,OAyClB,EAAA,GAzC8B,OAyC9B,CAzCsC,QAyCtC,CAAA;;;;;;;;;;;;;;;;;;;cAbD,iBAAkB,wBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsFxC,4BAAe,qDAAA,qCAAA,gBAAA,sBAAA,CAAA;gCA1EjB,sBAAA,CAAuB,wBAC/B"}