diff --git a/main.go b/main.go index c1b917a..f69c43d 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package jsFetch import ( + "bytes" "context" "errors" "io" @@ -189,7 +190,7 @@ func (t *Transport) RoundTrip(req *Request) (resp *Response, err error) { } // Safari doesn't support readable streams - if strings.Contains(js.Global().Get("navigator").Get("userAgent").String(), "Safari") { + if !js.Global().Get("ApplePaySession").IsUndefined() { resp.Body = jsStreams.NewReadableStream(args[0].Get("body")) } else { // Read in the body with .arrayBuffer() @@ -197,8 +198,9 @@ func (t *Transport) RoundTrip(req *Request) (resp *Response, err error) { var waitGroup sync.WaitGroup waitGroup.Add(1) promise.Call("then", js.FuncOf(func(this js.Value, args []js.Value) interface{} { - bytes := make([]byte, args[0].Get("length").Int()) - js.CopyBytesToGo(bytes, args[0]) + b := make([]byte, args[0].Get("length").Int()) + js.CopyBytesToGo(b, args[0]) + resp.Body = io.NopCloser(bytes.NewReader(b)) waitGroup.Done() return nil })) @@ -673,7 +675,7 @@ func Get(url string) (response *Response, err error) { return } // Disable if not https, we don't detect chromium, or we are on safari - if !strings.HasPrefix(url, "https://") || !js.Global().Get("chrome").IsUndefined() || strings.Contains(js.Global().Get("navigator").Get("userAgent").String(), "Safari") { + if !strings.HasPrefix(url, "https://") || !js.Global().Get("chrome").IsUndefined() || !js.Global().Get("ApplePaySession").IsUndefined() { request.DisableStreamedClient = true } response, err = Fetch.Do(request) @@ -690,7 +692,7 @@ func Post(url string, contentType string, body io.Reader) (response *Response, e return } // Disable if not https, we don't detect chromium, or we are on safari - if !strings.HasPrefix(url, "https://") || !js.Global().Get("chrome").IsUndefined() || strings.Contains(js.Global().Get("navigator").Get("userAgent").String(), "Safari") { + if !strings.HasPrefix(url, "https://") || !js.Global().Get("chrome").IsUndefined() || !js.Global().Get("ApplePaySession").IsUndefined() { request.DisableStreamedClient = true } request.Header.Add("Content-Type", contentType) @@ -710,7 +712,7 @@ func PostForm(url string, data url.Values) (response *Response, err error) { } request.Header.Add("Content-Type", "application/x-www-form-urlencoded") // Disable if not https, we don't detect chromium, or we are on safari - if !strings.HasPrefix(url, "https://") || !js.Global().Get("chrome").IsUndefined() || strings.Contains(js.Global().Get("navigator").Get("userAgent").String(), "Safari") { + if !strings.HasPrefix(url, "https://") || !js.Global().Get("chrome").IsUndefined() || !js.Global().Get("ApplePaySession").IsUndefined() { request.DisableStreamedClient = true } response, err = Fetch.Do(request)