@fluxyte/sdk 0.2.0 → 0.2.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/dist/core/sse.d.ts +1 -1
- package/dist/core/sse.d.ts.map +1 -1
- package/dist/core/sse.js +65 -15
- package/dist/core/sse.js.map +1 -1
- package/package.json +1 -1
package/dist/core/sse.d.ts
CHANGED
|
@@ -13,6 +13,6 @@ export type ChatSSEEvent = {
|
|
|
13
13
|
kind?: AdminAIIntent;
|
|
14
14
|
sources?: EvidenceItem[];
|
|
15
15
|
};
|
|
16
|
-
export declare function streamSSE(url: string, apiKey: string, body: unknown, onEvent: (event: ChatSSEEvent) => void): () => void;
|
|
16
|
+
export declare function streamSSE(url: string, apiKey: string, body: unknown, onEvent: (event: ChatSSEEvent) => void, onError?: (err: Error) => void): () => void;
|
|
17
17
|
export {};
|
|
18
18
|
//# sourceMappingURL=sse.d.ts.map
|
package/dist/core/sse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/core/sse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,KAAK,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC;AAC5D,KAAK,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC;AAE1D,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACrC;IACE,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B,CAAC;AAEN,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/core/sse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,KAAK,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC;AAC5D,KAAK,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC;AAE1D,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACrC;IACE,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B,CAAC;AAEN,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,EACtC,OAAO,GAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAe,GACvC,MAAM,IAAI,CAwGZ"}
|
package/dist/core/sse.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
export function streamSSE(url, apiKey, body, onEvent) {
|
|
1
|
+
export function streamSSE(url, apiKey, body, onEvent, onError = () => { }) {
|
|
2
2
|
const controller = new AbortController();
|
|
3
3
|
fetch(url, {
|
|
4
4
|
method: "POST",
|
|
5
5
|
headers: {
|
|
6
|
+
Accept: "text/event-stream",
|
|
6
7
|
"Content-Type": "application/json",
|
|
7
8
|
"X-API-Key": apiKey,
|
|
8
9
|
},
|
|
9
10
|
body: JSON.stringify(body),
|
|
10
11
|
signal: controller.signal,
|
|
11
|
-
})
|
|
12
|
+
})
|
|
13
|
+
.then(async (res) => {
|
|
12
14
|
if (!res.ok || !res.body) {
|
|
13
15
|
throw new Error(`SSE connection failed (${res.status})`);
|
|
14
16
|
}
|
|
@@ -17,30 +19,78 @@ export function streamSSE(url, apiKey, body, onEvent) {
|
|
|
17
19
|
let buffer = "";
|
|
18
20
|
while (true) {
|
|
19
21
|
const { done, value } = await reader.read();
|
|
20
|
-
if (done)
|
|
22
|
+
if (done || controller.signal.aborted)
|
|
21
23
|
break;
|
|
22
24
|
buffer += decoder.decode(value, { stream: true });
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
while (true) {
|
|
26
|
+
const lf = buffer.indexOf("\n\n");
|
|
27
|
+
const crlf = buffer.indexOf("\r\n\r\n");
|
|
28
|
+
let idx = -1;
|
|
29
|
+
let sepLen = 0;
|
|
30
|
+
if (lf !== -1 && (crlf === -1 || lf < crlf)) {
|
|
31
|
+
idx = lf;
|
|
32
|
+
sepLen = 2;
|
|
33
|
+
}
|
|
34
|
+
else if (crlf !== -1) {
|
|
35
|
+
idx = crlf;
|
|
36
|
+
sepLen = 4;
|
|
37
|
+
}
|
|
38
|
+
if (idx === -1)
|
|
39
|
+
break;
|
|
25
40
|
const frame = buffer.slice(0, idx);
|
|
26
|
-
buffer = buffer.slice(idx +
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
.
|
|
31
|
-
|
|
32
|
-
|
|
41
|
+
buffer = buffer.slice(idx + sepLen);
|
|
42
|
+
let eventName;
|
|
43
|
+
const dataLines = [];
|
|
44
|
+
for (const line of frame.split(/\r?\n/)) {
|
|
45
|
+
if (line.startsWith("event:")) {
|
|
46
|
+
eventName = line.slice("event:".length).trim();
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (line.startsWith("data:")) {
|
|
50
|
+
dataLines.push(line.slice("data:".length).replace(/^\s*/, ""));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
33
53
|
if (!dataLines.length)
|
|
34
54
|
continue;
|
|
55
|
+
if (eventName === "ping")
|
|
56
|
+
continue;
|
|
35
57
|
const data = dataLines.join("\n");
|
|
36
|
-
if (data === "[DONE]")
|
|
58
|
+
if (data === "[DONE]") {
|
|
59
|
+
onEvent({ type: "done" });
|
|
37
60
|
return;
|
|
61
|
+
}
|
|
38
62
|
try {
|
|
39
|
-
|
|
63
|
+
const parsed = JSON.parse(data);
|
|
64
|
+
// Expected payloads already include `type`, per OpenAPI schema.
|
|
65
|
+
if (parsed && typeof parsed === "object" && "type" in parsed) {
|
|
66
|
+
onEvent(parsed);
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
// If the server uses SSE `event:` names instead of embedding `type`,
|
|
70
|
+
// normalize into our typed event union.
|
|
71
|
+
if (eventName === "meta" && parsed && typeof parsed === "object") {
|
|
72
|
+
onEvent({ type: "meta", ...parsed });
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (eventName === "delta" && parsed && typeof parsed === "object") {
|
|
76
|
+
onEvent({ type: "delta", ...parsed });
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (eventName === "done" && parsed && typeof parsed === "object") {
|
|
80
|
+
onEvent({ type: "done", ...parsed });
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// If parsing fails, ignore the frame (SSE can also include comments, etc).
|
|
40
86
|
}
|
|
41
|
-
catch { }
|
|
42
87
|
}
|
|
43
88
|
}
|
|
89
|
+
})
|
|
90
|
+
.catch((err) => {
|
|
91
|
+
if (controller.signal.aborted)
|
|
92
|
+
return;
|
|
93
|
+
onError(err instanceof Error ? err : new Error(String(err)));
|
|
44
94
|
});
|
|
45
95
|
return () => controller.abort();
|
|
46
96
|
}
|
package/dist/core/sse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/core/sse.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,SAAS,CACvB,GAAW,EACX,MAAc,EACd,IAAa,EACb,OAAsC;
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/core/sse.ts"],"names":[],"mappings":"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"}
|