{"ast":null,"code":"const Transport = require(\"../transport\");\n\nconst parser = require(\"engine.io-parser\");\n\nconst parseqs = require(\"parseqs\");\n\nconst yeast = require(\"yeast\");\n\nconst {\n  pick\n} = require(\"../util\");\n\nconst {\n  WebSocket,\n  usingBrowserWebSocket,\n  defaultBinaryType\n} = require(\"./websocket-constructor\");\n\nconst debug = require(\"debug\")(\"engine.io-client:websocket\"); // detect ReactNative environment\n\n\nconst isReactNative = typeof navigator !== \"undefined\" && typeof navigator.product === \"string\" && navigator.product.toLowerCase() === \"reactnative\";\n\nclass WS extends Transport {\n  /**\n   * WebSocket transport constructor.\n   *\n   * @api {Object} connection options\n   * @api public\n   */\n  constructor(opts) {\n    super(opts);\n    this.supportsBinary = !opts.forceBase64;\n  }\n  /**\n   * Transport name.\n   *\n   * @api public\n   */\n\n\n  get name() {\n    return \"websocket\";\n  }\n  /**\n   * Opens socket.\n   *\n   * @api private\n   */\n\n\n  doOpen() {\n    if (!this.check()) {\n      // let probe timeout\n      return;\n    }\n\n    const uri = this.uri();\n    const protocols = this.opts.protocols; // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n\n    const opts = isReactNative ? {} : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n\n    if (this.opts.extraHeaders) {\n      opts.headers = this.opts.extraHeaders;\n    }\n\n    try {\n      this.ws = usingBrowserWebSocket && !isReactNative ? protocols ? new WebSocket(uri, protocols) : new WebSocket(uri) : new WebSocket(uri, protocols, opts);\n    } catch (err) {\n      return this.emit(\"error\", err);\n    }\n\n    this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\n    this.addEventListeners();\n  }\n  /**\n   * Adds event listeners to the socket\n   *\n   * @api private\n   */\n\n\n  addEventListeners() {\n    this.ws.onopen = () => {\n      if (this.opts.autoUnref) {\n        this.ws._socket.unref();\n      }\n\n      this.onOpen();\n    };\n\n    this.ws.onclose = this.onClose.bind(this);\n\n    this.ws.onmessage = ev => this.onData(ev.data);\n\n    this.ws.onerror = e => this.onError(\"websocket error\", e);\n  }\n  /**\n   * Writes data to socket.\n   *\n   * @param {Array} array of packets.\n   * @api private\n   */\n\n\n  write(packets) {\n    const self = this;\n    this.writable = false; // encodePacket efficient as it uses WS framing\n    // no need for encodePayload\n\n    let total = packets.length;\n    let i = 0;\n    const l = total;\n\n    for (; i < l; i++) {\n      (function (packet) {\n        parser.encodePacket(packet, self.supportsBinary, function (data) {\n          // always create a new object (GH-437)\n          const opts = {};\n\n          if (!usingBrowserWebSocket) {\n            if (packet.options) {\n              opts.compress = packet.options.compress;\n            }\n\n            if (self.opts.perMessageDeflate) {\n              const len = \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n\n              if (len < self.opts.perMessageDeflate.threshold) {\n                opts.compress = false;\n              }\n            }\n          } // Sometimes the websocket has already been closed but the browser didn't\n          // have a chance of informing us about it yet, in that case send will\n          // throw an error\n\n\n          try {\n            if (usingBrowserWebSocket) {\n              // TypeError is thrown when passing the second argument on Safari\n              self.ws.send(data);\n            } else {\n              self.ws.send(data, opts);\n            }\n          } catch (e) {\n            debug(\"websocket closed before onclose event\");\n          }\n\n          --total || done();\n        });\n      })(packets[i]);\n    }\n\n    function done() {\n      self.emit(\"flush\"); // fake drain\n      // defer to next tick to allow Socket to clear writeBuffer\n\n      setTimeout(function () {\n        self.writable = true;\n        self.emit(\"drain\");\n      }, 0);\n    }\n  }\n  /**\n   * Called upon close\n   *\n   * @api private\n   */\n\n\n  onClose() {\n    Transport.prototype.onClose.call(this);\n  }\n  /**\n   * Closes socket.\n   *\n   * @api private\n   */\n\n\n  doClose() {\n    if (typeof this.ws !== \"undefined\") {\n      this.ws.close();\n      this.ws = null;\n    }\n  }\n  /**\n   * Generates uri for connection.\n   *\n   * @api private\n   */\n\n\n  uri() {\n    let query = this.query || {};\n    const schema = this.opts.secure ? \"wss\" : \"ws\";\n    let port = \"\"; // avoid port if default for schema\n\n    if (this.opts.port && (\"wss\" === schema && Number(this.opts.port) !== 443 || \"ws\" === schema && Number(this.opts.port) !== 80)) {\n      port = \":\" + this.opts.port;\n    } // append timestamp to URI\n\n\n    if (this.opts.timestampRequests) {\n      query[this.opts.timestampParam] = yeast();\n    } // communicate binary support capabilities\n\n\n    if (!this.supportsBinary) {\n      query.b64 = 1;\n    }\n\n    query = parseqs.encode(query); // prepend ? to query\n\n    if (query.length) {\n      query = \"?\" + query;\n    }\n\n    const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n    return schema + \"://\" + (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) + port + this.opts.path + query;\n  }\n  /**\n   * Feature detection for WebSocket.\n   *\n   * @return {Boolean} whether this transport is available.\n   * @api public\n   */\n\n\n  check() {\n    return !!WebSocket && !(\"__initialize\" in WebSocket && this.name === WS.prototype.name);\n  }\n\n}\n\nmodule.exports = WS;","map":{"version":3,"sources":["C:/laragon/www/iot.mksolusi/DriverOPCDA/frontend/node_modules/engine.io-client/lib/transports/websocket.js"],"names":["Transport","require","parser","parseqs","yeast","pick","WebSocket","usingBrowserWebSocket","defaultBinaryType","debug","isReactNative","navigator","product","toLowerCase","WS","constructor","opts","supportsBinary","forceBase64","name","doOpen","check","uri","protocols","extraHeaders","headers","ws","err","emit","binaryType","socket","addEventListeners","onopen","autoUnref","_socket","unref","onOpen","onclose","onClose","bind","onmessage","ev","onData","data","onerror","e","onError","write","packets","self","writable","total","length","i","l","packet","encodePacket","options","compress","perMessageDeflate","len","Buffer","byteLength","threshold","send","done","setTimeout","prototype","call","doClose","close","query","schema","secure","port","Number","timestampRequests","timestampParam","b64","encode","ipv6","hostname","indexOf","path","module","exports"],"mappings":"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","sourcesContent":["const Transport = require(\"../transport\");\nconst parser = require(\"engine.io-parser\");\nconst parseqs = require(\"parseqs\");\nconst yeast = require(\"yeast\");\nconst { pick } = require(\"../util\");\nconst {\n  WebSocket,\n  usingBrowserWebSocket,\n  defaultBinaryType\n} = require(\"./websocket-constructor\");\n\nconst debug = require(\"debug\")(\"engine.io-client:websocket\");\n\n// detect ReactNative environment\nconst isReactNative =\n  typeof navigator !== \"undefined\" &&\n  typeof navigator.product === \"string\" &&\n  navigator.product.toLowerCase() === \"reactnative\";\n\nclass WS extends Transport {\n  /**\n   * WebSocket transport constructor.\n   *\n   * @api {Object} connection options\n   * @api public\n   */\n  constructor(opts) {\n    super(opts);\n\n    this.supportsBinary = !opts.forceBase64;\n  }\n\n  /**\n   * Transport name.\n   *\n   * @api public\n   */\n  get name() {\n    return \"websocket\";\n  }\n\n  /**\n   * Opens socket.\n   *\n   * @api private\n   */\n  doOpen() {\n    if (!this.check()) {\n      // let probe timeout\n      return;\n    }\n\n    const uri = this.uri();\n    const protocols = this.opts.protocols;\n\n    // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n    const opts = isReactNative\n      ? {}\n      : pick(\n          this.opts,\n          \"agent\",\n          \"perMessageDeflate\",\n          \"pfx\",\n          \"key\",\n          \"passphrase\",\n          \"cert\",\n          \"ca\",\n          \"ciphers\",\n          \"rejectUnauthorized\",\n          \"localAddress\",\n          \"protocolVersion\",\n          \"origin\",\n          \"maxPayload\",\n          \"family\",\n          \"checkServerIdentity\"\n        );\n\n    if (this.opts.extraHeaders) {\n      opts.headers = this.opts.extraHeaders;\n    }\n\n    try {\n      this.ws =\n        usingBrowserWebSocket && !isReactNative\n          ? protocols\n            ? new WebSocket(uri, protocols)\n            : new WebSocket(uri)\n          : new WebSocket(uri, protocols, opts);\n    } catch (err) {\n      return this.emit(\"error\", err);\n    }\n\n    this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\n\n    this.addEventListeners();\n  }\n\n  /**\n   * Adds event listeners to the socket\n   *\n   * @api private\n   */\n  addEventListeners() {\n    this.ws.onopen = () => {\n      if (this.opts.autoUnref) {\n        this.ws._socket.unref();\n      }\n      this.onOpen();\n    };\n    this.ws.onclose = this.onClose.bind(this);\n    this.ws.onmessage = ev => this.onData(ev.data);\n    this.ws.onerror = e => this.onError(\"websocket error\", e);\n  }\n\n  /**\n   * Writes data to socket.\n   *\n   * @param {Array} array of packets.\n   * @api private\n   */\n  write(packets) {\n    const self = this;\n    this.writable = false;\n\n    // encodePacket efficient as it uses WS framing\n    // no need for encodePayload\n    let total = packets.length;\n    let i = 0;\n    const l = total;\n    for (; i < l; i++) {\n      (function(packet) {\n        parser.encodePacket(packet, self.supportsBinary, function(data) {\n          // always create a new object (GH-437)\n          const opts = {};\n          if (!usingBrowserWebSocket) {\n            if (packet.options) {\n              opts.compress = packet.options.compress;\n            }\n\n            if (self.opts.perMessageDeflate) {\n              const len =\n                \"string\" === typeof data\n                  ? Buffer.byteLength(data)\n                  : data.length;\n              if (len < self.opts.perMessageDeflate.threshold) {\n                opts.compress = false;\n              }\n            }\n          }\n\n          // Sometimes the websocket has already been closed but the browser didn't\n          // have a chance of informing us about it yet, in that case send will\n          // throw an error\n          try {\n            if (usingBrowserWebSocket) {\n              // TypeError is thrown when passing the second argument on Safari\n              self.ws.send(data);\n            } else {\n              self.ws.send(data, opts);\n            }\n          } catch (e) {\n            debug(\"websocket closed before onclose event\");\n          }\n\n          --total || done();\n        });\n      })(packets[i]);\n    }\n\n    function done() {\n      self.emit(\"flush\");\n\n      // fake drain\n      // defer to next tick to allow Socket to clear writeBuffer\n      setTimeout(function() {\n        self.writable = true;\n        self.emit(\"drain\");\n      }, 0);\n    }\n  }\n\n  /**\n   * Called upon close\n   *\n   * @api private\n   */\n  onClose() {\n    Transport.prototype.onClose.call(this);\n  }\n\n  /**\n   * Closes socket.\n   *\n   * @api private\n   */\n  doClose() {\n    if (typeof this.ws !== \"undefined\") {\n      this.ws.close();\n      this.ws = null;\n    }\n  }\n\n  /**\n   * Generates uri for connection.\n   *\n   * @api private\n   */\n  uri() {\n    let query = this.query || {};\n    const schema = this.opts.secure ? \"wss\" : \"ws\";\n    let port = \"\";\n\n    // avoid port if default for schema\n    if (\n      this.opts.port &&\n      ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n        (\"ws\" === schema && Number(this.opts.port) !== 80))\n    ) {\n      port = \":\" + this.opts.port;\n    }\n\n    // append timestamp to URI\n    if (this.opts.timestampRequests) {\n      query[this.opts.timestampParam] = yeast();\n    }\n\n    // communicate binary support capabilities\n    if (!this.supportsBinary) {\n      query.b64 = 1;\n    }\n\n    query = parseqs.encode(query);\n\n    // prepend ? to query\n    if (query.length) {\n      query = \"?\" + query;\n    }\n\n    const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n    return (\n      schema +\n      \"://\" +\n      (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n      port +\n      this.opts.path +\n      query\n    );\n  }\n\n  /**\n   * Feature detection for WebSocket.\n   *\n   * @return {Boolean} whether this transport is available.\n   * @api public\n   */\n  check() {\n    return (\n      !!WebSocket &&\n      !(\"__initialize\" in WebSocket && this.name === WS.prototype.name)\n    );\n  }\n}\n\nmodule.exports = WS;\n"]},"metadata":{},"sourceType":"script"}