fix(client): event stream response check (#89)

This commit is contained in:
Daniel Rochetti 2024-09-19 08:23:11 -07:00 committed by GitHub
parent 39089b2462
commit 762f28918d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 14 additions and 4 deletions

View File

@ -2,4 +2,5 @@
/dist
/coverage
/docs
package-lock.json

View File

@ -8,6 +8,8 @@ import { storageImpl } from "./storage";
export type StreamingConnectionMode = "client" | "server";
const CONTENT_TYPE_EVENT_STREAM = "text/event-stream";
/**
* The stream API options. It requires the API input and also
* offers configuration options.
@ -135,7 +137,7 @@ export class FalStream<Input, Output> {
const response = await fetch(parsedUrl.toString(), {
method: method.toUpperCase(),
headers: {
accept: options.accept ?? "text/event-stream",
accept: options.accept ?? CONTENT_TYPE_EVENT_STREAM,
"content-type": "application/json",
},
body: input && method !== "get" ? JSON.stringify(input) : undefined,
@ -145,7 +147,7 @@ export class FalStream<Input, Output> {
}
return await dispatchRequest(method.toUpperCase(), this.url, input, {
headers: {
accept: options.accept ?? "text/event-stream",
accept: options.accept ?? CONTENT_TYPE_EVENT_STREAM,
},
responseHandler: this.handleResponse,
signal: this.abortController.signal,
@ -180,8 +182,11 @@ export class FalStream<Input, Output> {
return;
}
const isEventStream = response.headers
.get("content-type")
.startsWith(CONTENT_TYPE_EVENT_STREAM);
// any response that is not a text/event-stream will be handled as a binary stream
if (response.headers.get("content-type") !== "text/event-stream") {
if (!isEventStream) {
const reader = body.getReader();
const emitRawChunk = () => {
reader.read().then(({ done, value }) => {

View File

@ -7,7 +7,11 @@
"excludeInternal": false,
"includeVersion": true,
"githubPages": true,
"plugin": ["typedoc-plugin-mdn-links", "typedoc-plugin-extras", "typedoc-github-theme"],
"plugin": [
"typedoc-plugin-mdn-links",
"typedoc-plugin-extras",
"typedoc-github-theme"
],
"readme": "none",
"hideGenerator": true
}