@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.
@@ -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
@@ -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,GACrC,MAAM,IAAI,CAmDZ"}
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
- }).then(async (res) => {
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
- let idx;
24
- while ((idx = buffer.indexOf("\n\n")) !== -1) {
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 + 2);
27
- if (frame.startsWith("event: ping"))
28
- continue;
29
- const dataLines = frame
30
- .split("\n")
31
- .filter((l) => l.startsWith("data:"))
32
- .map((l) => l.replace(/^data:\s*/, ""));
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
- onEvent(JSON.parse(data));
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
  }
@@ -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;IAEtC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,KAAK,CAAC,GAAG,EAAE;QACT,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,WAAW,EAAE,MAAM;SACpB;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAEhB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAElD,IAAI,GAAG,CAAC;YACR,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACnC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAE/B,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC;oBAAE,SAAS;gBAE9C,MAAM,SAAS,GAAG,KAAK;qBACpB,KAAK,CAAC,IAAI,CAAC;qBACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;qBACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;gBAE1C,IAAI,CAAC,SAAS,CAAC,MAAM;oBAAE,SAAS;gBAEhC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,IAAI,KAAK,QAAQ;oBAAE,OAAO;gBAE9B,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC5B,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/core/sse.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluxyte/sdk",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Official Fluxyte SDK (TypeScript) for the Fluxyte Onboarding AI API",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "type": "module",