@kortyx/stream 0.3.0 → 0.4.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 (34) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/{types/stream-chunk.d.ts → browser-BIAzFI3U.d.ts} +148 -6
  3. package/dist/browser.d.ts +2 -5
  4. package/dist/browser.js +100 -7
  5. package/dist/browser.js.map +1 -0
  6. package/dist/index.d.ts +17 -5
  7. package/dist/index.js +289 -18
  8. package/dist/index.js.map +1 -0
  9. package/package.json +6 -5
  10. package/dist/browser.d.ts.map +0 -1
  11. package/dist/client/read-stream.d.ts +0 -3
  12. package/dist/client/read-stream.d.ts.map +0 -1
  13. package/dist/client/read-stream.js +0 -32
  14. package/dist/client/stream-from-route.d.ts +0 -10
  15. package/dist/client/stream-from-route.d.ts.map +0 -1
  16. package/dist/client/stream-from-route.js +0 -49
  17. package/dist/index.d.ts.map +0 -1
  18. package/dist/server/create-stream-response.d.ts +0 -9
  19. package/dist/server/create-stream-response.d.ts.map +0 -1
  20. package/dist/server/create-stream-response.js +0 -45
  21. package/dist/server/json-to-sse.d.ts +0 -4
  22. package/dist/server/json-to-sse.d.ts.map +0 -1
  23. package/dist/server/json-to-sse.js +0 -16
  24. package/dist/types/stream-chunk.d.ts.map +0 -1
  25. package/dist/types/stream-chunk.js +0 -74
  26. package/dist/types/stream-result.d.ts +0 -465
  27. package/dist/types/stream-result.d.ts.map +0 -1
  28. package/dist/types/stream-result.js +0 -18
  29. package/dist/types/structured-data/index.d.ts +0 -76
  30. package/dist/types/structured-data/index.d.ts.map +0 -1
  31. package/dist/types/structured-data/index.js +0 -13
  32. package/dist/types/structured-data/jobs.d.ts +0 -43
  33. package/dist/types/structured-data/jobs.d.ts.map +0 -1
  34. package/dist/types/structured-data/jobs.js +0 -14
package/dist/index.js CHANGED
@@ -1,20 +1,291 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/index.ts
20
+ var index_exports = {};
21
+ __export(index_exports, {
22
+ STREAM_HEADERS: () => STREAM_HEADERS,
23
+ StreamChunkSchema: () => StreamChunkSchema,
24
+ createStreamResponse: () => createStreamResponse,
25
+ readStream: () => readStream,
26
+ streamFromRoute: () => streamFromRoute
27
+ });
28
+ module.exports = __toCommonJS(index_exports);
29
+
30
+ // src/client/read-stream.ts
31
+ async function* readStream(body) {
32
+ if (!body) return;
33
+ const reader = body.getReader();
34
+ const decoder = new TextDecoder("utf-8");
35
+ let buffer = "";
36
+ while (true) {
37
+ const { done, value } = await reader.read();
38
+ if (done) break;
39
+ buffer += decoder.decode(value, { stream: true });
40
+ const parts = buffer.split("\n\n");
41
+ buffer = parts.pop() ?? "";
42
+ for (const part of parts) {
43
+ if (!part.startsWith("data: ")) continue;
44
+ const payload = part.slice(6);
45
+ if (payload.trim() === "[DONE]") return;
46
+ try {
47
+ yield JSON.parse(payload);
48
+ } catch (err) {
49
+ console.warn("Invalid JSON in stream chunk:", payload);
50
+ console.error(err);
51
+ }
52
+ }
53
+ }
54
+ }
55
+
56
+ // src/client/stream-from-route.ts
57
+ var toErrorMessage = (error) => error instanceof Error ? error.message : String(error);
58
+ var readErrorMessage = async (response) => {
59
+ let message = `Request failed (${response.status})`;
60
+ try {
61
+ const payload = await response.json();
62
+ if (payload && typeof payload === "object" && "error" in payload && typeof payload.error === "string") {
63
+ message = payload.error;
7
64
  }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
65
+ } catch {
66
+ }
67
+ return message;
15
68
  };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./client/read-stream"), exports);
