diff --git a/docs/hello-sse/api.wasm b/docs/hello-sse/api.wasm index cfe3735..539bf07 100755 Binary files a/docs/hello-sse/api.wasm and b/docs/hello-sse/api.wasm differ diff --git a/docs/hello-state/api.wasm b/docs/hello-state/api.wasm index 68b9078..b5787fe 100755 Binary files a/docs/hello-state/api.wasm and b/docs/hello-state/api.wasm differ diff --git a/docs/hello/api.wasm b/docs/hello/api.wasm index 0efda26..3232078 100755 Binary files a/docs/hello/api.wasm and b/docs/hello/api.wasm differ diff --git a/request.go b/request.go index 824b0ba..5f414f6 100644 --- a/request.go +++ b/request.go @@ -6,6 +6,7 @@ import ( "net/http/httptest" "syscall/js" + promise "github.com/nlepage/go-js-promise" "github.com/nlepage/go-wasm-http-server/v2/internal/readablestream" "github.com/nlepage/go-wasm-http-server/v2/internal/safejs" ) @@ -30,7 +31,26 @@ func Request(uvalue js.Value) (*http.Request, error) { } var bodyReader io.Reader - if !body.IsUndefined() && !body.IsNull() { + + if !body.IsNull() { + // WORKAROUND: Firefox does not have request.body ReadableStream + if body.IsUndefined() { + blobp, err := value.Call("blob") + if err != nil { + return nil, err + } + + blob, err := promise.Await(safejs.Unsafe(blobp)) + if err != nil { + return nil, err + } + + body, err = safejs.Safe(blob).Call("stream") + if err != nil { + return nil, err + } + } + r, err := body.Call("getReader") if err != nil { return nil, err diff --git a/response.go b/response.go index 36f46f1..07693e4 100644 --- a/response.go +++ b/response.go @@ -136,6 +136,7 @@ func (r *response) Context() context.Context { func (r *response) WriteError(str string) { slog.Error(str) if !r.wroteHeader { + r.Header().Set("Content-Type", "text/plain") r.WriteHeader(500) _, _ = r.WriteString(str) }