diff --git a/lib/socket.js b/lib/socket.js index 85951e6a1..7495cde42 100644 --- a/lib/socket.js +++ b/lib/socket.js @@ -81,12 +81,6 @@ class Socket extends Emitter { this.opts.query = parseqs.decode(this.opts.query); } - // detect ReactNative environment - this.opts.isReactNative = - typeof navigator !== "undefined" && - typeof navigator.product === "string" && - navigator.product.toLowerCase() === "reactnative"; - // set on handshake this.id = null; this.upgrades = null; diff --git a/lib/transports/websocket.js b/lib/transports/websocket.js index dca9c46a6..aca259bee 100644 --- a/lib/transports/websocket.js +++ b/lib/transports/websocket.js @@ -7,6 +7,12 @@ const { WebSocket, usingBrowserWebSocket } = require("./websocket-constructor"); const debug = require("debug")("engine.io-client:websocket"); +// detect ReactNative environment +const isReactNative = + typeof navigator !== "undefined" && + typeof navigator.product === "string" && + navigator.product.toLowerCase() === "reactnative"; + class WS extends Transport { /** * WebSocket transport constructor. @@ -47,26 +53,33 @@ class WS extends Transport { const uri = this.uri(); const protocols = this.opts.protocols; - const opts = pick( - this.opts, - "agent", - "perMessageDeflate", - "pfx", - "key", - "passphrase", - "cert", - "ca", - "ciphers", - "rejectUnauthorized", - "localAddress" - ); + + let opts; + if (isReactNative) { + opts = pick(this.opts, "localAddress"); + } else { + opts = pick( + this.opts, + "agent", + "perMessageDeflate", + "pfx", + "key", + "passphrase", + "cert", + "ca", + "ciphers", + "rejectUnauthorized", + "localAddress" + ); + } + if (this.opts.extraHeaders) { opts.headers = this.opts.extraHeaders; } try { this.ws = - usingBrowserWebSocket && !this.opts.isReactNative + usingBrowserWebSocket && !isReactNative ? protocols ? new WebSocket(uri, protocols) : new WebSocket(uri)