18
- __exportStar(require("./client/stream-from-route"), exports);
19
- __exportStar(require("./server/create-stream-response"), exports);
20
- __exportStar(require("./types/stream-chunk"), exports);
69
+ async function* streamFromRoute(args) {
70
+ const fetchFn = args.fetchImpl ?? globalThis.fetch;
71
+ if (!fetchFn) {
72
+ yield { type: "error", message: "No fetch implementation available." };
73
+ yield { type: "done" };
74
+ return;
75
+ }
76
+ let response;
77
+ try {
78
+ response = await fetchFn(args.endpoint, {
79
+ method: args.method ?? "POST",
80
+ headers: {
81
+ "content-type": "application/json",
82
+ ...args.headers ?? {}
83
+ },
84
+ body: JSON.stringify(args.body)
85
+ });
86
+ } catch (error) {
87
+ yield { type: "error", message: toErrorMessage(error) };
88
+ yield { type: "done" };
89
+ return;
90
+ }
91
+ if (!response.ok) {
92
+ yield { type: "error", message: await readErrorMessage(response) };
93
+ yield { type: "done" };
94
+ return;
95
+ }
96
+ yield* readStream(response.body);
97
+ }
98
+
99
+ // src/server/create-stream-response.ts
100
+ var STREAM_HEADERS = {
101
+ "content-type": "text/event-stream",
102
+ "cache-control": "no-cache",
103
+ connection: "keep-alive",
104
+ "x-accel-buffering": "no"
105
+ };
106
+ var JsonToSseTransformStream = class extends TransformStream {
107
+ constructor() {
108
+ super({
109
+ transform(part, controller) {
110
+ controller.enqueue(`data: ${JSON.stringify(part)}
111
+
112
+ `);
113
+ },
114
+ flush(controller) {
115
+ controller.enqueue("data: [DONE]\n\n");
116
+ }
117
+ });
118
+ }
119
+ };
120
+ function createStreamResponse(stream) {
121
+ const readable = new ReadableStream({
122
+ async start(controller) {
123
+ try {
124
+ for await (const chunk of stream) {
125
+ controller.enqueue(chunk);
126
+ }
127
+ } catch (err) {
128
+ controller.enqueue({
129
+ type: "error",
130
+ message: String(err?.message ?? err)
131
+ });
132
+ } finally {
133
+ controller.close();
134
+ }
135
+ }
136
+ });
137
+ return new Response(
138
+ readable.pipeThrough(new JsonToSseTransformStream()).pipeThrough(new TextEncoderStream()),
139
+ { headers: STREAM_HEADERS }
140
+ );
141
+ }
142
+
143
+ // src/types/stream-chunk.ts
144
+ var import_zod3 = require("zod");
145
+
146
+ // src/types/structured-data/index.ts
147
+ var import_zod2 = require("zod");
148
+
149
+ // src/types/structured-data/jobs.ts
150
+ var import_zod = require("zod");
151
+ var JobsStructuredData = import_zod.z.object({
152
+ jobs: import_zod.z.array(
153
+ import_zod.z.object({
154
+ id: import_zod.z.string(),
155
+ title: import_zod.z.string(),
156
+ company: import_zod.z.string(),
157
+ location: import_zod.z.string(),
158
+ match: import_zod.z.number()
159
+ })
160
+ ),
161
+ reasoning: import_zod.z.string().optional()
162
+ });
163
+
164
+ // src/types/structured-data/index.ts
165
+ var StructuredDataBase = import_zod2.z.object({
166
+ type: import_zod2.z.literal("structured-data"),
167
+ dataType: import_zod2.z.string().optional(),
168
+ mode: import_zod2.z.enum(["final", "patch", "snapshot"]).optional(),
169
+ schemaId: import_zod2.z.string().optional(),
170
+ schemaVersion: import_zod2.z.string().optional(),
171
+ id: import_zod2.z.string().optional(),
172
+ opId: import_zod2.z.string().optional(),
173
+ node: import_zod2.z.string().optional()
174
+ });
175
+ var JobsStructuredDataChunkSchema = StructuredDataBase.extend({
176
+ dataType: import_zod2.z.literal("jobs"),
177
+ data: JobsStructuredData
178
+ });
179
+ var GenericStructuredDataChunkSchema = StructuredDataBase.extend({
180
+ data: import_zod2.z.unknown()
181
+ });
182
+ var StructuredDataChunkSchema = import_zod2.z.union([
183
+ JobsStructuredDataChunkSchema,
184
+ GenericStructuredDataChunkSchema
185
+ ]);
186
+
187
+ // src/types/stream-chunk.ts
188
+ var StreamChunkSchema = import_zod3.z.union([
189
+ import_zod3.z.object({
190
+ type: import_zod3.z.literal("session"),
191
+ sessionId: import_zod3.z.string()
192
+ }),
193
+ import_zod3.z.object({
194
+ type: import_zod3.z.literal("status"),
195
+ message: import_zod3.z.string(),
196
+ node: import_zod3.z.string().optional()
197
+ }),
198
+ import_zod3.z.object({
199
+ type: import_zod3.z.literal("message"),
200
+ content: import_zod3.z.string(),
201
+ node: import_zod3.z.string().optional()
202
+ }),
203
+ import_zod3.z.object({
204
+ type: import_zod3.z.literal("text-start"),
205
+ node: import_zod3.z.string().optional(),
206
+ id: import_zod3.z.string().optional(),
207
+ opId: import_zod3.z.string().optional(),
208
+ segmentId: import_zod3.z.string().optional()
209
+ }),
210
+ import_zod3.z.object({
211
+ type: import_zod3.z.literal("text-delta"),
212
+ delta: import_zod3.z.string(),
213
+ node: import_zod3.z.string().optional(),
214
+ id: import_zod3.z.string().optional(),
215
+ opId: import_zod3.z.string().optional(),
216
+ segmentId: import_zod3.z.string().optional()
217
+ }),
218
+ import_zod3.z.object({
219
+ type: import_zod3.z.literal("text-end"),
220
+ node: import_zod3.z.string().optional(),
221
+ id: import_zod3.z.string().optional(),
222
+ opId: import_zod3.z.string().optional(),
223
+ segmentId: import_zod3.z.string().optional()
224
+ }),
225
+ import_zod3.z.object({
226
+ type: import_zod3.z.literal("tool-result"),
227
+ tool: import_zod3.z.string().optional(),
228
+ node: import_zod3.z.string().optional(),
229
+ content: import_zod3.z.unknown()
230
+ }),
231
+ // Interrupt request chunk (used to render interactive options in UI)
232
+ import_zod3.z.object({
233
+ type: import_zod3.z.literal("interrupt"),
234
+ requestId: import_zod3.z.string(),
235
+ resumeToken: import_zod3.z.string(),
236
+ workflow: import_zod3.z.string().optional(),
237
+ node: import_zod3.z.string().optional(),
238
+ id: import_zod3.z.string().optional(),
239
+ opId: import_zod3.z.string().optional(),
240
+ schemaId: import_zod3.z.string().optional(),
241
+ schemaVersion: import_zod3.z.string().optional(),
242
+ input: import_zod3.z.discriminatedUnion("kind", [
243
+ // Text input: question optional, no options
244
+ import_zod3.z.object({
245
+ kind: import_zod3.z.literal("text"),
246
+ multiple: import_zod3.z.boolean(),
247
+ question: import_zod3.z.string().optional(),
248
+ id: import_zod3.z.string().optional(),
249
+ schemaId: import_zod3.z.string().optional(),
250
+ schemaVersion: import_zod3.z.string().optional(),
251
+ meta: import_zod3.z.record(import_zod3.z.unknown()).optional(),
252
+ options: import_zod3.z.array(import_zod3.z.never()).optional()
253
+ }),
254
+ // Choice/multi-choice: question + options required
255
+ import_zod3.z.object({
256
+ kind: import_zod3.z.enum(["choice", "multi-choice"]),
257
+ multiple: import_zod3.z.boolean(),
258
+ question: import_zod3.z.string(),
259
+ id: import_zod3.z.string().optional(),
260
+ schemaId: import_zod3.z.string().optional(),
261
+ schemaVersion: import_zod3.z.string().optional(),
262
+ meta: import_zod3.z.record(import_zod3.z.unknown()).optional(),
263
+ options: import_zod3.z.array(
264
+ import_zod3.z.object({
265
+ id: import_zod3.z.string(),
266
+ label: import_zod3.z.string(),
267
+ description: import_zod3.z.string().optional()
268
+ })
269
+ )
270
+ })
271
+ ]),
272
+ meta: import_zod3.z.record(import_zod3.z.unknown()).optional()
273
+ }),
274
+ StructuredDataChunkSchema,
275
+ import_zod3.z.object({
276
+ type: import_zod3.z.literal("transition"),
277
+ transitionTo: import_zod3.z.string(),
278
+ payload: import_zod3.z.any().optional()
279
+ }),
280
+ import_zod3.z.object({ type: import_zod3.z.literal("done"), data: import_zod3.z.any().optional() }),
281
+ import_zod3.z.object({ type: import_zod3.z.literal("error"), message: import_zod3.z.string() })
282
+ ]);
283
+ // Annotate the CommonJS export names for ESM import in node:
284
+ 0 && (module.exports = {
285
+ STREAM_HEADERS,
286
+ StreamChunkSchema,
287
+ createStreamResponse,
288
+ readStream,
289
+ streamFromRoute
290
+ });
291
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/client/read-stream.ts","../src/client/stream-from-route.ts","../src/server/create-stream-response.ts","../src/types/stream-chunk.ts","../src/types/structured-data/index.ts","../src/types/structured-data/jobs.ts"],"sourcesContent":["// release-test: 2026-01-22\n// packages/stream/src/index.ts\n\n// client\nexport * from \"./client/read-stream\";\nexport * from \"./client/stream-from-route\";\n\n// server\nexport * from \"./server/create-stream-response\";\nexport * from \"./types/stream-chunk\";\n","// packages/stream/src/client/read-stream.ts\nimport type { StreamChunk } from \"../types/stream-chunk\";\n\n/**\n * Reads a server-sent event (SSE) Response body and yields StreamChunk objects.\n */\nexport async function* readStream(\n body: ReadableStream<Uint8Array> | null,\n): AsyncGenerator<StreamChunk, void, void> {\n if (!body) return;\n\n const reader = body.getReader();\n const decoder = new TextDecoder(\"utf-8\");\n let buffer = \"\";\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const parts = buffer.split(\"\\n\\n\");\n buffer = parts.pop() ?? \"\";\n\n for (const part of parts) {\n if (!part.startsWith(\"data: \")) continue;\n const payload = part.slice(6);\n if (payload.trim() === \"[DONE]\") return;\n try {\n yield JSON.parse(payload) as StreamChunk;\n } catch (err: any) {\n console.warn(\"Invalid JSON in stream chunk:\", payload);\n console.error(err);\n }\n }\n }\n}\n","import type { StreamChunk } from \"../types/stream-chunk\";\nimport { readStream } from \"./read-stream\";\n\nexport interface StreamFromRouteArgs<TBody = unknown> {\n endpoint: string;\n body: TBody;\n method?: string | undefined;\n fetchImpl?: typeof fetch;\n headers?: Record<string, string> | undefined;\n}\n\nconst toErrorMessage = (error: unknown): string =>\n error instanceof Error ? error.message : String(error);\n\nconst readErrorMessage = async (response: Response): Promise<string> => {\n let message = `Request failed (${response.status})`;\n try {\n const payload = (await response.json()) as unknown;\n if (\n payload &&\n typeof payload === \"object\" &&\n \"error\" in payload &&\n typeof (payload as { error?: unknown }).error === \"string\"\n ) {\n message = (payload as { error: string }).error;\n }\n } catch {}\n return message;\n};\n\nexport async function* streamFromRoute<TBody = unknown>(\n args: StreamFromRouteArgs<TBody>,\n): AsyncGenerator<StreamChunk, void, void> {\n const fetchFn = args.fetchImpl ?? globalThis.fetch;\n if (!fetchFn) {\n yield { type: \"error\", message: \"No fetch implementation available.\" };\n yield { type: \"done\" };\n return;\n }\n\n let response: Response;\n try {\n response = await fetchFn(args.endpoint, {\n method: args.method ?? \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(args.headers ?? {}),\n },\n body: JSON.stringify(args.body),\n });\n } catch (error) {\n yield { type: \"error\", message: toErrorMessage(error) };\n yield { type: \"done\" };\n return;\n }\n\n if (!response.ok) {\n yield { type: \"error\", message: await readErrorMessage(response) };\n yield { type: \"done\" };\n return;\n }\n\n yield* readStream(response.body);\n}\n","// packages/stream/src/server/create-stream-response.ts\nimport type { StreamChunk } from \"../types/stream-chunk\";\n\nexport const STREAM_HEADERS = {\n \"content-type\": \"text/event-stream\",\n \"cache-control\": \"no-cache\",\n connection: \"keep-alive\",\n \"x-accel-buffering\": \"no\",\n};\n\nclass JsonToSseTransformStream extends TransformStream<unknown, string> {\n constructor() {\n super({\n transform(part, controller) {\n controller.enqueue(`data: ${JSON.stringify(part)}\\n\\n`);\n },\n flush(controller) {\n controller.enqueue(\"data: [DONE]\\n\\n\");\n },\n });\n }\n}\n\n/**\n * Turns an AsyncIterable<StreamChunk> into a streamed HTTP Response.\n * Works in Node, Bun, Cloudflare, Edge, etc.\n */\nexport function createStreamResponse(\n stream: AsyncIterable<StreamChunk>,\n): Response {\n const readable = new ReadableStream<StreamChunk>({\n async start(controller) {\n try {\n for await (const chunk of stream) {\n controller.enqueue(chunk);\n }\n } catch (err: any) {\n controller.enqueue({\n type: \"error\",\n message: String(err?.message ?? err),\n } as StreamChunk);\n } finally {\n controller.close();\n }\n },\n });\n\n return new Response(\n readable\n .pipeThrough(new JsonToSseTransformStream())\n .pipeThrough(new TextEncoderStream()),\n { headers: STREAM_HEADERS },\n );\n}\n","import { z } from \"zod\";\nimport { StructuredDataChunkSchema } from \"./structured-data\";\n\nexport const StreamChunkSchema = z.union([\n z.object({\n type: z.literal(\"session\"),\n sessionId: z.string(),\n }),\n z.object({\n type: z.literal(\"status\"),\n message: z.string(),\n node: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"message\"),\n content: z.string(),\n node: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"text-start\"),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n segmentId: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"text-delta\"),\n delta: z.string(),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n segmentId: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"text-end\"),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n segmentId: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"tool-result\"),\n tool: z.string().optional(),\n node: z.string().optional(),\n content: z.unknown(),\n }),\n // Interrupt request chunk (used to render interactive options in UI)\n z.object({\n type: z.literal(\"interrupt\"),\n requestId: z.string(),\n resumeToken: z.string(),\n workflow: z.string().optional(),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n schemaId: z.string().optional(),\n schemaVersion: z.string().optional(),\n input: z.discriminatedUnion(\"kind\", [\n // Text input: question optional, no options\n z.object({\n kind: z.literal(\"text\"),\n multiple: z.boolean(),\n question: z.string().optional(),\n id: z.string().optional(),\n schemaId: z.string().optional(),\n schemaVersion: z.string().optional(),\n meta: z.record(z.unknown()).optional(),\n options: z.array(z.never()).optional(),\n }),\n // Choice/multi-choice: question + options required\n z.object({\n kind: z.enum([\"choice\", \"multi-choice\"]),\n multiple: z.boolean(),\n question: z.string(),\n id: z.string().optional(),\n schemaId: z.string().optional(),\n schemaVersion: z.string().optional(),\n meta: z.record(z.unknown()).optional(),\n options: z.array(\n z.object({\n id: z.string(),\n label: z.string(),\n description: z.string().optional(),\n }),\n ),\n }),\n ]),\n meta: z.record(z.unknown()).optional(),\n }),\n StructuredDataChunkSchema,\n z.object({\n type: z.literal(\"transition\"),\n transitionTo: z.string(),\n payload: z.any().optional(),\n }),\n z.object({ type: z.literal(\"done\"), data: z.any().optional() }),\n z.object({ type: z.literal(\"error\"), message: z.string() }),\n]);\n\nexport type StreamChunk = z.infer<typeof StreamChunkSchema>;\n","import { z } from \"zod\";\nimport { JobsStructuredData } from \"./jobs\";\n\nconst StructuredDataBase = z.object({\n type: z.literal(\"structured-data\"),\n dataType: z.string().optional(),\n mode: z.enum([\"final\", \"patch\", \"snapshot\"]).optional(),\n schemaId: z.string().optional(),\n schemaVersion: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n node: z.string().optional(),\n});\n\nconst JobsStructuredDataChunkSchema = StructuredDataBase.extend({\n dataType: z.literal(\"jobs\"),\n data: JobsStructuredData,\n});\n\nconst GenericStructuredDataChunkSchema = StructuredDataBase.extend({\n data: z.unknown(),\n});\n\nexport const StructuredDataChunkSchema = z.union([\n JobsStructuredDataChunkSchema,\n GenericStructuredDataChunkSchema,\n]);\n\nexport type StructuredDataChunk = z.infer<typeof StructuredDataChunkSchema>;\n","import { z } from \"zod\";\n\nexport const JobsStructuredData = z.object({\n jobs: z.array(\n z.object({\n id: z.string(),\n title: z.string(),\n company: z.string(),\n location: z.string(),\n match: z.number(),\n }),\n ),\n reasoning: z.string().optional(),\n});\n\nexport type JobsStructuredData = z.infer<typeof JobsStructuredData>;\n"],"mappings":"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","names":["import_zod","import_zod"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kortyx/stream",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "private": false,
5
5
  "description": "Streaming primitives for Kortyx.",
