@kortyx/stream 0.2.3 → 0.3.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 +16 -0
- package/dist/{types/stream-chunk.d.ts → browser-2jZhtGOe.d.ts} +20 -4
- package/dist/browser.d.ts +2 -0
- package/dist/browser.js +100 -0
- package/dist/browser.js.map +1 -0
- package/dist/index.d.ts +17 -4
- package/dist/index.js +262 -17
- package/dist/index.js.map +1 -0
- package/package.json +17 -12
- package/LICENSE +0 -201
- package/dist/client/read-stream.d.ts +0 -3
- package/dist/client/read-stream.d.ts.map +0 -1
- package/dist/client/read-stream.js +0 -32
- package/dist/index.d.ts.map +0 -1
- package/dist/server/create-stream-response.d.ts +0 -9
- package/dist/server/create-stream-response.d.ts.map +0 -1
- package/dist/server/create-stream-response.js +0 -45
- package/dist/server/json-to-sse.d.ts +0 -4
- package/dist/server/json-to-sse.d.ts.map +0 -1
- package/dist/server/json-to-sse.js +0 -16
- package/dist/types/stream-chunk.d.ts.map +0 -1
- package/dist/types/stream-chunk.js +0 -74
- package/dist/types/stream-result.d.ts +0 -465
- package/dist/types/stream-result.d.ts.map +0 -1
- package/dist/types/stream-result.js +0 -18
- package/dist/types/structured-data/index.d.ts +0 -76
- package/dist/types/structured-data/index.d.ts.map +0 -1
- package/dist/types/structured-data/index.js +0 -13
- package/dist/types/structured-data/jobs.d.ts +0 -43
- package/dist/types/structured-data/jobs.d.ts.map +0 -1
- package/dist/types/structured-data/jobs.js +0 -14
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @chatbot-core/types
|
|
2
2
|
|
|
3
|
+
## [0.3.1](https://github.com/kortyx-io/kortyx/compare/stream-v0.3.0...stream-v0.3.1) (2026-02-17)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **build:** align package tsconfig with shared lib baseline ([48d2b57](https://github.com/kortyx-io/kortyx/commit/48d2b5765fefbb5fcbbe548e749e7b5f51b450b9))
|
|
9
|
+
* **build:** wire tsup for publishable packages ([e7b1b5c](https://github.com/kortyx-io/kortyx/commit/e7b1b5c28af55becffc137233dd92d8953d7cb8e))
|
|
10
|
+
* **dev:** restore tsc watch flow for local workspace ([4305823](https://github.com/kortyx-io/kortyx/commit/430582372cad466bf28af554042aa11bdb8bf027))
|
|
11
|
+
|
|
12
|
+
## [0.3.0](https://github.com/kortyx-io/kortyx/compare/stream-v0.2.3...stream-v0.3.0) (2026-02-17)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* **kortyx:** add browser-safe chat streaming adapters ([c7eb98e](https://github.com/kortyx-io/kortyx/commit/c7eb98e06781a708c79f143ba725efb69d35709e))
|
|
18
|
+
|
|
3
19
|
## [0.2.3](https://github.com/kortyx-io/kortyx/compare/stream-v0.2.2...stream-v0.2.3) (2026-01-25)
|
|
4
20
|
|
|
5
21
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { z } from
|
|
2
|
-
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
declare const StreamChunkSchema: z.ZodUnion<[z.ZodObject<{
|
|
3
4
|
type: z.ZodLiteral<"session">;
|
|
4
5
|
sessionId: z.ZodString;
|
|
5
6
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -282,5 +283,20 @@ export declare const StreamChunkSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
282
283
|
message?: string;
|
|
283
284
|
type?: "error";
|
|
284
285
|
}>]>;
|
|
285
|
-
|
|
286
|
-
|
|
286
|
+
type StreamChunk = z.infer<typeof StreamChunkSchema>;
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Reads a server-sent event (SSE) Response body and yields StreamChunk objects.
|
|
290
|
+
*/
|
|
291
|
+
declare function readStream(body: ReadableStream<Uint8Array> | null): AsyncGenerator<StreamChunk, void, void>;
|
|
292
|
+
|
|
293
|
+
interface StreamFromRouteArgs<TBody = unknown> {
|
|
294
|
+
endpoint: string;
|
|
295
|
+
body: TBody;
|
|
296
|
+
method?: string | undefined;
|
|
297
|
+
fetchImpl?: typeof fetch;
|
|
298
|
+
headers?: Record<string, string> | undefined;
|
|
299
|
+
}
|
|
300
|
+
declare function streamFromRoute<TBody = unknown>(args: StreamFromRouteArgs<TBody>): AsyncGenerator<StreamChunk, void, void>;
|
|
301
|
+
|
|
302
|
+
export { type StreamChunk as S, StreamChunkSchema as a, type StreamFromRouteArgs as b, readStream as r, streamFromRoute as s };
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
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/browser.ts
|
|
20
|
+
var browser_exports = {};
|
|
21
|
+
__export(browser_exports, {
|
|
22
|
+
readStream: () => readStream,
|
|
23
|
+
streamFromRoute: () => streamFromRoute
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(browser_exports);
|
|
26
|
+
|
|
27
|
+
// src/client/read-stream.ts
|
|
28
|
+
async function* readStream(body) {
|
|
29
|
+
if (!body) return;
|
|
30
|
+
const reader = body.getReader();
|
|
31
|
+
const decoder = new TextDecoder("utf-8");
|
|
32
|
+
let buffer = "";
|
|
33
|
+
while (true) {
|
|
34
|
+
const { done, value } = await reader.read();
|
|
35
|
+
if (done) break;
|
|
36
|
+
buffer += decoder.decode(value, { stream: true });
|
|
37
|
+
const parts = buffer.split("\n\n");
|
|
38
|
+
buffer = parts.pop() ?? "";
|
|
39
|
+
for (const part of parts) {
|
|
40
|
+
if (!part.startsWith("data: ")) continue;
|
|
41
|
+
const payload = part.slice(6);
|
|
42
|
+
if (payload.trim() === "[DONE]") return;
|
|
43
|
+
try {
|
|
44
|
+
yield JSON.parse(payload);
|
|
45
|
+
} catch (err) {
|
|
46
|
+
console.warn("Invalid JSON in stream chunk:", payload);
|
|
47
|
+
console.error(err);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// src/client/stream-from-route.ts
|
|
54
|
+
var toErrorMessage = (error) => error instanceof Error ? error.message : String(error);
|
|
55
|
+
var readErrorMessage = async (response) => {
|
|
56
|
+
let message = `Request failed (${response.status})`;
|
|
57
|
+
try {
|
|
58
|
+
const payload = await response.json();
|
|
59
|
+
if (payload && typeof payload === "object" && "error" in payload && typeof payload.error === "string") {
|
|
60
|
+
message = payload.error;
|
|
61
|
+
}
|
|
62
|
+
} catch {
|
|
63
|
+
}
|
|
64
|
+
return message;
|
|
65
|
+
};
|
|
66
|
+
async function* streamFromRoute(args) {
|
|
67
|
+
const fetchFn = args.fetchImpl ?? globalThis.fetch;
|
|
68
|
+
if (!fetchFn) {
|
|
69
|
+
yield { type: "error", message: "No fetch implementation available." };
|
|
70
|
+
yield { type: "done" };
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
let response;
|
|
74
|
+
try {
|
|
75
|
+
response = await fetchFn(args.endpoint, {
|
|
76
|
+
method: args.method ?? "POST",
|
|
77
|
+
headers: {
|
|
78
|
+
"content-type": "application/json",
|
|
79
|
+
...args.headers ?? {}
|
|
80
|
+
},
|
|
81
|
+
body: JSON.stringify(args.body)
|
|
82
|
+
});
|
|
83
|
+
} catch (error) {
|
|
84
|
+
yield { type: "error", message: toErrorMessage(error) };
|
|
85
|
+
yield { type: "done" };
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (!response.ok) {
|
|
89
|
+
yield { type: "error", message: await readErrorMessage(response) };
|
|
90
|
+
yield { type: "done" };
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
yield* readStream(response.body);
|
|
94
|
+
}
|
|
95
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
96
|
+
0 && (module.exports = {
|
|
97
|
+
readStream,
|
|
98
|
+
streamFromRoute
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/browser.ts","../src/client/read-stream.ts","../src/client/stream-from-route.ts"],"sourcesContent":["// Browser-safe exports for client bundles.\n// Keep this file free of Node-only imports (fs, path, etc).\n\nexport { readStream } from \"./client/read-stream\";\nexport type { StreamFromRouteArgs } from \"./client/stream-from-route\";\nexport { streamFromRoute } from \"./client/stream-from-route\";\nexport type { StreamChunk } 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"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMA,gBAAuB,WACrB,MACyC;AACzC,MAAI,CAAC,KAAM;AAEX,QAAM,SAAS,KAAK,UAAU;AAC9B,QAAM,UAAU,IAAI,YAAY,OAAO;AACvC,MAAI,SAAS;AAEb,SAAO,MAAM;AACX,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,QAAI,KAAM;AAEV,cAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAChD,UAAM,QAAQ,OAAO,MAAM,MAAM;AACjC,aAAS,MAAM,IAAI,KAAK;AAExB,eAAW,QAAQ,OAAO;AACxB,UAAI,CAAC,KAAK,WAAW,QAAQ,EAAG;AAChC,YAAM,UAAU,KAAK,MAAM,CAAC;AAC5B,UAAI,QAAQ,KAAK,MAAM,SAAU;AACjC,UAAI;AACF,cAAM,KAAK,MAAM,OAAO;AAAA,MAC1B,SAAS,KAAU;AACjB,gBAAQ,KAAK,iCAAiC,OAAO;AACrD,gBAAQ,MAAM,GAAG;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AACF;;;ACxBA,IAAM,iBAAiB,CAAC,UACtB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAEvD,IAAM,mBAAmB,OAAO,aAAwC;AACtE,MAAI,UAAU,mBAAmB,SAAS,MAAM;AAChD,MAAI;AACF,UAAM,UAAW,MAAM,SAAS,KAAK;AACrC,QACE,WACA,OAAO,YAAY,YACnB,WAAW,WACX,OAAQ,QAAgC,UAAU,UAClD;AACA,gBAAW,QAA8B;AAAA,IAC3C;AAAA,EACF,QAAQ;AAAA,EAAC;AACT,SAAO;AACT;AAEA,gBAAuB,gBACrB,MACyC;AACzC,QAAM,UAAU,KAAK,aAAa,WAAW;AAC7C,MAAI,CAAC,SAAS;AACZ,UAAM,EAAE,MAAM,SAAS,SAAS,qCAAqC;AACrE,UAAM,EAAE,MAAM,OAAO;AACrB;AAAA,EACF;AAEA,MAAI;AACJ,MAAI;AACF,eAAW,MAAM,QAAQ,KAAK,UAAU;AAAA,MACtC,QAAQ,KAAK,UAAU;AAAA,MACvB,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,GAAI,KAAK,WAAW,CAAC;AAAA,MACvB;AAAA,MACA,MAAM,KAAK,UAAU,KAAK,IAAI;AAAA,IAChC,CAAC;AAAA,EACH,SAAS,OAAO;AACd,UAAM,EAAE,MAAM,SAAS,SAAS,eAAe,KAAK,EAAE;AACtD,UAAM,EAAE,MAAM,OAAO;AACrB;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,EAAE,MAAM,SAAS,SAAS,MAAM,iBAAiB,QAAQ,EAAE;AACjE,UAAM,EAAE,MAAM,OAAO;AACrB;AAAA,EACF;AAEA,SAAO,WAAW,SAAS,IAAI;AACjC;","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { S as StreamChunk } from './browser-2jZhtGOe.js';
|
|
2
|
+
export { a as StreamChunkSchema, b as StreamFromRouteArgs, r as readStream, s as streamFromRoute } from './browser-2jZhtGOe.js';
|
|
3
|
+
import 'zod';
|
|
4
|
+
|
|
5
|
+
declare const STREAM_HEADERS: {
|
|
6
|
+
"content-type": string;
|
|
7
|
+
"cache-control": string;
|
|
8
|
+
connection: string;
|
|
9
|
+
"x-accel-buffering": string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Turns an AsyncIterable<StreamChunk> into a streamed HTTP Response.
|
|
13
|
+
* Works in Node, Bun, Cloudflare, Edge, etc.
|
|
14
|
+
*/
|
|
15
|
+
declare function createStreamResponse(stream: AsyncIterable<StreamChunk>): Response;
|
|
16
|
+
|
|
17
|
+
export { STREAM_HEADERS, StreamChunk, createStreamResponse };
|
package/dist/index.js
CHANGED
|
@@ -1,19 +1,264 @@
|
|
|
1
|
-
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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 StructuredDataChunkSchema = import_zod2.z.discriminatedUnion("dataType", [
|
|
166
|
+
import_zod2.z.object({
|
|
167
|
+
type: import_zod2.z.literal("structured-data"),
|
|
168
|
+
dataType: import_zod2.z.literal("jobs"),
|
|
169
|
+
node: import_zod2.z.string().optional(),
|
|
170
|
+
data: JobsStructuredData
|
|
171
|
+
})
|
|
172
|
+
// Future additions:
|
|
173
|
+
// z.object({
|
|
174
|
+
// type: z.literal("structured-data"),
|
|
175
|
+
// dataType: z.literal("profile"),
|
|
176
|
+
// node: z.string().optional(),
|
|
177
|
+
// data: ProfileStructuredData,
|
|
178
|
+
// }),
|
|
179
|
+
]);
|
|
180
|
+
|
|
181
|
+
// src/types/stream-chunk.ts
|
|
182
|
+
var StreamChunkSchema = import_zod3.z.union([
|
|
183
|
+
import_zod3.z.object({
|
|
184
|
+
type: import_zod3.z.literal("session"),
|
|
185
|
+
sessionId: import_zod3.z.string()
|
|
186
|
+
}),
|
|
187
|
+
import_zod3.z.object({
|
|
188
|
+
type: import_zod3.z.literal("status"),
|
|
189
|
+
message: import_zod3.z.string(),
|
|
190
|
+
node: import_zod3.z.string().optional()
|
|
191
|
+
}),
|
|
192
|
+
import_zod3.z.object({
|
|
193
|
+
type: import_zod3.z.literal("message"),
|
|
194
|
+
content: import_zod3.z.string(),
|
|
195
|
+
node: import_zod3.z.string().optional()
|
|
196
|
+
}),
|
|
197
|
+
import_zod3.z.object({
|
|
198
|
+
type: import_zod3.z.literal("text-start"),
|
|
199
|
+
node: import_zod3.z.string().optional()
|
|
200
|
+
}),
|
|
201
|
+
import_zod3.z.object({
|
|
202
|
+
type: import_zod3.z.literal("text-delta"),
|
|
203
|
+
delta: import_zod3.z.string(),
|
|
204
|
+
node: import_zod3.z.string().optional()
|
|
205
|
+
}),
|
|
206
|
+
import_zod3.z.object({
|
|
207
|
+
type: import_zod3.z.literal("text-end"),
|
|
208
|
+
node: import_zod3.z.string().optional()
|
|
209
|
+
}),
|
|
210
|
+
import_zod3.z.object({
|
|
211
|
+
type: import_zod3.z.literal("tool-result"),
|
|
212
|
+
tool: import_zod3.z.string().optional(),
|
|
213
|
+
node: import_zod3.z.string().optional(),
|
|
214
|
+
content: import_zod3.z.unknown()
|
|
215
|
+
}),
|
|
216
|
+
// Interrupt request chunk (used to render interactive options in UI)
|
|
217
|
+
import_zod3.z.object({
|
|
218
|
+
type: import_zod3.z.literal("interrupt"),
|
|
219
|
+
requestId: import_zod3.z.string(),
|
|
220
|
+
resumeToken: import_zod3.z.string(),
|
|
221
|
+
workflow: import_zod3.z.string().optional(),
|
|
222
|
+
node: import_zod3.z.string().optional(),
|
|
223
|
+
input: import_zod3.z.discriminatedUnion("kind", [
|
|
224
|
+
// Text input: question optional, no options
|
|
225
|
+
import_zod3.z.object({
|
|
226
|
+
kind: import_zod3.z.literal("text"),
|
|
227
|
+
multiple: import_zod3.z.boolean(),
|
|
228
|
+
question: import_zod3.z.string().optional(),
|
|
229
|
+
options: import_zod3.z.array(import_zod3.z.never()).optional()
|
|
230
|
+
}),
|
|
231
|
+
// Choice/multi-choice: question + options required
|
|
232
|
+
import_zod3.z.object({
|
|
233
|
+
kind: import_zod3.z.enum(["choice", "multi-choice"]),
|
|
234
|
+
multiple: import_zod3.z.boolean(),
|
|
235
|
+
question: import_zod3.z.string(),
|
|
236
|
+
options: import_zod3.z.array(
|
|
237
|
+
import_zod3.z.object({
|
|
238
|
+
id: import_zod3.z.string(),
|
|
239
|
+
label: import_zod3.z.string(),
|
|
240
|
+
description: import_zod3.z.string().optional()
|
|
241
|
+
})
|
|
242
|
+
)
|
|
243
|
+
})
|
|
244
|
+
]),
|
|
245
|
+
meta: import_zod3.z.record(import_zod3.z.unknown()).optional()
|
|
246
|
+
}),
|
|
247
|
+
StructuredDataChunkSchema,
|
|
248
|
+
import_zod3.z.object({
|
|
249
|
+
type: import_zod3.z.literal("transition"),
|
|
250
|
+
transitionTo: import_zod3.z.string(),
|
|
251
|
+
payload: import_zod3.z.any().optional()
|
|
252
|
+
}),
|
|
253
|
+
import_zod3.z.object({ type: import_zod3.z.literal("done"), data: import_zod3.z.any().optional() }),
|
|
254
|
+
import_zod3.z.object({ type: import_zod3.z.literal("error"), message: import_zod3.z.string() })
|
|
255
|
+
]);
|
|
256
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
257
|
+
0 && (module.exports = {
|
|
258
|
+
STREAM_HEADERS,
|
|
259
|
+
StreamChunkSchema,
|
|
260
|
+
createStreamResponse,
|
|
261
|
+
readStream,
|
|
262
|
+
streamFromRoute
|
|
263
|
+
});
|
|
264
|
+
//# 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 }),\n z.object({\n type: z.literal(\"text-delta\"),\n delta: z.string(),\n node: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"text-end\"),\n node: 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 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 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 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// import { ProfileStructuredData } from \"./profile\"; // future use\n\n/**\n * Define all known structured data chunk schemas.\n * Each one discriminates on `dataType` so we can infer its shape.\n */\nexport const StructuredDataChunkSchema = z.discriminatedUnion(\"dataType\", [\n z.object({\n type: z.literal(\"structured-data\"),\n dataType: z.literal(\"jobs\"),\n node: z.string().optional(),\n data: JobsStructuredData,\n }),\n\n // Future additions:\n // z.object({\n // type: z.literal(\"structured-data\"),\n // dataType: z.literal(\"profile\"),\n // node: z.string().optional(),\n // data: ProfileStructuredData,\n // }),\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
|
+
"version": "0.3.1",
|
|
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://
|
|
17
|
+
"homepage": "https://kortyx.io/",
|
|
18
18
|
"bugs": {
|
|
19
19
|
"url": "https://github.com/kortyx-io/kortyx/issues"
|
|
20
20
|
},
|
|
@@ -25,6 +25,10 @@
|
|
|
25
25
|
".": {
|
|
26
26
|
"types": "./dist/index.d.ts",
|
|
27
27
|
"default": "./dist/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./browser": {
|
|
30
|
+
"types": "./dist/browser.d.ts",
|
|
31
|
+
"default": "./dist/browser.js"
|
|
28
32
|
}
|
|
29
33
|
},
|
|
30
34
|
"files": [
|
|
@@ -32,24 +36,25 @@
|
|
|
32
36
|
"README.md",
|
|
33
37
|
"CHANGELOG.md"
|
|
34
38
|
],
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "tsup",
|
|
41
|
+
"dev": "tsc --watch",
|
|
42
|
+
"lint": "biome check src",
|
|
43
|
+
"test": "pnpm -s type-check",
|
|
44
|
+
"type-check": "tsc --noEmit"
|
|
45
|
+
},
|
|
35
46
|
"dependencies": {
|
|
36
47
|
"zod": "^3.23.8"
|
|
37
48
|
},
|
|
38
49
|
"devDependencies": {
|
|
39
50
|
"concurrently": "^9.2.0",
|
|
40
51
|
"turbo": "^2.5.4",
|
|
41
|
-
"typescript": "5.7.2"
|
|
52
|
+
"typescript": "5.7.2",
|
|
53
|
+
"tsup": "^8.5.1"
|
|
42
54
|
},
|
|
43
55
|
"repository": {
|
|
44
56
|
"type": "git",
|
|
45
|
-
"url": "https://github.com/kortyx-io/kortyx",
|
|
57
|
+
"url": "https://github.com/kortyx-io/kortyx.git",
|
|
46
58
|
"directory": "packages/stream"
|
|
47
|
-
},
|
|
48
|
-
"scripts": {
|
|
49
|
-
"build": "tsc -p tsconfig.build.json",
|
|
50
|
-
"dev": "tsc --watch",
|
|
51
|
-
"lint": "biome check src",
|
|
52
|
-
"test": "pnpm -s type-check",
|
|
53
|
-
"type-check": "tsc --noEmit"
|
|
54
59
|
}
|
|
55
|
-
}
|
|
60
|
+
}
|