6
6
  "keywords": [
@@ -14,7 +14,7 @@
14
14
  "kortyx"
15
15
  ],
16
16
  "license": "Apache-2.0",
17
- "homepage": "https://github.com/kortyx-io/kortyx/tree/main/packages/stream#readme",
17
+ "homepage": "https://kortyx.io/",
18
18
  "bugs": {
19
19
  "url": "https://github.com/kortyx-io/kortyx/issues"
20
20
  },
@@ -37,7 +37,7 @@
37
37
  "CHANGELOG.md"
38
38
  ],
39
39
  "scripts": {
40
- "build": "tsc -p tsconfig.build.json",
40
+ "build": "tsup",
41
41
  "dev": "tsc --watch",
42
42
  "lint": "biome check src",
43
43
  "test": "pnpm -s type-check",
@@ -49,11 +49,12 @@
49
49
  "devDependencies": {
50
50
  "concurrently": "^9.2.0",
51
51
  "turbo": "^2.5.4",
52
- "typescript": "5.7.2"
52
+ "typescript": "5.7.2",
53
+ "tsup": "^8.5.1"
53
54
  },
54
55
  "repository": {
55
56
  "type": "git",
56
- "url": "https://github.com/kortyx-io/kortyx",
57
+ "url": "https://github.com/kortyx-io/kortyx.git",
57
58
  "directory": "packages/stream"
58
59
  }
59
60
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { StreamChunk } from "../types/stream-chunk";
2
- export declare function readStream(body: ReadableStream<Uint8Array> | null): AsyncGenerator<StreamChunk, void, void>;
3
- //# sourceMappingURL=read-stream.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-stream.d.ts","sourceRoot":"","sources":["../../src/client/read-stream.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKzD,wBAAuB,UAAU,CAC/B,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,GACtC,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CA2BzC"}
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.readStream = readStream;
4
- async function* readStream(body) {
5
- if (!body)
6
- return;
7
- const reader = body.getReader();
8
- const decoder = new TextDecoder("utf-8");
9
- let buffer = "";
10
- while (true) {
11
- const { done, value } = await reader.read();
12
- if (done)
13
- break;
14
- buffer += decoder.decode(value, { stream: true });
15
- const parts = buffer.split("\n\n");
16
- buffer = parts.pop() ?? "";
17
- for (const part of parts) {
18
- if (!part.startsWith("data: "))
19
- continue;
20
- const payload = part.slice(6);
21
- if (payload.trim() === "[DONE]")
22
- return;
23
- try {
24
- yield JSON.parse(payload);
25
- }
26
- catch (err) {
27
- console.warn("Invalid JSON in stream chunk:", payload);
28
- console.error(err);
29
- }
30
- }
31
- }
32
- }
@@ -1,10 +0,0 @@
1
- import type { StreamChunk } from "../types/stream-chunk";
2
- export interface StreamFromRouteArgs<TBody = unknown> {
3
- endpoint: string;
4
- body: TBody;
5
- method?: string | undefined;
6
- fetchImpl?: typeof fetch;
7
- headers?: Record<string, string> | undefined;
8
- }
9
- export declare function streamFromRoute<TBody = unknown>(args: StreamFromRouteArgs<TBody>): AsyncGenerator<StreamChunk, void, void>;
10
- //# sourceMappingURL=stream-from-route.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stream-from-route.d.ts","sourceRoot":"","sources":["../../src/client/stream-from-route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,MAAM,WAAW,mBAAmB,CAAC,KAAK,GAAG,OAAO;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC9C;AAqBD,wBAAuB,eAAe,CAAC,KAAK,GAAG,OAAO,EACpD,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAC/B,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CA+BzC"}
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.streamFromRoute = streamFromRoute;
4
- const read_stream_1 = require("./read-stream");
5
- const toErrorMessage = (error) => error instanceof Error ? error.message : String(error);
6
- const readErrorMessage = async (response) => {
7
- let message = `Request failed (${response.status})`;
8
- try {
9
- const payload = (await response.json());
10
- if (payload &&
11
- typeof payload === "object" &&
12
- "error" in payload &&
13
- typeof payload.error === "string") {
14
- message = payload.error;
15
- }
16
- }
17
- catch { }
18
- return message;
19
- };
20
- async function* streamFromRoute(args) {
21
- const fetchFn = args.fetchImpl ?? globalThis.fetch;
22
- if (!fetchFn) {
23
- yield { type: "error", message: "No fetch implementation available." };
24
- yield { type: "done" };
25
- return;
26
- }
27
- let response;
28
- try {
29
- response = await fetchFn(args.endpoint, {
30
- method: args.method ?? "POST",
31
- headers: {
32
- "content-type": "application/json",
33
- ...(args.headers ?? {}),
34
- },
35
- body: JSON.stringify(args.body),
36
- });
37
- }
38
- catch (error) {
39
- yield { type: "error", message: toErrorMessage(error) };
40
- yield { type: "done" };
41
- return;
42
- }
43
- if (!response.ok) {
44
- yield { type: "error", message: await readErrorMessage(response) };
45
- yield { type: "done" };
46
- return;
47
- }
48
- yield* (0, read_stream_1.readStream)(response.body);
49
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAG3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { StreamChunk } from "../types/stream-chunk";
2
- export declare const STREAM_HEADERS: {
3
- "content-type": string;
4
- "cache-control": string;
5
- connection: string;
6
- "x-accel-buffering": string;
7
- };
8
- export declare function createStreamResponse(stream: AsyncIterable<StreamChunk>): Response;
9
- //# sourceMappingURL=create-stream-response.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-stream-response.d.ts","sourceRoot":"","sources":["../../src/server/create-stream-response.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,eAAO,MAAM,cAAc;;;;;CAK1B,CAAC;AAmBF,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,GACjC,QAAQ,CAwBV"}
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.STREAM_HEADERS = void 0;
4
- exports.createStreamResponse = createStreamResponse;
5
- exports.STREAM_HEADERS = {
6
- "content-type": "text/event-stream",
7
- "cache-control": "no-cache",
8
- connection: "keep-alive",
9
- "x-accel-buffering": "no",
10
- };
11
- class JsonToSseTransformStream extends TransformStream {
12
- constructor() {
13
- super({
14
- transform(part, controller) {
15
- controller.enqueue(`data: ${JSON.stringify(part)}\n\n`);
16
- },
17
- flush(controller) {
18
- controller.enqueue("data: [DONE]\n\n");
19
- },
20
- });
21
- }
22
- }
23
- function createStreamResponse(stream) {
24
- const readable = new ReadableStream({
25
- async start(controller) {
26
- try {
27
- for await (const chunk of stream) {
28
- controller.enqueue(chunk);
29
- }
30
- }
31
- catch (err) {
32
- controller.enqueue({
33
- type: "error",
34
- message: String(err?.message ?? err),
35
- });
36
- }
37
- finally {
38
- controller.close();
39
- }
40
- },
41
- });
42
- return new Response(readable
43
- .pipeThrough(new JsonToSseTransformStream())
44
- .pipeThrough(new TextEncoderStream()), { headers: exports.STREAM_HEADERS });
45
- }
@@ -1,4 +0,0 @@
1
- export declare class JsonToSseTransformStream extends TransformStream<unknown, string> {
2
- constructor();
3
- }
4
- //# sourceMappingURL=json-to-sse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-to-sse.d.ts","sourceRoot":"","sources":["../../src/server/json-to-sse.ts"],"names":[],"mappings":"AACA,qBAAa,wBAAyB,SAAQ,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC;;CAW7E"}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JsonToSseTransformStream = void 0;
4
- class JsonToSseTransformStream extends TransformStream {
5
- constructor() {
6
- super({
7
- transform(part, controller) {
8
- controller.enqueue(`data: ${JSON.stringify(part)}\n\n`);
9
- },
10
- flush(controller) {
11
- controller.enqueue("data: [DONE]\n\n");
12
- },
13
- });
14
- }
15
- }
16
- exports.JsonToSseTransformStream = JsonToSseTransformStream;
@@ -1 +0,0 @@
1
- {"version":3,"file":"stream-chunk.d.ts","sourceRoot":"","sources":["../../src/types/stream-chunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyE5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -1,74 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StreamChunkSchema = void 0;
4
- const zod_1 = require("zod");
5
- const structured_data_1 = require("./structured-data");
6
- exports.StreamChunkSchema = zod_1.z.union([
7
- zod_1.z.object({
8
- type: zod_1.z.literal("session"),
9
- sessionId: zod_1.z.string(),
10
- }),
11
- zod_1.z.object({
12
- type: zod_1.z.literal("status"),
13
- message: zod_1.z.string(),
14
- node: zod_1.z.string().optional(),
15
- }),
16
- zod_1.z.object({
17
- type: zod_1.z.literal("message"),
18
- content: zod_1.z.string(),
19
- node: zod_1.z.string().optional(),
20
- }),
21
- zod_1.z.object({
22
- type: zod_1.z.literal("text-start"),
23
- node: zod_1.z.string().optional(),
24
- }),
25
- zod_1.z.object({
26
- type: zod_1.z.literal("text-delta"),
27
- delta: zod_1.z.string(),
28
- node: zod_1.z.string().optional(),
29
- }),
30
- zod_1.z.object({
31
- type: zod_1.z.literal("text-end"),
32
- node: zod_1.z.string().optional(),
33
- }),
34
- zod_1.z.object({
35
- type: zod_1.z.literal("tool-result"),
36
- tool: zod_1.z.string().optional(),
37
- node: zod_1.z.string().optional(),
38
- content: zod_1.z.unknown(),
39
- }),
40
- zod_1.z.object({
41
- type: zod_1.z.literal("interrupt"),
42
- requestId: zod_1.z.string(),
43
- resumeToken: zod_1.z.string(),
44
- workflow: zod_1.z.string().optional(),
45
- node: zod_1.z.string().optional(),
46
- input: zod_1.z.discriminatedUnion("kind", [
47
- zod_1.z.object({
48
- kind: zod_1.z.literal("text"),
49
- multiple: zod_1.z.boolean(),
50
- question: zod_1.z.string().optional(),
51
- options: zod_1.z.array(zod_1.z.never()).optional(),
52
- }),
53
- zod_1.z.object({
54
- kind: zod_1.z.enum(["choice", "multi-choice"]),
55
- multiple: zod_1.z.boolean(),
56
- question: zod_1.z.string(),
57
- options: zod_1.z.array(zod_1.z.object({
58
- id: zod_1.z.string(),
59
- label: zod_1.z.string(),
60
- description: zod_1.z.string().optional(),
61
- })),
62
- }),
63
- ]),
64
- meta: zod_1.z.record(zod_1.z.unknown()).optional(),
65
- }),
66
- structured_data_1.StructuredDataChunkSchema,
67
- zod_1.z.object({
68
- type: zod_1.z.literal("transition"),
69
- transitionTo: zod_1.z.string(),
70
- payload: zod_1.z.any().optional(),
71
- }),
72
- zod_1.z.object({ type: zod_1.z.literal("done"), data: zod_1.z.any().optional() }),
73
- zod_1.z.object({ type: zod_1.z.literal("error"), message: zod_1.z.string() }),
74
- ]);